summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/rc2014/romram.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/rc2014/romram.cpp')
-rw-r--r--src/devices/bus/rc2014/romram.cpp53
1 files changed, 23 insertions, 30 deletions
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)