summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/pps4/pps4.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/pps4/pps4.c')
-rw-r--r--src/emu/cpu/pps4/pps4.c908
1 files changed, 454 insertions, 454 deletions
diff --git a/src/emu/cpu/pps4/pps4.c b/src/emu/cpu/pps4/pps4.c
index de48dd45081..af3b1290c5e 100644
--- a/src/emu/cpu/pps4/pps4.c
+++ b/src/emu/cpu/pps4/pps4.c
@@ -71,10 +71,10 @@
const device_type PPS4 = &device_creator<pps4_device>;
pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ )
- , m_program_config("program", ENDIANNESS_LITTLE, 8, 12)
- , m_data_config("data", ENDIANNESS_LITTLE, 8, 12) // 4bit RAM
- , m_io_config("io", ENDIANNESS_LITTLE, 8, 8) // 4bit IO
+ : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ )
+ , m_program_config("program", ENDIANNESS_LITTLE, 8, 12)
+ , m_data_config("data", ENDIANNESS_LITTLE, 8, 12) // 4bit RAM
+ , m_io_config("io", ENDIANNESS_LITTLE, 8, 8) // 4bit IO
{
}
@@ -84,9 +84,9 @@ pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_
*/
UINT8 pps4_device::M()
{
- UINT8 ret = m_data->read_byte(m_B & ~m_SAG);
- m_SAG = 0;
- return ret;
+ UINT8 ret = m_data->read_byte(m_B & ~m_SAG);
+ m_SAG = 0;
+ return ret;
}
@@ -96,14 +96,14 @@ UINT8 pps4_device::M()
*/
void pps4_device::W(UINT8 data)
{
- m_data->write_byte(m_B & ~m_SAG, data);
- m_SAG = 0;
+ m_data->write_byte(m_B & ~m_SAG, data);
+ m_SAG = 0;
}
offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
{
- extern CPU_DISASSEMBLE( pps4 );
- return CPU_DISASSEMBLE_NAME(pps4)(this, buffer, pc, oprom, opram, options);
+ extern CPU_DISASSEMBLE( pps4 );
+ return CPU_DISASSEMBLE_NAME(pps4)(this, buffer, pc, oprom, opram, options);
}
/**
@@ -115,11 +115,11 @@ offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *opr
*/
inline UINT8 pps4_device::ROP()
{
- const UINT8 op = m_direct->read_decrypted_byte(m_P & 0xFFF);
- m_Ip = m_I1; // save previous opcode
- m_P = (m_P + 1) & 0xFFF;
- m_icount -= 1;
- return op;
+ const UINT8 op = m_direct->read_decrypted_byte(m_P & 0xFFF);
+ m_Ip = m_I1; // save previous opcode
+ m_P = (m_P + 1) & 0xFFF;
+ m_icount -= 1;
+ return op;
}
/**
@@ -131,10 +131,10 @@ inline UINT8 pps4_device::ROP()
*/
inline UINT8 pps4_device::ARG()
{
- const UINT8 arg = m_direct->read_raw_byte(m_P & 0xFFF);
- m_P = (m_P + 1) & 0xFFF;
- m_icount -= 1;
- return arg;
+ const UINT8 arg = m_direct->read_raw_byte(m_P & 0xFFF);
+ m_P = (m_P + 1) & 0xFFF;
+ m_icount -= 1;
+ return arg;
}
/**
@@ -173,9 +173,9 @@ inline UINT8 pps4_device::ARG()
*/
void pps4_device::iAD()
{
- m_A = m_A + M();
- m_C = (m_A >> 4) & 1;
- m_A = m_A & 15;
+ m_A = m_A + M();
+ m_C = (m_A >> 4) & 1;
+ m_A = m_A & 15;
}
/**
@@ -193,9 +193,9 @@ void pps4_device::iAD()
*/
void pps4_device::iADC()
{
- m_A = m_A + M() + m_C;
- m_C = m_A >> 4;
- m_A = m_A & 15;
+ m_A = m_A + M() + m_C;
+ m_C = m_A >> 4;
+ m_A = m_A & 15;
}
/**
@@ -214,10 +214,10 @@ void pps4_device::iADC()
*/
void pps4_device::iADSK()
{
- m_A = m_A + M();
- m_C = m_A >> 4;
- m_Skip = m_C;
- m_A = m_A & 15;
+ m_A = m_A + M();
+ m_C = m_A >> 4;
+ m_Skip = m_C;
+ m_A = m_A & 15;
}
/**
@@ -236,10 +236,10 @@ void pps4_device::iADSK()
*/
void pps4_device::iADCSK()
{
- m_A = m_A + M() + m_C;
- m_C = m_A >> 4;
- m_Skip = m_C;
- m_A = m_A & 15;
+ m_A = m_A + M() + m_C;
+ m_C = m_A >> 4;
+ m_Skip = m_C;
+ m_A = m_A & 15;
}
/**
@@ -265,10 +265,10 @@ void pps4_device::iADCSK()
*/
void pps4_device::iADI()
{
- const UINT8 imm = ~m_I1 & 15;
- m_A = m_A + imm;
- m_Skip = (m_A >> 4) & 1;
- m_A = m_A & 15;
+ const UINT8 imm = ~m_I1 & 15;
+ m_A = m_A + imm;
+ m_Skip = (m_A >> 4) & 1;
+ m_A = m_A & 15;
}
/**
@@ -288,7 +288,7 @@ void pps4_device::iADI()
*/
void pps4_device::iDC()
{
- m_A = m_A + 10;
+ m_A = m_A + 10;
}
/**
@@ -307,7 +307,7 @@ void pps4_device::iDC()
*/
void pps4_device::iAND()
{
- m_A = m_A & M();
+ m_A = m_A & M();
}
/**
@@ -326,7 +326,7 @@ void pps4_device::iAND()
*/
void pps4_device::iOR()
{
- m_A = m_A | M();
+ m_A = m_A | M();
}
/**
@@ -346,7 +346,7 @@ void pps4_device::iOR()
*/
void pps4_device::iEOR()
{
- m_A = m_A ^ M();
+ m_A = m_A ^ M();
}
/**
@@ -364,7 +364,7 @@ void pps4_device::iEOR()
*/
void pps4_device::iCOMP()
{
- m_A = m_A ^ 15;
+ m_A = m_A ^ 15;
}
/**
@@ -381,7 +381,7 @@ void pps4_device::iCOMP()
*/
void pps4_device::iSC()
{
- m_C = 1;
+ m_C = 1;
}
/**
@@ -398,7 +398,7 @@ void pps4_device::iSC()
*/
void pps4_device::iRC()
{
- m_C = 0;
+ m_C = 0;
}
/**
@@ -415,7 +415,7 @@ void pps4_device::iRC()
*/
void pps4_device::iSF1()
{
- m_FF1 = 1;
+ m_FF1 = 1;
}
/**
@@ -432,7 +432,7 @@ void pps4_device::iSF1()
*/
void pps4_device::iRF1()
{
- m_FF1 = 0;
+ m_FF1 = 0;
}
/**
@@ -449,7 +449,7 @@ void pps4_device::iRF1()
*/
void pps4_device::iSF2()
{
- m_FF2 = 1;
+ m_FF2 = 1;
}
/**
@@ -466,7 +466,7 @@ void pps4_device::iSF2()
*/
void pps4_device::iRF2()
{
- m_FF2 = 0;
+ m_FF2 = 0;
}
/**
@@ -490,9 +490,9 @@ void pps4_device::iRF2()
*/
void pps4_device::iLD()
{
- const UINT16 i3c = ~m_I1 & 7;
- m_A = M();
- m_B = m_B ^ (i3c << 4);
+ const UINT16 i3c = ~m_I1 & 7;
+ m_A = M();
+ m_B = m_B ^ (i3c << 4);
}
/**
@@ -513,11 +513,11 @@ void pps4_device::iLD()
*/
void pps4_device::iEX()
{
- const UINT16 i3c = ~m_I1 & 7;
- const UINT8 mem = M();
- W(m_A);
- m_A = mem;
- m_B = m_B ^ (i3c << 4);
+ const UINT16 i3c = ~m_I1 & 7;
+ const UINT8 mem = M();
+ W(m_A);
+ m_A = mem;
+ m_B = m_B ^ (i3c << 4);
}
/**
@@ -542,20 +542,20 @@ void pps4_device::iEX()
*/
void pps4_device::iEXD()
{
- const UINT8 i3c = ~m_I1 & 7;
- const UINT8 mem = M();
- UINT8 bl = m_B & 15;
- W(m_A);
- m_A = mem;
- m_B = m_B ^ (i3c << 4);
- // if decrement BL wraps to 1111b
- if (0 == bl) {
- bl = 15;
- m_Skip = 1;
- } else {
- bl = bl - 1;
- }
- m_B = (m_B & ~15) | bl;
+ const UINT8 i3c = ~m_I1 & 7;
+ const UINT8 mem = M();
+ UINT8 bl = m_B & 15;
+ W(m_A);
+ m_A = mem;
+ m_B = m_B ^ (i3c << 4);
+ // if decrement BL wraps to 1111b
+ if (0 == bl) {
+ bl = 15;
+ m_Skip = 1;
+ } else {
+ bl = bl - 1;
+ }
+ m_B = (m_B & ~15) | bl;
}
/**
@@ -579,12 +579,12 @@ void pps4_device::iEXD()
*/
void pps4_device::iLDI()
{
- // previous LDI instruction?
- if (0x70 == (m_Ip & 0xf0)) {
- LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1));
- return;
- }
- m_A = ~m_I1 & 15;
+ // previous LDI instruction?
+ if (0x70 == (m_Ip & 0xf0)) {
+ LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1));
+ return;
+ }
+ m_A = ~m_I1 & 15;
}
/**
@@ -602,7 +602,7 @@ void pps4_device::iLDI()
*/
void pps4_device::iLAX()
{
- m_A = m_X;
+ m_A = m_X;
}
/**
@@ -620,7 +620,7 @@ void pps4_device::iLAX()
*/
void pps4_device::iLXA()
{
- m_X = m_A;
+ m_X = m_A;
}
/**
@@ -638,7 +638,7 @@ void pps4_device::iLXA()
*/
void pps4_device::iLABL()
{
- m_A = m_B & 15;
+ m_A = m_B & 15;
}
/**
@@ -656,7 +656,7 @@ void pps4_device::iLABL()
*/
void pps4_device::iLBMX()
{
- m_B = (m_B & ~(15 << 4)) | (m_X << 4);
+ m_B = (m_B & ~(15 << 4)) | (m_X << 4);
}
/**
@@ -676,8 +676,8 @@ void pps4_device::iLBMX()
*/
void pps4_device::iLBUA()
{
- m_B = (m_B & ~(15 << 8)) | (m_A << 8);
- m_A = M();
+ m_B = (m_B & ~(15 << 8)) | (m_A << 8);
+ m_A = M();
}
/**
@@ -695,10 +695,10 @@ void pps4_device::iLBUA()
*/
void pps4_device::iXABL()
{
- // swap A and BL
- UINT8 bl = m_B & 15;
- m_B = (m_B & ~15) | m_A;
- m_A = bl;
+ // swap A and BL
+ UINT8 bl = m_B & 15;
+ m_B = (m_B & ~15) | m_A;
+ m_A = bl;
}
/**
@@ -716,10 +716,10 @@ void pps4_device::iXABL()
*/
void pps4_device::iXBMX()
{
- // swap X and BM
- const UINT8 bm = (m_B >> 4) & 15;
- m_B = (m_B & ~(15 << 4)) | (m_X << 4);
- m_X = bm;
+ // swap X and BM
+ const UINT8 bm = (m_B >> 4) & 15;
+ m_B = (m_B & ~(15 << 4)) | (m_X << 4);
+ m_X = bm;
}
/**
@@ -737,10 +737,10 @@ void pps4_device::iXBMX()
*/
void pps4_device::iXAX()
{
- // swap A and X
- m_A ^= m_X;
- m_X ^= m_A;
- m_A ^= m_X;
+ // swap A and X
+ m_A ^= m_X;
+ m_X ^= m_A;
+ m_A ^= m_X;
}
/**
@@ -758,10 +758,10 @@ void pps4_device::iXAX()
*/
void pps4_device::iXS()
{
- // swap SA and SB
- m_SA ^= m_SB;
- m_SB ^= m_SA;
- m_SA ^= m_SB;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
}
/**
@@ -786,9 +786,9 @@ void pps4_device::iXS()
*/
void pps4_device::iCYS()
{
- const UINT16 sa = (m_SA >> 4) | (m_A << 8);
- m_A = m_SA & 15;
- m_SA = sa;
+ const UINT16 sa = (m_SA >> 4) | (m_A << 8);
+ m_A = m_SA & 15;
+ m_SA = sa;
}
/**
@@ -826,20 +826,20 @@ void pps4_device::iCYS()
*/
void pps4_device::iLB()
{
- // previous LB or LBL instruction?
- if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) {
- LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1));
- return;
- }
- m_SB = m_SA;
- m_SA = (m_P + 1) & 0xFFF;
- m_P = (3 << 6) | (m_I1 & 15);
- m_B = ~ARG() & 255;
- m_P = m_SA;
- // swap SA and SB
- m_SA ^= m_SB;
- m_SB ^= m_SA;
- m_SA ^= m_SB;
+ // previous LB or LBL instruction?
+ if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) {
+ LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1));
+ return;
+ }
+ m_SB = m_SA;
+ m_SA = (m_P + 1) & 0xFFF;
+ m_P = (3 << 6) | (m_I1 & 15);
+ m_B = ~ARG() & 255;
+ m_P = m_SA;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
}
/**
@@ -867,13 +867,13 @@ void pps4_device::iLB()
*/
void pps4_device::iLBL()
{
- m_I2 = ARG();
- // previous LB or LBL instruction?
- if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) {
- LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1));
- return;
- }
- m_B = ~m_I2 & 255; // Note: immediate is 1's complement
+ m_I2 = ARG();
+ // previous LB or LBL instruction?
+ if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) {
+ LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1));
+ return;
+ }
+ m_B = ~m_I2 & 255; // Note: immediate is 1's complement
}
/**
@@ -893,13 +893,13 @@ void pps4_device::iLBL()
*/
void pps4_device::iINCB()
{
- UINT8 bl = m_B & 15;
- bl = (bl + 1) & 15;
- if (0 == bl) {
- LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
- m_Skip = 1;
- }
- m_B = (m_B & ~15) | bl;
+ UINT8 bl = m_B & 15;
+ bl = (bl + 1) & 15;
+ if (0 == bl) {
+ LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
+ m_Skip = 1;
+ }
+ m_B = (m_B & ~15) | bl;
}
/**
@@ -919,13 +919,13 @@ void pps4_device::iINCB()
*/
void pps4_device::iDECB()
{
- UINT8 bl = m_B & 15;
- bl = (bl - 1) & 15;
- if (15 == bl) {
- LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
- m_Skip = 1;
- }
- m_B = (m_B & ~15) | bl;
+ UINT8 bl = m_B & 15;
+ bl = (bl - 1) & 15;
+ if (15 == bl) {
+ LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
+ m_Skip = 1;
+ }
+ m_B = (m_B & ~15) | bl;
}
/**
@@ -945,9 +945,9 @@ void pps4_device::iDECB()
*/
void pps4_device::iT()
{
- const UINT16 p = (m_P & ~63) | (m_I1 & 63);
- LOG(("%s: P=%03x I=%02x -> P=%03x\n", __FUNCTION__, m_P, m_I1, p));
- m_P = p;
+ const UINT16 p = (m_P & ~63) | (m_I1 & 63);
+ LOG(("%s: P=%03x I=%02x -> P=%03x\n", __FUNCTION__, m_P, m_I1, p));
+ m_P = p;
}
/**
@@ -977,11 +977,11 @@ void pps4_device::iT()
*/
void pps4_device::iTM()
{
- m_SB = m_SA;
- m_SA = m_P;
- m_P = (3 << 6) | (m_I1 & 63);
- m_I2 = ARG();
- m_P = (1 << 8) | m_I2;
+ m_SB = m_SA;
+ m_SA = m_P;
+ m_P = (3 << 6) | (m_I1 & 63);
+ m_I2 = ARG();
+ m_P = (1 << 8) | m_I2;
}
/**
@@ -1003,8 +1003,8 @@ void pps4_device::iTM()
*/
void pps4_device::iTL()
{
- m_I2 = ARG();
- m_P = ((m_I1 & 15) << 8) | m_I2;
+ m_I2 = ARG();
+ m_P = ((m_I1 & 15) << 8) | m_I2;
}
/**
@@ -1028,10 +1028,10 @@ void pps4_device::iTL()
*/
void pps4_device::iTML()
{
- m_I2 = ARG();
- m_SB = m_SA;
- m_SA = m_P;
- m_P = ((m_I1 & 15) << 8) | m_I2;
+ m_I2 = ARG();
+ m_SB = m_SA;
+ m_SA = m_P;
+ m_P = ((m_I1 & 15) << 8) | m_I2;
}
/**
@@ -1048,7 +1048,7 @@ void pps4_device::iTML()
*/
void pps4_device::iSKC()
{
- m_Skip = m_C;
+ m_Skip = m_C;
}
/**
@@ -1065,7 +1065,7 @@ void pps4_device::iSKC()
*/
void pps4_device::iSKZ()
{
- m_Skip = (0 == m_A) ? 1 : 0;
+ m_Skip = (0 == m_A) ? 1 : 0;
}
/**
@@ -1084,9 +1084,9 @@ void pps4_device::iSKZ()
*/
void pps4_device::iSKBI()
{
- const UINT8 i4 = m_I1 & 15;
- const UINT8 bl = m_B & 15;
- m_Skip = bl == i4 ? 1 : 0;
+ const UINT8 i4 = m_I1 & 15;
+ const UINT8 bl = m_B & 15;
+ m_Skip = bl == i4 ? 1 : 0;
}
/**
@@ -1101,7 +1101,7 @@ void pps4_device::iSKBI()
*/
void pps4_device::iSKF1()
{
- m_Skip = m_FF1;
+ m_Skip = m_FF1;
}
/**
@@ -1116,7 +1116,7 @@ void pps4_device::iSKF1()
*/
void pps4_device::iSKF2()
{
- m_Skip = m_FF2;
+ m_Skip = m_FF2;
}
/**
@@ -1135,11 +1135,11 @@ void pps4_device::iSKF2()
*/
void pps4_device::iRTN()
{
- m_P = m_SA & 0xFFF;
- // swap SA and SB
- m_SA ^= m_SB;
- m_SB ^= m_SA;
- m_SA ^= m_SB;
+ m_P = m_SA & 0xFFF;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
}
/**
@@ -1158,12 +1158,12 @@ void pps4_device::iRTN()
*/
void pps4_device::iRTNSK()
{
- m_P = m_SA & 0xFFF;
- // swap SA and SB
- m_SA ^= m_SB;
- m_SB ^= m_SA;
- m_SA ^= m_SB;
- m_Skip = 1; // next opcode is ignored
+ m_P = m_SA & 0xFFF;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
+ m_Skip = 1; // next opcode is ignored
}
/**
@@ -1195,13 +1195,13 @@ void pps4_device::iRTNSK()
*/
void pps4_device::iIOL()
{
- UINT8 ac = ((m_B & 15) << 4) | (~m_A & 15);
- m_I2 = ARG();
- m_io->write_byte(m_I2, ac);
- LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac));
- ac = m_io->read_byte(m_I2) & 15;
- LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, ac));
- m_A = ~ac & 15;
+ UINT8 ac = ((m_B & 15) << 4) | (~m_A & 15);
+ m_I2 = ARG();
+ m_io->write_byte(m_I2, ac);
+ LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac));
+ ac = m_io->read_byte(m_I2) & 15;
+ LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, ac));
+ m_A = ~ac & 15;
}
/**
@@ -1219,7 +1219,7 @@ void pps4_device::iIOL()
*/
void pps4_device::iDIA()
{
- m_A = m_io->read_byte(PPS4_PORT_A) & 15;
+ m_A = m_io->read_byte(PPS4_PORT_A) & 15;
}
/**
@@ -1237,7 +1237,7 @@ void pps4_device::iDIA()
*/
void pps4_device::iDIB()
{
- m_A = m_io->read_byte(PPS4_PORT_B) & 15;
+ m_A = m_io->read_byte(PPS4_PORT_B) & 15;
}
/**
@@ -1255,7 +1255,7 @@ void pps4_device::iDIB()
*/
void pps4_device::iDOA()
{
- m_io->write_byte(PPS4_PORT_A, m_A);
+ m_io->write_byte(PPS4_PORT_A, m_A);
}
/**
@@ -1277,8 +1277,8 @@ void pps4_device::iDOA()
*/
void pps4_device::iSAG()
{
- // mask bits 12:5 on next memory access
- m_SAG = 0xff0;
+ // mask bits 12:5 on next memory access
+ m_SAG = 0xff0;
}
/***************************************************************************
@@ -1286,227 +1286,227 @@ void pps4_device::iSAG()
***************************************************************************/
void pps4_device::execute_one()
{
- m_I1 = ROP();
- if (m_Skip) {
- m_Skip = 0;
- LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I1));
- return;
- }
- switch (m_I1) {
- case 0x00:
- iLBL();
- break;
- case 0x01:
- iTML();
- break;
- case 0x02:
- iTML();
- break;
- case 0x03:
- iTML();
- break;
- case 0x04:
- iLBUA();
- break;
- case 0x05:
- iRTN();
- break;
- case 0x06:
- iXS();
- break;
- case 0x07:
- iRTNSK();
- break;
- case 0x08:
- iADCSK();
- break;
- case 0x09:
- iADSK();
- break;
- case 0x0a:
- iADC();
- break;
- case 0x0b:
- iAD();
- break;
- case 0x0c:
- iEOR();
- break;
- case 0x0d:
- iAND();
- break;
- case 0x0e:
- iCOMP();
- break;
- case 0x0f:
- iOR();
- break;
-
- case 0x10:
- iLBMX();
- break;
- case 0x11:
- iLABL();
- break;
- case 0x12:
- iLAX();
- break;
- case 0x13:
- iSAG();
- break;
- case 0x14:
- iSKF2();
- break;
- case 0x15:
- iSKC();
- break;
- case 0x16:
- iSKF1();
- break;
- case 0x17:
- iINCB();
- break;
- case 0x18:
- iXBMX();
- break;
- case 0x19:
- iXABL();
- break;
- case 0x1a:
- iXAX();
- break;
- case 0x1b:
- iLXA();
- break;
- case 0x1c:
- iIOL();
- break;
- case 0x1d:
- iDOA();
- break;
- case 0x1e:
- iSKZ();
- break;
- case 0x1f:
- iDECB();
- break;
-
- case 0x20:
- iSC();
- break;
- case 0x21:
- iSF2();
- break;
- case 0x22:
- iSF1();
- break;
- case 0x23:
- iDIB();
- break;
- case 0x24:
- iRC();
- break;
- case 0x25:
- iRF2();
- break;
- case 0x26:
- iRF1();
- break;
- case 0x27:
- iDIA();
- break;
-
- case 0x28: case 0x29: case 0x2a: case 0x2b:
- case 0x2c: case 0x2d: case 0x2e: case 0x2f:
- iEXD();
- break;
-
- case 0x30: case 0x31: case 0x32: case 0x33:
- case 0x34: case 0x35: case 0x36: case 0x37:
- iLD();
- break;
-
- case 0x38: case 0x39: case 0x3a: case 0x3b:
- case 0x3c: case 0x3d: case 0x3e: case 0x3f:
- iEX();
- break;
-
- case 0x40: case 0x41: case 0x42: case 0x43:
- case 0x44: case 0x45: case 0x46: case 0x47:
- case 0x48: case 0x49: case 0x4a: case 0x4b:
- case 0x4c: case 0x4d: case 0x4e: case 0x4f:
- iSKBI();
- break;
-
- case 0x50: case 0x51: case 0x52: case 0x53:
- case 0x54: case 0x55: case 0x56: case 0x57:
- case 0x58: case 0x59: case 0x5a: case 0x5b:
- case 0x5c: case 0x5d: case 0x5e: case 0x5f:
- iTL();
- break;
-
- case 0x65:
- iDC();
- break;
-
- case 0x60: case 0x61: case 0x62: case 0x63:
- case 0x64: case 0x66: case 0x67:
- case 0x68: case 0x69: case 0x6a: case 0x6b:
- case 0x6c: case 0x6d: case 0x6e:
- iADI();
- break;
-
- case 0x6f:
- iCYS();
- break;
-
- case 0x70: case 0x71: case 0x72: case 0x73:
- case 0x74: case 0x75: case 0x76: case 0x77:
- case 0x78: case 0x79: case 0x7a: case 0x7b:
- case 0x7c: case 0x7d: case 0x7e: case 0x7f:
- iLDI();
- break;
-
- case 0x80: case 0x81: case 0x82: case 0x83:
- case 0x84: case 0x85: case 0x86: case 0x87:
- case 0x88: case 0x89: case 0x8a: case 0x8b:
- case 0x8c: case 0x8d: case 0x8e: case 0x8f:
- case 0x90: case 0x91: case 0x92: case 0x93:
- case 0x94: case 0x95: case 0x96: case 0x97:
- case 0x98: case 0x99: case 0x9a: case 0x9b:
- case 0x9c: case 0x9d: case 0x9e: case 0x9f:
- case 0xa0: case 0xa1: case 0xa2: case 0xa3:
- case 0xa4: case 0xa5: case 0xa6: case 0xa7:
- case 0xa8: case 0xa9: case 0xaa: case 0xab:
- case 0xac: case 0xad: case 0xae: case 0xaf:
- case 0xb0: case 0xb1: case 0xb2: case 0xb3:
- case 0xb4: case 0xb5: case 0xb6: case 0xb7:
- case 0xb8: case 0xb9: case 0xba: case 0xbb:
- case 0xbc: case 0xbd: case 0xbe: case 0xbf:
- iT();
- break;
-
-
- case 0xc0: case 0xc1: case 0xc2: case 0xc3:
- case 0xc4: case 0xc5: case 0xc6: case 0xc7:
- case 0xc8: case 0xc9: case 0xca: case 0xcb:
- case 0xcc: case 0xcd: case 0xce: case 0xcf:
- iLB();
- break;
-
- default:
- iTM();
- }
+ m_I1 = ROP();
+ if (m_Skip) {
+ m_Skip = 0;
+ LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I1));
+ return;
+ }
+ switch (m_I1) {
+ case 0x00:
+ iLBL();
+ break;
+ case 0x01:
+ iTML();
+ break;
+ case 0x02:
+ iTML();
+ break;
+ case 0x03:
+ iTML();
+ break;
+ case 0x04:
+ iLBUA();
+ break;
+ case 0x05:
+ iRTN();
+ break;
+ case 0x06:
+ iXS();
+ break;
+ case 0x07:
+ iRTNSK();
+ break;
+ case 0x08:
+ iADCSK();
+ break;
+ case 0x09:
+ iADSK();
+ break;
+ case 0x0a:
+ iADC();
+ break;
+ case 0x0b:
+ iAD();
+ break;
+ case 0x0c:
+ iEOR();
+ break;
+ case 0x0d:
+ iAND();
+ break;
+ case 0x0e:
+ iCOMP();
+ break;
+ case 0x0f:
+ iOR();
+ break;
+
+ case 0x10:
+ iLBMX();
+ break;
+ case 0x11:
+ iLABL();
+ break;
+ case 0x12:
+ iLAX();
+ break;
+ case 0x13:
+ iSAG();
+ break;
+ case 0x14:
+ iSKF2();
+ break;
+ case 0x15:
+ iSKC();
+ break;
+ case 0x16:
+ iSKF1();
+ break;
+ case 0x17:
+ iINCB();
+ break;
+ case 0x18:
+ iXBMX();
+ break;
+ case 0x19:
+ iXABL();
+ break;
+ case 0x1a:
+ iXAX();
+ break;
+ case 0x1b:
+ iLXA();
+ break;
+ case 0x1c:
+ iIOL();
+ break;
+ case 0x1d:
+ iDOA();
+ break;
+ case 0x1e:
+ iSKZ();
+ break;
+ case 0x1f:
+ iDECB();
+ break;
+
+ case 0x20:
+ iSC();
+ break;
+ case 0x21:
+ iSF2();
+ break;
+ case 0x22:
+ iSF1();
+ break;
+ case 0x23:
+ iDIB();
+ break;
+ case 0x24:
+ iRC();
+ break;
+ case 0x25:
+ iRF2();
+ break;
+ case 0x26:
+ iRF1();
+ break;
+ case 0x27:
+ iDIA();
+ break;
+
+ case 0x28: case 0x29: case 0x2a: case 0x2b:
+ case 0x2c: case 0x2d: case 0x2e: case 0x2f:
+ iEXD();
+ break;
+
+ case 0x30: case 0x31: case 0x32: case 0x33:
+ case 0x34: case 0x35: case 0x36: case 0x37:
+ iLD();
+ break;
+
+ case 0x38: case 0x39: case 0x3a: case 0x3b:
+ case 0x3c: case 0x3d: case 0x3e: case 0x3f:
+ iEX();
+ break;
+
+ case 0x40: case 0x41: case 0x42: case 0x43:
+ case 0x44: case 0x45: case 0x46: case 0x47:
+ case 0x48: case 0x49: case 0x4a: case 0x4b:
+ case 0x4c: case 0x4d: case 0x4e: case 0x4f:
+ iSKBI();
+ break;
+
+ case 0x50: case 0x51: case 0x52: case 0x53:
+ case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5a: case 0x5b:
+ case 0x5c: case 0x5d: case 0x5e: case 0x5f:
+ iTL();
+ break;
+
+ case 0x65:
+ iDC();
+ break;
+
+ case 0x60: case 0x61: case 0x62: case 0x63:
+ case 0x64: case 0x66: case 0x67:
+ case 0x68: case 0x69: case 0x6a: case 0x6b:
+ case 0x6c: case 0x6d: case 0x6e:
+ iADI();
+ break;
+
+ case 0x6f:
+ iCYS();
+ break;
+
+ case 0x70: case 0x71: case 0x72: case 0x73:
+ case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7a: case 0x7b:
+ case 0x7c: case 0x7d: case 0x7e: case 0x7f:
+ iLDI();
+ break;
+
+ case 0x80: case 0x81: case 0x82: case 0x83:
+ case 0x84: case 0x85: case 0x86: case 0x87:
+ case 0x88: case 0x89: case 0x8a: case 0x8b:
+ case 0x8c: case 0x8d: case 0x8e: case 0x8f:
+ case 0x90: case 0x91: case 0x92: case 0x93:
+ case 0x94: case 0x95: case 0x96: case 0x97:
+ case 0x98: case 0x99: case 0x9a: case 0x9b:
+ case 0x9c: case 0x9d: case 0x9e: case 0x9f:
+ case 0xa0: case 0xa1: case 0xa2: case 0xa3:
+ case 0xa4: case 0xa5: case 0xa6: case 0xa7:
+ case 0xa8: case 0xa9: case 0xaa: case 0xab:
+ case 0xac: case 0xad: case 0xae: case 0xaf:
+ case 0xb0: case 0xb1: case 0xb2: case 0xb3:
+ case 0xb4: case 0xb5: case 0xb6: case 0xb7:
+ case 0xb8: case 0xb9: case 0xba: case 0xbb:
+ case 0xbc: case 0xbd: case 0xbe: case 0xbf:
+ iT();
+ break;
+
+
+ case 0xc0: case 0xc1: case 0xc2: case 0xc3:
+ case 0xc4: case 0xc5: case 0xc6: case 0xc7:
+ case 0xc8: case 0xc9: case 0xca: case 0xcb:
+ case 0xcc: case 0xcd: case 0xce: case 0xcf:
+ iLB();
+ break;
+
+ default:
+ iTM();
+ }
}
void pps4_device::execute_run()
{
- do
- {
- debugger_instruction_hook(this, m_P);
- execute_one();
+ do
+ {
+ debugger_instruction_hook(this, m_P);
+ execute_one();
- } while (m_icount > 0);
+ } while (m_icount > 0);
}
/***************************************************************************
@@ -1515,54 +1515,54 @@ void pps4_device::execute_run()
void pps4_device::device_start()
{
- m_program = &space(AS_PROGRAM);
- m_direct = &m_program->direct();
- m_data = &space(AS_DATA);
- m_io = &space(AS_IO);
-
- save_item(NAME(m_A));
- save_item(NAME(m_X));
- save_item(NAME(m_P));
- save_item(NAME(m_SA));
- save_item(NAME(m_SB));
- save_item(NAME(m_Skip));
- save_item(NAME(m_SAG));
- save_item(NAME(m_B));
- save_item(NAME(m_C));
- save_item(NAME(m_FF1));
- save_item(NAME(m_FF2));
- save_item(NAME(m_I1));
- save_item(NAME(m_I2));
- save_item(NAME(m_Ip));
-
- state_add( PPS4_PC, "PC", m_P ).mask(0xFFF).formatstr("%03X");
- state_add( PPS4_A, "A", m_A ).formatstr("%01X");
- state_add( PPS4_X, "X", m_X ).formatstr("%01X");
- state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X");
- state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X");
- state_add( PPS4_Skip, "Skip", m_Skip ).formatstr("%01X");
- state_add( PPS4_SAG, "SAG", m_SAG ).formatstr("%03X");
- state_add( PPS4_B, "B", m_B ).formatstr("%03X");
- state_add( PPS4_I1, "I1", m_I1 ).formatstr("%02X").noshow();
- state_add( PPS4_I2, "I2", m_I2 ).formatstr("%02X").noshow();
- state_add( PPS4_Ip, "Ip", m_Ip ).formatstr("%02X").noshow();
- state_add( STATE_GENPC, "GENPC", m_P ).noshow();
- state_add( STATE_GENFLAGS, "GENFLAGS", m_C).formatstr("%3s").noshow();
-
- m_icountptr = &m_icount;
+ m_program = &space(AS_PROGRAM);
+ m_direct = &m_program->direct();
+ m_data = &space(AS_DATA);
+ m_io = &space(AS_IO);
+
+ save_item(NAME(m_A));
+ save_item(NAME(m_X));
+ save_item(NAME(m_P));
+ save_item(NAME(m_SA));
+ save_item(NAME(m_SB));
+ save_item(NAME(m_Skip));
+ save_item(NAME(m_SAG));
+ save_item(NAME(m_B));
+ save_item(NAME(m_C));
+ save_item(NAME(m_FF1));
+ save_item(NAME(m_FF2));
+ save_item(NAME(m_I1));
+ save_item(NAME(m_I2));
+ save_item(NAME(m_Ip));
+
+ state_add( PPS4_PC, "PC", m_P ).mask(0xFFF).formatstr("%03X");
+ state_add( PPS4_A, "A", m_A ).formatstr("%01X");
+ state_add( PPS4_X, "X", m_X ).formatstr("%01X");
+ state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X");
+ state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X");
+ state_add( PPS4_Skip, "Skip", m_Skip ).formatstr("%01X");
+ state_add( PPS4_SAG, "SAG", m_SAG ).formatstr("%03X");
+ state_add( PPS4_B, "B", m_B ).formatstr("%03X");
+ state_add( PPS4_I1, "I1", m_I1 ).formatstr("%02X").noshow();
+ state_add( PPS4_I2, "I2", m_I2 ).formatstr("%02X").noshow();
+ state_add( PPS4_Ip, "Ip", m_Ip ).formatstr("%02X").noshow();
+ state_add( STATE_GENPC, "GENPC", m_P ).noshow();
+ state_add( STATE_GENFLAGS, "GENFLAGS", m_C).formatstr("%3s").noshow();
+
+ m_icountptr = &m_icount;
}
void pps4_device::state_string_export(const device_state_entry &entry, astring &string)
{
- switch (entry.index())
- {
- case STATE_GENFLAGS:
- string.printf("%c%c%c",
- m_C ? 'C':'.',
- m_FF1 ? '1':'.',
- m_FF2 ? '2':'.');
- break;
- }
+ switch (entry.index())
+ {
+ case STATE_GENFLAGS:
+ string.printf("%c%c%c",
+ m_C ? 'C':'.',
+ m_FF1 ? '1':'.',
+ m_FF2 ? '2':'.');
+ break;
+ }
}
/***************************************************************************
@@ -1571,17 +1571,17 @@ void pps4_device::state_string_export(const device_state_entry &entry, astring &
void pps4_device::device_reset()
{
- m_A = 0; // Accumulator A(4:1)
- m_X = 0; // X register X(4:1)
- m_P = 0; // program counter P(12:1)
- m_SA = 0; // Shift register SA(12:1)
- m_SB = 0; // Shift register SB(12:1)
- m_SAG = 0; // Special address generation mask
- m_B = 0; // B address register B(12:1) (BL, BM and BU)
- m_C = 0; // Carry flip-flop
- m_FF1 = 0; // Flip-flop 1
- m_FF2 = 0; // Flip-flop 2
- m_I1 = 0; // Most recent instruction I(8:1)
- m_I2 = 0; // Most recent parameter I2(8:1)
- m_Ip = 0; // Previous instruction I(8:1)
+ m_A = 0; // Accumulator A(4:1)
+ m_X = 0; // X register X(4:1)
+ m_P = 0; // program counter P(12:1)
+ m_SA = 0; // Shift register SA(12:1)
+ m_SB = 0; // Shift register SB(12:1)
+ m_SAG = 0; // Special address generation mask
+ m_B = 0; // B address register B(12:1) (BL, BM and BU)
+ m_C = 0; // Carry flip-flop
+ m_FF1 = 0; // Flip-flop 1
+ m_FF2 = 0; // Flip-flop 2
+ m_I1 = 0; // Most recent instruction I(8:1)
+ m_I2 = 0; // Most recent parameter I2(8:1)
+ m_Ip = 0; // Previous instruction I(8:1)
}