summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanović <mmicko@gmail.com>2022-05-16 21:12:28 +0200
committer GitHub <noreply@github.com>2022-05-17 05:12:28 +1000
commit6d595718f55e040a07aec8ca2bc70eeace038636 (patch)
treed42285c6abdb2565576f92bd7694ffecc3068a05
parente9ff2dd85a3513edb142b0ed6df64eb6eaebb148 (diff)
bus/rc2014 code review fixes (#9768)
* Unmap I/O space on bus reset and install I/O on card reset. * Cleaned up code.
-rw-r--r--scripts/src/bus.lua28
-rw-r--r--src/devices/bus/rc2014/cf.cpp5
-rw-r--r--src/devices/bus/rc2014/fdc.cpp8
-rw-r--r--src/devices/bus/rc2014/micro.cpp61
-rw-r--r--src/devices/bus/rc2014/modules.cpp12
-rw-r--r--src/devices/bus/rc2014/ram.cpp7
-rw-r--r--src/devices/bus/rc2014/rc2014.cpp5
-rw-r--r--src/devices/bus/rc2014/rc2014.h1
-rw-r--r--src/devices/bus/rc2014/rom.cpp8
-rw-r--r--src/devices/bus/rc2014/romram.cpp53
-rw-r--r--src/devices/bus/rc2014/serial.cpp15
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)));