diff options
Diffstat (limited to 'src/devices/cpu/f8')
-rw-r--r-- | src/devices/cpu/f8/f8.cpp | 267 | ||||
-rw-r--r-- | src/devices/cpu/f8/f8.h | 46 | ||||
-rw-r--r-- | src/devices/cpu/f8/f8dasm.cpp | 193 |
3 files changed, 230 insertions, 276 deletions
diff --git a/src/devices/cpu/f8/f8.cpp b/src/devices/cpu/f8/f8.cpp index ce09d9ca835..a62c3037617 100644 --- a/src/devices/cpu/f8/f8.cpp +++ b/src/devices/cpu/f8/f8.cpp @@ -46,7 +46,6 @@ #include "emu.h" #include "f8.h" #include "f8dasm.h" -#include "debugger.h" /* status flags */ @@ -67,13 +66,22 @@ DEFINE_DEVICE_TYPE(F8, f8_cpu_device, "f8", "Fairchild F8") f8_cpu_device::f8_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : cpu_device(mconfig, F8, tag, owner, clock), m_program_config("program", ENDIANNESS_BIG, 8, 16, 0), - m_io_config("io", ENDIANNESS_BIG, 8, 8, 0) + m_regs_config("register", ENDIANNESS_BIG, 8, 6, 0, address_map_constructor(FUNC(f8_cpu_device::regs_map), this)), + m_io_config("io", ENDIANNESS_BIG, 8, 8, 0), + m_romc08_callback(*this, 0) { } +void f8_cpu_device::regs_map(address_map &map) +{ + // 64-byte internal scratchpad RAM + map(0x00, 0x3f).ram().share("regs"); +} + device_memory_interface::space_config_vector f8_cpu_device::memory_space_config() const { return space_config_vector { std::make_pair(AS_PROGRAM, &m_program_config), + std::make_pair(AS_DATA, &m_regs_config), std::make_pair(AS_IO, &m_io_config) }; } @@ -100,9 +108,9 @@ void f8_cpu_device::state_string_export(const device_state_entry &entry, std::st void f8_cpu_device::device_start() { - m_program = &space(AS_PROGRAM); - m_cache = m_program->cache<0, 0, ENDIANNESS_BIG>(); - m_iospace = &space(AS_IO); + space(AS_PROGRAM).cache(m_program); + space(AS_DATA).cache(m_r); + space(AS_IO).specific(m_ios); // zerofill m_debug_pc = 0; @@ -116,7 +124,6 @@ void f8_cpu_device::device_start() m_dbus = 0; m_io = 0; m_irq_vector = 0; - memset(m_r, 0, sizeof(m_r)); m_irq_request = 0; // register for savestates @@ -132,80 +139,35 @@ void f8_cpu_device::device_start() save_item(NAME(m_io)); save_item(NAME(m_irq_vector)); save_item(NAME(m_irq_request)); - save_item(NAME(m_r)); // register for debugger - state_add( F8_PC0, "PC0", m_pc0).formatstr("%04X"); - state_add( F8_PC1, "PC1", m_pc1).formatstr("%04X"); - state_add( F8_DC0, "DC0", m_dc0).formatstr("%04X"); - state_add( F8_DC1, "DC1", m_dc1).formatstr("%04X"); - state_add( F8_W, "W", m_w).formatstr("%02X"); - state_add( F8_A, "A", m_a).formatstr("%02X"); - state_add( F8_IS, "IS", m_is).mask(0x3f).formatstr("%02X"); - state_add( F8_J, "J", m_r[9]).formatstr("%02X"); - state_add( F8_HU, "HU", m_r[10]).formatstr("%02X"); - state_add( F8_HL, "HL", m_r[11]).formatstr("%02X"); - state_add( F8_KU, "KU", m_r[12]).formatstr("%02X"); - state_add( F8_KL, "KL", m_r[13]).formatstr("%02X"); - state_add( F8_QU, "QU", m_r[14]).formatstr("%02X"); - state_add( F8_QL, "QL", m_r[15]).formatstr("%02X"); - state_add( F8_R0, "R0", m_r[0]).formatstr("%02X"); - state_add( F8_R1, "R1", m_r[1]).formatstr("%02X"); - state_add( F8_R2, "R2", m_r[2]).formatstr("%02X"); - state_add( F8_R3, "R3", m_r[3]).formatstr("%02X"); - state_add( F8_R4, "R4", m_r[4]).formatstr("%02X"); - state_add( F8_R5, "R5", m_r[5]).formatstr("%02X"); - state_add( F8_R6, "R6", m_r[6]).formatstr("%02X"); - state_add( F8_R7, "R7", m_r[7]).formatstr("%02X"); - state_add( F8_R8, "R8", m_r[8]).formatstr("%02X"); - state_add( F8_R16, "R16", m_r[16]).formatstr("%02X"); - state_add( F8_R17, "R17", m_r[17]).formatstr("%02X"); - state_add( F8_R18, "R18", m_r[18]).formatstr("%02X"); - state_add( F8_R19, "R19", m_r[19]).formatstr("%02X"); - state_add( F8_R20, "R20", m_r[20]).formatstr("%02X"); - state_add( F8_R21, "R21", m_r[21]).formatstr("%02X"); - state_add( F8_R22, "R22", m_r[22]).formatstr("%02X"); - state_add( F8_R23, "R23", m_r[23]).formatstr("%02X"); - state_add( F8_R24, "R24", m_r[24]).formatstr("%02X"); - state_add( F8_R25, "R25", m_r[25]).formatstr("%02X"); - state_add( F8_R26, "R26", m_r[26]).formatstr("%02X"); - state_add( F8_R27, "R27", m_r[27]).formatstr("%02X"); - state_add( F8_R28, "R28", m_r[28]).formatstr("%02X"); - state_add( F8_R29, "R29", m_r[29]).formatstr("%02X"); - state_add( F8_R30, "R30", m_r[30]).formatstr("%02X"); - state_add( F8_R31, "R31", m_r[31]).formatstr("%02X"); - state_add( F8_R32, "R32", m_r[32]).formatstr("%02X"); - state_add( F8_R33, "R33", m_r[33]).formatstr("%02X"); - state_add( F8_R34, "R34", m_r[34]).formatstr("%02X"); - state_add( F8_R35, "R35", m_r[35]).formatstr("%02X"); - state_add( F8_R36, "R36", m_r[36]).formatstr("%02X"); - state_add( F8_R37, "R37", m_r[37]).formatstr("%02X"); - state_add( F8_R38, "R38", m_r[38]).formatstr("%02X"); - state_add( F8_R39, "R39", m_r[39]).formatstr("%02X"); - state_add( F8_R40, "R40", m_r[40]).formatstr("%02X"); - state_add( F8_R41, "R41", m_r[41]).formatstr("%02X"); - state_add( F8_R42, "R42", m_r[42]).formatstr("%02X"); - state_add( F8_R43, "R43", m_r[43]).formatstr("%02X"); - state_add( F8_R44, "R44", m_r[44]).formatstr("%02X"); - state_add( F8_R45, "R45", m_r[45]).formatstr("%02X"); - state_add( F8_R46, "R46", m_r[46]).formatstr("%02X"); - state_add( F8_R47, "R47", m_r[47]).formatstr("%02X"); - state_add( F8_R48, "R48", m_r[48]).formatstr("%02X"); - state_add( F8_R49, "R49", m_r[49]).formatstr("%02X"); - state_add( F8_R50, "R50", m_r[50]).formatstr("%02X"); - state_add( F8_R51, "R51", m_r[51]).formatstr("%02X"); - state_add( F8_R52, "R52", m_r[52]).formatstr("%02X"); - state_add( F8_R53, "R53", m_r[53]).formatstr("%02X"); - state_add( F8_R54, "R54", m_r[54]).formatstr("%02X"); - state_add( F8_R55, "R55", m_r[55]).formatstr("%02X"); - state_add( F8_R56, "R56", m_r[56]).formatstr("%02X"); - state_add( F8_R57, "R57", m_r[57]).formatstr("%02X"); - state_add( F8_R58, "R58", m_r[58]).formatstr("%02X"); - state_add( F8_R59, "R59", m_r[59]).formatstr("%02X"); - state_add( F8_R60, "R60", m_r[60]).formatstr("%02X"); - state_add( F8_R61, "R61", m_r[61]).formatstr("%02X"); - state_add( F8_R62, "R62", m_r[62]).formatstr("%02X"); - state_add( F8_R63, "R63", m_r[63]).formatstr("%02X"); + state_add(F8_PC0, "PC0", m_pc0); + state_add(F8_PC1, "PC1", m_pc1); + state_add(F8_DC0, "DC0", m_dc0); + state_add(F8_DC1, "DC1", m_dc1); + state_add(F8_W, "W", m_w).mask(0x1f); + state_add(F8_A, "A", m_a); + state_add(F8_IS, "IS", m_is).mask(0x3f); + + u8 *regs = static_cast<u8 *>(memshare("regs")->ptr()); + for (int r = 0; r < 9; r++) + state_add(F8_R0 + r, string_format("R%d", r).c_str(), regs[r]); + state_add(F8_J, "J", regs[9]); + state_add<u16>(F8_H, "H", + [regs]() { return u16(regs[10]) << 8 | regs[11]; }, + [regs](u16 data) { regs[10] = data >> 8; regs[11] = data & 0xff; }); + state_add<u16>(F8_K, "K", + [regs]() { return u16(regs[12]) << 8 | regs[13]; }, + [regs](u16 data) { regs[12] = data >> 8; regs[13] = data & 0xff; }); + state_add<u16>(F8_Q, "Q", + [regs]() { return u16(regs[14]) << 8 | regs[15]; }, + [regs](u16 data) { regs[14] = data >> 8; regs[15] = data & 0xff; }); + state_add(F8_HU, "HU", regs[10]).noshow(); + state_add(F8_HL, "HL", regs[11]).noshow(); + state_add(F8_KU, "KU", regs[12]).noshow(); + state_add(F8_KL, "KL", regs[13]).noshow(); + state_add(F8_QU, "QU", regs[14]).noshow(); + state_add(F8_QL, "QL", regs[15]).noshow(); state_add(STATE_GENPC, "GENPC", m_debug_pc).formatstr("%04X").noshow(); state_add(STATE_GENPCBASE, "CURPC", m_debug_pc).formatstr("%04X").noshow(); @@ -318,8 +280,7 @@ void f8_cpu_device::ROMC_00(int insttim) * code addressed by PC0; then all devices increment the contents * of PC0. */ - - m_dbus = m_cache->read_byte(m_pc0); + m_dbus = m_program.read_byte(m_pc0); m_pc0 += 1; m_icount -= insttim; /* ROMC00 is usually short, not short+long, but DS is long */ } @@ -332,7 +293,7 @@ void f8_cpu_device::ROMC_01() * location addressed by PC0; then all devices add the 8-bit value * on the data bus as signed binary number to PC0. */ - m_dbus = m_cache->read_byte(m_pc0); + m_dbus = m_program.read_byte(m_pc0); m_pc0 += (s8)m_dbus; m_icount -= cL; } @@ -345,7 +306,7 @@ void f8_cpu_device::ROMC_02() * the memory location addressed by DC0; then all devices increment * DC0. */ - m_dbus = m_program->read_byte(m_dc0); + m_dbus = m_program.read_byte(m_dc0); m_dc0 += 1; m_icount -= cL; } @@ -356,7 +317,7 @@ void f8_cpu_device::ROMC_03(int insttim) * Similiar to 0x00, except that it is used for immediate operands * fetches (using PC0) instead of instruction fetches. */ - m_dbus = m_io = m_cache->read_byte(m_pc0); + m_dbus = m_io = m_program.read_byte(m_pc0); m_pc0 += 1; m_icount -= insttim; } @@ -376,7 +337,7 @@ void f8_cpu_device::ROMC_05() * Store the data bus contents into the memory location pointed * to by DC0; increment DC0. */ - m_program->write_byte(m_dc0, m_dbus); + m_program.write_byte(m_dc0, m_dbus); m_dc0 += 1; m_icount -= cL; } @@ -408,7 +369,7 @@ void f8_cpu_device::ROMC_08() */ m_pc1 = m_pc0; m_dbus = 0; - m_pc0 = 0; + m_pc0 = m_romc08_callback() * 0x0101; m_icount -= cL; } @@ -450,7 +411,7 @@ void f8_cpu_device::ROMC_0C() * by PC0 into the data bus; then all devices move the value that * has just been placed on the data bus into the low order byte of PC0. */ - m_dbus = m_cache->read_byte(m_pc0); + m_dbus = m_program.read_byte(m_pc0); m_pc0 = (m_pc0 & 0xff00) | m_dbus; m_icount -= cL; } @@ -473,7 +434,7 @@ void f8_cpu_device::ROMC_0E() * The value on the data bus is then moved to the low order byte * of DC0 by all devices. */ - m_dbus = m_cache->read_byte(m_pc0); + m_dbus = m_program.read_byte(m_pc0); m_dc0 = (m_dc0 & 0xff00) | m_dbus; m_icount -= cL; } @@ -487,7 +448,7 @@ void f8_cpu_device::ROMC_0F() * must move the contents of the data bus into the low order * byte of PC0. */ - m_irq_vector = standard_irq_callback(F8_INPUT_LINE_INT_REQ); + m_irq_vector = standard_irq_callback(F8_INPUT_LINE_INT_REQ, m_pc0); m_dbus = m_irq_vector & 0x00ff; m_pc1 = m_pc0; m_pc0 = (m_pc0 & 0xff00) | m_dbus; @@ -511,7 +472,7 @@ void f8_cpu_device::ROMC_11() * data bus. All devices must then move the contents of the * data bus to the upper byte of DC0. */ - m_dbus = m_cache->read_byte(m_pc0); + m_dbus = m_program.read_byte(m_pc0); m_dc0 = (m_dc0 & 0x00ff) | (m_dbus << 8); m_icount -= cL; } @@ -610,7 +571,7 @@ void f8_cpu_device::ROMC_1A() * register was addressed; the device containing the addressed port * must place the contents of the data bus into the address port. */ - m_iospace->write_byte(m_io, m_dbus); + m_ios.write_byte(m_io, m_dbus); m_icount -= cL; } @@ -623,7 +584,7 @@ void f8_cpu_device::ROMC_1B() * contents of timer and interrupt control registers cannot be read * back onto the data bus). */ - m_dbus = m_iospace->read_byte(m_io); + m_dbus = m_ios.read_byte(m_io); m_icount -= cL; } @@ -681,7 +642,7 @@ void f8_cpu_device::illegal() ***************************************************/ void f8_cpu_device::f8_lr_a_ku() { - m_a = m_r[12]; + m_a = m_r.read_byte(12); } /*************************************************** @@ -690,7 +651,7 @@ void f8_cpu_device::f8_lr_a_ku() ***************************************************/ void f8_cpu_device::f8_lr_a_kl() { - m_a = m_r[13]; + m_a = m_r.read_byte(13); } /*************************************************** @@ -699,7 +660,7 @@ void f8_cpu_device::f8_lr_a_kl() ***************************************************/ void f8_cpu_device::f8_lr_a_qu() { - m_a = m_r[14]; + m_a = m_r.read_byte(14); } /*************************************************** @@ -708,7 +669,7 @@ void f8_cpu_device::f8_lr_a_qu() ***************************************************/ void f8_cpu_device::f8_lr_a_ql() { - m_a = m_r[15]; + m_a = m_r.read_byte(15); } /*************************************************** @@ -717,7 +678,7 @@ void f8_cpu_device::f8_lr_a_ql() ***************************************************/ void f8_cpu_device::f8_lr_ku_a() { - m_r[12] = m_a; + m_r.write_byte(12, m_a); } /*************************************************** @@ -726,7 +687,7 @@ void f8_cpu_device::f8_lr_ku_a() ***************************************************/ void f8_cpu_device::f8_lr_kl_a() { - m_r[13] = m_a; + m_r.write_byte(13, m_a); } /*************************************************** @@ -735,7 +696,7 @@ void f8_cpu_device::f8_lr_kl_a() ***************************************************/ void f8_cpu_device::f8_lr_qu_a() { - m_r[14] = m_a; + m_r.write_byte(14, m_a); } /*************************************************** @@ -744,7 +705,7 @@ void f8_cpu_device::f8_lr_qu_a() ***************************************************/ void f8_cpu_device::f8_lr_ql_a() { - m_r[15] = m_a; + m_r.write_byte(15, m_a); } /*************************************************** @@ -754,9 +715,9 @@ void f8_cpu_device::f8_lr_ql_a() void f8_cpu_device::f8_lr_k_p() { ROMC_07(); - m_r[12] = m_dbus; + m_r.write_byte(12, m_dbus); ROMC_0B(); - m_r[13] = m_dbus; + m_r.write_byte(13, m_dbus); } /*************************************************** @@ -765,9 +726,9 @@ void f8_cpu_device::f8_lr_k_p() ***************************************************/ void f8_cpu_device::f8_lr_p_k() { - m_dbus = m_r[12]; + m_dbus = m_r.read_byte(12); ROMC_15(); - m_dbus = m_r[13]; + m_dbus = m_r.read_byte(13); ROMC_18(); } @@ -795,9 +756,9 @@ void f8_cpu_device::f8_lr_is_a() ***************************************************/ void f8_cpu_device::f8_pk() { - m_dbus = m_r[13]; + m_dbus = m_r.read_byte(13); ROMC_12(); - m_dbus = m_r[12]; + m_dbus = m_r.read_byte(12); ROMC_14(); } @@ -807,9 +768,9 @@ void f8_cpu_device::f8_pk() ***************************************************/ void f8_cpu_device::f8_lr_p0_q() { - m_dbus = m_r[15]; + m_dbus = m_r.read_byte(15); ROMC_17(); - m_dbus = m_r[14]; + m_dbus = m_r.read_byte(14); ROMC_14(); } @@ -820,9 +781,9 @@ void f8_cpu_device::f8_lr_p0_q() void f8_cpu_device::f8_lr_q_dc() { ROMC_06(); - m_r[14] = m_dbus; + m_r.write_byte(14, m_dbus); ROMC_09(); - m_r[15] = m_dbus; + m_r.write_byte(15, m_dbus); } /*************************************************** @@ -831,9 +792,9 @@ void f8_cpu_device::f8_lr_q_dc() ***************************************************/ void f8_cpu_device::f8_lr_dc_q() { - m_dbus = m_r[14]; + m_dbus = m_r.read_byte(14); ROMC_16(); - m_dbus = m_r[15]; + m_dbus = m_r.read_byte(15); ROMC_19(); } @@ -843,9 +804,9 @@ void f8_cpu_device::f8_lr_dc_q() ***************************************************/ void f8_cpu_device::f8_lr_dc_h() { - m_dbus = m_r[10]; + m_dbus = m_r.read_byte(10); ROMC_16(); - m_dbus = m_r[11]; + m_dbus = m_r.read_byte(11); ROMC_19(); } @@ -856,9 +817,9 @@ void f8_cpu_device::f8_lr_dc_h() void f8_cpu_device::f8_lr_h_dc() { ROMC_06(); - m_r[10] = m_dbus; + m_r.write_byte(10, m_dbus); ROMC_09(); - m_r[11] = m_dbus; + m_r.write_byte(11, m_dbus); } /*************************************************** @@ -985,7 +946,7 @@ void f8_cpu_device::f8_pop() void f8_cpu_device::f8_lr_w_j() { ROMC_1C(cS); - m_w = m_r[9] & 0x1f; + m_w = m_r.read_byte(9) & 0x1f; } /*************************************************** @@ -994,7 +955,7 @@ void f8_cpu_device::f8_lr_w_j() ***************************************************/ void f8_cpu_device::f8_lr_j_w() { - m_r[9] = m_w; + m_r.write_byte(9, m_w); } /*************************************************** @@ -1164,8 +1125,9 @@ void f8_cpu_device::f8_xdc() void f8_cpu_device::f8_ds_r(int r) { CLR_OZCS(); - m_r[r] = do_add(m_r[r], 0xff); - SET_SZ(m_r[r]); + int d = do_add(m_r.read_byte(r), 0xff); + m_r.write_byte(r, d); + SET_SZ(d); } /*************************************************** @@ -1175,8 +1137,9 @@ void f8_cpu_device::f8_ds_r(int r) void f8_cpu_device::f8_ds_isar() { CLR_OZCS(); - m_r[m_is] = do_add(m_r[m_is], 0xff); - SET_SZ(m_r[m_is]); + int d = do_add(m_r.read_byte(m_is), 0xff); + m_r.write_byte(m_is, d); + SET_SZ(d); } /*************************************************** @@ -1186,8 +1149,9 @@ void f8_cpu_device::f8_ds_isar() void f8_cpu_device::f8_ds_isar_i() { CLR_OZCS(); - m_r[m_is] = do_add(m_r[m_is], 0xff); - SET_SZ(m_r[m_is]); + int d = do_add(m_r.read_byte(m_is), 0xff); + m_r.write_byte(m_is, d); + SET_SZ(d); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1198,8 +1162,9 @@ void f8_cpu_device::f8_ds_isar_i() void f8_cpu_device::f8_ds_isar_d() { CLR_OZCS(); - m_r[m_is] = do_add(m_r[m_is], 0xff); - SET_SZ(m_r[m_is]); + int d = do_add(m_r.read_byte(m_is), 0xff); + m_r.write_byte(m_is, d); + SET_SZ(d); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } @@ -1209,7 +1174,7 @@ void f8_cpu_device::f8_ds_isar_d() ***************************************************/ void f8_cpu_device::f8_lr_a_r(int r) { - m_a = m_r[r]; + m_a = m_r.read_byte(r); } /*************************************************** @@ -1218,7 +1183,7 @@ void f8_cpu_device::f8_lr_a_r(int r) ***************************************************/ void f8_cpu_device::f8_lr_a_isar() { - m_a = m_r[m_is]; + m_a = m_r.read_byte(m_is); } /*************************************************** @@ -1227,7 +1192,7 @@ void f8_cpu_device::f8_lr_a_isar() ***************************************************/ void f8_cpu_device::f8_lr_a_isar_i() { - m_a = m_r[m_is]; + m_a = m_r.read_byte(m_is); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1237,7 +1202,7 @@ void f8_cpu_device::f8_lr_a_isar_i() ***************************************************/ void f8_cpu_device::f8_lr_a_isar_d() { - m_a = m_r[m_is]; + m_a = m_r.read_byte(m_is); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } @@ -1247,7 +1212,7 @@ void f8_cpu_device::f8_lr_a_isar_d() ***************************************************/ void f8_cpu_device::f8_lr_r_a(int r) { - m_r[r] = m_a; + m_r.write_byte(r, m_a); } /*************************************************** @@ -1256,7 +1221,7 @@ void f8_cpu_device::f8_lr_r_a(int r) ***************************************************/ void f8_cpu_device::f8_lr_isar_a() { - m_r[m_is] = m_a; + m_r.write_byte(m_is, m_a); } /*************************************************** @@ -1265,7 +1230,7 @@ void f8_cpu_device::f8_lr_isar_a() ***************************************************/ void f8_cpu_device::f8_lr_isar_i_a() { - m_r[m_is] = m_a; + m_r.write_byte(m_is, m_a); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1275,7 +1240,7 @@ void f8_cpu_device::f8_lr_isar_i_a() ***************************************************/ void f8_cpu_device::f8_lr_isar_d_a() { - m_r[m_is] = m_a; + m_r.write_byte(m_is, m_a); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } @@ -1431,7 +1396,7 @@ void f8_cpu_device::f8_ins_0(int n) { ROMC_1C(cS); CLR_OZCS(); - m_a = m_iospace->read_byte(n); + m_a = m_ios.read_byte(n); SET_SZ(m_a); } @@ -1456,7 +1421,7 @@ void f8_cpu_device::f8_ins_1(int n) void f8_cpu_device::f8_outs_0(int n) { ROMC_1C(cS); - m_iospace->write_byte(n, m_a); + m_ios.write_byte(n, m_a); } /*************************************************** @@ -1478,7 +1443,7 @@ void f8_cpu_device::f8_outs_1(int n) void f8_cpu_device::f8_as(int r) { CLR_OZCS(); - m_a = do_add(m_a, m_r[r]); + m_a = do_add(m_a, m_r.read_byte(r)); SET_SZ(m_a); } @@ -1489,7 +1454,7 @@ void f8_cpu_device::f8_as(int r) void f8_cpu_device::f8_as_isar() { CLR_OZCS(); - m_a = do_add(m_a, m_r[m_is]); + m_a = do_add(m_a, m_r.read_byte(m_is)); SET_SZ(m_a); } @@ -1500,7 +1465,7 @@ void f8_cpu_device::f8_as_isar() void f8_cpu_device::f8_as_isar_i() { CLR_OZCS(); - m_a = do_add(m_a, m_r[m_is]); + m_a = do_add(m_a, m_r.read_byte(m_is)); SET_SZ(m_a); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1512,7 +1477,7 @@ void f8_cpu_device::f8_as_isar_i() void f8_cpu_device::f8_as_isar_d() { CLR_OZCS(); - m_a = do_add(m_a, m_r[m_is]); + m_a = do_add(m_a, m_r.read_byte(m_is)); SET_SZ(m_a); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } @@ -1524,7 +1489,7 @@ void f8_cpu_device::f8_as_isar_d() void f8_cpu_device::f8_asd(int r) { ROMC_1C(cS); - m_a = do_add_decimal(m_a, m_r[r]); + m_a = do_add_decimal(m_a, m_r.read_byte(r)); } /*************************************************** @@ -1534,7 +1499,7 @@ void f8_cpu_device::f8_asd(int r) void f8_cpu_device::f8_asd_isar() { ROMC_1C(cS); - m_a = do_add_decimal(m_a, m_r[m_is]); + m_a = do_add_decimal(m_a, m_r.read_byte(m_is)); } /*************************************************** @@ -1544,7 +1509,7 @@ void f8_cpu_device::f8_asd_isar() void f8_cpu_device::f8_asd_isar_i() { ROMC_1C(cS); - m_a = do_add_decimal(m_a, m_r[m_is]); + m_a = do_add_decimal(m_a, m_r.read_byte(m_is)); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1555,7 +1520,7 @@ void f8_cpu_device::f8_asd_isar_i() void f8_cpu_device::f8_asd_isar_d() { ROMC_1C(cS); - m_a = do_add_decimal(m_a, m_r[m_is]); + m_a = do_add_decimal(m_a, m_r.read_byte(m_is)); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } @@ -1566,7 +1531,7 @@ void f8_cpu_device::f8_asd_isar_d() void f8_cpu_device::f8_xs(int r) { CLR_OZCS(); - m_a ^= m_r[r]; + m_a ^= m_r.read_byte(r); SET_SZ(m_a); } @@ -1577,7 +1542,7 @@ void f8_cpu_device::f8_xs(int r) void f8_cpu_device::f8_xs_isar() { CLR_OZCS(); - m_a ^= m_r[m_is]; + m_a ^= m_r.read_byte(m_is); SET_SZ(m_a); } @@ -1588,7 +1553,7 @@ void f8_cpu_device::f8_xs_isar() void f8_cpu_device::f8_xs_isar_i() { CLR_OZCS(); - m_a ^= m_r[m_is]; + m_a ^= m_r.read_byte(m_is); SET_SZ(m_a); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1600,7 +1565,7 @@ void f8_cpu_device::f8_xs_isar_i() void f8_cpu_device::f8_xs_isar_d() { CLR_OZCS(); - m_a ^= m_r[m_is]; + m_a ^= m_r.read_byte(m_is); SET_SZ(m_a); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } @@ -1612,7 +1577,7 @@ void f8_cpu_device::f8_xs_isar_d() void f8_cpu_device::f8_ns(int r) { CLR_OZCS(); - m_a &= m_r[r]; + m_a &= m_r.read_byte(r); SET_SZ(m_a); } @@ -1623,7 +1588,7 @@ void f8_cpu_device::f8_ns(int r) void f8_cpu_device::f8_ns_isar() { CLR_OZCS(); - m_a &= m_r[m_is]; + m_a &= m_r.read_byte(m_is); SET_SZ(m_a); } @@ -1634,7 +1599,7 @@ void f8_cpu_device::f8_ns_isar() void f8_cpu_device::f8_ns_isar_i() { CLR_OZCS(); - m_a &= m_r[m_is]; + m_a &= m_r.read_byte(m_is); SET_SZ(m_a); m_is = (m_is & 0x38) | ((m_is + 1) & 0x07); } @@ -1646,7 +1611,7 @@ void f8_cpu_device::f8_ns_isar_i() void f8_cpu_device::f8_ns_isar_d() { CLR_OZCS(); - m_a &= m_r[m_is]; + m_a &= m_r.read_byte(m_is); SET_SZ(m_a); m_is = (m_is & 0x38) | ((m_is - 1) & 0x07); } diff --git a/src/devices/cpu/f8/f8.h b/src/devices/cpu/f8/f8.h index 5185b938a05..8477b1bf031 100644 --- a/src/devices/cpu/f8/f8.h +++ b/src/devices/cpu/f8/f8.h @@ -20,45 +20,46 @@ public: // construction/destruction f8_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + // used by F3850 systems that override the normal zero reset address + auto romc08_callback() { return m_romc08_callback.bind(); } + protected: enum { F8_PC0=1, F8_PC1, F8_DC0, F8_DC1, F8_W, F8_A, F8_IS, - F8_J, F8_HU, F8_HL, F8_KU, F8_KL, F8_QU, F8_QL, - - F8_R0, F8_R1, F8_R2, F8_R3, F8_R4, F8_R5, F8_R6, F8_R7, F8_R8, - F8_R16, F8_R17, F8_R18, F8_R19, F8_R20, F8_R21, F8_R22, F8_R23, - F8_R24, F8_R25, F8_R26, F8_R27, F8_R28, F8_R29, F8_R30, F8_R31, - F8_R32, F8_R33, F8_R34, F8_R35, F8_R36, F8_R37, F8_R38, F8_R39, - F8_R40, F8_R41, F8_R42, F8_R43, F8_R44, F8_R45, F8_R46, F8_R47, - F8_R48, F8_R49, F8_R50, F8_R51, F8_R52, F8_R53, F8_R54, F8_R55, - F8_R56, F8_R57, F8_R58, F8_R59, F8_R60, F8_R61, F8_R62, F8_R63 + F8_R0, F8_R1, F8_R2, F8_R3, F8_R4, F8_R5, F8_R6, F8_R7, + F8_R8, F8_J, F8_HU, F8_HL, F8_KU, F8_KL, F8_QU, F8_QL, + F8_H, F8_K, F8_Q }; - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + // device_t implementation + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; - // device_execute_interface overrides - virtual u32 execute_min_cycles() const override { return 4; } - virtual u32 execute_max_cycles() const override { return 26; } - virtual u32 execute_input_lines() const override { return 1; } + // device_execute_interface implementation + virtual u32 execute_min_cycles() const noexcept override { return 4; } + virtual u32 execute_max_cycles() const noexcept override { return 26; } virtual void execute_run() override; virtual void execute_set_input(int inputnum, int state) override; - // device_memory_interface overrides + // device_memory_interface implementation virtual space_config_vector memory_space_config() const override; - // device_state_interface overrides + // device_state_interface implementation virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; - // device_disasm_interface overrides + // device_disasm_interface implementation virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; private: + void regs_map(address_map &map) ATTR_COLD; + address_space_config m_program_config; + address_space_config m_regs_config; address_space_config m_io_config; + devcb_read8 m_romc08_callback; + u16 m_pc0; /* program counter 0 */ u16 m_pc1; /* program counter 1 */ u16 m_dc0; /* data counter 0 */ @@ -69,11 +70,10 @@ private: u8 m_dbus; /* data bus value */ u16 m_io; /* last I/O address */ u16 m_irq_vector; - address_space *m_program; - memory_access_cache<0, 0, ENDIANNESS_BIG> *m_cache; - address_space *m_iospace; + memory_access<16, 0, 0, ENDIANNESS_BIG>::cache m_program; + memory_access<6, 0, 0, ENDIANNESS_BIG>::cache m_r; + memory_access<8, 0, 0, ENDIANNESS_BIG>::specific m_ios; int m_icount; - u8 m_r[64]; /* scratchpad RAM */ int m_irq_request; u16 m_debug_pc; // only for the MAME debugger diff --git a/src/devices/cpu/f8/f8dasm.cpp b/src/devices/cpu/f8/f8dasm.cpp index 24ec47b5154..ef775a78629 100644 --- a/src/devices/cpu/f8/f8dasm.cpp +++ b/src/devices/cpu/f8/f8dasm.cpp @@ -17,33 +17,22 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ { offs_t base_pc = pc; uint8_t op = opcodes.r8(pc++); + offs_t flags = SUPPORTED; switch( op ) { /* opcode bitmask */ case 0x00: /* 0000 0000 */ - util::stream_format(stream, "LR A,KU"); - break; case 0x01: /* 0000 0001 */ - util::stream_format(stream, "LR A,KL"); - break; case 0x02: /* 0000 0010 */ - util::stream_format(stream, "LR A,QU"); - break; case 0x03: /* 0000 0011 */ - util::stream_format(stream, "LR A,QL"); + util::stream_format(stream, "LR A,%s", rname[op + 12]); break; case 0x04: /* 0000 0100 */ - util::stream_format(stream, "LR KU,A"); - break; case 0x05: /* 0000 0101 */ - util::stream_format(stream, "LR KL,A"); - break; case 0x06: /* 0000 0110 */ - util::stream_format(stream, "LR QU,A"); - break; case 0x07: /* 0000 0111 */ - util::stream_format(stream, "LR QL,A"); + util::stream_format(stream, "LR %s,A", rname[(op - 0x04) + 12]); break; case 0x08: /* 0000 1000 */ @@ -60,7 +49,8 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ break; case 0x0c: /* 0000 1100 */ - util::stream_format(stream, "PK") ; + util::stream_format(stream, "PK"); + flags |= STEP_OUT; break; case 0x0d: /* 0000 1101 */ util::stream_format(stream, "LR P0,Q"); @@ -109,6 +99,7 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ break; case 0x1c: /* 0001 1100 */ util::stream_format(stream, "POP"); + flags |= STEP_OUT; break; case 0x1d: /* 0001 1101 */ util::stream_format(stream, "LR W,J"); @@ -120,39 +111,40 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ util::stream_format(stream, "INC"); break; case 0x20: /* 0010 0000 */ - util::stream_format(stream, "LI $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "LI H'%02X'", opcodes.r8(pc++)); break; case 0x21: /* 0010 0001 */ - util::stream_format(stream, "NI $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "NI H'%02X'", opcodes.r8(pc++)); break; case 0x22: /* 0010 0010 */ - util::stream_format(stream, "OI $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "OI H'%02X'", opcodes.r8(pc++)); break; case 0x23: /* 0010 0011 */ - util::stream_format(stream, "XI $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "XI H'%02X'", opcodes.r8(pc++)); break; case 0x24: /* 0010 0100 */ - util::stream_format(stream, "AI $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "AI H'%02X'", opcodes.r8(pc++)); break; case 0x25: /* 0010 0101 */ - util::stream_format(stream, "CI $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "CI H'%02X'", opcodes.r8(pc++)); break; case 0x26: /* 0010 0110 */ - util::stream_format(stream, "IN $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "IN H'%02X'", opcodes.r8(pc++)); break; case 0x27: /* 0010 0111 */ - util::stream_format(stream, "OUT $%02X", opcodes.r8(pc++)); + util::stream_format(stream, "OUT H'%02X'", opcodes.r8(pc++)); break; case 0x28: /* 0010 1000 */ - util::stream_format(stream, "PI $%04X", opcodes.r16(pc)); + util::stream_format(stream, "PI H'%04X'", opcodes.r16(pc)); pc += 2; + flags |= STEP_OVER; break; case 0x29: /* 0010 1001 */ - util::stream_format(stream, "JMP $%04X", opcodes.r16(pc)); + util::stream_format(stream, "JMP H'%04X'", opcodes.r16(pc)); pc += 2; break; case 0x2a: /* 0010 1010 */ - util::stream_format(stream, "DCI $%04X", opcodes.r16(pc)); + util::stream_format(stream, "DCI H'%04X'", opcodes.r16(pc)); pc += 2; break; case 0x2b: /* 0010 1011 */ @@ -161,11 +153,9 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x2c: /* 0010 1100 */ util::stream_format(stream, "XDC"); break; - case 0x2d: /* 0010 1101 */ - case 0x2e: /* 0010 1110 */ - case 0x2f: /* 0010 1111 */ - util::stream_format(stream, "??? $%02X",op); - break; + /* case 0x2d: 0010 1101 */ + /* case 0x2e: 0010 1110 */ + /* case 0x2f: 0010 1111 */ case 0x30: /* 0011 0000 */ case 0x31: /* 0011 0001 */ @@ -179,20 +169,18 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x39: /* 0011 1001 */ case 0x3a: /* 0011 1010 */ case 0x3b: /* 0011 1011 */ - util::stream_format(stream, "DS %s",rname[op & 15]); + util::stream_format(stream, "DS %s", rname[op & 15]); break; case 0x3c: /* 0011 1100 */ - util::stream_format(stream, "DS (IS)"); + util::stream_format(stream, "DS S"); break; case 0x3d: /* 0011 1101 */ - util::stream_format(stream, "DS (IS++)"); + util::stream_format(stream, "DS I"); break; case 0x3e: /* 0011 1110 */ - util::stream_format(stream, "DS (IS--)"); - break; - case 0x3f: /* 0011 1111 */ - util::stream_format(stream, "??? $%02X",op); + util::stream_format(stream, "DS D"); break; + /* case 0x3f: 0011 1111 */ case 0x40: /* 0100 0000 */ case 0x41: /* 0100 0001 */ @@ -206,20 +194,18 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x49: /* 0100 1001 */ case 0x4a: /* 0100 1010 */ case 0x4b: /* 0100 1011 */ - util::stream_format(stream, "LR A,%s",rname[op & 15]); + util::stream_format(stream, "LR A,%s", rname[op & 15]); break; case 0x4c: /* 0100 1100 */ - util::stream_format(stream, "LR A,(IS)"); + util::stream_format(stream, "LR A,S"); break; case 0x4d: /* 0100 1101 */ - util::stream_format(stream, "LR A,(IS++)"); + util::stream_format(stream, "LR A,I"); break; case 0x4e: /* 0100 1110 */ - util::stream_format(stream, "LR A,(IS--)"); - break; - case 0x4f: /* 0100 1111 */ - util::stream_format(stream, "??? $%02X",op); + util::stream_format(stream, "LR A,D"); break; + /* case 0x4f: 0100 1111 */ case 0x50: /* 0101 0000 */ case 0x51: /* 0101 0001 */ @@ -233,20 +219,18 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x59: /* 0101 1001 */ case 0x5a: /* 0101 1010 */ case 0x5b: /* 0101 1011 */ - util::stream_format(stream, "LR %s,A",rname[op & 15]); + util::stream_format(stream, "LR %s,A", rname[op & 15]); break; case 0x5c: /* 0101 1100 */ - util::stream_format(stream, "LR (IS),A"); + util::stream_format(stream, "LR S,A"); break; case 0x5d: /* 0101 1101 */ - util::stream_format(stream, "LR (IS++),A"); + util::stream_format(stream, "LR I,A"); break; case 0x5e: /* 0101 1110 */ - util::stream_format(stream, "LR (IS--),A"); - break; - case 0x5f: /* 0101 1111 */ - util::stream_format(stream, "??? $%02X",op); + util::stream_format(stream, "LR D,A"); break; + /* case 0x5f: 0101 1111 */ case 0x60: /* 0110 0000 */ case 0x61: /* 0110 0001 */ @@ -256,7 +240,7 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x65: /* 0110 0101 */ case 0x66: /* 0110 0110 */ case 0x67: /* 0110 0111 */ - util::stream_format(stream, "LISU $%02X", op & 0x07); + util::stream_format(stream, "LISU %d", op & 0x07); break; case 0x68: /* 0110 1000 */ case 0x69: /* 0110 1001 */ @@ -266,10 +250,12 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x6d: /* 0110 1101 */ case 0x6e: /* 0110 1110 */ case 0x6f: /* 0110 1111 */ - util::stream_format(stream, "LISL $%02X", op & 0x07); + util::stream_format(stream, "LISL %d", op & 0x07); break; case 0x70: /* 0111 0000 */ + util::stream_format(stream, "CLR"); + break; case 0x71: /* 0111 0001 */ case 0x72: /* 0111 0010 */ case 0x73: /* 0111 0011 */ @@ -285,27 +271,31 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x7d: /* 0111 1101 */ case 0x7e: /* 0111 1110 */ case 0x7f: /* 0111 1111 */ - util::stream_format(stream, "LIS $%02X", op & 0x0f); + util::stream_format(stream, "LIS H'%02X'", op & 0x0f); break; case 0x81: /* 1000 0001 */ case 0x85: /* 1000 0101 */ - util::stream_format(stream, "BP $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BP H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x82: /* 1000 0010 */ - util::stream_format(stream, "BC $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BC H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x84: /* 1000 0100 */ - util::stream_format(stream, "BZ $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BZ H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x80: /* 1000 0000 */ case 0x83: /* 1000 0011 */ case 0x86: /* 1000 0110 */ case 0x87: /* 1000 0111 */ - util::stream_format(stream, "BT $%02X,$%04X", op & 0x07, base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BT H'%02X',H'%04X'", op & 0x07, base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x88: /* 1000 1000 */ @@ -337,28 +327,33 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ break; case 0x8f: /* 1000 1111 */ - util::stream_format(stream, "BR7 $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BR7 H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x90: /* 1001 0000 */ - util::stream_format(stream, "BR $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BR H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); break; case 0x91: /* 1001 0001 */ case 0x95: /* 1001 0101 */ - util::stream_format(stream, "BM $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BM H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x92: /* 1001 0010 */ - util::stream_format(stream, "BNC $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BNC H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x94: /* 1001 0100 */ - util::stream_format(stream, "BNZ $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BNZ H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x98: /* 1001 1000 */ - util::stream_format(stream, "BNO $%04X", base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BNO H'%04X'", base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0x93: /* 1001 0011 */ @@ -371,18 +366,17 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0x9d: /* 1001 1101 */ case 0x9e: /* 1001 1110 */ case 0x9f: /* 1001 1111 */ - util::stream_format(stream, "BF $%02X,$%04X", op & 0x0f, base_pc + (int8_t)opcodes.r8(pc++) + 1); + util::stream_format(stream, "BF H'%02X',H'%04X'", op & 0x0f, base_pc + (int8_t)opcodes.r8(pc++) + 1); + flags |= STEP_COND; break; case 0xa0: /* 1010 0000 */ case 0xa1: /* 1010 0001 */ - util::stream_format(stream, "INS $%02X", (unsigned) (int8_t) (op & 0x0F)); + util::stream_format(stream, "INS %d", op & 0x0f); break; - case 0xa2: /* 1010 0010 */ - case 0xa3: /* 1010 0011 */ - util::stream_format(stream, "??? $%02X", op); - break; + /* case 0xa2: 1010 0010 */ + /* case 0xa3: 1010 0011 */ case 0xa4: /* 1010 0100 */ case 0xa5: /* 1010 0101 */ @@ -396,18 +390,16 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0xad: /* 1010 1101 */ case 0xae: /* 1010 1110 */ case 0xaf: /* 1010 1111 */ - util::stream_format(stream, "INS $%02X", (int8_t) op & 0x0f); + util::stream_format(stream, "INS H'%02X'", op & 0x0f); break; case 0xb0: /* 1011 0000 */ case 0xb1: /* 1011 0001 */ - util::stream_format(stream, "OUTS $%02X", (int8_t) op & 0x0f); + util::stream_format(stream, "OUTS %d", op & 0x0f); break; - case 0xb2: /* 1011 0010 */ - case 0xb3: /* 1011 0011 */ - util::stream_format(stream, "??? $%02X", op); - break; + /* case 0xb2: 1011 0010 */ + /* case 0xb3: 1011 0011 */ case 0xb4: /* 1011 0100 */ case 0xb5: /* 1011 0101 */ @@ -421,7 +413,7 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ case 0xbd: /* 1011 1101 */ case 0xbe: /* 1011 1110 */ case 0xbf: /* 1011 1111 */ - util::stream_format(stream, "OUTS $%02X", (unsigned) (int8_t) op & 0x0f); + util::stream_format(stream, "OUTS H'%02X'", op & 0x0f); break; case 0xc0: /* 1100 0000 */ @@ -439,17 +431,15 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ util::stream_format(stream, "AS %s", rname[op & 15]); break; case 0xcc: /* 1100 1100 */ - util::stream_format(stream, "AS (IS)"); + util::stream_format(stream, "AS S"); break; case 0xcd: /* 1100 1101 */ - util::stream_format(stream, "AS (IS++)"); + util::stream_format(stream, "AS I"); break; case 0xce: /* 1100 1110 */ - util::stream_format(stream, "AS (IS--)"); - break; - case 0xcf: /* 1100 1111 */ - util::stream_format(stream, "??? $%02X", op); + util::stream_format(stream, "AS D"); break; + /* case 0xcf: 1100 1111 */ case 0xd0: /* 1101 0000 */ case 0xd1: /* 1101 0001 */ @@ -466,17 +456,15 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ util::stream_format(stream, "ASD %s", rname[op & 15]); break; case 0xdc: /* 1101 1100 */ - util::stream_format(stream, "ASD (IS)"); + util::stream_format(stream, "ASD S"); break; case 0xdd: /* 1101 1101 */ - util::stream_format(stream, "ASD (IS++)"); + util::stream_format(stream, "ASD I"); break; case 0xde: /* 1101 1110 */ - util::stream_format(stream, "ASD (IS--)"); - break; - case 0xdf: /* 1101 1111 */ - util::stream_format(stream, "??? $%02X", op); + util::stream_format(stream, "ASD D"); break; + /* case 0xdf: 1101 1111 */ case 0xe0: /* 1110 0000 */ case 0xe1: /* 1110 0001 */ @@ -493,17 +481,15 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ util::stream_format(stream, "XS %s", rname[op & 15]); break; case 0xec: /* 1110 1100 */ - util::stream_format(stream, "XS (IS)"); + util::stream_format(stream, "XS S"); break; case 0xed: /* 1110 1101 */ - util::stream_format(stream, "XS (IS++)"); + util::stream_format(stream, "XS I"); break; case 0xee: /* 1110 1110 */ - util::stream_format(stream, "XS (IS--)"); - break; - case 0xef: /* 1110 1111 */ - util::stream_format(stream, "??? $%02X", op); + util::stream_format(stream, "XS D"); break; + /* case 0xef: 1110 1111 */ case 0xf0: /* 1111 0000 */ @@ -521,18 +507,21 @@ offs_t f8_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_ util::stream_format(stream, "NS %s", rname[op & 15]); break; case 0xfc: /* 1111 1100 */ - util::stream_format(stream, "NS (IS)"); + util::stream_format(stream, "NS S"); break; case 0xfd: /* 1111 1101 */ - util::stream_format(stream, "NS (IS++)"); + util::stream_format(stream, "NS I"); break; case 0xfe: /* 1111 1110 */ - util::stream_format(stream, "NS (IS--)"); + util::stream_format(stream, "NS D"); break; - case 0xff: /* 1111 1111 */ - util::stream_format(stream, "??? $%02X", op); + /* case 0xff: 1111 1111 */ + + + default: + util::stream_format(stream, "DC H'%02X' (?)", op); break; } - return pc - base_pc; + return (pc - base_pc) | flags; } |