- missing 32-bit support for the PACKET command added
- improved debug messages
This commit is contained in:
parent
5a7ae0653c
commit
cb7db12ab2
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: harddrv.cc,v 1.181 2006-08-05 07:49:31 vruppert Exp $
|
// $Id: harddrv.cc,v 1.182 2006-08-23 17:19:03 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -140,7 +140,7 @@ void bx_hard_drive_c::init(void)
|
|||||||
char ata_name[20];
|
char ata_name[20];
|
||||||
bx_list_c *base;
|
bx_list_c *base;
|
||||||
|
|
||||||
BX_DEBUG(("Init $Id: harddrv.cc,v 1.181 2006-08-05 07:49:31 vruppert Exp $"));
|
BX_DEBUG(("Init $Id: harddrv.cc,v 1.182 2006-08-23 17:19:03 vruppert Exp $"));
|
||||||
|
|
||||||
for (channel=0; channel<BX_MAX_ATA_CHANNEL; channel++) {
|
for (channel=0; channel<BX_MAX_ATA_CHANNEL; channel++) {
|
||||||
sprintf(ata_name, "ata.%d.resources", channel);
|
sprintf(ata_name, "ata.%d.resources", channel);
|
||||||
@ -1199,32 +1199,28 @@ void bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bx_dbg.disk || (BX_SELECTED_IS_CD(channel) && bx_dbg.cdrom)) {
|
switch (io_len) {
|
||||||
switch (io_len) {
|
case 1:
|
||||||
case 1:
|
BX_DEBUG(("8-bit write to %04x = %02x {%s}",
|
||||||
BX_INFO(("8-bit write to %04x = %02x {%s}",
|
address, value, BX_SELECTED_TYPE_STRING(channel)));
|
||||||
(unsigned) address, (unsigned) value, BX_SELECTED_TYPE_STRING(channel)));
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
BX_INFO(("16-bit write to %04x = %04x {%s}",
|
|
||||||
(unsigned) address, (unsigned) value, BX_SELECTED_TYPE_STRING(channel)));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
case 2:
|
||||||
BX_INFO(("32-bit write to %04x = %08x {%s}",
|
BX_DEBUG(("16-bit write to %04x = %04x {%s}",
|
||||||
(unsigned) address, (unsigned) value, BX_SELECTED_TYPE_STRING(channel)));
|
address, value, BX_SELECTED_TYPE_STRING(channel)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case 4:
|
||||||
BX_INFO(("unknown-size write to %04x = %08x {%s}",
|
BX_DEBUG(("32-bit write to %04x = %08x {%s}",
|
||||||
(unsigned) address, (unsigned) value, BX_SELECTED_TYPE_STRING(channel)));
|
address, value, BX_SELECTED_TYPE_STRING(channel)));
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
default:
|
||||||
|
BX_DEBUG(("unknown-size write to %04x = %08x {%s}",
|
||||||
|
address, value, BX_SELECTED_TYPE_STRING(channel)));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
BX_DEBUG(("IO write to %04x = %02x", (unsigned) address, (unsigned) value));
|
|
||||||
|
|
||||||
switch (port) {
|
switch (port) {
|
||||||
case 0x00: // 0x1f0
|
case 0x00: // 0x1f0
|
||||||
switch (BX_SELECTED_CONTROLLER(channel).current_command) {
|
switch (BX_SELECTED_CONTROLLER(channel).current_command) {
|
||||||
@ -1307,9 +1303,16 @@ void bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
|||||||
case 0xa0: // PACKET
|
case 0xa0: // PACKET
|
||||||
if (BX_SELECTED_CONTROLLER(channel).buffer_index >= PACKET_SIZE)
|
if (BX_SELECTED_CONTROLLER(channel).buffer_index >= PACKET_SIZE)
|
||||||
BX_PANIC(("IO write(0x%04x): buffer_index >= PACKET_SIZE", address));
|
BX_PANIC(("IO write(0x%04x): buffer_index >= PACKET_SIZE", address));
|
||||||
BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index] = value;
|
|
||||||
BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+1] = (value >> 8);
|
switch (io_len) {
|
||||||
BX_SELECTED_CONTROLLER(channel).buffer_index += 2;
|
case 4:
|
||||||
|
BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+3] = (Bit8u)(value >> 24);
|
||||||
|
BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+2] = (Bit8u)(value >> 16);
|
||||||
|
case 2:
|
||||||
|
BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index+1] = (Bit8u)(value >> 8);
|
||||||
|
BX_SELECTED_CONTROLLER(channel).buffer[BX_SELECTED_CONTROLLER(channel).buffer_index] = (Bit8u) value;
|
||||||
|
}
|
||||||
|
BX_SELECTED_CONTROLLER(channel).buffer_index += io_len;
|
||||||
|
|
||||||
/* if packet completely writtten */
|
/* if packet completely writtten */
|
||||||
if (BX_SELECTED_CONTROLLER(channel).buffer_index >= PACKET_SIZE) {
|
if (BX_SELECTED_CONTROLLER(channel).buffer_index >= PACKET_SIZE) {
|
||||||
@ -1317,8 +1320,8 @@ void bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
|||||||
Bit8u atapi_command = BX_SELECTED_CONTROLLER(channel).buffer[0];
|
Bit8u atapi_command = BX_SELECTED_CONTROLLER(channel).buffer[0];
|
||||||
BX_SELECTED_CONTROLLER(channel).buffer_size = 2048;
|
BX_SELECTED_CONTROLLER(channel).buffer_size = 2048;
|
||||||
|
|
||||||
if (bx_dbg.cdrom)
|
BX_DEBUG(("ata%d-%d: ATAPI command 0x%02x started", channel,
|
||||||
BX_INFO(("cdrom: ATAPI command 0x%x started", atapi_command));
|
BX_SLAVE_SELECTED(channel), atapi_command));
|
||||||
|
|
||||||
switch (atapi_command) {
|
switch (atapi_command) {
|
||||||
case 0x00: // test unit ready
|
case 0x00: // test unit ready
|
||||||
|
Loading…
Reference in New Issue
Block a user