- implement atapi command 0xA8 read (12)

This commit is contained in:
Christophe Bothamy 2002-12-30 17:12:16 +00:00
parent 96c03a93ca
commit afc06f0296

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: harddrv.cc,v 1.92 2002-12-12 18:30:03 bdenney Exp $
// $Id: harddrv.cc,v 1.93 2002-12-30 17:12:16 cbothamy Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -175,7 +175,7 @@ bx_hard_drive_c::init(void)
Bit8u channel;
char string[5];
BX_DEBUG(("Init $Id: harddrv.cc,v 1.92 2002-12-12 18:30:03 bdenney Exp $"));
BX_DEBUG(("Init $Id: harddrv.cc,v 1.93 2002-12-30 17:12:16 cbothamy Exp $"));
for (channel=0; channel<BX_MAX_ATA_CHANNEL; channel++) {
if (bx_options.ata[channel].Opresent->get() == 1) {
@ -1627,8 +1627,16 @@ if ( quantumsMax == 0)
}
break;
case 0x28: { // read (10)
uint32 transfer_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 7);
case 0x28: // read (10)
case 0xa8: // read (12)
{
uint32 transfer_length;
if (atapi_command == 0x28)
transfer_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 7);
else
transfer_length = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 6);
uint32 lba = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 2);
if (!BX_SELECTED_DRIVE(channel).cdrom.ready) {
@ -1640,7 +1648,7 @@ if ( quantumsMax == 0)
if (transfer_length == 0) {
atapi_cmd_nop(channel);
raise_interrupt(channel);
BX_INFO(("READ(10) with transfer length 0, ok"));
BX_INFO(("READ(%d) with transfer length 0, ok", atapi_command==0x28?10:12));
break;
}
@ -1650,7 +1658,7 @@ if ( quantumsMax == 0)
break;
}
//BX_INFO(("cdrom: READ LBA=%d LEN=%d", lba, transfer_length));
BX_DEBUG(("cdrom: READ (%d) LBA=%d LEN=%d", atapi_command==0x28?10:12, lba, transfer_length));
// handle command
init_send_atapi_command(channel, atapi_command, transfer_length * 2048,
@ -1732,7 +1740,6 @@ if ( quantumsMax == 0)
}
break;
case 0xa8: // read (12)
case 0x55: // mode select
case 0xa6: // load/unload cd
case 0x4b: // pause/resume