summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/f8
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/f8')
-rw-r--r--src/devices/cpu/f8/f8.cpp267
-rw-r--r--src/devices/cpu/f8/f8.h46
-rw-r--r--src/devices/cpu/f8/f8dasm.cpp193
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;
}