diff options
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/cpu/h8/h8_adc.cpp | 15 | ||||
-rw-r--r-- | src/devices/cpu/rsp/rsp.cpp | 282 | ||||
-rw-r--r-- | src/devices/cpu/rsp/rsp.h | 46 | ||||
-rw-r--r-- | src/devices/cpu/z80/nsc800.cpp | 12 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.cpp | 34 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.h | 16 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.inc | 3 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.lst | 2219 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80make.py | 28 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80n.h | 2 | ||||
-rw-r--r-- | src/devices/machine/netlist.cpp | 13 |
11 files changed, 1155 insertions, 1515 deletions
diff --git a/src/devices/cpu/h8/h8_adc.cpp b/src/devices/cpu/h8/h8_adc.cpp index 05c012017f3..6daaaeae890 100644 --- a/src/devices/cpu/h8/h8_adc.cpp +++ b/src/devices/cpu/h8/h8_adc.cpp @@ -157,9 +157,9 @@ void h8_adc_device::notify_standby(int state) void h8_adc_device::conversion_wait(bool first, bool poweron, u64 current_time) { - if(current_time) + if(current_time) { m_next_event = current_time + conversion_time(first, poweron); - else { + } else { m_next_event = m_cpu->total_cycles() + conversion_time(first, poweron); m_cpu->internal_update(); } @@ -185,8 +185,9 @@ void h8_adc_device::sampling() if(m_mode & DUAL) { buffer_value(m_channel, 0); buffer_value(m_channel+1, 1); - } else + } else { buffer_value(m_channel); + } } void h8_adc_device::start_conversion() @@ -224,7 +225,7 @@ void h8_adc_device::timeout(u64 current_time) if(m_mode & ROTATE) { if(m_channel != m_end_channel) { - m_channel++; + m_channel = (m_channel + 1) & 7; sampling(); conversion_wait(false, false, current_time); return; @@ -467,10 +468,12 @@ void h8_adc_2655_device::mode_update() if(m_adcr & 0x04) { m_mode |= DUAL; m_end_channel = (m_adcsr & 6)+1; - } else + } else { m_end_channel = m_adcsr & 7; - } else + } + } else { m_start_channel = m_end_channel = m_adcsr & 7; + } } void h8_adc_2655_device::do_buffering(int buffer) diff --git a/src/devices/cpu/rsp/rsp.cpp b/src/devices/cpu/rsp/rsp.cpp index f39d79b21bb..b58b7169e80 100644 --- a/src/devices/cpu/rsp/rsp.cpp +++ b/src/devices/cpu/rsp/rsp.cpp @@ -62,11 +62,6 @@ DEFINE_DEVICE_TYPE(RSP, rsp_device, "rsp", "Nintendo & SGI Reality Signal Proces #define ZERO 3 #define CLIP2 4 -#define SLICE_H 3 -#define SLICE_M 2 -#define SLICE_L 1 -#define SLICE_LL 0 - #define WRITEBACK_RESULT() memcpy(m_v[VDREG].s, vres, sizeof(uint16_t) * 8); static const int vector_elements_2[16][8] = @@ -265,7 +260,7 @@ void rsp_device::device_start() for (int regIdx = 0; regIdx < 32; regIdx++) m_r[regIdx] = 0; - for(auto & elem : m_v) + for (auto & elem : m_v) { elem.d[0] = 0; elem.d[1] = 0; @@ -284,7 +279,7 @@ void rsp_device::device_start() m_vector_busy = false; m_paired_busy = false; - for(auto & elem : m_accum) + for (auto & elem : m_accum) { elem.q = 0; } @@ -294,6 +289,35 @@ void rsp_device::device_start() m_sr = RSP_STATUS_HALT; m_step_count = 0; + // register for savestates + save_item(NAME(m_pc)); + save_item(NAME(m_r)); + save_item(NAME(m_ideduct)); + save_item(NAME(m_scalar_busy)); + save_item(NAME(m_vector_busy)); + save_item(NAME(m_paired_busy)); + + save_item(NAME(m_sr)); + save_item(NAME(m_step_count)); + save_item(NAME(m_ppc)); + save_item(NAME(m_nextpc)); + + save_item(NAME(m_vres)); + save_item(NAME(m_accum)); + save_item(NAME(m_vcarry)); + save_item(NAME(m_vcompare)); + save_item(NAME(m_vclip1)); + save_item(NAME(m_vzero)); + save_item(NAME(m_vclip2)); + + for (int i = 0; i < std::size(m_v); i++) + save_item(NAME(m_v[i].d), i); + + save_item(NAME(m_reciprocal_res)); + save_item(NAME(m_reciprocal_high)); + save_item(NAME(m_dp_allowed)); + + // register state for debugger state_add( RSP_PC, "PC", m_pc).callimport().callexport().formatstr("%08X"); state_add( RSP_R0, "R0", m_r[0]).formatstr("%08X"); state_add( RSP_R1, "R1", m_r[1]).formatstr("%08X"); @@ -528,15 +552,15 @@ void rsp_device::device_reset() uint16_t rsp_device::SATURATE_ACCUM(int accum, int slice, uint16_t negative, uint16_t positive) { - if ((int16_t)m_accum[accum].w[SLICE_H] < 0) + if ((int16_t)m_accum[accum].w.h3 < 0) { - if ((uint16_t)m_accum[accum].w[SLICE_H] != 0xffff) + if ((uint16_t)m_accum[accum].w.h3 != 0xffff) { return negative; } else { - if ((int16_t)m_accum[accum].w[SLICE_M] >= 0) + if ((int16_t)m_accum[accum].w.h2 >= 0) { return negative; } @@ -544,24 +568,24 @@ uint16_t rsp_device::SATURATE_ACCUM(int accum, int slice, uint16_t negative, uin { if (slice == 0) { - return m_accum[accum].w[SLICE_L]; + return m_accum[accum].w.h; } else if (slice == 1) { - return m_accum[accum].w[SLICE_M]; + return m_accum[accum].w.h2; } } } } else { - if ((uint16_t)m_accum[accum].w[SLICE_H] != 0) + if ((uint16_t)m_accum[accum].w.h3 != 0) { return positive; } else { - if ((int16_t)m_accum[accum].w[SLICE_M] < 0) + if ((int16_t)m_accum[accum].w.h2 < 0) { return positive; } @@ -569,11 +593,11 @@ uint16_t rsp_device::SATURATE_ACCUM(int accum, int slice, uint16_t negative, uin { if (slice == 0) { - return m_accum[accum].w[SLICE_L]; + return m_accum[accum].w.h; } else { - return m_accum[accum].w[SLICE_M]; + return m_accum[accum].w.h2; } } } @@ -610,19 +634,19 @@ void rsp_device::handle_vector_ops(uint32_t op) if (s1 == -32768 && s2 == -32768) { // overflow - m_accum[i].w[SLICE_H] = 0; - m_accum[i].w[SLICE_M] = -32768; - m_accum[i].w[SLICE_L] = -32768; + m_accum[i].w.h3 = 0; + m_accum[i].w.h2 = -32768; + m_accum[i].w.h = -32768; vres[i] = 0x7fff; } else { int64_t r = s1 * s2 * 2; r += 0x8000; // rounding ? - m_accum[i].w[SLICE_H] = (r < 0) ? 0xffff : 0; // Sign-extend to 48-bit - m_accum[i].w[SLICE_M] = (int16_t)(r >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)r; - vres[i] = m_accum[i].w[SLICE_M]; + m_accum[i].w.h3 = (r < 0) ? 0xffff : 0; // Sign-extend to 48-bit + m_accum[i].w.h2 = (int16_t)(r >> 16); + m_accum[i].w.h = (uint16_t)r; + vres[i] = m_accum[i].w.h2; } } WRITEBACK_RESULT(); @@ -645,21 +669,21 @@ void rsp_device::handle_vector_ops(uint32_t op) int64_t r = s1 * s2 * 2; r += 0x8000; // rounding ? - m_accum[i].w[SLICE_H] = (uint16_t)(r >> 32); - m_accum[i].w[SLICE_M] = (uint16_t)(r >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)r; + m_accum[i].w.h3 = (uint16_t)(r >> 32); + m_accum[i].w.h2 = (uint16_t)(r >> 16); + m_accum[i].w.h = (uint16_t)r; if (r < 0) { vres[i] = 0; } - else if (((int16_t)m_accum[i].w[SLICE_H] ^ (int16_t)m_accum[i].w[SLICE_M]) < 0) + else if (((int16_t)m_accum[i].w.h3 ^ (int16_t)m_accum[i].w.h2) < 0) { vres[i] = -1; } else { - vres[i] = m_accum[i].w[SLICE_M]; + vres[i] = m_accum[i].w.h2; } } WRITEBACK_RESULT(); @@ -683,11 +707,11 @@ void rsp_device::handle_vector_ops(uint32_t op) uint32_t s2 = m_v[VS2REG].w[VEC_EL_2(EL, i)]; uint32_t r = s1 * s2; - m_accum[i].w[SLICE_H] = 0; - m_accum[i].w[SLICE_M] = 0; - m_accum[i].w[SLICE_L] = (uint16_t)(r >> 16); + m_accum[i].w.h3 = 0; + m_accum[i].w.h2 = 0; + m_accum[i].w.h = (uint16_t)(r >> 16); - vres[i] = m_accum[i].w[SLICE_L]; + vres[i] = m_accum[i].w.h; } WRITEBACK_RESULT(); break; @@ -710,11 +734,11 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s2 = m_v[VS2REG].w[VEC_EL_2(EL, i)]; // not sign-extended int32_t r = s1 * s2; - m_accum[i].w[SLICE_H] = (r < 0) ? 0xffff : 0; // sign-extend to 48-bit - m_accum[i].w[SLICE_M] = (int16_t)(r >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)r; + m_accum[i].w.h3 = (r < 0) ? 0xffff : 0; // sign-extend to 48-bit + m_accum[i].w.h2 = (int16_t)(r >> 16); + m_accum[i].w.h = (uint16_t)r; - vres[i] = m_accum[i].w[SLICE_M]; + vres[i] = m_accum[i].w.h2; } WRITEBACK_RESULT(); break; @@ -737,11 +761,11 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; int32_t r = s1 * s2; - m_accum[i].w[SLICE_H] = (r < 0) ? 0xffff : 0; // sign-extend to 48-bit - m_accum[i].w[SLICE_M] = (int16_t)(r >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)(r); + m_accum[i].w.h3 = (r < 0) ? 0xffff : 0; // sign-extend to 48-bit + m_accum[i].w.h2 = (int16_t)(r >> 16); + m_accum[i].w.h = (uint16_t)(r); - vres[i] = m_accum[i].w[SLICE_L]; + vres[i] = m_accum[i].w.h; } WRITEBACK_RESULT(); break; @@ -764,9 +788,9 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; int32_t r = s1 * s2; - m_accum[i].w[SLICE_H] = (int16_t)(r >> 16); - m_accum[i].w[SLICE_M] = (uint16_t)(r); - m_accum[i].w[SLICE_L] = 0; + m_accum[i].w.h3 = (int16_t)(r >> 16); + m_accum[i].w.h2 = (uint16_t)(r); + m_accum[i].w.h = 0; if (r < -32768) r = -32768; if (r > 32767) r = 32767; @@ -792,17 +816,17 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; int32_t r = s1 * s2; - uint64_t q = (uint64_t)(uint16_t)m_accum[i].w[SLICE_LL]; - q |= (((uint64_t)(uint16_t)m_accum[i].w[SLICE_L]) << 16); - q |= (((uint64_t)(uint16_t)m_accum[i].w[SLICE_M]) << 32); - q |= (((uint64_t)(uint16_t)m_accum[i].w[SLICE_H]) << 48); + uint64_t q = (uint64_t)(uint16_t)m_accum[i].w.l; + q |= (((uint64_t)(uint16_t)m_accum[i].w.h) << 16); + q |= (((uint64_t)(uint16_t)m_accum[i].w.h2) << 32); + q |= (((uint64_t)(uint16_t)m_accum[i].w.h3) << 48); q += (int64_t)(r) << 17; - m_accum[i].w[SLICE_LL] = (uint16_t)q; - m_accum[i].w[SLICE_L] = (uint16_t)(q >> 16); - m_accum[i].w[SLICE_M] = (uint16_t)(q >> 32); - m_accum[i].w[SLICE_H] = (uint16_t)(q >> 48); + m_accum[i].w.l = (uint16_t)q; + m_accum[i].w.h = (uint16_t)(q >> 16); + m_accum[i].w.h2 = (uint16_t)(q >> 32); + m_accum[i].w.h3 = (uint16_t)(q >> 48); vres[i] = SATURATE_ACCUM(i, 1, 0x8000, 0x7fff); } @@ -823,32 +847,32 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s1 = m_v[VS1REG].s[i]; int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; int32_t r1 = s1 * s2; - uint32_t r2 = m_accum[i].w[SLICE_L] + ((uint16_t)r1 * 2); - uint32_t r3 = m_accum[i].w[SLICE_M] + (uint16_t)((r1 >> 16) * 2) + (uint16_t)(r2 >> 16); + uint32_t r2 = m_accum[i].w.h + ((uint16_t)r1 * 2); + uint32_t r3 = m_accum[i].w.h2 + (uint16_t)((r1 >> 16) * 2) + (uint16_t)(r2 >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)r2; - m_accum[i].w[SLICE_M] = (uint16_t)r3; - m_accum[i].w[SLICE_H] += (uint16_t)(r3 >> 16) + (uint16_t)(r1 >> 31); + m_accum[i].w.h = (uint16_t)r2; + m_accum[i].w.h2 = (uint16_t)r3; + m_accum[i].w.h3 += (uint16_t)(r3 >> 16) + (uint16_t)(r1 >> 31); - if ((int16_t)m_accum[i].w[SLICE_H] < 0) + if ((int16_t)m_accum[i].w.h3 < 0) { vres[i] = 0; } else { - if (m_accum[i].w[SLICE_H] != 0) + if (m_accum[i].w.h3 != 0) { vres[i] = 0xffff; } else { - if ((int16_t)m_accum[i].w[SLICE_M] < 0) + if ((int16_t)m_accum[i].w.h2 < 0) { vres[i] = 0xffff; } else { - vres[i] = m_accum[i].w[SLICE_M]; + vres[i] = m_accum[i].w.h2; } } } @@ -873,12 +897,12 @@ void rsp_device::handle_vector_ops(uint32_t op) uint32_t s1 = m_v[VS1REG].w[i]; uint32_t s2 = m_v[VS2REG].w[VEC_EL_2(EL, i)]; uint32_t r1 = s1 * s2; - uint32_t r2 = m_accum[i].w[SLICE_L] + (r1 >> 16); - uint32_t r3 = m_accum[i].w[SLICE_M] + (r2 >> 16); + uint32_t r2 = m_accum[i].w.h + (r1 >> 16); + uint32_t r3 = m_accum[i].w.h2 + (r2 >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)r2; - m_accum[i].w[SLICE_M] = (uint16_t)r3; - m_accum[i].w[SLICE_H] += (int16_t)(r3 >> 16); + m_accum[i].w.h = (uint16_t)r2; + m_accum[i].w.h2 = (uint16_t)r3; + m_accum[i].w.h3 += (int16_t)(r3 >> 16); vres[i] = SATURATE_ACCUM(i, 0, 0x0000, 0xffff); } @@ -902,14 +926,14 @@ void rsp_device::handle_vector_ops(uint32_t op) uint32_t s1 = m_v[VS1REG].s[i]; uint32_t s2 = m_v[VS2REG].w[VEC_EL_2(EL, i)]; // not sign-extended uint32_t r1 = s1 * s2; - uint32_t r2 = (uint16_t)m_accum[i].w[SLICE_L] + (uint16_t)(r1); - uint32_t r3 = (uint16_t)m_accum[i].w[SLICE_M] + (r1 >> 16) + (r2 >> 16); + uint32_t r2 = (uint16_t)m_accum[i].w.h + (uint16_t)(r1); + uint32_t r3 = (uint16_t)m_accum[i].w.h2 + (r1 >> 16) + (r2 >> 16); - m_accum[i].w[SLICE_L] = (uint16_t)r2; - m_accum[i].w[SLICE_M] = (uint16_t)r3; - m_accum[i].w[SLICE_H] += (uint16_t)(r3 >> 16); + m_accum[i].w.h = (uint16_t)r2; + m_accum[i].w.h2 = (uint16_t)r3; + m_accum[i].w.h3 += (uint16_t)(r3 >> 16); if ((int32_t)r1 < 0) - m_accum[i].w[SLICE_H] -= 1; + m_accum[i].w.h3 -= 1; vres[i] = SATURATE_ACCUM(i, 1, 0x8000, 0x7fff); } @@ -933,16 +957,16 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s1 = m_v[VS1REG].w[i]; // not sign-extended int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; - uint64_t q = (uint64_t)m_accum[i].w[SLICE_LL]; - q |= (((uint64_t)m_accum[i].w[SLICE_L]) << 16); - q |= (((uint64_t)m_accum[i].w[SLICE_M]) << 32); - q |= (((uint64_t)m_accum[i].w[SLICE_H]) << 48); + uint64_t q = (uint64_t)m_accum[i].w.l; + q |= (((uint64_t)m_accum[i].w.h) << 16); + q |= (((uint64_t)m_accum[i].w.h2) << 32); + q |= (((uint64_t)m_accum[i].w.h3) << 48); q += (int64_t)(s1*s2) << 16; - m_accum[i].w[SLICE_LL] = (uint16_t)q; - m_accum[i].w[SLICE_L] = (uint16_t)(q >> 16); - m_accum[i].w[SLICE_M] = (uint16_t)(q >> 32); - m_accum[i].w[SLICE_H] = (uint16_t)(q >> 48); + m_accum[i].w.l = (uint16_t)q; + m_accum[i].w.h = (uint16_t)(q >> 16); + m_accum[i].w.h2 = (uint16_t)(q >> 32); + m_accum[i].w.h3 = (uint16_t)(q >> 48); vres[i] = SATURATE_ACCUM(i, 0, 0x0000, 0xffff); } @@ -967,12 +991,12 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s1 = m_v[VS1REG].s[i]; int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; - int32_t accum = (uint32_t)(uint16_t)m_accum[i].w[SLICE_M]; - accum |= ((uint32_t)((uint16_t)m_accum[i].w[SLICE_H])) << 16; + int32_t accum = (uint32_t)(uint16_t)m_accum[i].w.h2; + accum |= ((uint32_t)((uint16_t)m_accum[i].w.h3)) << 16; accum += s1 * s2; - m_accum[i].w[SLICE_H] = (uint16_t)(accum >> 16); - m_accum[i].w[SLICE_M] = (uint16_t)accum; + m_accum[i].w.h3 = (uint16_t)(accum >> 16); + m_accum[i].w.h2 = (uint16_t)accum; vres[i] = SATURATE_ACCUM(i, 1, 0x8000, 0x7fff); } @@ -997,7 +1021,7 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; int32_t r = s1 + s2 + BIT(m_vcarry, i); - m_accum[i].w[SLICE_L] = (int16_t)r; + m_accum[i].w.h = (int16_t)r; if (r > 32767) r = 32767; if (r < -32768) r = -32768; @@ -1026,7 +1050,7 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t s2 = m_v[VS2REG].s[VEC_EL_2(EL, i)]; int32_t r = s1 - s2 - BIT(m_vcarry, i); - m_accum[i].w[SLICE_L] = (int16_t)r; + m_accum[i].w.h = (int16_t)r; if (r > 32767) r = 32767; if (r < -32768) r = -32768; @@ -1074,7 +1098,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = 0; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1101,7 +1125,7 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t r = s1 + s2; vres[i] = (int16_t)r; - m_accum[i].w[SLICE_L] = (int16_t)r; + m_accum[i].w.h = (int16_t)r; if (r & 0xffff0000) { @@ -1133,7 +1157,7 @@ void rsp_device::handle_vector_ops(uint32_t op) int32_t r = s1 - s2; vres[i] = (int16_t)(r); - m_accum[i].w[SLICE_L] = (uint16_t)r; + m_accum[i].w.h = (uint16_t)r; if ((uint16_t)r != 0) { @@ -1163,7 +1187,7 @@ void rsp_device::handle_vector_ops(uint32_t op) { for (int i = 0; i < 8; i++) { - m_v[VDREG].w[i] = m_accum[i].w[SLICE_H]; + m_v[VDREG].w[i] = m_accum[i].w.h3; } break; } @@ -1171,7 +1195,7 @@ void rsp_device::handle_vector_ops(uint32_t op) { for (int i = 0; i < 8; i++) { - m_v[VDREG].w[i] = m_accum[i].w[SLICE_M]; + m_v[VDREG].w[i] = m_accum[i].w.h2; } break; } @@ -1179,7 +1203,7 @@ void rsp_device::handle_vector_ops(uint32_t op) { for (int i = 0; i < 8; i++) { - m_v[VDREG].w[i] = m_accum[i].w[SLICE_L]; + m_v[VDREG].w[i] = m_accum[i].w.h; } break; } @@ -1228,7 +1252,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = s2; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } m_vzero = 0; @@ -1264,7 +1288,7 @@ void rsp_device::handle_vector_ops(uint32_t op) { vres[i] = s2; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } m_vzero = 0; @@ -1301,7 +1325,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = s2; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } m_vzero = 0; @@ -1338,7 +1362,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = s2; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } m_vzero = 0; @@ -1367,11 +1391,11 @@ void rsp_device::handle_vector_ops(uint32_t op) { if (BIT(m_vcompare, i)) // vcc_lo { - m_accum[i].w[SLICE_L] = -(uint16_t)s2; + m_accum[i].w.h = -(uint16_t)s2; } else { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; } } else @@ -1380,12 +1404,12 @@ void rsp_device::handle_vector_ops(uint32_t op) { if (((uint32_t)(uint16_t)(s1) + (uint32_t)(uint16_t)(s2)) > 0x10000) { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; m_vcompare &= ~(1 << i); } else { - m_accum[i].w[SLICE_L] = -(uint16_t)s2; + m_accum[i].w.h = -(uint16_t)s2; m_vcompare |= 1 << i; } } @@ -1393,12 +1417,12 @@ void rsp_device::handle_vector_ops(uint32_t op) { if (((uint32_t)(uint16_t)(s1) + (uint32_t)(uint16_t)(s2)) != 0) { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; m_vcompare &= ~(1 << i); } else { - m_accum[i].w[SLICE_L] = -(uint16_t)s2; + m_accum[i].w.h = -(uint16_t)s2; m_vcompare |= 1 << i; } } @@ -1410,29 +1434,29 @@ void rsp_device::handle_vector_ops(uint32_t op) { if (BIT(m_vclip2, i)) // vcc_hi { - m_accum[i].w[SLICE_L] = s2; + m_accum[i].w.h = s2; } else { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; } } else { if (((int32_t)(uint16_t)s1 - (int32_t)(uint16_t)s2) >= 0) { - m_accum[i].w[SLICE_L] = s2; + m_accum[i].w.h = s2; m_vclip2 |= 1 << i; } else { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; m_vclip2 &= ~(1 << i); } } } - vres[i] = m_accum[i].w[SLICE_L]; + vres[i] = m_accum[i].w.h; } m_vzero = 0; @@ -1521,7 +1545,7 @@ void rsp_device::handle_vector_ops(uint32_t op) m_vclip1 |= 1 << i; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1555,12 +1579,12 @@ void rsp_device::handle_vector_ops(uint32_t op) } if ((s1 + s2) <= 0) { - m_accum[i].w[SLICE_L] = ~(uint16_t)s2; + m_accum[i].w.h = ~(uint16_t)s2; m_vcompare |= 1 << i; } else { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; } } else @@ -1571,16 +1595,16 @@ void rsp_device::handle_vector_ops(uint32_t op) } if ((s1 - s2) >= 0) { - m_accum[i].w[SLICE_L] = s2; + m_accum[i].w.h = s2; m_vclip2 |= 1 << i; } else { - m_accum[i].w[SLICE_L] = s1; + m_accum[i].w.h = s1; } } - vres[i] = m_accum[i].w[SLICE_L]; + vres[i] = m_accum[i].w.h; } WRITEBACK_RESULT(); break; @@ -1606,7 +1630,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = m_v[VS2REG].s[VEC_EL_2(EL, i)]; } - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1624,7 +1648,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = m_v[VS1REG].w[i] & m_v[VS2REG].w[VEC_EL_2(EL, i)]; - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1642,7 +1666,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = ~(m_v[VS1REG].w[i] & m_v[VS2REG].w[VEC_EL_2(EL, i)]); - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1660,7 +1684,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = m_v[VS1REG].w[i] | m_v[VS2REG].w[VEC_EL_2(EL, i)]; - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1678,7 +1702,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = ~(m_v[VS1REG].w[i] | m_v[VS2REG].w[VEC_EL_2(EL, i)]); - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1696,7 +1720,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = m_v[VS1REG].w[i] ^ m_v[VS2REG].w[VEC_EL_2(EL, i)]; - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1714,7 +1738,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = ~(m_v[VS1REG].w[i] ^ m_v[VS2REG].w[VEC_EL_2(EL, i)]); - m_accum[i].w[SLICE_L] = vres[i]; + m_accum[i].w.h = vres[i]; } WRITEBACK_RESULT(); break; @@ -1737,7 +1761,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = 0; uint16_t e1 = m_v[VS1REG].w[i]; uint16_t e2 = m_v[VS2REG].w[VEC_EL_2(EL, i)]; - m_accum[i].w[SLICE_L] = e1 + e2; + m_accum[i].w.h = e1 + e2; } WRITEBACK_RESULT(); break; @@ -1796,7 +1820,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[VEC_EL_2(EL, i)]; + m_accum[i].w.h = m_v[VS2REG].w[VEC_EL_2(EL, i)]; } break; } @@ -1871,7 +1895,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[VEC_EL_2(EL, i)]; + m_accum[i].w.h = m_v[VS2REG].w[VEC_EL_2(EL, i)]; } break; } @@ -1890,7 +1914,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[VEC_EL_2(EL, i)]; + m_accum[i].w.h = m_v[VS2REG].w[VEC_EL_2(EL, i)]; } m_v[VDREG].s[VS1REG & 7] = (int16_t)(m_reciprocal_res >> 16); @@ -1909,7 +1933,7 @@ void rsp_device::handle_vector_ops(uint32_t op) m_v[VDREG].w[VS1REG & 7] = m_v[VS2REG].w[VEC_EL_2(EL, VS1REG & 7)]; for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[i]; + m_accum[i].w.h = m_v[VS2REG].w[i]; } break; } @@ -1969,7 +1993,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[VEC_EL_2(EL, i)]; + m_accum[i].w.h = m_v[VS2REG].w[VEC_EL_2(EL, i)]; } break; @@ -2048,7 +2072,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[VEC_EL_2(EL, i)]; + m_accum[i].w.h = m_v[VS2REG].w[VEC_EL_2(EL, i)]; } break; @@ -2068,7 +2092,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { - m_accum[i].w[SLICE_L] = m_v[VS2REG].w[VEC_EL_2(EL, i)]; + m_accum[i].w.h = m_v[VS2REG].w[VEC_EL_2(EL, i)]; } m_v[VDREG].s[VS1REG & 7] = (int16_t)(m_reciprocal_res >> 16); // store high part @@ -2103,7 +2127,7 @@ void rsp_device::handle_vector_ops(uint32_t op) vres[i] = 0; uint16_t e1 = m_v[VS1REG].w[i]; uint16_t e2 = m_v[VS2REG].w[VEC_EL_2(EL, i)]; - m_accum[i].w[SLICE_L] = e1 + e2; + m_accum[i].w.h = e1 + e2; } WRITEBACK_RESULT(); break; @@ -2123,7 +2147,7 @@ void rsp_device::handle_vector_ops(uint32_t op) for (int i = 0; i < 8; i++) { vres[i] = m_v[VS1REG].w[i]; - m_accum[i].w[SLICE_L] = 0; + m_accum[i].w.h = 0; } WRITEBACK_RESULT(); break; diff --git a/src/devices/cpu/rsp/rsp.h b/src/devices/cpu/rsp/rsp.h index 0007e96714c..4e7378af089 100644 --- a/src/devices/cpu/rsp/rsp.h +++ b/src/devices/cpu/rsp/rsp.h @@ -148,7 +148,7 @@ protected: memory_access<12, 2, 0, ENDIANNESS_BIG>::specific m_dmem; private: - union VECTOR_REG + union VECTOR_REG // PAIR128 { uint64_t d[2]; uint32_t l[4]; @@ -157,13 +157,6 @@ private: uint8_t b[16]; }; - union ACCUMULATOR_REG - { - uint64_t q; - uint32_t l[2]; - uint16_t w[4]; - }; - uint32_t m_debugger_temp; uint16_t m_pc_temp; uint16_t m_ppc_temp; @@ -188,26 +181,23 @@ private: // COP2 (vectors) uint16_t SATURATE_ACCUM(int accum, int slice, uint16_t negative, uint16_t positive); - uint16_t m_vres[8]; - VECTOR_REG m_v[32]; - ACCUMULATOR_REG m_accum[8]; - uint8_t m_vcarry; - uint8_t m_vcompare; - uint8_t m_vclip1; - uint8_t m_vzero; - uint8_t m_vclip2; - - int32_t m_reciprocal_res; - uint32_t m_reciprocal_high; - int32_t m_dp_allowed; - - void handle_cop2(uint32_t op); - void handle_lwc2(uint32_t op); - void handle_swc2(uint32_t op); - void handle_vector_ops(uint32_t op); - - uint32_t m_div_in; - uint32_t m_div_out; + uint16_t m_vres[8]; + VECTOR_REG m_v[32]; + PAIR64 m_accum[8]; + uint8_t m_vcarry; + uint8_t m_vcompare; + uint8_t m_vclip1; + uint8_t m_vzero; + uint8_t m_vclip2; + + int32_t m_reciprocal_res; + uint32_t m_reciprocal_high; + int32_t m_dp_allowed; + + void handle_cop2(uint32_t op); + void handle_lwc2(uint32_t op); + void handle_swc2(uint32_t op); + void handle_vector_ops(uint32_t op); }; DECLARE_DEVICE_TYPE(RSP, rsp_device) 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; diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index c9d91704cce..8d4d6cedf4d 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -33,7 +33,6 @@ #define LOG_TIMING (1U << 3) //#define LOG_MASK (LOG_GENERAL | LOG_DEV_CALLS | LOG_DEBUG) -//#define LOG_MASK (LOG_TIMING) #define LOG_MASK (0) #define LOGDEVCALLS(...) LOGMASKED(LOG_DEV_CALLS, __VA_ARGS__) @@ -815,11 +814,15 @@ void netlist_mame_stream_output_device::device_reset() void netlist_mame_stream_output_device::sound_update_fill(sound_stream &stream, int output) { - if (stream.samples() < m_buffer.size()) - osd_printf_warning("sound %s: samples %d less bufsize %d\n", name(), stream.samples(), m_buffer.size()); + int samples = m_buffer.size(); + if (stream.samples() < samples) + { + osd_printf_warning("sound %s: samples %d less bufsize %d\n", name(), stream.samples(), samples); + samples = stream.samples(); + } int sampindex; - for (sampindex = 0; sampindex < m_buffer.size(); sampindex++) + for (sampindex = 0; sampindex < samples; sampindex++) stream.put(output, sampindex, m_buffer[sampindex]); if (sampindex < stream.samples()) stream.fill(output, m_cur, sampindex); @@ -858,7 +861,7 @@ void netlist_mame_stream_output_device::process(netlist::netlist_time_ext tim, n int pos = (tim - m_last_buffer_time) / m_sample_time; //if (pos > m_bufsize) // throw emu_fatalerror("sound %s: pos %d exceeded bufsize %d\n", name().c_str(), pos, m_bufsize); - while (m_buffer.size() < pos ) + while (m_buffer.size() < pos) { m_buffer.push_back(static_cast<sound_stream::sample_t>(m_cur)); } |