mirror of
https://github.com/holub/mame
synced 2025-05-06 06:14:45 +03:00
Added a work round so that CR589 firmware updating works again, either from the separate CD's or as part of the game install (for example DDR MAX). [smf]
This commit is contained in:
parent
d03d9b34ce
commit
62bdebb10d
@ -45,28 +45,36 @@ void matsushita_cr589_device::ExecCommand()
|
|||||||
{
|
{
|
||||||
switch( command[ 0 ] )
|
switch( command[ 0 ] )
|
||||||
{
|
{
|
||||||
case 0x3b: // WRITE BUFFER
|
case T10SPC_CMD_INQUIRY:
|
||||||
bufferOffset = ( command[ 3 ] << 16 ) | ( command[ 4 ] << 8 ) | command[ 5 ];
|
logerror("T10MMC: INQUIRY\n");
|
||||||
m_phase = SCSI_PHASE_DATAOUT;
|
m_phase = SCSI_PHASE_DATAIN;
|
||||||
m_status_code = SCSI_STATUS_CODE_GOOD;
|
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||||
m_transfer_length = ( command[ 6 ] << 16 ) | ( command[ 7 ] << 8 ) | command[ 8 ];
|
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x3c: // READ BUFFER
|
case 0x3b: // WRITE BUFFER
|
||||||
bufferOffset = ( command[ 3 ] << 16 ) | ( command[ 4 ] << 8 ) | command[ 5 ];
|
bufferOffset = ( command[ 3 ] << 16 ) | ( command[ 4 ] << 8 ) | command[ 5 ];
|
||||||
m_phase = SCSI_PHASE_DATAIN;
|
m_phase = SCSI_PHASE_DATAOUT;
|
||||||
m_status_code = SCSI_STATUS_CODE_GOOD;
|
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||||
m_transfer_length = ( command[ 6 ] << 16 ) | ( command[ 7 ] << 8 ) | command[ 8 ];
|
m_transfer_length = ( command[ 6 ] << 16 ) | ( command[ 7 ] << 8 ) | command[ 8 ];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xcc: // FIRMWARE DOWNLOAD ENABLE
|
case 0x3c: // READ BUFFER
|
||||||
m_phase = SCSI_PHASE_DATAOUT;
|
bufferOffset = ( command[ 3 ] << 16 ) | ( command[ 4 ] << 8 ) | command[ 5 ];
|
||||||
m_status_code = SCSI_STATUS_CODE_GOOD;
|
m_phase = SCSI_PHASE_DATAIN;
|
||||||
m_transfer_length = SCSILengthFromUINT16( &command[7] );
|
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||||
break;
|
m_transfer_length = ( command[ 6 ] << 16 ) | ( command[ 7 ] << 8 ) | command[ 8 ];
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
case 0xcc: // FIRMWARE DOWNLOAD ENABLE
|
||||||
t10mmc::ExecCommand();
|
m_phase = SCSI_PHASE_DATAOUT;
|
||||||
|
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||||
|
m_transfer_length = SCSILengthFromUINT16( &command[7] );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
t10mmc::ExecCommand();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,27 +82,29 @@ void matsushita_cr589_device::ReadData( UINT8 *data, int dataLength )
|
|||||||
{
|
{
|
||||||
switch( command[ 0 ] )
|
switch( command[ 0 ] )
|
||||||
{
|
{
|
||||||
case 0x12: // INQUIRY
|
case T10SPC_CMD_INQUIRY:
|
||||||
t10mmc::ReadData( data, dataLength );
|
memset(data, 0, dataLength);
|
||||||
|
|
||||||
if( download )
|
t10mmc::ReadData( data, dataLength );
|
||||||
{
|
|
||||||
memcpy( &data[ 8 ], download_identity, 28 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy( &data[ 8 ], &buffer[ identity_offset ], 28 );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x3c: // READ BUFFER
|
if( download )
|
||||||
memcpy( data, &buffer[ bufferOffset ], dataLength );
|
{
|
||||||
bufferOffset += dataLength;
|
memcpy( &data[ 8 ], download_identity, 28 );
|
||||||
break;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy( &data[ 8 ], &buffer[ identity_offset ], 28 );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
case 0x3c: // READ BUFFER
|
||||||
t10mmc::ReadData( data, dataLength );
|
memcpy( data, &buffer[ bufferOffset ], dataLength );
|
||||||
break;
|
bufferOffset += dataLength;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
t10mmc::ReadData( data, dataLength );
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user