diff options
Diffstat (limited to 'src/devices/bus/msx_cart/ink.cpp')
-rw-r--r-- | src/devices/bus/msx_cart/ink.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/devices/bus/msx_cart/ink.cpp b/src/devices/bus/msx_cart/ink.cpp index e3053a5da7d..abf48b37154 100644 --- a/src/devices/bus/msx_cart/ink.cpp +++ b/src/devices/bus/msx_cart/ink.cpp @@ -22,13 +22,13 @@ msx_cart_ink_device::msx_cart_ink_device(const machine_config &mconfig, const ch { } -ROM_START( msx_cart_ink ) +ROM_START(msx_cart_ink) ROM_REGION(0x80000, "flash", ROMREGION_ERASEFF) ROM_END const tiny_rom_entry *msx_cart_ink_device::device_rom_region() const { - return ROM_NAME( msx_cart_ink ); + return ROM_NAME(msx_cart_ink); } void msx_cart_ink_device::device_add_mconfig(machine_config &config) @@ -38,18 +38,24 @@ void msx_cart_ink_device::device_add_mconfig(machine_config &config) void msx_cart_ink_device::initialize_cartridge() { - size_t size = get_rom_size() > 0x80000 ? 0x80000 : get_rom_size(); - memcpy(memregion("flash")->base(), get_rom_base(), size); + size_t size = std::min<size_t>(0x80000, get_rom_size()); + + u8 *flash = memregion("flash")->base(); + memcpy(flash, get_rom_base(), size); + + page(0)->install_rom(0x0000, 0x3fff, flash); + page(1)->install_rom(0x4000, 0x7fff, flash + 0x4000); + page(2)->install_rom(0x8000, 0xbfff, flash + 0x8000); + page(3)->install_rom(0xc000, 0xffff, flash + 0xc000); + page(0)->install_write_handler(0x0000, 0x3fff, write8sm_delegate(*this, FUNC(msx_cart_ink_device::write_page<0>))); + page(1)->install_write_handler(0x4000, 0x7fff, write8sm_delegate(*this, FUNC(msx_cart_ink_device::write_page<1>))); + page(2)->install_write_handler(0x8000, 0xbfff, write8sm_delegate(*this, FUNC(msx_cart_ink_device::write_page<2>))); + page(3)->install_write_handler(0xc000, 0xffff, write8sm_delegate(*this, FUNC(msx_cart_ink_device::write_page<3>))); } - -uint8_t msx_cart_ink_device::read_cart(offs_t offset) -{ - return m_flash->read(offset); -} - -void msx_cart_ink_device::write_cart(offs_t offset, uint8_t data) +template <int Page> +void msx_cart_ink_device::write_page(offs_t offset, u8 data) { // /RD connects to flashrom A16-A18 - m_flash->write(offset | 0x70000, data); + m_flash->write(offset | 0x70000 | (Page * 0x4000), data); } |