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:
smf- 2013-12-02 16:06:45 +00:00
parent d03d9b34ce
commit 62bdebb10d

View File

@ -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;
} }
} }