summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/devices/cpu/f8/f8.cpp10
-rw-r--r--src/devices/cpu/f8/f8.h6
-rw-r--r--src/mame/drivers/f387x.cpp4
3 files changed, 16 insertions, 4 deletions
diff --git a/src/devices/cpu/f8/f8.cpp b/src/devices/cpu/f8/f8.cpp
index 9aa27af8f54..b385fc4ffe9 100644
--- a/src/devices/cpu/f8/f8.cpp
+++ b/src/devices/cpu/f8/f8.cpp
@@ -68,7 +68,8 @@ f8_cpu_device::f8_cpu_device(const machine_config &mconfig, const char *tag, dev
cpu_device(mconfig, F8, tag, owner, clock),
m_program_config("program", ENDIANNESS_BIG, 8, 16, 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_io_config("io", ENDIANNESS_BIG, 8, 8, 0),
+ m_romc08_callback(*this)
{ }
void f8_cpu_device::regs_map(address_map &map)
@@ -106,6 +107,11 @@ void f8_cpu_device::state_string_export(const device_state_entry &entry, std::st
}
}
+void f8_cpu_device::device_resolve_objects()
+{
+ m_romc08_callback.resolve_safe(0);
+}
+
void f8_cpu_device::device_start()
{
space(AS_PROGRAM).cache(m_program);
@@ -370,7 +376,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;
}
diff --git a/src/devices/cpu/f8/f8.h b/src/devices/cpu/f8/f8.h
index ed12ecab708..fd823acb705 100644
--- a/src/devices/cpu/f8/f8.h
+++ b/src/devices/cpu/f8/f8.h
@@ -20,6 +20,9 @@ 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
{
@@ -30,6 +33,7 @@ protected:
};
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
@@ -56,6 +60,8 @@ private:
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 */
diff --git a/src/mame/drivers/f387x.cpp b/src/mame/drivers/f387x.cpp
index 077ec5c308c..6563128ff5b 100644
--- a/src/mame/drivers/f387x.cpp
+++ b/src/mame/drivers/f387x.cpp
@@ -36,7 +36,7 @@ private:
void mem_map(address_map &map);
void io_map(address_map &map);
- required_device<cpu_device> m_maincpu;
+ required_device<f8_cpu_device> m_maincpu;
required_device<rs232_port_device> m_rs232c;
required_ioport_array<6> m_keypad;
};
@@ -72,7 +72,6 @@ void f387x_state::opor_w(u8 data)
void f387x_state::mem_map(address_map &map)
{
- map(0x0000, 0x0002).lr8(NAME([](offs_t offset) { return offset == 0 ? 0x29 : 0x80; })); // FIXME: actually done by decoding ROMC and masking D7
map(0x2b80, 0x2bff).ram(); // F6810
map(0x8000, 0x87ff).rom().region("pepbug", 0);
}
@@ -157,6 +156,7 @@ void f387x_state::f387x(machine_config &config)
F8(config, m_maincpu, 2_MHz_XTAL); // F3850PC
m_maincpu->set_addrmap(AS_PROGRAM, &f387x_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &f387x_state::io_map);
+ m_maincpu->romc08_callback().set_constant(0x80);
F3853(config, "smi", 0);