summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/z80
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/z80')
-rw-r--r--src/devices/cpu/z80/nsc800.cpp12
-rw-r--r--src/devices/cpu/z80/z80.cpp34
-rw-r--r--src/devices/cpu/z80/z80.h16
-rw-r--r--src/devices/cpu/z80/z80.inc3
-rw-r--r--src/devices/cpu/z80/z80.lst2219
-rw-r--r--src/devices/cpu/z80/z80make.py28
-rw-r--r--src/devices/cpu/z80/z80n.h2
7 files changed, 967 insertions, 1347 deletions
diff --git a/src/devices/cpu/z80/nsc800.cpp b/src/devices/cpu/z80/nsc800.cpp
index d7af9a67fe2..e2c0bfd0087 100644
--- a/src/devices/cpu/z80/nsc800.cpp
+++ b/src/devices/cpu/z80/nsc800.cpp
@@ -54,17 +54,21 @@ void nsc800_device::execute_run()
void nsc800_device::execute_set_input(int inputnum, int state)
{
+ bool update_irq_attention = false;
switch (inputnum)
{
case NSC800_RSTA:
+ update_irq_attention = true;
m_nsc800_irq_state[0] = state;
break;
case NSC800_RSTB:
+ update_irq_attention = true;
m_nsc800_irq_state[1] = state;
break;
case NSC800_RSTC:
+ update_irq_attention = true;
m_nsc800_irq_state[2] = state;
break;
@@ -72,4 +76,12 @@ void nsc800_device::execute_set_input(int inputnum, int state)
z80_device::execute_set_input(inputnum, state);
break;
}
+
+ if (update_irq_attention)
+ {
+ if (m_nsc800_irq_state[0] != CLEAR_LINE || m_nsc800_irq_state[1] != CLEAR_LINE || m_nsc800_irq_state[2] != CLEAR_LINE)
+ set_service_attention<SA_NSC800_IRQ_ON, 1>();
+ else
+ set_service_attention<SA_NSC800_IRQ_ON, 0>();
+ }
}
diff --git a/src/devices/cpu/z80/z80.cpp b/src/devices/cpu/z80/z80.cpp
index ab4d79d5120..9d2c5958dd7 100644
--- a/src/devices/cpu/z80/z80.cpp
+++ b/src/devices/cpu/z80/z80.cpp
@@ -50,6 +50,7 @@ void z80_device::halt()
if (!m_halt)
{
m_halt = 1;
+ set_service_attention<SA_HALT, 1>();
m_halt_cb(1);
}
}
@@ -62,6 +63,7 @@ void z80_device::leave_halt()
if (m_halt)
{
m_halt = 0;
+ set_service_attention<SA_HALT, 0>();
m_halt_cb(0);
}
}
@@ -468,7 +470,7 @@ void z80_device::block_io_interrupted_flags()
void z80_device::ei()
{
m_iff1 = m_iff2 = 1;
- m_after_ei = true;
+ set_service_attention<SA_AFTER_EI, 1>();
}
void z80_device::set_f(u8 f)
@@ -562,16 +564,13 @@ void z80_device::device_start()
save_item(NAME(m_im));
save_item(NAME(m_i));
save_item(NAME(m_nmi_state));
- save_item(NAME(m_nmi_pending));
save_item(NAME(m_irq_state));
save_item(NAME(m_wait_state));
save_item(NAME(m_busrq_state));
save_item(NAME(m_busack_state));
- save_item(NAME(m_after_ei));
- save_item(NAME(m_after_ldair));
save_item(NAME(m_ea));
+ save_item(NAME(m_service_attention));
save_item(NAME(m_tmp_irq_vector));
- save_item(NAME(m_shared_addr.w));
save_item(NAME(m_shared_data.w));
save_item(NAME(m_shared_data2.w));
save_item(NAME(m_rtemp));
@@ -602,14 +601,12 @@ void z80_device::device_start()
m_im = 0;
m_i = 0;
m_nmi_state = 0;
- m_nmi_pending = false;
m_irq_state = 0;
m_wait_state = 0;
m_busrq_state = 0;
m_busack_state = 0;
- m_after_ei = false;
- m_after_ldair = false;
m_ea = 0;
+ m_service_attention = 0;
m_rtemp = 0;
space(AS_PROGRAM).cache(m_args);
@@ -667,11 +664,9 @@ void z80_device::device_reset()
m_i = 0;
m_r = 0;
m_r2 = 0;
- m_nmi_pending = false;
- m_after_ei = false;
- m_after_ldair = false;
m_iff1 = 0;
m_iff2 = 0;
+ m_service_attention = 0;
}
/****************************************************************************
@@ -688,12 +683,18 @@ void z80_device::execute_set_input(int inputnum, int state)
{
case Z80_INPUT_LINE_BUSRQ:
m_busrq_state = state;
+ if (state != CLEAR_LINE)
+ set_service_attention<SA_BUSRQ, 1>();
+ else
+ set_service_attention<SA_BUSRQ, 0>();
break;
case INPUT_LINE_NMI:
// mark an NMI pending on the rising edge
if (m_nmi_state == CLEAR_LINE && state != CLEAR_LINE)
- m_nmi_pending = true;
+ {
+ set_service_attention<SA_NMI_PENDING, 1>();
+ }
m_nmi_state = state;
break;
@@ -702,6 +703,10 @@ void z80_device::execute_set_input(int inputnum, int state)
m_irq_state = state;
if (daisy_chain_present())
m_irq_state = (daisy_update_irq_state() == ASSERT_LINE) ? ASSERT_LINE : m_irq_state;
+ if (state != CLEAR_LINE)
+ set_service_attention<SA_IRQ_ON, 1>();
+ else
+ set_service_attention<SA_IRQ_ON, 0>();
// the main execute loop will take the interrupt
break;
@@ -728,8 +733,9 @@ void z80_device::state_import(const device_state_entry &entry)
case STATE_GENPC:
m_prvpc = m_pc;
m_ref = 0xffff00;
- m_after_ei = false;
- m_after_ldair = false;
+ set_service_attention<SA_AFTER_EI, 0>();
+ if (HAS_LDAIR_QUIRK)
+ set_service_attention<SA_AFTER_LDAIR, 0>();
break;
case Z80_R:
diff --git a/src/devices/cpu/z80/z80.h b/src/devices/cpu/z80/z80.h
index ec111c3cd32..3498f100dcd 100644
--- a/src/devices/cpu/z80/z80.h
+++ b/src/devices/cpu/z80/z80.h
@@ -78,6 +78,8 @@ protected:
void illegal_1();
void illegal_2();
u8 flags_szyxc(u16 value);
+ template <u8 Bit, bool State> void set_service_attention() { static_assert(Bit < 8, "out of range bit index"); if (State) m_service_attention |= (1 << Bit); else m_service_attention &= ~(1 << Bit); };
+ template <u8 Bit> bool get_service_attention() { static_assert(Bit < 8, "out of range bit index"); return m_service_attention & (1 << Bit); };
void halt();
void leave_halt();
@@ -137,6 +139,16 @@ protected:
devcb_write_line m_halt_cb;
devcb_write_line m_busack_cb;
+ static constexpr u8 SA_BUSRQ = 0;
+ static constexpr u8 SA_BUSACK = 1;
+ static constexpr u8 SA_NMI_PENDING = 2;
+ static constexpr u8 SA_IRQ_ON = 3;
+ static constexpr u8 SA_HALT = 4;
+ static constexpr u8 SA_AFTER_EI = 5;
+ static constexpr u8 SA_AFTER_LDAIR = 6;
+ static constexpr u8 SA_NSC800_IRQ_ON = 7;
+ u8 m_service_attention; // bitmap for required handling in service step
+
PAIR16 m_prvpc;
PAIR16 m_pc;
PAIR16 m_sp;
@@ -161,18 +173,14 @@ protected:
u8 m_im;
u8 m_i;
u8 m_nmi_state; // nmi pin state
- bool m_nmi_pending; // nmi pending
u8 m_irq_state; // irq pin state
int m_wait_state; // wait pin state
int m_busrq_state; // bus request pin state
u8 m_busack_state; // bus acknowledge pin state
- bool m_after_ei; // are we in the EI shadow?
- bool m_after_ldair; // same, but for LD A,I or LD A,R
u16 m_ea;
int m_icount;
int m_tmp_irq_vector;
- PAIR16 m_shared_addr;
PAIR16 m_shared_data;
PAIR16 m_shared_data2;
u8 m_rtemp;
diff --git a/src/devices/cpu/z80/z80.inc b/src/devices/cpu/z80/z80.inc
index caf7ce22c8f..1c7dd7843a0 100644
--- a/src/devices/cpu/z80/z80.inc
+++ b/src/devices/cpu/z80/z80.inc
@@ -60,9 +60,6 @@
#define WZ_L m_wz.b.l
-#define TADR m_shared_addr.w // Typically represents values from A0..15 pins. 16bit input in steps.
-#define TADR_H m_shared_addr.b.h
-#define TADR_L m_shared_addr.b.l
#define TDAT m_shared_data.w // 16bit input(if use as second parameter) or output in steps.
#define TDAT2 m_shared_data2.w
#define TDAT_H m_shared_data.b.h
diff --git a/src/devices/cpu/z80/z80.lst b/src/devices/cpu/z80/z80.lst
index 12bd39360ba..b1aa31aa12d 100644
--- a/src/devices/cpu/z80/z80.lst
+++ b/src/devices/cpu/z80/z80.lst
@@ -3,47 +3,46 @@
##########################################################
# macros
##########################################################
-macro nomreq_addr
+macro nomreq_addr %addr
if (nomemrq_en)
- m_nomreq_cb(TADR, 0x00, 0xff);
+ m_nomreq_cb(%addr, 0x00, 0xff);
+ 1
macro nomreq_ir %cycles
- TADR = (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f);
- %cycles * call nomreq_addr
+ %cycles * call nomreq_addr (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f)
-macro in
- m_iorq_cycles !! TDAT8 = m_io.read_interruptible(TADR);
+macro in %port
+ m_iorq_cycles !! TDAT8 = m_io.read_interruptible(%port);
-macro out
- m_iorq_cycles !! m_io.write_interruptible(TADR, TDAT8);
+macro out %port
+ m_iorq_cycles !! m_io.write_interruptible(%port, TDAT8);
-macro rm
- m_memrq_cycles !! TDAT8 = data_read(TADR);
+macro rm %addr
+ m_memrq_cycles !! TDAT8 = data_read(%addr);
-macro rm_reg
- call rm
- call nomreq_addr
+macro rm_reg %addr
+ call rm %addr
+ call nomreq_addr %addr
-macro rm16
- call rm
- TDAT_H = TDAT_L; TADR++;
- call rm
+macro rm16 %addr
+ call rm %addr
+ TDAT_H = TDAT_L;
+ call rm %addr+1
using std::swap; std::swap(TDAT_H, TDAT_L);
-macro wm
- m_memrq_cycles !! data_write(TADR, TDAT8);
+macro wm %addr
+ m_memrq_cycles !! data_write(%addr, TDAT8);
-macro wm16
- call wm
- TADR++; TDAT8 = TDAT_H;
- call wm
+macro wm16 %addr
+ call wm %addr
+ TDAT8 = TDAT_H;
+ call wm %addr+1
-macro wm16_sp
+macro wm16_sp %d16
SP--;
- m_memrq_cycles !! stack_write(SP, TDAT_H);
+ m_memrq_cycles !! stack_write(SP, (%d16) >> 8);
SP--;
- m_memrq_cycles !! stack_write(SP, TDAT_L);
+ m_memrq_cycles !! stack_write(SP, %d16);
macro rop
m_m1_cycles-2 !! TDAT8 = opcode_read();
@@ -80,9 +79,9 @@ macro pop
m_memrq_cycles !! TDAT_H = stack_read(SP);
SP++;
-macro push
+macro push %d16
call nomreq_ir 1
- call wm16_sp
+ call wm16_sp %d16
macro jp
call arg16
@@ -116,20 +115,17 @@ macro t6a84:jp_cond
macro jr
call arg
- TADR = PC-1;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr PC-1
PC += (s8)TDAT8; WZ = PC;
macro t6a84:jr
call arg
- TADR = PC-1;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr PC-1
PC += (s8)TDAT8; WZ = PC;
paged_jump();
macro r800:jr
call arg
- TADR = PC-1;
+ 1
PC += (s8)TDAT8; WZ = PC;
@@ -142,18 +138,18 @@ macro jr_cond
macro arg16_call
call arg16
- m_ea = TDAT; TADR = PC-1;
- call nomreq_addr
- WZ = m_ea; TDAT = PC;
- call wm16_sp
+ m_ea = TDAT;
+ call nomreq_addr PC-1
+ WZ = m_ea;
+ call wm16_sp PC
PC = m_ea;
macro r800:arg16_call
call arg16
- m_ea = TDAT; TADR = PC-1;
- call nomreq_addr
- WZ = m_ea; TDAT = PC;
- call wm16_sp
+ m_ea = TDAT;
+ call nomreq_addr PC-1
+ WZ = m_ea;
+ call wm16_sp PC
PC = m_ea;
macro call_cond
@@ -206,10 +202,14 @@ macro r800:ld_r_a
macro ld_a_r
call nomreq_ir 1
- A = (m_r & 0x7f) | m_r2; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); m_after_ldair = true;
+ A = (m_r & 0x7f) | m_r2; set_f((F & CF) | SZ[A] | (m_iff2 << 2));
+ if (HAS_LDAIR_QUIRK)
+ set_service_attention<SA_AFTER_LDAIR, 1>();
macro r800:ld_a_r
- A = (m_r & 0x7f) | m_r2; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); m_after_ldair = true;
+ A = (m_r & 0x7f) | m_r2; set_f((F & CF) | SZ[A] | (m_iff2 << 2));
+ if (HAS_LDAIR_QUIRK)
+ set_service_attention<SA_AFTER_LDAIR, 1>();
macro ld_i_a
call nomreq_ir 1
@@ -220,44 +220,42 @@ macro r800:ld_i_a
macro ld_a_i
call nomreq_ir 1
- A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); m_after_ldair = true;
+ A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2));
+ if (HAS_LDAIR_QUIRK)
+ set_service_attention<SA_AFTER_LDAIR, 1>();
macro r800:ld_a_i
- A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); m_after_ldair = true;
+ A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2));
+ if (HAS_LDAIR_QUIRK)
+ set_service_attention<SA_AFTER_LDAIR, 1>();
macro rst addr
- TDAT = PC;
- call push
+ call push PC
PC = addr; WZ = PC;
macro rrd
- TADR = HL;
- call rm
+ call rm HL
WZ = HL+1;
- 4 * call nomreq_addr
+ 4 * call nomreq_addr HL
TDAT_H = TDAT8; TDAT8 = (TDAT8 >> 4) | (A << 4);
- call wm
+ call wm HL
A = (A & 0xf0) | (TDAT_H & 0x0f); set_f((F & CF) | SZP[A]);
macro rld
- TADR = HL;
- call rm
+ call rm HL
WZ = HL+1;
- 4 * call nomreq_addr
+ 4 * call nomreq_addr HL
TDAT_H = TDAT8; TDAT8 = (TDAT8 << 4) | (A & 0x0f);
- call wm
+ call wm HL
A = (A & 0xf0) | (TDAT_H >> 4); set_f((F & CF) | SZP[A]);
-macro ex_sp
- TDAT2 = TDAT;
+macro ex_sp %d16
call pop
- TADR = SP-1;
- call nomreq_addr
- using std::swap; std::swap(TDAT, TDAT2);
- call wm16_sp
- TADR = SP;
- 2 * call nomreq_addr
- using std::swap; std::swap(TDAT, TDAT2); WZ = TDAT;
+ call nomreq_addr SP-1
+ call wm16_sp %d16
+ %d16 = TDAT;
+ 2 * call nomreq_addr SP
+ WZ = TDAT;
macro add16
call nomreq_ir 7
@@ -281,161 +279,135 @@ macro r800:sbc_hl
{ u32 res = HL - TDAT - (F & CF); WZ = HL + 1; set_f((((HL ^ res ^ TDAT) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL) & (HL ^ res) &0x8000) >> 13)); HL = (u16)res; }
macro ldi
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- 2 * call nomreq_addr
+ call rm HL
+ call wm DE
+ 2 * call nomreq_addr DE
set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF;
macro r800:ldi
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- call nomreq_addr
+ call rm HL
+ call wm DE
+ call nomreq_addr DE
set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF;
macro cpi
- TADR = HL;
- call rm
- 5 * call nomreq_addr
+ call rm HL
+ 5 * call nomreq_addr HL
{ u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro r800:cpi
- TADR = HL;
- call rm
- call nomreq_addr
+ call rm HL
+ call nomreq_addr HL
{ u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro ini
call nomreq_ir 1
- TADR = BC;
- call in
- WZ = BC + 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC + 1; B--;
+ call wm HL
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:ini
- TADR = BC;
- call in
- WZ = BC + 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC + 1; B--;
+ call wm HL
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro outi
call nomreq_ir 1
- TADR = HL;
- call rm
- B--; WZ = BC + 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC + 1;
+ call out BC
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:outi
- TADR = HL;
- call rm
- B--; WZ = BC + 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC + 1;
+ call out BC
{ HL++; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro ldd
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- 2 * call nomreq_addr
+ call rm HL
+ call wm DE
+ 2 * call nomreq_addr DE
{ set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; }
macro r800:ldd
- TADR = HL;
- call rm
- TADR = DE;
- call wm
- call nomreq_addr
+ call rm HL
+ call wm DE
+ call nomreq_addr DE
{ set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; }
macro cpd
- TADR = HL;
- call rm
- TADR = HL;
- 5 * call nomreq_addr
+ call rm HL
+ 5 * call nomreq_addr HL
{ u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro r800:cpd
- TADR = HL;
- call rm
- TADR = HL;
- call nomreq_addr
+ call rm HL
+ call nomreq_addr HL
{ u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; }
macro ind
call nomreq_ir 1
- TADR = BC;
- call in
- WZ = BC - 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC - 1; B--;
+ call wm HL
{ HL--; set_f(SZ[B]); unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:ind
- TADR = BC;
- call in
- WZ = BC - 1; B--; TADR = HL;
- call wm
+ call in BC
+ WZ = BC - 1; B--;
+ call wm HL
{ HL--; set_f(SZ[B]); unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro outd
call nomreq_ir 1
- TADR = HL;
- call rm
- B--; WZ = BC - 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC - 1;
+ call out BC
{ HL--; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro r800:outd
- TADR = HL;
- call rm
- B--; WZ = BC - 1; TADR = BC;
- call out
+ call rm HL
+ B--; WZ = BC - 1;
+ call out BC
{ HL--; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; }
macro ldir
call ldi
if (BC != 0) {
- TADR = DE;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:ldir
call ldi
if (BC != 0) {
- TADR = DE;
- call nomreq_addr
+ call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro cpir
call cpi
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr HL
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:cpir
call cpi
- call nomreq_addr
+ call nomreq_addr HL
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro inir
call ini
if (B != 0) {
- TADR = HL;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr HL
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:inir
@@ -443,16 +415,16 @@ macro r800:inir
T(1);
call ini
if (B != 0) {
- TADR = HL;
- PC -= 2; block_io_interrupted_flags();
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro otir
call outi
if (B != 0) {
- TADR = BC;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr BC
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:otir
@@ -460,49 +432,45 @@ macro r800:otir
T(1);
call outi
if (B != 0) {
- TADR = BC;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr BC
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro lddr
call ldd
if (BC != 0) {
- TADR = DE;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:lddr
call ldd
if (BC != 0) {
- TADR = DE;
- call nomreq_addr
+ call nomreq_addr DE
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro cpdr
call cpd
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
- 5 * call nomreq_addr
+ 5 * call nomreq_addr HL
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro r800:cpdr
call cpd
- call nomreq_addr
+ call nomreq_addr HL /* suspected wrong. must be inside if? */
if (BC != 0 && !(F & ZF)) {
- TADR = HL;
PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF);
}
macro indr
call ind
if (B != 0) {
- TADR = HL;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr HL
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:indr
@@ -510,16 +478,16 @@ macro r800:indr
T(1);
call ind
if (B != 0) {
- TADR = HL;
- PC -= 2; block_io_interrupted_flags();
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro otdr
call outd
if (B != 0) {
- TADR = BC;
- 5 * call nomreq_addr
- PC -= 2; block_io_interrupted_flags();
+ 5 * call nomreq_addr BC
+ PC -= 2;
+ block_io_interrupted_flags();
}
macro r800:otdr
@@ -527,12 +495,12 @@ macro r800:otdr
T(1);
call outd
if (B != 0) {
- TADR = BC;
- PC -= 2; block_io_interrupted_flags();
+ PC -= 2;
+ block_io_interrupted_flags();
}
-macro jump %opcode
- m_ref = 0x%opcode00;
+macro jump %po
+ m_ref = 0x%po00;
goto process;
macro jump_prefixed %prefix
@@ -542,18 +510,16 @@ macro jump_prefixed %prefix
macro take_nmi
// Check if processor was halted
leave_halt();
- #if HAS_LDAIR_QUIRK
+ if (HAS_LDAIR_QUIRK)
// reset parity flag after LD A,I or LD A,R
- if (m_after_ldair) F &= ~PF;
- #endif
+ if (get_service_attention<SA_AFTER_LDAIR>()) F &= ~PF;
m_iff1 = 0;
m_r++;
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x0066;
WZ = PC;
- m_nmi_pending = false;
+ set_service_attention<SA_NMI_PENDING, 0>();
macro irqfetch
{
@@ -591,11 +557,9 @@ macro take_interrupt
// even, and all 8 bits will be used; even $FF is handled normally.
// CALL opcode timing
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
m_tmp_irq_vector = (m_tmp_irq_vector & 0xff) | (m_i << 8);
- TADR = m_tmp_irq_vector;
- call rm16
+ call rm16 m_tmp_irq_vector
PC = TDAT;
LOGMASKED(LOG_INT, "IM2 [$%04x] = $%04x\n", m_tmp_irq_vector, PC);
} else if (m_im == 1) {
@@ -603,8 +567,7 @@ macro take_interrupt
LOGMASKED(LOG_INT, "'%s' IM1 $0038\n", tag());
// RST $38
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x0038;
} else {
/* Interrupt mode 0. We check for CALL and JP instructions,
@@ -617,8 +580,7 @@ macro take_interrupt
if ((m_tmp_irq_vector & 0xff0000) == 0xcd0000) {
// CALL $xxxx cycles
+ 11
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = m_tmp_irq_vector & 0xffff;
} else if ((m_tmp_irq_vector & 0xff0000) == 0xc30000) {
// JP $xxxx cycles
@@ -627,8 +589,7 @@ macro take_interrupt
} else if ((m_tmp_irq_vector & 0xc7) == 0xc7) {
// RST $xx cycles
+ 5
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = m_tmp_irq_vector & 0x0038;
} else if (m_tmp_irq_vector == 0xfb) {
// EI cycles
@@ -640,27 +601,26 @@ macro take_interrupt
}
}
WZ = PC;
- #if HAS_LDAIR_QUIRK
+ if (HAS_LDAIR_QUIRK)
// reset parity flag after LD A,I or LD A,R
- if (m_after_ldair) F &= ~PF;
- #endif
+ if (get_service_attention<SA_AFTER_LDAIR>()) F &= ~PF;
macro check_interrupts
- if (m_nmi_pending) {
+ if (get_service_attention<SA_NMI_PENDING>()) {
call take_nmi
- } else if (m_irq_state != CLEAR_LINE && m_iff1 && !m_after_ei) {
+ } else if (m_irq_state != CLEAR_LINE && m_iff1 && !get_service_attention<SA_AFTER_EI>()) { // SA_IRQ_ON
call take_interrupt
}
macro z80n:check_interrupts
- if (m_nmi_pending) {
+ if (get_service_attention<SA_NMI_PENDING>()) {
if (m_stackless) {
// on take_nmi
m_out_nextreg_cb(0xc2, m_pc.b.l);
m_out_nextreg_cb(0xc3, m_pc.b.h);
}
call take_nmi
- } else if (m_irq_state != CLEAR_LINE && m_iff1 && !m_after_ei) {
+ } else if (m_irq_state != CLEAR_LINE && m_iff1 && !get_service_attention<SA_AFTER_EI>()) {
call take_interrupt
}
@@ -672,33 +632,29 @@ macro nsc800_take_interrupt
// 'interrupt latency' cycles
+ 7
if (m_nsc800_irq_state[0]) {
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x003c;
} else if (m_nsc800_irq_state[1]) {
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x0034;
} else if (m_nsc800_irq_state[2]) {
- TDAT = PC;
- call wm16_sp
+ call wm16_sp PC
PC = 0x002c;
} else {
+ 2 * m_memrq_cycles
;
}
WZ = PC;
- #if HAS_LDAIR_QUIRK
+ if (HAS_LDAIR_QUIRK)
// reset parity flag after LD A,I or LD A,R
- if (m_after_ldair) F &= ~PF;
- #endif
+ if (get_service_attention<SA_AFTER_LDAIR>()) F &= ~PF;
macro nsc800:check_interrupts
- if (m_nmi_pending) {
+ if (get_service_attention<SA_NMI_PENDING>()) {
call take_nmi
- } else if ((m_nsc800_irq_state[0] != CLEAR_LINE || m_nsc800_irq_state[1] != CLEAR_LINE || m_nsc800_irq_state[2] != CLEAR_LINE) && m_iff1 && !m_after_ei) {
+ } else if (get_service_attention<SA_NSC800_IRQ_ON>() && m_iff1 && !get_service_attention<SA_AFTER_EI>()) {
call nsc800_take_interrupt
- } else if (m_irq_state != CLEAR_LINE && m_iff1 && !m_after_ei) {
+ } else if (m_irq_state != CLEAR_LINE && m_iff1 && !get_service_attention<SA_AFTER_EI>()) { // SA_IRQ_ON
call take_interrupt
}
@@ -707,35 +663,42 @@ macro nsc800:check_interrupts
# ROP
##########################################################
ffff
- m_ref = 0xffff00;
- if (m_icount <= 0) return;
- if (m_busrq_state) {
- if (!m_busack_state) {
- m_busack_state = 1;
- m_busack_cb(1);
- }
- if (m_icount > 0)
- m_icount = 0;
+ if (m_icount <= 0) {
+ m_ref = 0xffff00;
return;
- } else if (m_busack_state) {
- m_busack_state = 0;
- m_busack_cb(0);
}
- call check_interrupts
- m_after_ei = false;
- m_after_ldair = false;
- if (m_halt) {
- debugger_wait_hook();
- call rop
- PC--;
- continue;
- } else {
- PRVPC = PC;
- debugger_instruction_hook(PC);
- call rop
- m_ref = (0x00 << 16) | (TDAT8 << 8);
- goto process;
+ if (m_service_attention) {
+ if (m_busrq_state) { // SA_BUSRQ
+ if (!m_busack_state) {
+ m_busack_state = 1;
+ set_service_attention<SA_BUSACK, 1>();
+ m_busack_cb(1);
+ }
+ if (m_icount > 0)
+ m_icount = 0;
+ m_ref = 0xffff00;
+ return;
+ } else if (m_busack_state) { // SA_BUSACK
+ m_busack_state = 0;
+ set_service_attention<SA_BUSACK, 0>();
+ m_busack_cb(0);
+ }
+ call check_interrupts
+ set_service_attention<SA_AFTER_EI, 0>(); // SA_AFTER_EI
+ if (HAS_LDAIR_QUIRK)
+ set_service_attention<SA_AFTER_LDAIR, 0>(); // SA_AFTER_LDAIR
+ if (m_halt) { // SA_HALT
+ debugger_wait_hook();
+ call rop
+ PC--;
+ continue;
+ }
}
+ PRVPC = PC;
+ debugger_instruction_hook(PC);
+ call rop
+ m_ref = (0x00 << 16) | (TDAT8 << 8);
+ goto process;
##########################################################
@@ -761,10 +724,9 @@ cb05 # RLC L
L = rlc(L);
cb06 # RLC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rlc(TDAT8);
- call wm
+ call wm HL
cb07 # RLC A
A = rlc(A);
@@ -788,10 +750,9 @@ cb0d # RRC L
L = rrc(L);
cb0e # RRC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rrc(TDAT8);
- call wm
+ call wm HL
cb0f # RRC A
A = rrc(A);
@@ -815,10 +776,9 @@ cb15 # RL L
L = rl(L);
cb16 # RL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rl(TDAT8);
- call wm
+ call wm HL
cb17 # RL A
A = rl(A);
@@ -842,10 +802,9 @@ cb1d # RR L
L = rr(L);
cb1e # RR (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = rr(TDAT8);
- call wm
+ call wm HL
cb1f # RR A
A = rr(A);
@@ -869,10 +828,9 @@ cb25 # SLA L
L = sla(L);
cb26 # SLA (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = sla(TDAT8);
- call wm
+ call wm HL
cb27 # SLA A
A = sla(A);
@@ -896,10 +854,9 @@ cb2d # SRA L
L = sra(L);
cb2e # SRA (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = sra(TDAT8);
- call wm
+ call wm HL
cb2f # SRA A
A = sra(A);
@@ -923,10 +880,9 @@ cb35 # SLL L
L = sll(L);
cb36 # SLL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = sll(TDAT8);
- call wm
+ call wm HL
cb37 # SLL A
A = sll(A);
@@ -950,10 +906,9 @@ cb3d # SRL L
L = srl(L);
cb3e # SRL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = srl(TDAT8);
- call wm
+ call wm HL
cb3f # SRL A
A = srl(A);
@@ -977,8 +932,7 @@ cb45 # BIT 0,L
bit(0, L);
cb46 # BIT 0,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(0, TDAT8);
cb47 # BIT 0,A
@@ -1003,8 +957,7 @@ cb4d # BIT 1,L
bit(1, L);
cb4e # BIT 1,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(1, TDAT8);
cb4f # BIT 1,A
@@ -1029,8 +982,7 @@ cb55 # BIT 2,L
bit(2, L);
cb56 # BIT 2,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(2, TDAT8);
cb57 # BIT 2,A
@@ -1055,8 +1007,7 @@ cb5d # BIT 3,L
bit(3, L);
cb5e # BIT 3,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(3, TDAT8);
cb5f # BIT 3,A
@@ -1081,8 +1032,7 @@ cb65 # BIT 4,L
bit(4, L);
cb66 # BIT 4,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(4, TDAT8);
cb67 # BIT 4,A
@@ -1107,8 +1057,7 @@ cb6d # BIT 5,L
bit(5, L);
cb6e # BIT 5,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(5, TDAT8);
cb6f # BIT 5,A
@@ -1133,8 +1082,7 @@ cb75 # BIT 6,L
bit(6, L);
cb76 # BIT 6,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(6, TDAT8);
cb77 # BIT 6,A
@@ -1159,8 +1107,7 @@ cb7d # BIT 7,L
bit(7, L);
cb7e # BIT 7,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
bit_hl(7, TDAT8);
cb7f # BIT 7,A
@@ -1185,10 +1132,9 @@ cb85 # RES 0,L
L = res(0, L);
cb86 # RES 0,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(0, TDAT8);
- call wm
+ call wm HL
cb87 # RES 0,A
A = res(0, A);
@@ -1212,10 +1158,9 @@ cb8d # RES 1,L
L = res(1, L);
cb8e # RES 1,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(1, TDAT8);
- call wm
+ call wm HL
cb8f # RES 1,A
A = res(1, A);
@@ -1239,10 +1184,9 @@ cb95 # RES 2,L
L = res(2, L);
cb96 # RES 2,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(2, TDAT8);
- call wm
+ call wm HL
cb97 # RES 2,A
A = res(2, A);
@@ -1266,10 +1210,9 @@ cb9d # RES 3,L
L = res(3, L);
cb9e # RES 3,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(3, TDAT8);
- call wm
+ call wm HL
cb9f # RES 3,A
A = res(3, A);
@@ -1293,10 +1236,9 @@ cba5 # RES 4,L
L = res(4, L);
cba6 # RES 4,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(4, TDAT8);
- call wm
+ call wm HL
cba7 # RES 4,A
A = res(4, A);
@@ -1320,10 +1262,9 @@ cbad # RES 5,L
L = res(5, L);
cbae # RES 5,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(5, TDAT8);
- call wm
+ call wm HL
cbaf # RES 5,A
A = res(5, A);
@@ -1347,10 +1288,9 @@ cbb5 # RES 6,L
L = res(6, L);
cbb6 # RES 6,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(6, TDAT8);
- call wm
+ call wm HL
cbb7 # RES 6,A
A = res(6, A);
@@ -1374,10 +1314,9 @@ cbbd # RES 7,L
L = res(7, L);
cbbe # RES 7,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = res(7, TDAT8);
- call wm
+ call wm HL
cbbf # RES 7,A
A = res(7, A);
@@ -1401,10 +1340,9 @@ cbc5 # SET 0,L
L = set(0, L);
cbc6 # SET 0,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(0, TDAT8);
- call wm
+ call wm HL
cbc7 # SET 0,A
A = set(0, A);
@@ -1428,10 +1366,9 @@ cbcd # SET 1,L
L = set(1, L);
cbce # SET 1,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(1, TDAT8);
- call wm
+ call wm HL
cbcf # SET 1,A
A = set(1, A);
@@ -1455,10 +1392,9 @@ cbd5 # SET 2,L
L = set(2, L);
cbd6 # SET 2,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(2, TDAT8);
- call wm
+ call wm HL
cbd7 # SET 2,A
A = set(2, A);
@@ -1482,10 +1418,9 @@ cbdd # SET 3,L
L = set(3, L);
cbde # SET 3,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(3, TDAT8);
- call wm
+ call wm HL
cbdf # SET 3,A
A = set(3, A);
@@ -1509,10 +1444,9 @@ cbe5 # SET 4,L
L = set(4, L);
cbe6 # SET 4,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(4, TDAT8);
- call wm
+ call wm HL
cbe7 # SET 4,A
A = set(4, A);
@@ -1536,10 +1470,9 @@ cbed # SET 5,L
L = set(5, L);
cbee # SET 5,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(5, TDAT8);
- call wm
+ call wm HL
cbef # SET 5,A
A = set(5, A);
@@ -1563,10 +1496,9 @@ cbf5 # SET 6,L
L = set(6, L);
cbf6 # SET 6,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(6, TDAT8);
- call wm
+ call wm HL
cbf7 # SET 6,A
A = set(6, A);
@@ -1590,10 +1522,9 @@ cbfd # SET 7,L
L = set(7, L);
cbfe # SET 7,(HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = set(7, TDAT8);
- call wm
+ call wm HL
cbff # SET 7,A
A = set(7, A);
@@ -1604,388 +1535,324 @@ cbff # SET 7,A
# rotate, shift and bit operations with (IX+o)
##########################################################
fe00 # RLC B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rlc(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe01 # RLC C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rlc(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe02 # RLC D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rlc(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe03 # RLC E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rlc(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe04 # RLC H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rlc(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe05 # RLC L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rlc(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe06 # RLC (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rlc(TDAT8);
- call wm
+ call wm m_ea
fe07 # RLC A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rlc(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe08 # RRC B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rrc(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe09 # RRC C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rrc(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe0a # RRC D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rrc(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe0b # RRC E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rrc(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe0c # RRC H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rrc(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe0d # RRC L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rrc(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe0e # RRC (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rrc(TDAT8);
- call wm
+ call wm m_ea
fe0f # RRC A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rrc(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe10 # RL B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rl(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe11 # RL C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rl(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe12 # RL D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rl(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe13 # RL E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rl(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe14 # RL H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rl(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe15 # RL L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rl(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe16 # RL (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rl(TDAT8);
- call wm
+ call wm m_ea
fe17 # RL A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rl(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe18 # RR B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = rr(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe19 # RR C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = rr(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe1a # RR D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = rr(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe1b # RR E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = rr(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe1c # RR H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = rr(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe1d # RR L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = rr(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe1e # RR (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = rr(TDAT8);
- call wm
+ call wm m_ea
fe1f # RR A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = rr(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe20 # SLA B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = sla(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe21 # SLA C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = sla(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe22 # SLA D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = sla(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe23 # SLA E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = sla(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe24 # SLA H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = sla(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe25 # SLA L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = sla(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe26 # SLA (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = sla(TDAT8);
- call wm
+ call wm m_ea
fe27 # SLA A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = sla(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe28 # SRA B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = sra(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe29 # SRA C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = sra(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe2a # SRA D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = sra(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe2b # SRA E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = sra(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe2c # SRA H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = sra(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe2d # SRA L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = sra(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe2e # SRA (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = sra(TDAT8);
- call wm
+ call wm m_ea
fe2f # SRA A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = sra(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe30 # SLL B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = sll(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe31 # SLL C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = sll(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe32 # SLL D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = sll(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe33 # SLL E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = sll(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe34 # SLL H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = sll(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe35 # SLL L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = sll(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe36 # SLL (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = sll(TDAT8);
- call wm
+ call wm m_ea
fe37 # SLL A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = sll(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe38 # SRL B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = srl(TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe39 # SRL C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = srl(TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe3a # SRL D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = srl(TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe3b # SRL E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = srl(TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe3c # SRL H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = srl(TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe3d # SRL L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = srl(TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe3e # SRL (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = srl(TDAT8);
- call wm
+ call wm m_ea
fe3f # SRL A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = srl(TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe40 # BIT 0,(XY+o)
call jump fe46
@@ -2006,8 +1873,7 @@ fe45 # BIT 0,(XY+o)
call jump fe46
fe46 # BIT 0,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(0, TDAT8);
fe47 # BIT 0,(XY+o)
@@ -2032,8 +1898,7 @@ fe4d # BIT 1,(XY+o)
call jump fe4e
fe4e # BIT 1,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(1, TDAT8);
fe4f # BIT 1,(XY+o)
@@ -2058,8 +1923,7 @@ fe55 # BIT 2,(XY+o)
call jump fe56
fe56 # BIT 2,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(2, TDAT8);
fe57 # BIT 2,(XY+o)
@@ -2084,8 +1948,7 @@ fe5d # BIT 3,(XY+o)
call jump fe5e
fe5e # BIT 3,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(3, TDAT8);
fe5f # BIT 3,(XY+o)
@@ -2110,8 +1973,7 @@ fe65 # BIT 4,(XY+o)
call jump fe66
fe66 # BIT 4,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(4, TDAT8);
fe67 # BIT 4,(XY+o)
@@ -2136,8 +1998,7 @@ fe6d # BIT 5,(XY+o)
call jump fe6e
fe6e # BIT 5,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(5, TDAT8);
fe6f # BIT 5,(XY+o)
@@ -2162,8 +2023,7 @@ fe75 # BIT 6,(XY+o)
call jump fe76
fe76 # BIT 6,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(6, TDAT8);
fe77 # BIT 6,(XY+o)
@@ -2188,780 +2048,651 @@ fe7d # BIT 7,(XY+o)
call jump fe7e
fe7e # BIT 7,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
bit_xy(7, TDAT8);
fe7f # BIT 7,(XY+o)
call jump fe7e
fe80 # RES 0,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(0, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe81 # RES 0,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(0, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe82 # RES 0,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(0, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe83 # RES 0,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(0, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe84 # RES 0,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(0, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe85 # RES 0,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(0, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe86 # RES 0,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(0, TDAT8);
- call wm
+ call wm m_ea
fe87 # RES 0,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(0, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe88 # RES 1,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(1, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe89 # RES 1,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(1, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe8a # RES 1,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(1, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe8b # RES 1,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(1, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe8c # RES 1,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(1, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe8d # RES 1,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(1, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe8e # RES 1,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(1, TDAT8);
- call wm
+ call wm m_ea
fe8f # RES 1,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(1, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe90 # RES 2,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(2, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe91 # RES 2,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(2, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe92 # RES 2,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(2, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe93 # RES 2,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(2, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe94 # RES 2,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(2, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe95 # RES 2,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(2, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe96 # RES 2,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(2, TDAT8);
- call wm
+ call wm m_ea
fe97 # RES 2,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(2, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fe98 # RES 3,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(3, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fe99 # RES 3,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(3, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fe9a # RES 3,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(3, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fe9b # RES 3,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(3, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fe9c # RES 3,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(3, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fe9d # RES 3,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(3, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fe9e # RES 3,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(3, TDAT8);
- call wm
+ call wm m_ea
fe9f # RES 3,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(3, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fea0 # RES 4,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(4, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fea1 # RES 4,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(4, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fea2 # RES 4,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(4, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fea3 # RES 4,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(4, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fea4 # RES 4,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(4, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fea5 # RES 4,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(4, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fea6 # RES 4,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(4, TDAT8);
- call wm
+ call wm m_ea
fea7 # RES 4,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(4, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fea8 # RES 5,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(5, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fea9 # RES 5,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(5, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feaa # RES 5,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(5, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
feab # RES 5,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(5, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
feac # RES 5,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(5, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fead # RES 5,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(5, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
feae # RES 5,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(5, TDAT8);
- call wm
+ call wm m_ea
feaf # RES 5,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(5, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
feb0 # RES 6,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(6, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
feb1 # RES 6,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(6, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feb2 # RES 6,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(6, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
feb3 # RES 6,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(6, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
feb4 # RES 6,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(6, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
feb5 # RES 6,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(6, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
feb6 # RES 6,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(6, TDAT8);
- call wm
+ call wm m_ea
feb7 # RES 6,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(6, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
feb8 # RES 7,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = res(7, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
feb9 # RES 7,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = res(7, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feba # RES 7,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = res(7, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
febb # RES 7,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = res(7, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
febc # RES 7,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = res(7, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
febd # RES 7,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = res(7, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
febe # RES 7,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = res(7, TDAT8);
- call wm
+ call wm m_ea
febf # RES 7,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = res(7, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fec0 # SET 0,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(0, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fec1 # SET 0,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(0, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fec2 # SET 0,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(0, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fec3 # SET 0,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(0, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fec4 # SET 0,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(0, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fec5 # SET 0,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(0, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fec6 # SET 0,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(0, TDAT8);
- call wm
+ call wm m_ea
fec7 # SET 0,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(0, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fec8 # SET 1,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(1, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fec9 # SET 1,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(1, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feca # SET 1,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(1, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fecb # SET 1,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(1, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fecc # SET 1,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(1, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fecd # SET 1,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(1, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fece # SET 1,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(1, TDAT8);
- call wm
+ call wm m_ea
fecf # SET 1,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(1, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fed0 # SET 2,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(2, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fed1 # SET 2,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(2, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fed2 # SET 2,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(2, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fed3 # SET 2,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(2, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fed4 # SET 2,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(2, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fed5 # SET 2,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(2, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fed6 # SET 2,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(2, TDAT8);
- call wm
+ call wm m_ea
fed7 # SET 2,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(2, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fed8 # SET 3,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(3, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fed9 # SET 3,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(3, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feda # SET 3,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(3, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fedb # SET 3,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(3, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fedc # SET 3,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(3, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fedd # SET 3,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(3, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fede # SET 3,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(3, TDAT8);
- call wm
+ call wm m_ea
fedf # SET 3,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(3, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fee0 # SET 4,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(4, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fee1 # SET 4,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(4, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fee2 # SET 4,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(4, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fee3 # SET 4,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(4, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fee4 # SET 4,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(4, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fee5 # SET 4,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(4, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fee6 # SET 4,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(4, TDAT8);
- call wm
+ call wm m_ea
fee7 # SET 4,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(4, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fee8 # SET 5,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(5, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fee9 # SET 5,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(5, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
feea # SET 5,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(5, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
feeb # SET 5,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(5, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
feec # SET 5,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(5, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
feed # SET 5,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(5, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
feee # SET 5,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(5, TDAT8);
- call wm
+ call wm m_ea
feef # SET 5,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(5, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fef0 # SET 6,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(6, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fef1 # SET 6,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(6, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fef2 # SET 6,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(6, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fef3 # SET 6,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(6, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fef4 # SET 6,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(6, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fef5 # SET 6,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(6, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fef6 # SET 6,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(6, TDAT8);
- call wm
+ call wm m_ea
fef7 # SET 6,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(6, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
fef8 # SET 7,B = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
B = set(7, TDAT8); TDAT8 = B;
- call wm
+ call wm m_ea
fef9 # SET 7,C = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
C = set(7, TDAT8); TDAT8 = C;
- call wm
+ call wm m_ea
fefa # SET 7,D = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
D = set(7, TDAT8); TDAT8 = D;
- call wm
+ call wm m_ea
fefb # SET 7,E = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
E = set(7, TDAT8); TDAT8 = E;
- call wm
+ call wm m_ea
fefc # SET 7,H = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
H = set(7, TDAT8); TDAT8 = H;
- call wm
+ call wm m_ea
fefd # SET 7,L = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
L = set(7, TDAT8); TDAT8 = L;
- call wm
+ call wm m_ea
fefe # SET 7,(XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
TDAT8 = set(7, TDAT8);
- call wm
+ call wm m_ea
feff # SET 7,A = (XY+o)
- TADR = m_ea;
- call rm_reg
+ call rm_reg m_ea
A = set(7, TDAT8); TDAT8 = A;
- call wm
+ call wm m_ea
##########################################################
@@ -3107,8 +2838,8 @@ dd21 # LD IX,w
dd22 # LD (w),IX
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = IX;
- call wm16
+ m_ea = TDAT; TDAT = IX;
+ call wm16 m_ea
WZ = m_ea + 1;
dd23 # INC IX
@@ -3140,8 +2871,8 @@ dd29 # ADD IX,IX
dd2a # LD IX,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
IX = TDAT; WZ = m_ea + 1;
dd2b # DEC IX
@@ -3180,29 +2911,23 @@ dd33 # DB DD
dd34 # INC (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
inc(TDAT8);
- call wm
+ call wm m_ea
dd35 # DEC (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
dec(TDAT8);
- call wm
+ call wm m_ea
dd36 # LD (IX+o),n
call eax
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
- TADR = m_ea;
- call wm
+ 2 * call nomreq_addr PC-1
+ call wm m_ea
dd37 # DB DD
illegal_1();
@@ -3265,10 +2990,8 @@ dd45 # LD B,LX
dd46 # LD B,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
B = TDAT8;
dd47 # DB DD
@@ -3299,10 +3022,8 @@ dd4d # LD C,LX
dd4e # LD C,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
C = TDAT8;
dd4f # DB DD
@@ -3333,10 +3054,8 @@ dd55 # LD D,LX
dd56 # LD D,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
D = TDAT8;
dd57 # DB DD
@@ -3367,10 +3086,8 @@ dd5d # LD E,LX
dd5e # LD E,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
E = TDAT8;
dd5f # DB DD
@@ -3396,10 +3113,8 @@ dd65 # LD HX,LX
dd66 # LD H,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
H = TDAT8;
dd67 # LD HX,A
@@ -3424,10 +3139,8 @@ dd6d # LD LX,LX
dd6e # LD L,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
L = TDAT8;
dd6f # LD LX,A
@@ -3435,45 +3148,39 @@ dd6f # LD LX,A
dd70 # LD (IX+o),B
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = B;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = B;
+ call wm m_ea
dd71 # LD (IX+o),C
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = C;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = C;
+ call wm m_ea
dd72 # LD (IX+o),D
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = D;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = D;
+ call wm m_ea
dd73 # LD (IX+o),E
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = E;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = E;
+ call wm m_ea
dd74 # LD (IX+o),H
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = H;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = H;
+ call wm m_ea
dd75 # LD (IX+o),L
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = L;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = L;
+ call wm m_ea
dd76 # DB DD
illegal_1();
@@ -3481,10 +3188,9 @@ dd76 # DB DD
dd77 # LD (IX+o),A
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = A;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = A;
+ call wm m_ea
dd78 # DB DD
illegal_1();
@@ -3510,10 +3216,8 @@ dd7d # LD A,LX
dd7e # LD A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
A = TDAT8;
dd7f # DB DD
@@ -3544,10 +3248,8 @@ dd85 # ADD A,LX
dd86 # ADD A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
add_a(TDAT8);
dd87 # DB DD
@@ -3578,10 +3280,8 @@ dd8d # ADC A,LX
dd8e # ADC A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
adc_a(TDAT8);
dd8f # DB DD
@@ -3612,10 +3312,8 @@ dd95 # SUB LX
dd96 # SUB (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sub_a(TDAT8);
dd97 # DB DD
@@ -3646,10 +3344,8 @@ dd9d # SBC A,LX
dd9e # SBC A,(IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sbc_a(TDAT8);
dd9f # DB DD
@@ -3680,10 +3376,8 @@ dda5 # AND LX
dda6 # AND (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
and_a(TDAT8);
dda7 # DB DD
@@ -3714,10 +3408,8 @@ ddad # XOR LX
ddae # XOR (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
xor_a(TDAT8);
ddaf # DB DD
@@ -3748,10 +3440,8 @@ ddb5 # OR LX
ddb6 # OR (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
or_a(TDAT8);
ddb7 # DB DD
@@ -3782,10 +3472,8 @@ ddbd # CP LX
ddbe # CP (IX+o)
call eax
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
cp(TDAT8);
ddbf # DB DD
@@ -3839,8 +3527,7 @@ ddca # DB DD
ddcb # ** DD CB xx
call eax
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
+ 2 * call nomreq_addr PC-1
call jump_prefixed 0xfe
ddcc # DB DD
@@ -3936,17 +3623,14 @@ dde2 # DB DD
call jump 00e2
dde3 # EX (SP),IX
- TDAT = IX;
- call ex_sp
- IX = TDAT;
+ call ex_sp IX
dde4 # DB DD
illegal_1();
call jump 00e4
dde5 # PUSH IX
- TDAT = IX;
- call push
+ call push IX
dde6 # DB DD
illegal_1();
@@ -4195,8 +3879,8 @@ fd21 # LD IY,w
fd22 # LD (w),IY
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = IY;
- call wm16
+ m_ea = TDAT; TDAT = IY;
+ call wm16 m_ea
WZ = m_ea + 1;
fd23 # INC IY
@@ -4228,8 +3912,8 @@ fd29 # ADD IY,IY
fd2a # LD IY,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
IY = TDAT; WZ = m_ea + 1;
fd2b # DEC IY
@@ -4268,29 +3952,23 @@ fd33 # DB FD
fd34 # INC (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
inc(TDAT8);
- call wm
+ call wm m_ea
fd35 # DEC (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm_reg
+ 5 * call nomreq_addr PC-1
+ call rm_reg m_ea
dec(TDAT8);
- call wm
+ call wm m_ea
fd36 # LD (IY+o),n
call eay
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
- TADR = m_ea;
- call wm
+ 2 * call nomreq_addr PC-1
+ call wm m_ea
fd37 # DB FD
illegal_1();
@@ -4353,10 +4031,8 @@ fd45 # LD B,LY
fd46 # LD B,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
B = TDAT8;
fd47 # DB FD
@@ -4387,10 +4063,8 @@ fd4d # LD C,LY
fd4e # LD C,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
C = TDAT8;
fd4f # DB FD
@@ -4421,10 +4095,8 @@ fd55 # LD D,LY
fd56 # LD D,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
D = TDAT8;
fd57 # DB FD
@@ -4455,10 +4127,8 @@ fd5d # LD E,LY
fd5e # LD E,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
E = TDAT8;
fd5f # DB FD
@@ -4484,10 +4154,8 @@ fd65 # LD HY,LY
fd66 # LD H,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
H = TDAT8;
fd67 # LD HY,A
@@ -4512,10 +4180,8 @@ fd6d # LD LY,LY
fd6e # LD L,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
L = TDAT8;
fd6f # LD LY,A
@@ -4523,45 +4189,39 @@ fd6f # LD LY,A
fd70 # LD (IY+o),B
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = B;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = B;
+ call wm m_ea
fd71 # LD (IY+o),C
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = C;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = C;
+ call wm m_ea
fd72 # LD (IY+o),D
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = D;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = D;
+ call wm m_ea
fd73 # LD (IY+o),E
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = E;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = E;
+ call wm m_ea
fd74 # LD (IY+o),H
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = H;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = H;
+ call wm m_ea
fd75 # LD (IY+o),L
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = L;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = L;
+ call wm m_ea
fd76 # DB FD
illegal_1();
@@ -4569,10 +4229,9 @@ fd76 # DB FD
fd77 # LD (IY+o),A
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea; TDAT8 = A;
- call wm
+ 5 * call nomreq_addr PC-1
+ TDAT8 = A;
+ call wm m_ea
fd78 # DB FD
illegal_1();
@@ -4598,10 +4257,8 @@ fd7d # LD A,LY
fd7e # LD A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
A = TDAT8;
fd7f # DB FD
@@ -4632,10 +4289,8 @@ fd85 # ADD A,LY
fd86 # ADD A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
add_a(TDAT8);
fd87 # DB FD
@@ -4666,10 +4321,8 @@ fd8d # ADC A,LY
fd8e # ADC A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
adc_a(TDAT8);
fd8f # DB FD
@@ -4700,10 +4353,8 @@ fd95 # SUB LY
fd96 # SUB (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sub_a(TDAT8);
fd97 # DB FD
@@ -4734,10 +4385,8 @@ fd9d # SBC A,LY
fd9e # SBC A,(IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
sbc_a(TDAT8);
fd9f # DB FD
@@ -4768,10 +4417,8 @@ fda5 # AND LY
fda6 # AND (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
and_a(TDAT8);
fda7 # DB FD
@@ -4802,10 +4449,8 @@ fdad # XOR LY
fdae # XOR (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
xor_a(TDAT8);
fdaf # DB FD
@@ -4836,10 +4481,8 @@ fdb5 # OR LY
fdb6 # OR (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
or_a(TDAT8);
fdb7 # DB FD
@@ -4870,10 +4513,8 @@ fdbd # CP LY
fdbe # CP (IY+o)
call eay
- TADR = PC-1;
- 5 * call nomreq_addr
- TADR = m_ea;
- call rm
+ 5 * call nomreq_addr PC-1
+ call rm m_ea
cp(TDAT8);
fdbf # DB FD
@@ -4927,8 +4568,7 @@ fdca # DB FD
fdcb # ** FD CB xx
call eay
call arg
- TADR = PC-1;
- 2 * call nomreq_addr
+ 2 * call nomreq_addr PC-1
call jump_prefixed 0xfe
fdcc # DB FD
@@ -5024,17 +4664,14 @@ fde2 # DB FD
call jump 00e2
fde3 # EX (SP),IY
- TDAT = IY;
- call ex_sp
- IY = TDAT;
+ call ex_sp IY
fde4 # DB FD
illegal_1();
call jump 00e4
fde5 # PUSH IY
- TDAT = IY;
- call push
+ call push IY
fde6 # DB FD
illegal_1();
@@ -5336,14 +4973,13 @@ ed3f # DB ED
illegal_2();
ed40 # IN B,(C)
- TADR = BC;
- call in
- B = TDAT8; set_f((F & CF) | SZP[B]); WZ = TADR + 1;
+ call in BC
+ B = TDAT8; set_f((F & CF) | SZP[B]); WZ = BC + 1;
ed41 # OUT (C),B
- TADR = BC; TDAT8 = B;
- call out
- WZ = TADR + 1;
+ TDAT8 = B;
+ call out BC
+ WZ = BC + 1;
ed42 # SBC HL,BC
TDAT = BC;
@@ -5351,8 +4987,8 @@ ed42 # SBC HL,BC
ed43 # LD (w),BC
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = BC;
- call wm16
+ m_ea = TDAT; TDAT = BC;
+ call wm16 m_ea
WZ = m_ea + 1;
ed44 # NEG
@@ -5368,14 +5004,13 @@ ed47 # LD i,A
call ld_i_a
ed48 # IN C,(C)
- TADR = BC;
- call in
- C = TDAT8; set_f((F & CF) | SZP[C]); WZ = TADR + 1;
+ call in BC
+ C = TDAT8; set_f((F & CF) | SZP[C]); WZ = BC + 1;
ed49 # OUT (C),C
- TADR = BC; TDAT8 = C;
- call out
- WZ = TADR + 1;
+ TDAT8 = C;
+ call out BC
+ WZ = BC + 1;
ed4a # ADC HL,BC
TDAT = BC;
@@ -5383,8 +5018,8 @@ ed4a # ADC HL,BC
ed4b # LD BC,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
BC = TDAT; WZ = m_ea + 1;
ed4c # NEG
@@ -5400,14 +5035,13 @@ ed4f # LD r,A
call ld_r_a
ed50 # IN D,(C)
- TADR = BC;
- call in
- D = TDAT8; set_f((F & CF) | SZP[D]); WZ = TADR + 1;
+ call in BC
+ D = TDAT8; set_f((F & CF) | SZP[D]); WZ = BC + 1;
ed51 # OUT (C),D
- TADR = BC; TDAT8 = D;
- call out
- WZ = TADR + 1;
+ TDAT8 = D;
+ call out BC
+ WZ = BC + 1;
ed52 # SBC HL,DE
TDAT = DE;
@@ -5415,8 +5049,8 @@ ed52 # SBC HL,DE
ed53 # LD (w),DE
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = DE;
- call wm16
+ m_ea = TDAT; TDAT = DE;
+ call wm16 m_ea
WZ = m_ea + 1;
ed54 # NEG
@@ -5432,14 +5066,13 @@ ed57 # LD A,i
call ld_a_i
ed58 # IN E,(C)
- TADR = BC;
- call in
- E = TDAT8; set_f((F & CF) | SZP[E]); WZ = TADR + 1;
+ call in BC
+ E = TDAT8; set_f((F & CF) | SZP[E]); WZ = BC + 1;
ed59 # OUT (C),E
- TADR = BC; TDAT8 = E;
- call out
- WZ = TADR + 1;
+ TDAT8 = E;
+ call out BC
+ WZ = BC + 1;
ed5a # ADC HL,DE
TDAT = DE;
@@ -5447,8 +5080,8 @@ ed5a # ADC HL,DE
ed5b # LD DE,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
DE = TDAT; WZ = m_ea + 1;
ed5c # NEG
@@ -5464,14 +5097,13 @@ ed5f # LD A,r
call ld_a_r
ed60 # IN H,(C)
- TADR = BC;
- call in
- H = TDAT8; set_f((F & CF) | SZP[H]); WZ = TADR + 1;
+ call in BC
+ H = TDAT8; set_f((F & CF) | SZP[H]); WZ = BC + 1;
ed61 # OUT (C),H
- TADR = BC; TDAT8 = H;
- call out
- WZ = TADR + 1;
+ TDAT8 = H;
+ call out BC
+ WZ = BC + 1;
ed62 # SBC HL,HL
TDAT = HL;
@@ -5479,8 +5111,8 @@ ed62 # SBC HL,HL
ed63 # LD (w),HL
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = HL;
- call wm16
+ m_ea = TDAT; TDAT = HL;
+ call wm16 m_ea
WZ = m_ea + 1;
ed64 # NEG
@@ -5496,14 +5128,13 @@ ed67 # RRD (HL)
call rrd
ed68 # IN L,(C)
- TADR = BC;
- call in
- L = TDAT8; set_f((F & CF) | SZP[L]); WZ = TADR + 1;
+ call in BC
+ L = TDAT8; set_f((F & CF) | SZP[L]); WZ = BC + 1;
ed69 # OUT (C),L
- TADR = BC; TDAT8 = L;
- call out
- WZ = TADR + 1;
+ TDAT8 = L;
+ call out BC
+ WZ = BC + 1;
ed6a # ADC HL,HL
TDAT = HL;
@@ -5511,8 +5142,8 @@ ed6a # ADC HL,HL
ed6b # LD HL,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
HL = TDAT; WZ = m_ea + 1;
ed6c # NEG
@@ -5528,14 +5159,13 @@ ed6f # RLD (HL)
call rld
ed70 # IN 0,(C)
- TADR = BC;
- call in
- set_f((F & CF) | SZP[TDAT8]); WZ = TADR + 1;
+ call in BC
+ set_f((F & CF) | SZP[TDAT8]); WZ = BC + 1;
ed71 # OUT (C),0
- TADR = BC; TDAT8 = 0;
- call out
- WZ = TADR + 1;
+ TDAT8 = 0;
+ call out BC
+ WZ = BC + 1;
ed72 # SBC HL,SP
TDAT = SP;
@@ -5543,8 +5173,8 @@ ed72 # SBC HL,SP
ed73 # LD (w),SP
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT = SP;
- call wm16
+ m_ea = TDAT; TDAT = SP;
+ call wm16 m_ea
WZ = m_ea + 1;
ed74 # NEG
@@ -5560,14 +5190,13 @@ ed77 # DB ED,77
illegal_2();
ed78 # IN A,(C)
- TADR = BC;
- call in
- A = TDAT8; set_f((F & CF) | SZP[A]); WZ = TADR + 1;
+ call in BC
+ A = TDAT8; set_f((F & CF) | SZP[A]); WZ = BC + 1;
ed79 # OUT (C),A
- TADR = BC; TDAT8 = A;
- call out
- WZ = TADR + 1;
+ TDAT8 = A;
+ call out BC
+ WZ = BC + 1;
ed7a # ADC HL,SP
TDAT = SP;
@@ -5575,8 +5204,8 @@ ed7a # ADC HL,SP
ed7b # LD SP,(w)
call arg16
- m_ea = TDAT; TADR = m_ea;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
SP = TDAT; WZ = m_ea + 1;
ed7c # NEG
@@ -5986,8 +5615,8 @@ edff # DB ED
BC = TDAT;
0002 # LD (BC),A
- TADR = BC; TDAT8 = A;
- call wm
+ TDAT8 = A;
+ call wm BC
WZ_L = (BC + 1) & 0xFF; WZ_H = A;
0003 # INC BC
@@ -6016,8 +5645,7 @@ edff # DB ED
HL = TDAT;
000a # LD A,(BC)
- TADR = BC;
- call rm
+ call rm BC
A = TDAT8; WZ = BC+1;
000b # DEC BC
@@ -6047,8 +5675,8 @@ edff # DB ED
DE = TDAT;
0012 # LD (DE),A
- TADR = DE; TDAT8 = A;
- call wm
+ TDAT8 = A;
+ call wm DE
WZ_L = (DE + 1) & 0xFF; WZ_H = A;
0013 # INC DE
@@ -6077,8 +5705,7 @@ edff # DB ED
HL = TDAT;
001a # LD A,(DE)
- TADR = DE;
- call rm
+ call rm DE
A = TDAT8; WZ = DE + 1;
001b # DEC DE
@@ -6108,8 +5735,8 @@ edff # DB ED
0022 # LD (w),HL
call arg16
- m_ea = TDAT; TADR = TDAT; TDAT = HL;
- call wm16
+ m_ea = TDAT; TDAT = HL;
+ call wm16 m_ea
WZ = m_ea + 1;
0023 # INC HL
@@ -6140,8 +5767,8 @@ edff # DB ED
002a # LD HL,(w)
call arg16
- m_ea = TDAT; TADR = TDAT;
- call rm16
+ m_ea = TDAT;
+ call rm16 m_ea
HL = TDAT; WZ = m_ea + 1;
002b # DEC HL
@@ -6171,8 +5798,8 @@ edff # DB ED
0032 # LD (w),A
call arg16
- m_ea = TDAT; TADR = m_ea; TDAT8 = A;
- call wm
+ m_ea = TDAT; TDAT8 = A;
+ call wm m_ea
WZ_L = (m_ea + 1) & 0xFF; WZ_H = A;
0033 # INC SP
@@ -6180,21 +5807,18 @@ edff # DB ED
SP++;
0034 # INC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
inc(TDAT8);
- call wm
+ call wm HL
0035 # DEC (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
dec(TDAT8);
- call wm
+ call wm HL
0036 # LD (HL),n
call arg
- TADR = HL;
- call wm
+ call wm HL
0037 # SCF
set_f((F & (SF | ZF | PF)) | CF | (((F & Q) | A) & (YF | XF)));
@@ -6210,8 +5834,8 @@ edff # DB ED
003a # LD A,(w)
call arg16
- m_ea = TDAT; TADR = TDAT;
- call rm
+ m_ea = TDAT;
+ call rm m_ea
A = TDAT8; WZ = m_ea + 1;
003b # DEC SP
@@ -6249,8 +5873,7 @@ edff # DB ED
B = L;
0046 # LD B,(HL)
- TADR = HL;
- call rm
+ call rm HL
B = TDAT8;
0047 # LD B,A
@@ -6274,8 +5897,7 @@ edff # DB ED
C = L;
004e # LD C,(HL)
- TADR = HL;
- call rm
+ call rm HL
C = TDAT8;
004f # LD C,A
@@ -6299,8 +5921,7 @@ edff # DB ED
D = L;
0056 # LD D,(HL)
- TADR = HL;
- call rm
+ call rm HL
D = TDAT8;
0057 # LD D,A
@@ -6324,8 +5945,7 @@ edff # DB ED
E = L;
005e # LD E,(HL)
- TADR = HL;
- call rm
+ call rm HL
E = TDAT8;
005f # LD E,A
@@ -6349,8 +5969,7 @@ edff # DB ED
H = L;
0066 # LD H,(HL)
- TADR = HL;
- call rm
+ call rm HL
H = TDAT8;
0067 # LD H,A
@@ -6374,43 +5993,42 @@ edff # DB ED
006d # LD L,L
006e # LD L,(HL)
- TADR = HL;
- call rm
+ call rm HL
L = TDAT8;
006f # LD L,A
L = A;
0070 # LD (HL),B
- TADR = HL; TDAT = B;
- call wm
+ TDAT = B;
+ call wm HL
0071 # LD (HL),C
- TADR = HL; TDAT = C;
- call wm
+ TDAT = C;
+ call wm HL
0072 # LD (HL),D
- TADR = HL; TDAT = D;
- call wm
+ TDAT = D;
+ call wm HL
0073 # LD (HL),E
- TADR = HL; TDAT = E;
- call wm
+ TDAT = E;
+ call wm HL
0074 # LD (HL),H
- TADR = HL; TDAT = H;
- call wm
+ TDAT = H;
+ call wm HL
0075 # LD (HL),L
- TADR = HL; TDAT = L;
- call wm
+ TDAT = L;
+ call wm HL
0076 # HALT
halt();
0077 # LD (HL),A
- TADR = HL; TDAT = A;
- call wm
+ TDAT = A;
+ call wm HL
0078 # LD A,B
A = B;
@@ -6431,8 +6049,7 @@ edff # DB ED
A = L;
007e # LD A,(HL)
- TADR = HL;
- call rm
+ call rm HL
A = TDAT8;
007f # LD A,A
@@ -6456,8 +6073,7 @@ edff # DB ED
add_a(L);
0086 # ADD A,(HL)
- TADR = HL;
- call rm
+ call rm HL
add_a(TDAT8);
0087 # ADD A,A
@@ -6482,8 +6098,7 @@ edff # DB ED
adc_a(L);
008e # ADC A,(HL)
- TADR = HL;
- call rm
+ call rm HL
adc_a(TDAT8);
008f # ADC A,A
@@ -6508,8 +6123,7 @@ edff # DB ED
sub_a(L);
0096 # SUB (HL)
- TADR = HL;
- call rm
+ call rm HL
sub_a(TDAT8);
0097 # SUB A
@@ -6534,8 +6148,7 @@ edff # DB ED
sbc_a(L);
009e # SBC A,(HL)
- TADR = HL;
- call rm
+ call rm HL
sbc_a(TDAT8);
009f # SBC A,A
@@ -6560,8 +6173,7 @@ edff # DB ED
and_a(L);
00a6 # AND (HL)
- TADR = HL;
- call rm
+ call rm HL
and_a(TDAT8);
00a7 # AND A
@@ -6586,8 +6198,7 @@ edff # DB ED
xor_a(L);
00ae # XOR (HL)
- TADR = HL;
- call rm
+ call rm HL
xor_a(TDAT8);
00af # XOR A
@@ -6612,8 +6223,7 @@ edff # DB ED
or_a(L);
00b6 # OR (HL)
- TADR = HL;
- call rm
+ call rm HL
or_a(TDAT8);
00b7 # OR A
@@ -6638,8 +6248,7 @@ edff # DB ED
cp(L);
00be # CP (HL)
- TADR = HL;
- call rm
+ call rm HL
cp(TDAT8);
00bf # CP A
@@ -6665,8 +6274,7 @@ edff # DB ED
call call_cond
00c5 # PUSH BC
- TDAT = BC;
- call push
+ call push BC
00c6 # ADD A,n
call arg
@@ -6719,17 +6327,17 @@ edff # DB ED
00d3 # OUT (n),A
call arg
- TADR = TDAT8 | (A << 8); TDAT = A;
- call out
- WZ_L = ((TADR & 0xff) + 1) & 0xff; WZ_H = A;
+ TDAT2 = TDAT8 | (A << 8);
+ TDAT = A;
+ call out TDAT2
+ WZ_L = ((TDAT2 & 0xff) + 1) & 0xff; WZ_H = A;
00d4 # CALL NC,a
TDAT8 = !(F & CF);
call call_cond
00d5 # PUSH DE
- TDAT = DE;
- call push
+ call push DE
00d6 # SUB n
call arg
@@ -6751,9 +6359,9 @@ edff # DB ED
00db # IN A,(n)
call arg
- TADR = TDAT8 | (A << 8);
- call in
- A = TDAT8; WZ = TADR + 1;
+ TDAT2 = TDAT8 | (A << 8);
+ call in TDAT2
+ A = TDAT8; WZ = TDAT2 + 1;
00dc # CALL C,a
TDAT8 = F & CF;
@@ -6783,17 +6391,14 @@ edff # DB ED
call jp_cond
00e3 # EX HL,(SP)
- TDAT = HL;
- call ex_sp
- HL = TDAT;
+ call ex_sp HL
00e4 # CALL PO,a
TDAT8 = !(F & PF);
call call_cond
00e5 # PUSH HL
- TDAT = HL;
- call push
+ call push HL
00e6 # AND n
call arg
@@ -6851,8 +6456,7 @@ edff # DB ED
call call_cond
00f5 # PUSH AF
- TDAT = AF;
- call push
+ call push AF
00f6 # OR n
call arg
@@ -7588,10 +7192,9 @@ r800:cb35 # SLL L
L = r800_sll(L);
r800:cb36 # SLL (HL)
- TADR = HL;
- call rm_reg
+ call rm_reg HL
TDAT8 = r800_sll(TDAT8);
- call wm
+ call wm HL
r800:cb37 # SLL A
A = r800_sll(A);
@@ -8724,11 +8327,9 @@ r800:00f3 # DI
##########################################################
macro ldix
{
- TADR = HL;
- call rm
+ call rm HL
if (TDAT8 != A) {
- TADR = DE;
- call wm
+ call wm DE
;
}
HL++;
@@ -8738,11 +8339,9 @@ macro ldix
macro lddx
{
- TADR = HL;
- call rm
+ call rm HL
if (TDAT8 != A) {
- TADR = DE;
- call wm
+ call wm DE
;
}
DE++;
@@ -8805,15 +8404,14 @@ z80n:ed36 # add bc,**
BC += TDAT;
z80n:ed8a # push **
- call arg16
- using std::swap; swap(TDAT_H, TDAT_L);
- call push
+ call arg
+ TDAT_H = TDAT_L;
+ call arg
+ call push TDAT
z80n:ed90 # outinb
- TADR = HL;
- call rm
- TADR = BC;
- call out
+ call rm HL
+ call out BC
HL++;
z80n:ed91 # nextreg *,*
@@ -8839,18 +8437,15 @@ z80n:ed95 # setae
A = 0x80 >> (E & 7);
z80n:ed98 # jp (c)
- TADR = BC;
- call in
+ call in BC
PC = (PC & 0xc000) + (TDAT8 << 6);
z80n:eda4 # ldix
call ldix
z80n:eda5 # ldws
- TADR = HL;
- call rm
- TADR = DE;
- call wm
+ call rm HL
+ call wm DE
L++;
inc(D);
@@ -8863,11 +8458,9 @@ z80n:edb4 # ldirx
PC -= 2;
z80n:edb7 # ldpirx
- TADR = (HL & 0xfff8) + (E & 7);
- call rm
+ call rm (HL & 0xfff8) + (E & 7)
if (TDAT8 != A) {
- TADR = DE;
- call wm
+ call wm DE
;
}
DE++;
diff --git a/src/devices/cpu/z80/z80make.py b/src/devices/cpu/z80/z80make.py
index 0aa7ee1a55e..023cdfd29ba 100644
--- a/src/devices/cpu/z80/z80make.py
+++ b/src/devices/cpu/z80/z80make.py
@@ -31,6 +31,10 @@ class IndStr:
def has_indent(self):
return self.indent != ''
+ def strip_indent(self, n):
+ if self.indent != '':
+ self.indent = self.indent[n:]
+
def replace(self, new):
self.str = new
@@ -77,7 +81,7 @@ class Opcode:
for i in range(0, len(self.source)):
il = self.source[i]
if not has_steps or not step_switch:
- il.indent = ""
+ il.strip_indent(1)
line = il.line()
tokens = line.split()
last_line = i + 1 == len(self.source)
@@ -240,7 +244,7 @@ class OpcodeList:
name = line_toc[1]
arg = None
if len(line_toc) > 2:
- arg = line_toc[2]
+ arg = " ".join(line_toc[2:])
if name in self.macros:
macro = self.macros[name]
([out.extend(self.pre_process(il)) for il in macro.apply(arg)])
@@ -260,21 +264,22 @@ class OpcodeList:
for prefix in sorted(prefixes):
is_rop = prefix == 'ff'
+ opc_switch = not is_rop
if prefix_switch:
print("case 0x%s:" % (prefix), file=f)
print("{", file=f)
- if not is_rop:
+ if opc_switch:
print("\tswitch (u8(m_ref >> 8)) // opcode", file=f)
print("\t{", file=f)
for opc in self.opcode_info[prefix]:
# reenter loop only process steps > 0
if not reenter or opc.with_steps():
- if not is_rop:
+ if opc_switch:
print("\tcase 0x%s:" % (opc.code), file=f)
opc.save_dasm(step_switch=reenter, f=f)
print("\t\tcontinue;", file=f)
print("", file=f)
- if not is_rop:
+ if opc_switch:
print("\t}", file=f)
if prefix_switch:
@@ -295,6 +300,7 @@ class OpcodeList:
print("", file=f)
print("bool interrupted = true;", file=f)
print("while (u8(m_ref) != 0x00) {", file=f)
+ print("// slow re-enter", file=f)
print("\t// workaround to simulate main loop behavior where continue statement relays on having it set after", file=f)
print("\tif (!interrupted) {", file=f)
print("\t\tm_ref = 0xffff00;", file=f)
@@ -305,19 +311,17 @@ class OpcodeList:
self.switch_prefix(self.opcode_info.keys(), reenter=True, f=f)
print("", file=f)
print('assert((void("switch statement above must cover all possible cases!"), false));', file=f)
- print("}", file=f)
- print("", file=f)
+ print("} // end: slow", file=f)
print("if (m_ref != 0xffff00) goto process;", file=f)
print("", file=f)
- print("while (true) {", file=f)
- print("", file=f)
- print("\t\t// unwrapped ff prefix", file=f)
+ print("while (true) { // fast process", file=f)
+ print("\t\t// rop: unwrapped ff prefix", file=f)
self.switch_prefix(['ff'], reenter=False, f=f)
print("", file=f)
print("process:", file=f)
self.switch_prefix(self.opcode_info.keys() - ['ff'], reenter=False, f=f)
- print("", file=f)
- print("} // while (true)", file=f)
+ print("} // end: fast", file=f)
+ print('assert((void("unreachable!"), false));', file=f)
def main(argv):
if len(argv) != 3 and len(argv) != 4:
diff --git a/src/devices/cpu/z80/z80n.h b/src/devices/cpu/z80/z80n.h
index 8198412074c..d4d452955fd 100644
--- a/src/devices/cpu/z80/z80n.h
+++ b/src/devices/cpu/z80/z80n.h
@@ -20,7 +20,7 @@ public:
bool nmi_stackless_r() { return m_stackless; }
void nmi_stackless_w(bool data) { m_stackless = data; }
- void nmi() { m_nmi_pending = true; }
+ void nmi() { set_service_attention<SA_NMI_PENDING, 1>(); }
protected:
virtual void device_start() override ATTR_COLD;