- deprecated option 'newharddrivesupport' removed from hard drive code
- sense code ASC_ILLEGAL_OPCODE added for unimplemented/unknown ATAPI commands - some panics changed to errors - unsupported bits message in drive and head register changed to BX_DEBUG - improved info about not existing drive - indent mode fixed in ATAPI packet command section
This commit is contained in:
parent
9b264e8830
commit
0cacb9af0c
bochs
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: bochs.h,v 1.158 2005-09-18 07:16:28 vruppert Exp $
|
||||
// $Id: bochs.h,v 1.159 2005-10-02 10:16:53 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -656,7 +656,6 @@ typedef struct BOCHSAPI {
|
||||
bx_cmosimage_options cmosimage;
|
||||
bx_clock_options clock;
|
||||
bx_ne2k_options ne2k;
|
||||
bx_param_bool_c *OnewHardDriveSupport;
|
||||
bx_load32bitOSImage_t load32bitOSImage;
|
||||
bx_log_options log;
|
||||
bx_keyboard_options keyboard;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: config.cc,v 1.46 2005-09-22 21:12:26 vruppert Exp $
|
||||
// $Id: config.cc,v 1.47 2005-10-02 10:16:53 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -745,11 +745,6 @@ void bx_init_options ()
|
||||
}
|
||||
}
|
||||
|
||||
bx_options.OnewHardDriveSupport = new bx_param_bool_c (BXP_NEWHARDDRIVESUPPORT,
|
||||
"New hard drive support",
|
||||
"Enables new features found on newer hard drives.",
|
||||
1);
|
||||
|
||||
// boot sequence
|
||||
for (i=0; i<3; i++) {
|
||||
sprintf (name, "Boot drive #%d", i+1);
|
||||
@ -1719,7 +1714,6 @@ void bx_reset_options ()
|
||||
bx_options.atadevice[channel][slave].Otranslation->reset();
|
||||
}
|
||||
}
|
||||
bx_options.OnewHardDriveSupport->reset();
|
||||
|
||||
// boot
|
||||
for (i=0; i<3; i++) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: siminterface.h,v 1.141 2005-09-22 21:12:26 vruppert Exp $
|
||||
// $Id: siminterface.h,v 1.142 2005-10-02 10:16:53 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Intro to siminterface by Bryce Denney:
|
||||
@ -341,7 +341,6 @@ typedef enum {
|
||||
BXP_SCREENMODE,
|
||||
BXP_I440FX_SUPPORT,
|
||||
BXP_PCI,
|
||||
BXP_NEWHARDDRIVESUPPORT,
|
||||
BXP_LOG_FILENAME,
|
||||
BXP_LOG_PREFIX,
|
||||
BXP_DEBUGGER_LOG_FILENAME,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: harddrv.cc,v 1.142 2005-09-14 19:52:41 vruppert Exp $
|
||||
// $Id: harddrv.cc,v 1.143 2005-10-02 10:16:53 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -149,7 +149,7 @@ bx_hard_drive_c::init(void)
|
||||
char string[5];
|
||||
char sbtext[8];
|
||||
|
||||
BX_DEBUG(("Init $Id: harddrv.cc,v 1.142 2005-09-14 19:52:41 vruppert Exp $"));
|
||||
BX_DEBUG(("Init $Id: harddrv.cc,v 1.143 2005-10-02 10:16:53 vruppert Exp $"));
|
||||
|
||||
for (channel=0; channel<BX_MAX_ATA_CHANNEL; channel++) {
|
||||
if (bx_options.ata[channel].Opresent->get() == 1) {
|
||||
@ -747,10 +747,7 @@ bx_hard_drive_c::read(Bit32u address, unsigned io_len)
|
||||
BX_SELECTED_CONTROLLER(channel).status.busy = 0;
|
||||
BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1;
|
||||
BX_SELECTED_CONTROLLER(channel).status.write_fault = 0;
|
||||
if (bx_options.OnewHardDriveSupport->get ())
|
||||
BX_SELECTED_CONTROLLER(channel).status.seek_complete = 1;
|
||||
else
|
||||
BX_SELECTED_CONTROLLER(channel).status.seek_complete = 0;
|
||||
BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0;
|
||||
BX_SELECTED_CONTROLLER(channel).status.err = 0;
|
||||
|
||||
@ -797,7 +794,6 @@ bx_hard_drive_c::read(Bit32u address, unsigned io_len)
|
||||
|
||||
case 0xec: // IDENTIFY DEVICE
|
||||
case 0xa1:
|
||||
if (bx_options.OnewHardDriveSupport->get ()) {
|
||||
unsigned index;
|
||||
|
||||
BX_SELECTED_CONTROLLER(channel).status.busy = 0;
|
||||
@ -827,12 +823,10 @@ bx_hard_drive_c::read(Bit32u address, unsigned io_len)
|
||||
BX_INFO(("Read all drive ID Bytes ..."));
|
||||
}
|
||||
GOTO_RETURN_VALUE;
|
||||
}
|
||||
else
|
||||
BX_PANIC(("IO read(0x%04x): current command is %02xh", address,
|
||||
(unsigned) BX_SELECTED_CONTROLLER(channel).current_command));
|
||||
break;
|
||||
|
||||
case 0xa0: {
|
||||
case 0xa0:
|
||||
{
|
||||
unsigned index = BX_SELECTED_CONTROLLER(channel).buffer_index;
|
||||
unsigned increment = 0;
|
||||
|
||||
@ -1284,8 +1278,7 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
BX_SELECTED_CONTROLLER(channel).status.drq = 1;
|
||||
BX_SELECTED_CONTROLLER(channel).status.corrected_data = 0;
|
||||
BX_SELECTED_CONTROLLER(channel).status.err = 0;
|
||||
}
|
||||
else { /* no more sectors to write */
|
||||
} else { /* no more sectors to write */
|
||||
BX_SELECTED_CONTROLLER(channel).status.busy = 0;
|
||||
BX_SELECTED_CONTROLLER(channel).status.drive_ready = 1;
|
||||
BX_SELECTED_CONTROLLER(channel).status.drq = 0;
|
||||
@ -1321,7 +1314,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
|
||||
case 0x03: { // request sense
|
||||
case 0x03: // request sense
|
||||
{
|
||||
int alloc_length = BX_SELECTED_CONTROLLER(channel).buffer[4];
|
||||
init_send_atapi_command(channel, atapi_command, 18, alloc_length);
|
||||
|
||||
@ -1349,7 +1343,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x1b: { // start stop unit
|
||||
case 0x1b: // start stop unit
|
||||
{
|
||||
//bx_bool Immed = (BX_SELECTED_CONTROLLER(channel).buffer[1] >> 0) & 1;
|
||||
bx_bool LoEj = (BX_SELECTED_CONTROLLER(channel).buffer[4] >> 1) & 1;
|
||||
bx_bool Start = (BX_SELECTED_CONTROLLER(channel).buffer[4] >> 0) & 1;
|
||||
@ -1385,7 +1380,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xbd: { // mechanism status
|
||||
case 0xbd: // mechanism status
|
||||
{
|
||||
Bit16u alloc_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 8);
|
||||
|
||||
if (alloc_length == 0)
|
||||
@ -1409,7 +1405,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x5a: { // mode sense
|
||||
case 0x5a: // mode sense
|
||||
{
|
||||
Bit16u alloc_length = read_16bit(BX_SELECTED_CONTROLLER(channel).buffer + 7);
|
||||
|
||||
Bit8u PC = BX_SELECTED_CONTROLLER(channel).buffer[2] >> 6;
|
||||
@ -1459,8 +1456,7 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
case 0x0d: // CD-ROM
|
||||
case 0x0e: // CD-ROM audio control
|
||||
case 0x3f: // all
|
||||
BX_ERROR(("cdrom: MODE SENSE (curr), code=%x"
|
||||
" not implemented yet",
|
||||
BX_ERROR(("cdrom: MODE SENSE (curr), code=%x not implemented yet",
|
||||
PageCode));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
@ -1469,8 +1465,7 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
|
||||
default:
|
||||
// not implemeted by this device
|
||||
BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x,"
|
||||
" not implemented by device",
|
||||
BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x, not implemented by device",
|
||||
PC, PageCode));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
@ -1486,8 +1481,7 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
case 0x0e: // CD-ROM audio control
|
||||
case 0x2a: // CD-ROM capabilities & mech. status
|
||||
case 0x3f: // all
|
||||
BX_ERROR(("cdrom: MODE SENSE (chg), code=%x"
|
||||
" not implemented yet",
|
||||
BX_ERROR(("cdrom: MODE SENSE (chg), code=%x not implemented yet",
|
||||
PageCode));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
@ -1496,8 +1490,7 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
|
||||
default:
|
||||
// not implemeted by this device
|
||||
BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x,"
|
||||
" not implemented by device",
|
||||
BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x, not implemented by device",
|
||||
PC, PageCode));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
@ -1537,18 +1530,20 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
BX_SELECTED_CONTROLLER(channel).buffer[27] = 0;
|
||||
ready_to_send_atapi(channel);
|
||||
break;
|
||||
|
||||
case 0x01: // error recovery
|
||||
case 0x0d: // CD-ROM
|
||||
case 0x0e: // CD-ROM audio control
|
||||
case 0x3f: // all
|
||||
BX_PANIC(("cdrom: MODE SENSE (dflt), code=%x",
|
||||
PageCode));
|
||||
BX_ERROR(("cdrom: MODE SENSE (dflt), code=%x not implemented", PageCode));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
|
||||
default:
|
||||
// not implemeted by this device
|
||||
BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x,"
|
||||
" not implemented by device",
|
||||
BX_INFO(("cdrom: MODE SENSE PC=%x, PageCode=%x, not implemented by device",
|
||||
PC, PageCode));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
@ -1569,7 +1564,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x12: { // inquiry
|
||||
case 0x12: // inquiry
|
||||
{
|
||||
Bit8u alloc_length = BX_SELECTED_CONTROLLER(channel).buffer[4];
|
||||
|
||||
init_send_atapi_command(channel, atapi_command, 36, alloc_length);
|
||||
@ -1603,7 +1599,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x25: { // read cd-rom capacity
|
||||
case 0x25: // read cd-rom capacity
|
||||
{
|
||||
// no allocation length???
|
||||
init_send_atapi_command(channel, atapi_command, 8, 8);
|
||||
|
||||
@ -1626,7 +1623,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xbe: { // read cd
|
||||
case 0xbe: // read cd
|
||||
{
|
||||
if (BX_SELECTED_DRIVE(channel).cdrom.ready) {
|
||||
BX_ERROR(("Read CD with CD present not implemented"));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
@ -1638,7 +1636,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x43: { // read toc
|
||||
case 0x43: // read toc
|
||||
{
|
||||
if (BX_SELECTED_DRIVE(channel).cdrom.ready) {
|
||||
#ifdef LOWLEVEL_CDROM
|
||||
bool msf = (BX_SELECTED_CONTROLLER(channel).buffer[1] >> 1) & 1;
|
||||
@ -1682,8 +1681,7 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
#ifdef LOWLEVEL_CDROM
|
||||
if (!(BX_SELECTED_DRIVE(channel).cdrom.cd->read_toc(BX_SELECTED_CONTROLLER(channel).buffer,
|
||||
&toc_length, msf, starting_track, format))) {
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
raise_interrupt(channel);
|
||||
} else {
|
||||
init_send_atapi_command(channel, atapi_command, toc_length, alloc_length);
|
||||
@ -1710,7 +1708,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
|
||||
case 2:
|
||||
default:
|
||||
BX_PANIC(("(READ TOC) Format %d not supported", format));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
}
|
||||
#endif // WIN32
|
||||
@ -1775,7 +1774,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x2b: { // seek
|
||||
case 0x2b: // seek
|
||||
{
|
||||
Bit32u lba = read_32bit(BX_SELECTED_CONTROLLER(channel).buffer + 2);
|
||||
if (!BX_SELECTED_DRIVE(channel).cdrom.ready) {
|
||||
atapi_cmd_error(channel, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT, 1);
|
||||
@ -1794,7 +1794,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x1e: { // prevent/allow medium removal
|
||||
case 0x1e: // prevent/allow medium removal
|
||||
{
|
||||
if (BX_SELECTED_DRIVE(channel).cdrom.ready) {
|
||||
BX_SELECTED_DRIVE(channel).cdrom.locked = BX_SELECTED_CONTROLLER(channel).buffer[4] & 1;
|
||||
atapi_cmd_nop(channel);
|
||||
@ -1805,7 +1806,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x42: { // read sub-channel
|
||||
case 0x42: // read sub-channel
|
||||
{
|
||||
bool msf = get_packet_field(channel,1, 1, 1);
|
||||
bool sub_q = get_packet_field(channel,2, 6, 1);
|
||||
Bit8u data_format = get_packet_byte(channel,3);
|
||||
@ -1839,7 +1841,8 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x51: { // read disc info
|
||||
case 0x51: // read disc info
|
||||
{
|
||||
// no-op to keep the Linux CD-ROM driver happy
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
raise_interrupt(channel);
|
||||
@ -1859,21 +1862,18 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
case 0x4e: // stop play/scan
|
||||
case 0x46: // ???
|
||||
case 0x4a: // ???
|
||||
BX_ERROR(("ATAPI command 0x%x not implemented yet",
|
||||
atapi_command));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
BX_ERROR(("ATAPI command 0x%x not implemented yet", atapi_command));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_ILLEGAL_OPCODE, 1);
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
default:
|
||||
BX_PANIC(("Unknown ATAPI command 0x%x (%d)",
|
||||
atapi_command, atapi_command));
|
||||
// We'd better signal the error if the user chose to continue
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_INV_FIELD_IN_CMD_PACKET, 1);
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
BX_ERROR(("Unknown ATAPI command 0x%x (%d)", atapi_command, atapi_command));
|
||||
atapi_cmd_error(channel, SENSE_ILLEGAL_REQUEST, ASC_ILLEGAL_OPCODE, 1);
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1926,19 +1926,19 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
// b3..0 HD3..HD0
|
||||
{
|
||||
if ( (value & 0xa0) != 0xa0 ) // 1x1xxxxx
|
||||
BX_INFO(("IO write 0x%04x (%02x): not 1x1xxxxxb", address, (unsigned) value));
|
||||
BX_DEBUG(("IO write 0x%04x (%02x): not 1x1xxxxxb", address, (unsigned) value));
|
||||
Bit32u drvsel = BX_HD_THIS channels[channel].drive_select = (value >> 4) & 0x01;
|
||||
WRITE_HEAD_NO(channel,value & 0xf);
|
||||
if (BX_SELECTED_CONTROLLER(channel).lba_mode == 0 && ((value >> 6) & 1) == 1)
|
||||
BX_DEBUG(("enabling LBA mode"));
|
||||
WRITE_LBA_MODE(channel,(value >> 6) & 1);
|
||||
if (!BX_SELECTED_IS_PRESENT(channel)) {
|
||||
BX_ERROR (("device set to %d which does not exist",drvsel));
|
||||
BX_ERROR (("ata%d: device set to %d which does not exist", channel, drvsel));
|
||||
BX_SELECTED_CONTROLLER(channel).error_register = 0x04; // aborted
|
||||
BX_SELECTED_CONTROLLER(channel).status.err = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x07: // hard disk command 0x1f7
|
||||
// (mch) Writes to the command register with drive_select != 0
|
||||
@ -2145,7 +2145,6 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
break;
|
||||
|
||||
case 0xec: // IDENTIFY DEVICE
|
||||
if (bx_options.OnewHardDriveSupport->get ()) {
|
||||
if (bx_dbg.disk || (BX_SELECTED_IS_CD(channel) && bx_dbg.cdrom))
|
||||
BX_INFO(("Drive ID Command issued : 0xec "));
|
||||
|
||||
@ -2175,10 +2174,6 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
raise_interrupt(channel);
|
||||
identify_drive(channel);
|
||||
}
|
||||
} else {
|
||||
BX_INFO(("sent IDENTIFY DEVICE (0xec) to old hard drive"));
|
||||
command_aborted(channel, value);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xef: // SET FEATURES
|
||||
@ -2196,15 +2191,13 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
break;
|
||||
|
||||
default:
|
||||
BX_PANIC(("ata%d-%d: SET FEATURES with unknown subcommand: 0x%02x",
|
||||
BX_ERROR(("ata%d-%d: SET FEATURES with unknown subcommand: 0x%02x",
|
||||
channel,BX_SLAVE_SELECTED(channel),(unsigned) BX_SELECTED_CONTROLLER(channel).features));
|
||||
// We'd better signal the error if the user chose to continue
|
||||
command_aborted(channel, value);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x40: // READ VERIFY SECTORS
|
||||
if (bx_options.OnewHardDriveSupport->get ()) {
|
||||
if (!BX_SELECTED_IS_HD(channel)) {
|
||||
BX_PANIC(("ata%d-%d: read verify issued to non-disk",
|
||||
channel,BX_SLAVE_SELECTED(channel)));
|
||||
@ -2217,10 +2210,6 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
BX_SELECTED_CONTROLLER(channel).status.drq = 0;
|
||||
BX_SELECTED_CONTROLLER(channel).status.err = 0;
|
||||
raise_interrupt(channel);
|
||||
} else {
|
||||
BX_INFO(("sent READ VERIFY SECTORS (0x40) to old hard drive"));
|
||||
command_aborted(channel, value);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xc6: // SET MULTIPLE MODE (mch)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: harddrv.h,v 1.32 2005-08-21 17:40:45 vruppert Exp $
|
||||
// $Id: harddrv.h,v 1.33 2005-10-02 10:16:54 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -108,10 +108,11 @@ typedef enum _sense {
|
||||
} sense_t;
|
||||
|
||||
typedef enum _asc {
|
||||
ASC_ILLEGAL_OPCODE = 0x20,
|
||||
ASC_LOGICAL_BLOCK_OOR = 0x21,
|
||||
ASC_INV_FIELD_IN_CMD_PACKET = 0x24,
|
||||
ASC_MEDIUM_NOT_PRESENT = 0x3a,
|
||||
ASC_SAVING_PARAMETERS_NOT_SUPPORTED = 0x39,
|
||||
ASC_LOGICAL_BLOCK_OOR = 0x21
|
||||
ASC_MEDIUM_NOT_PRESENT = 0x3a
|
||||
} asc_t;
|
||||
|
||||
class LOWLEVEL_CDROM;
|
||||
|
Loading…
x
Reference in New Issue
Block a user