diff options
Diffstat (limited to 'src/devices/bus/rc2014/romram.cpp')
-rw-r--r-- | src/devices/bus/rc2014/romram.cpp | 53 |
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) |