diff options
-rw-r--r-- | scripts/src/bus.lua | 28 | ||||
-rw-r--r-- | src/devices/bus/rc2014/cf.cpp | 5 | ||||
-rw-r--r-- | src/devices/bus/rc2014/fdc.cpp | 8 | ||||
-rw-r--r-- | src/devices/bus/rc2014/micro.cpp | 61 | ||||
-rw-r--r-- | src/devices/bus/rc2014/modules.cpp | 12 | ||||
-rw-r--r-- | src/devices/bus/rc2014/ram.cpp | 7 | ||||
-rw-r--r-- | src/devices/bus/rc2014/rc2014.cpp | 5 | ||||
-rw-r--r-- | src/devices/bus/rc2014/rc2014.h | 1 | ||||
-rw-r--r-- | src/devices/bus/rc2014/rom.cpp | 8 | ||||
-rw-r--r-- | src/devices/bus/rc2014/romram.cpp | 53 | ||||
-rw-r--r-- | src/devices/bus/rc2014/serial.cpp | 15 |
11 files changed, 111 insertions, 92 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index af1d8ada40c..7e87a80393b 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -2090,32 +2090,32 @@ if (BUSES["RC2014"]~=null) then files { MAME_DIR .. "src/devices/bus/rc2014/rc2014.cpp", MAME_DIR .. "src/devices/bus/rc2014/rc2014.h", - MAME_DIR .. "src/devices/bus/rc2014/modules.cpp", - MAME_DIR .. "src/devices/bus/rc2014/modules.h", - MAME_DIR .. "src/devices/bus/rc2014/z80cpu.cpp", - MAME_DIR .. "src/devices/bus/rc2014/z80cpu.h", + MAME_DIR .. "src/devices/bus/rc2014/cf.cpp", + MAME_DIR .. "src/devices/bus/rc2014/cf.h", MAME_DIR .. "src/devices/bus/rc2014/clock.cpp", MAME_DIR .. "src/devices/bus/rc2014/clock.h", + MAME_DIR .. "src/devices/bus/rc2014/fdc.cpp", + MAME_DIR .. "src/devices/bus/rc2014/fdc.h", + MAME_DIR .. "src/devices/bus/rc2014/ide.cpp", + MAME_DIR .. "src/devices/bus/rc2014/ide.h", + MAME_DIR .. "src/devices/bus/rc2014/micro.cpp", + MAME_DIR .. "src/devices/bus/rc2014/micro.h", + MAME_DIR .. "src/devices/bus/rc2014/modules.cpp", + MAME_DIR .. "src/devices/bus/rc2014/modules.h", MAME_DIR .. "src/devices/bus/rc2014/ram.cpp", MAME_DIR .. "src/devices/bus/rc2014/ram.h", MAME_DIR .. "src/devices/bus/rc2014/rom.cpp", MAME_DIR .. "src/devices/bus/rc2014/rom.h", MAME_DIR .. "src/devices/bus/rc2014/romram.cpp", MAME_DIR .. "src/devices/bus/rc2014/romram.h", - MAME_DIR .. "src/devices/bus/rc2014/serial.cpp", - MAME_DIR .. "src/devices/bus/rc2014/serial.h", - MAME_DIR .. "src/devices/bus/rc2014/cf.cpp", - MAME_DIR .. "src/devices/bus/rc2014/cf.h", MAME_DIR .. "src/devices/bus/rc2014/rtc.cpp", MAME_DIR .. "src/devices/bus/rc2014/rtc.h", + MAME_DIR .. "src/devices/bus/rc2014/serial.cpp", + MAME_DIR .. "src/devices/bus/rc2014/serial.h", MAME_DIR .. "src/devices/bus/rc2014/sound.cpp", MAME_DIR .. "src/devices/bus/rc2014/sound.h", - MAME_DIR .. "src/devices/bus/rc2014/ide.cpp", - MAME_DIR .. "src/devices/bus/rc2014/ide.h", - MAME_DIR .. "src/devices/bus/rc2014/fdc.cpp", - MAME_DIR .. "src/devices/bus/rc2014/fdc.h", - MAME_DIR .. "src/devices/bus/rc2014/micro.cpp", - MAME_DIR .. "src/devices/bus/rc2014/micro.h", + MAME_DIR .. "src/devices/bus/rc2014/z80cpu.cpp", + MAME_DIR .. "src/devices/bus/rc2014/z80cpu.h", } end diff --git a/src/devices/bus/rc2014/cf.cpp b/src/devices/bus/rc2014/cf.cpp index fa551970505..c30da3f429e 100644 --- a/src/devices/bus/rc2014/cf.cpp +++ b/src/devices/bus/rc2014/cf.cpp @@ -26,6 +26,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; DECLARE_WRITE_LINE_MEMBER( tx_w ) { m_bus->tx_w(state); } @@ -45,6 +46,10 @@ compact_flash_device::compact_flash_device(const machine_config &mconfig, const void compact_flash_device::device_start() { +} + +void compact_flash_device::device_reset() +{ // A15-A8 and A7 not connected m_bus->installer(AS_IO)->install_readwrite_handler(0x10, 0x17, 0, 0xff80, 0, read8sm_delegate(*this, FUNC(compact_flash_device::ide_cs0_r)), write8sm_delegate(*this, FUNC(compact_flash_device::ide_cs0_w))); } diff --git a/src/devices/bus/rc2014/fdc.cpp b/src/devices/bus/rc2014/fdc.cpp index c1427a637e1..ba8ce96d7ab 100644 --- a/src/devices/bus/rc2014/fdc.cpp +++ b/src/devices/bus/rc2014/fdc.cpp @@ -8,10 +8,11 @@ #include "emu.h" #include "fdc.h" + +#include "machine/upd765.h" #include "imagedev/floppy.h" #include "formats/imd_dsk.h" #include "formats/pc_dsk.h" -#include "machine/upd765.h" namespace { @@ -160,7 +161,7 @@ protected: virtual ioport_constructor device_input_ports() const override; // DACK confirmation is same as pulsing TC - uint8_t dack_r() { m_fdc->tc_w(true); m_fdc->tc_w(false); return 0xff;} + uint8_t dack_r(address_space &space, offs_t) { m_fdc->tc_w(true); m_fdc->tc_w(false); return space.unmap(); } private: required_ioport m_addr; required_ioport_array<2> m_jp; @@ -191,7 +192,8 @@ void rc2014_wd37c65_device::device_reset() // A15-A8 and A0 and A1 not connected m_bus->installer(AS_IO)->install_write_handler(base+0x08, base+0x08, 0, 0xff06, 0, write8smo_delegate(m_fdc, FUNC(wd37c65c_device::ccr_w))); - m_bus->installer(AS_IO)->install_readwrite_handler(base+0x18, base+0x18, 0, 0xff06, 0, read8smo_delegate(*this, FUNC(rc2014_wd37c65_device::dack_r)), write8smo_delegate(m_fdc, FUNC(wd37c65c_device::dor_w))); + m_bus->installer(AS_IO)->install_write_handler(base+0x18, base+0x18, 0, 0xff06, 0, write8smo_delegate(m_fdc, FUNC(wd37c65c_device::dor_w))); + m_bus->installer(AS_IO)->install_read_handler(base+0x18, base+0x18, 0, 0xff06, 0, read8m_delegate(*this, FUNC(rc2014_wd37c65_device::dack_r))); // TODO: Use jumpers } diff --git a/src/devices/bus/rc2014/micro.cpp b/src/devices/bus/rc2014/micro.cpp index afbc9dc144f..10f3b5c3e8e 100644 --- a/src/devices/bus/rc2014/micro.cpp +++ b/src/devices/bus/rc2014/micro.cpp @@ -78,14 +78,14 @@ void rc2014_micro::device_start() std::fill_n(m_ram.get(), 0x8000, 0xff); save_pointer(NAME(m_ram), 0x8000); m_bus->installer(AS_PROGRAM)->install_ram(0x8000, 0xffff, m_ram.get()); +} +void rc2014_micro::device_reset() +{ // Setup ACIA // A15-A8 and A5-A1 not connected m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x81, 0, 0xff3e, 0, read8sm_delegate(*m_acia, FUNC(acia6850_device::read)), write8sm_delegate(*m_acia, FUNC(acia6850_device::write))); -} -void rc2014_micro::device_reset() -{ // Setup ROM if (m_rom_present->read()) m_bus->installer(AS_PROGRAM)->install_rom(0x0000, 0x1fff, 0x0000, m_rom->base() + (m_rom_selector->read() & 7) * 0x2000); @@ -189,22 +189,23 @@ protected: uint8_t ide_cs0_r(offs_t offset) { return m_ata->cs0_r(offset); } void ide_cs0_w(offs_t offset, uint8_t data) { m_ata->cs0_w(offset, data); } - void reset_bank_w(offs_t, uint8_t) { m_bank = 0; update_banks(); } - void toggle_bank_w(offs_t, uint8_t) { m_bank = m_bank ? 0 : 1; update_banks(); } - void ram_w(offs_t offset, uint8_t data) { m_ram[offset] = data; } + void reset_bank_w(offs_t, uint8_t) { m_view_num = 0; update_banks(); } + void toggle_bank_w(offs_t, uint8_t) { m_view_num = m_view_num ? 0 : 1; update_banks(); } private: - void update_banks(); + void update_banks() { m_view.select(m_view_num); } // base-class members - uint8_t m_bank; - uint8_t m_selected_bank; + uint8_t m_view_num; std::unique_ptr<u8[]> m_ram; required_device<ata_interface_device> m_ata; required_device<rc2014_bus_device> m_rc2014_bus; required_memory_region m_rom; required_ioport m_jp1; + memory_view m_view; + memory_bank_creator m_rombank; + memory_bank_creator m_rambank; }; rc2014_mini_cpm::rc2014_mini_cpm(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) @@ -214,6 +215,9 @@ rc2014_mini_cpm::rc2014_mini_cpm(const machine_config &mconfig, const char *tag, , m_rc2014_bus(*this, ":bus") , m_rom(*this, "rom") , m_jp1(*this, "JP1-JP2") + , m_view(*this, "view") + , m_rombank(*this, "bank") + , m_rambank(*this, "ram") { } @@ -223,34 +227,37 @@ void rc2014_mini_cpm::device_start() m_ram = std::make_unique<u8[]>(0x8000); std::fill_n(m_ram.get(), 0x8000, 0xff); save_pointer(NAME(m_ram), 0x8000); - save_item(NAME(m_bank)); + save_item(NAME(m_view_num)); + + // Install RAM/ROM + m_bus->installer(AS_PROGRAM)->install_view(0x0000, 0x7fff, m_view); + m_view[0].install_read_bank(0x0000, 0x3fff, m_rombank); + m_view[0].install_write_bank(0x0000, 0x3fff, m_rambank); + m_view[1].install_readwrite_bank(0x0000, 0x7fff, m_rambank); + // Setup banks + m_rombank->configure_entry(0, m_rom->base() + 0x0000); + m_rombank->configure_entry(1, m_rom->base() + 0x4000); + m_rombank->configure_entry(2, m_rom->base() + 0x8000); + m_rombank->configure_entry(3, m_rom->base() + 0xc000); + + m_rambank->configure_entry(0, m_ram.get()); +} + +void rc2014_mini_cpm::device_reset() +{ // A15-A8, A7 and A2-A0 not connected, A6 must be 0 m_bus->installer(AS_IO)->install_write_handler(0x30, 0x30, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(rc2014_mini_cpm::reset_bank_w))); m_bus->installer(AS_IO)->install_write_handler(0x38, 0x38, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(rc2014_mini_cpm::toggle_bank_w))); // A15-A8 and A7 not connected m_bus->installer(AS_IO)->install_readwrite_handler(0x10, 0x17, 0, 0xff80, 0, read8sm_delegate(*this, FUNC(rc2014_mini_cpm::ide_cs0_r)), write8sm_delegate(*this, FUNC(rc2014_mini_cpm::ide_cs0_w))); -} -void rc2014_mini_cpm::device_reset() -{ - m_bank = 0; - m_selected_bank = m_jp1->read(); + // Set default banks + m_view_num = 0; + m_rombank->set_entry(m_jp1->read()); update_banks(); } -void rc2014_mini_cpm::update_banks() -{ - if (m_bank == 0) - { - m_bus->installer(AS_PROGRAM)->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(rc2014_mini_cpm::ram_w))); - m_bus->installer(AS_PROGRAM)->install_rom(0x0000, 0x3fff, 0x0000, m_rom->base() + (m_selected_bank * 0x4000)); - } - else - { - m_bus->installer(AS_PROGRAM)->install_ram(0x0000, 0x7fff, m_ram.get()); - } -} void rc2014_mini_cpm::device_add_mconfig(machine_config &config) { ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, true); diff --git a/src/devices/bus/rc2014/modules.cpp b/src/devices/bus/rc2014/modules.cpp index 3dc5bb6f5ee..7e27e7d65e6 100644 --- a/src/devices/bus/rc2014/modules.cpp +++ b/src/devices/bus/rc2014/modules.cpp @@ -9,18 +9,18 @@ #include "emu.h" #include "bus/rc2014/rc2014.h" -#include "bus/rc2014/z80cpu.h" +#include "bus/rc2014/cf.h" #include "bus/rc2014/clock.h" +#include "bus/rc2014/fdc.h" +#include "bus/rc2014/ide.h" +#include "bus/rc2014/micro.h" #include "bus/rc2014/ram.h" #include "bus/rc2014/rom.h" #include "bus/rc2014/romram.h" -#include "bus/rc2014/serial.h" -#include "bus/rc2014/cf.h" #include "bus/rc2014/rtc.h" +#include "bus/rc2014/serial.h" #include "bus/rc2014/sound.h" -#include "bus/rc2014/ide.h" -#include "bus/rc2014/fdc.h" -#include "bus/rc2014/micro.h" +#include "bus/rc2014/z80cpu.h" void rc2014_bus_modules(device_slot_interface &device) { diff --git a/src/devices/bus/rc2014/ram.cpp b/src/devices/bus/rc2014/ram.cpp index 633197c0535..dc7c89ae170 100644 --- a/src/devices/bus/rc2014/ram.cpp +++ b/src/devices/bus/rc2014/ram.cpp @@ -69,7 +69,6 @@ protected: virtual ioport_constructor device_input_ports() const override; DECLARE_WRITE_LINE_MEMBER( page_w ) { m_bank = state; update_banks(); } - void ram_w(offs_t offset, uint8_t data) { m_ram[offset] = data; } virtual void update_banks() = 0; @@ -105,7 +104,7 @@ void ram_64k_base::device_reset() static INPUT_PORTS_START( ram_64k_jumpers ) PORT_START("START_ADDR") - PORT_CONFNAME( 0x4, 0x0, "Start address" ) + PORT_CONFNAME( 0x7, 0x0, "Start address" ) PORT_CONFSETTING( 0x0, "0x0000" ) PORT_CONFSETTING( 0x1, "0x1000" ) PORT_CONFSETTING( 0x2, "0x2000" ) @@ -165,7 +164,7 @@ void ram_64k_device::update_banks() if (m_paged->read() == 0) return; // If not paged skip if (m_bank == 0) - m_bus->installer(AS_PROGRAM)->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(ram_64k_device::ram_w))); + m_bus->installer(AS_PROGRAM)->install_writeonly(0x0000, 0x7fff, m_ram.get()); else m_bus->installer(AS_PROGRAM)->install_ram(0x0000, 0x7fff, m_ram.get()); } @@ -201,7 +200,7 @@ void ram_64k_device_40pin::device_reset() if (m_paged->read()) { m_bus->installer(AS_PROGRAM)->install_ram(0x8000, 0xffff, m_ram.get() + 0x8000); - m_bus->installer(AS_PROGRAM)->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(ram_64k_device_40pin::ram_w))); + m_bus->installer(AS_PROGRAM)->install_writeonly(0x0000, 0x7fff, m_ram.get()); } else { diff --git a/src/devices/bus/rc2014/rc2014.cpp b/src/devices/bus/rc2014/rc2014.cpp index 1000f1a5f58..26feec22365 100644 --- a/src/devices/bus/rc2014/rc2014.cpp +++ b/src/devices/bus/rc2014/rc2014.cpp @@ -57,6 +57,11 @@ void rc2014_bus_device::device_start() m_user4.resolve_safe(); } +void rc2014_bus_device::device_reset() +{ + installer(AS_IO)->unmap_readwrite(0, (1 << installer(AS_IO)->space_config().addr_width()) - 1); +} + void rc2014_bus_device::set_bus_clock(u32 clock) { set_clock(clock); diff --git a/src/devices/bus/rc2014/rc2014.h b/src/devices/bus/rc2014/rc2014.h index e04c083b6e6..da7284edc7c 100644 --- a/src/devices/bus/rc2014/rc2014.h +++ b/src/devices/bus/rc2014/rc2014.h @@ -106,6 +106,7 @@ protected: rc2014_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override; + virtual void device_reset() override; private: address_space_installer *m_installer[4]; diff --git a/src/devices/bus/rc2014/rom.cpp b/src/devices/bus/rc2014/rom.cpp index 195a71c2319..61d0d8bb191 100644 --- a/src/devices/bus/rc2014/rom.cpp +++ b/src/devices/bus/rc2014/rom.cpp @@ -148,10 +148,6 @@ pagable_rom_device::pagable_rom_device(const machine_config &mconfig, const char void pagable_rom_device::device_start() { save_item(NAME(m_bank)); - - // A15-A8, A7 and A2-A0 not connected, A6 must be 0 - m_bus->installer(AS_IO)->install_write_handler(0x30, 0x30, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::reset_bank_w))); - m_bus->installer(AS_IO)->install_write_handler(0x38, 0x38, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::toggle_bank_w))); } void pagable_rom_device::device_reset() @@ -170,6 +166,10 @@ void pagable_rom_device::device_reset() m_start_offset &= page_mask[m_page_size_conf->read()]; m_end_addr = page_size[m_page_size_conf->read()] - 1; reset_bank_w(0,0); + + // A15-A8, A7 and A2-A0 not connected, A6 must be 0 + m_bus->installer(AS_IO)->install_write_handler(0x30, 0x30, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::reset_bank_w))); + m_bus->installer(AS_IO)->install_write_handler(0x38, 0x38, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::toggle_bank_w))); } void pagable_rom_device::update_banks() diff --git a/src/devices/bus/rc2014/romram.cpp b/src/devices/bus/rc2014/romram.cpp index 84ef50c6a55..bc7d0713e2e 100644 --- a/src/devices/bus/rc2014/romram.cpp +++ b/src/devices/bus/rc2014/romram.cpp @@ -33,18 +33,9 @@ protected: void page_w(offs_t offset, uint8_t data) { m_page_reg[offset & 3] = data & 0x3f; } void page_en_w(offs_t, uint8_t data) { m_page_en = data & 1; } - void mem0_w(offs_t offset, uint8_t data) { mem_w(offset, data, 0); } - void mem1_w(offs_t offset, uint8_t data) { mem_w(offset, data, 1); } - void mem2_w(offs_t offset, uint8_t data) { mem_w(offset, data, 2); } - void mem3_w(offs_t offset, uint8_t data) { mem_w(offset, data, 3); } - - uint8_t mem0_r(offs_t offset) { return mem_r(offset, 0); } - uint8_t mem1_r(offs_t offset) { return mem_r(offset, 1); } - uint8_t mem2_r(offs_t offset) { return mem_r(offset, 2); } - uint8_t mem3_r(offs_t offset) { return mem_r(offset, 3); } private: - void mem_w(offs_t offset, uint8_t data, uint8_t bank); - uint8_t mem_r(offs_t offset, uint8_t bank); + template<uint8_t Bank> void mem_w(offs_t offset, uint8_t data); + template<uint8_t Bank> uint8_t mem_r(offs_t offset); uint8_t m_page_reg[4]; uint8_t m_page_en; @@ -70,15 +61,10 @@ void rom_ram_512k_device::device_start() save_item(NAME(m_page_en)); save_item(NAME(m_page_reg)); - // A15-A8 and A3 not connected - m_bus->installer(AS_IO)->install_write_handler(0x70, 0x73, 0, 0xff08, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_w))); - // A15-A8, A3, A1 and A0 not connected - m_bus->installer(AS_IO)->install_write_handler(0x74, 0x74, 0, 0xff0b, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_en_w))); - - m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x0000, 0x3fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem0_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem0_w))); - m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x4000, 0x7fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem1_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem1_w))); - m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x8000, 0xbfff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem2_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem2_w))); - m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0xc000, 0xffff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem3_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem3_w))); + m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x0000, 0x3fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<0>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<0>))); + m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x4000, 0x7fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<1>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<1>))); + m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x8000, 0xbfff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<2>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<2>))); + m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0xc000, 0xffff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<3>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<3>))); } void rom_ram_512k_device::device_reset() @@ -88,6 +74,11 @@ void rom_ram_512k_device::device_reset() m_page_reg[1] = 0; m_page_reg[2] = 0; m_page_reg[3] = 0; + + // A15-A8 and A3 not connected + m_bus->installer(AS_IO)->install_write_handler(0x70, 0x73, 0, 0xff08, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_w))); + // A15-A8, A3, A1 and A0 not connected + m_bus->installer(AS_IO)->install_write_handler(0x74, 0x74, 0, 0xff0b, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_en_w))); } void rom_ram_512k_device::device_add_mconfig(machine_config &config) @@ -95,33 +86,35 @@ void rom_ram_512k_device::device_add_mconfig(machine_config &config) SST_39SF040(config, m_flash); } -void rom_ram_512k_device::mem_w(offs_t offset, uint8_t data, uint8_t bank) +template<uint8_t Bank> +void rom_ram_512k_device::mem_w(offs_t offset, uint8_t data) { if (m_page_en) { - if (m_page_reg[bank] & 0x20) { - m_ram[offset + ((m_page_reg[bank] & 0x1f) << 14)] = data; + if (m_page_reg[Bank] & 0x20) { + m_ram[offset + ((m_page_reg[Bank] & 0x1f) << 14)] = data; } else { - m_flash->write(offset + (m_page_reg[bank] << 14), data); + m_flash->write(offset + (m_page_reg[Bank] << 14), data); } } else { - m_flash->write(offset + (bank << 14), data); + m_flash->write(offset + (Bank << 14), data); } } -uint8_t rom_ram_512k_device::mem_r(offs_t offset, uint8_t bank) +template<uint8_t Bank> +uint8_t rom_ram_512k_device::mem_r(offs_t offset) { if (m_page_en) { - if ((offset>>14 == 0) && (m_page_reg[bank] & 0x20)) { - return m_ram[offset + ((m_page_reg[bank] & 0x1f) << 14)]; + if ((offset>>14 == 0) && (m_page_reg[Bank] & 0x20)) { + return m_ram[offset + ((m_page_reg[Bank] & 0x1f) << 14)]; } else { - return m_flash->read(offset + (m_page_reg[bank] << 14)); + return m_flash->read(offset + (m_page_reg[Bank] << 14)); } } - return m_flash->read(offset + (bank << 14)); + return m_flash->read(offset + (Bank << 14)); } ROM_START(rc2014_rom_ram_512k) diff --git a/src/devices/bus/rc2014/serial.cpp b/src/devices/bus/rc2014/serial.cpp index cdd47d5344b..1a3eff6a593 100644 --- a/src/devices/bus/rc2014/serial.cpp +++ b/src/devices/bus/rc2014/serial.cpp @@ -28,6 +28,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; virtual void device_resolve_objects() override; virtual void device_add_mconfig(machine_config &config) override; @@ -46,6 +47,10 @@ serial_io_device::serial_io_device(const machine_config &mconfig, const char *ta void serial_io_device::device_start() { +} + +void serial_io_device::device_reset() +{ // A15-A8 and A5-A1 not connected m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x81, 0, 0xff3e, 0, read8sm_delegate(*m_acia, FUNC(acia6850_device::read)), write8sm_delegate(*m_acia, FUNC(acia6850_device::write))); } @@ -175,7 +180,7 @@ public: protected: // device-level overrides - virtual void device_start() override; + virtual void device_reset() override; virtual void device_resolve_objects() override; // base-class overrides @@ -190,8 +195,9 @@ dual_serial_device::dual_serial_device(const machine_config &mconfig, const char { } -void dual_serial_device::device_start() +void dual_serial_device::device_reset() { + dual_serial_base::device_reset(); // A15-A8 and A2 not connected m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x80, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::ca_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::ca_w))); m_bus->installer(AS_IO)->install_readwrite_handler(0x81, 0x81, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::da_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::da_w))); @@ -224,7 +230,7 @@ public: protected: // device-level overrides - virtual void device_start() override; + virtual void device_reset() override; virtual void device_resolve_objects() override; // base-class overrides @@ -239,8 +245,9 @@ dual_serial_device_40pin::dual_serial_device_40pin(const machine_config &mconfig { } -void dual_serial_device_40pin::device_start() +void dual_serial_device_40pin::device_reset() { + dual_serial_base::device_reset(); // A15-A8 and A2 not connected m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x80, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::ca_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::ca_w))); m_bus->installer(AS_IO)->install_readwrite_handler(0x81, 0x81, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::da_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::da_w))); |