tms9900: Fixed register autoincrement for DIV operation [Michael Zapf] (nw)

This commit is contained in:
Michael Zapf 2012-07-13 22:44:59 +00:00
parent 2ec0f14279
commit 2226389919
2 changed files with 10 additions and 1 deletions

View File

@ -1308,6 +1308,7 @@ void tms99xx_device::decode(UINT16 inst)
m_state = 0; m_state = 0;
IR = inst; IR = inst;
m_get_destination = false; m_get_destination = false;
m_byteop = false;
while (!complete) while (!complete)
{ {
@ -1336,6 +1337,10 @@ void tms99xx_device::decode(UINT16 inst)
MPC = -1; MPC = -1;
m_command = decoded->id; m_command = decoded->id;
if (VERBOSE>7) LOG("tms99xx: Command decoded as id %d, %s, base opcode %04x\n", m_command, opname[m_command], decoded->opcode); if (VERBOSE>7) LOG("tms99xx: Command decoded as id %d, %s, base opcode %04x\n", m_command, opname[m_command], decoded->opcode);
// Byte operations are either format 1 with the byte flag set
// or format 4 (CRU multi bit operations) with 1-8 bits to transfer.
m_byteop = ((decoded->format==1 && ((IR & 0x1000)!=0))
|| (decoded->format==4 && (((IR >> 6)&0x000f) > 0) && (((IR >> 6)&0x000f) > 9)));
} }
m_pass = 1; m_pass = 1;
} }
@ -1537,7 +1542,7 @@ void tms99xx_device::data_derivation_subprogram()
MPC = ircopy & 0x0030; MPC = ircopy & 0x0030;
if (((MPC == 0x0020) && (m_regnumber != 0)) // indexed if (((MPC == 0x0020) && (m_regnumber != 0)) // indexed
|| ((MPC == 0x0030) && ((IR & 0x1000)!=0))) // byte flag || ((MPC == 0x0030) && m_byteop)) // byte operation
{ {
MPC += 8; // the second option MPC += 8; // the second option
} }

View File

@ -193,6 +193,10 @@ protected:
// Decoded command // Decoded command
UINT16 m_command; UINT16 m_command;
// Is it a byte operation? Only format 1 commands with the byte flag set
// and CRU commands with less than 9 bits to transfer are byte operations.
bool m_byteop;
// Issue clock pulses. Note that each machine cycle has two clock cycles. // Issue clock pulses. Note that each machine cycle has two clock cycles.
void pulse_clock(int count); void pulse_clock(int count);