mirror of
https://github.com/holub/mame
synced 2025-07-03 09:06:08 +03:00
(MESS) s1410: Return drive not ready error when trying to recalibrate the unsupported drive 1. This fixes the phantom partitions in ABC 850/852. [Curt Coder]
This commit is contained in:
parent
e83e5c5162
commit
ac953c7ea8
@ -212,6 +212,8 @@ s1410_device::s1410_device(const machine_config &mconfig, const char *tag, devic
|
|||||||
#define S1410_CMD_DRIVE_DIAGS ( 0xe3 )
|
#define S1410_CMD_DRIVE_DIAGS ( 0xe3 )
|
||||||
#define S1410_CMD_CONTROLER_DIAGS ( 0xe4 )
|
#define S1410_CMD_CONTROLER_DIAGS ( 0xe4 )
|
||||||
|
|
||||||
|
#define S1410_STATUS_NOT_READY ( 0x04 )
|
||||||
|
|
||||||
#define TRANSFERLENGTH_INIT_DRIVE_PARAMS ( 0x08 )
|
#define TRANSFERLENGTH_INIT_DRIVE_PARAMS ( 0x08 )
|
||||||
#define TRANSFERLENGTH_FORMAT_ALT_TRACK ( 0x03 )
|
#define TRANSFERLENGTH_FORMAT_ALT_TRACK ( 0x03 )
|
||||||
#define TRANSFERLENGTH_SECTOR_BUFFER ( 0x0200 )
|
#define TRANSFERLENGTH_SECTOR_BUFFER ( 0x0200 )
|
||||||
@ -220,6 +222,26 @@ void s1410_device::ExecCommand()
|
|||||||
{
|
{
|
||||||
switch( command[ 0 ] )
|
switch( command[ 0 ] )
|
||||||
{
|
{
|
||||||
|
case SCSI_CMD_RECALIBRATE:
|
||||||
|
if (command[1] >> 5)
|
||||||
|
{
|
||||||
|
m_phase = SCSI_PHASE_STATUS;
|
||||||
|
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
|
||||||
|
m_sense_asc = S1410_STATUS_NOT_READY;
|
||||||
|
m_transfer_length = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scsihd_device::ExecCommand();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCSI_CMD_REQUEST_SENSE:
|
||||||
|
m_phase = SCSI_PHASE_DATAIN;
|
||||||
|
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||||
|
m_transfer_length = 4;
|
||||||
|
break;
|
||||||
|
|
||||||
case S1410_CMD_FORMAT_TRACK:
|
case S1410_CMD_FORMAT_TRACK:
|
||||||
{
|
{
|
||||||
lba = (command[1]&0x1f)<<16 | command[2]<<8 | command[3];
|
lba = (command[1]&0x1f)<<16 | command[2]<<8 | command[3];
|
||||||
@ -345,3 +367,20 @@ void s1410_device::WriteData( UINT8 *data, int dataLength )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void s1410_device::ReadData( UINT8 *data, int dataLength )
|
||||||
|
{
|
||||||
|
switch( command[ 0 ] )
|
||||||
|
{
|
||||||
|
case SCSI_CMD_REQUEST_SENSE:
|
||||||
|
data[0] = m_sense_asc & 0x7f;
|
||||||
|
data[1] = (m_sense_information >> 16) & 0x1f;
|
||||||
|
data[2] = (m_sense_information >> 8) & 0xff;
|
||||||
|
data[3] = (m_sense_information >> 0) & 0xff;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
scsihd_device::ReadData( data, dataLength );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -29,6 +29,7 @@ public:
|
|||||||
|
|
||||||
virtual void ExecCommand();
|
virtual void ExecCommand();
|
||||||
virtual void WriteData( UINT8 *data, int dataLength );
|
virtual void WriteData( UINT8 *data, int dataLength );
|
||||||
|
virtual void ReadData( UINT8 *data, int dataLength );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user