summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/msx_cart/ink.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/msx_cart/ink.cpp')
-rw-r--r--src/devices/bus/msx_cart/ink.cpp30
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);
}