pgm2: a bit more ICRW, now it works like if MCU/RW alive but card is not inserted (nw)

This commit is contained in:
MetalliC 2017-12-09 18:38:51 +02:00
parent d63f877e7c
commit ef2238d40d

View File

@ -139,17 +139,18 @@ void pgm2_state::mcu_command(bool is_command)
if (is_command) if (is_command)
{ {
m_mcu_last_cmd = cmd; m_mcu_last_cmd = cmd;
uint8_t status = 0xf7; // "command accepted" status
int delay = 1;
switch (cmd) switch (cmd)
{ {
case 0xf6: // get result case 0xf6: // get result
m_mcu_regs[3] = m_mcu_result0; m_mcu_regs[3] = m_mcu_result0;
m_mcu_regs[4] = m_mcu_result1; m_mcu_regs[4] = m_mcu_result1;
m_mcu_timer->adjust(attotime::from_msec(1));
break; break;
case 0xe0: // command port test case 0xe0: // command port test
m_mcu_result0 = m_mcu_regs[0]; m_mcu_result0 = m_mcu_regs[0];
m_mcu_result1 = m_mcu_regs[1]; m_mcu_result1 = m_mcu_regs[1];
m_mcu_timer->adjust(attotime::from_msec(30)); // such quite long delay is needed for debug codes check routine delay = 30; // such quite long delay is needed for debug codes check routine
break; break;
case 0xe1: // shared ram access (unimplemented) case 0xe1: // shared ram access (unimplemented)
{ {
@ -159,10 +160,12 @@ void pgm2_state::mcu_command(bool is_command)
// uint8_t data = m_mcu_regs[0] >> 24; // uint8_t data = m_mcu_regs[0] >> 24;
m_mcu_result0 = cmd; m_mcu_result0 = cmd;
m_mcu_result1 = 0; m_mcu_result1 = 0;
m_mcu_timer->adjust(attotime::from_msec(1));
} }
break; break;
case 0xc0: // unknown / unimplemented, most of them probably IC Card RW related // unknown / unimplemented, all C0-C9 commands is IC Card RW related
// (m_mcu_regs[0] >> 8) & 0xff - target RW unit (player) #
case 0xc0: // insert card or/and check card presence. result: F7 - ok, F4 - no card
status = 0xf4;
case 0xc1: case 0xc1:
case 0xc2: case 0xc2:
case 0xc3: case 0xc3:
@ -174,14 +177,14 @@ void pgm2_state::mcu_command(bool is_command)
case 0xc9: case 0xc9:
m_mcu_result0 = cmd; m_mcu_result0 = cmd;
m_mcu_result1 = 0; m_mcu_result1 = 0;
m_mcu_timer->adjust(attotime::from_msec(1));
break; break;
default: default:
logerror("MCU unknown command %08x %08x\n", m_mcu_regs[0], m_mcu_regs[1]); logerror("MCU unknown command %08x %08x\n", m_mcu_regs[0], m_mcu_regs[1]);
m_mcu_timer->adjust(attotime::from_msec(1)); status = 0xf4; // error
break; break;
} }
m_mcu_regs[3] = (m_mcu_regs[3] & 0xff00ffff) | 0x00F70000; // set "command accepted" status m_mcu_regs[3] = (m_mcu_regs[3] & 0xff00ffff) | (status << 16);
m_mcu_timer->adjust(attotime::from_msec(delay));
} }
else // next step else // next step
{ {