diff options
author | 2021-10-30 16:53:09 -0400 | |
---|---|---|
committer | 2021-10-30 16:53:09 -0400 | |
commit | cfffc54b61cabc5ef9533396bf87324eb5eeb63e (patch) | |
tree | 11f9ca27ac880525683c40a0eeee6914ab707bb7 /src | |
parent | ba4b7c7d8458e3197cfaf641b320d6a4a18d0589 (diff) |
f8: Add callback for overriding the normal reset address
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/cpu/f8/f8.cpp | 10 | ||||
-rw-r--r-- | src/devices/cpu/f8/f8.h | 6 | ||||
-rw-r--r-- | src/mame/drivers/f387x.cpp | 4 |
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); |