From 832be042e93f3eb7fde6fc8b224659b7acdc23ff Mon Sep 17 00:00:00 2001 From: wilbertpol Date: Sun, 21 Apr 2024 19:04:04 +0100 Subject: msx/slot: Use arrays of memory views to make code more concise. (#12288) --- src/devices/bus/msx/slot/fs4600.cpp | 77 +++++++++++++++--------------- src/devices/bus/msx/slot/fs4600.h | 4 +- src/devices/bus/msx/slot/fsa1fm.cpp | 80 +++++++++++++------------------- src/devices/bus/msx/slot/fsa1fm.h | 7 +-- src/devices/bus/msx/slot/msx_write.cpp | 29 ++++++------ src/devices/bus/msx/slot/msx_write.h | 3 +- src/devices/bus/msx/slot/panasonic08.cpp | 57 +++++++++-------------- src/devices/bus/msx/slot/panasonic08.h | 6 +-- src/devices/bus/msx/slot/sony08.cpp | 29 ++++++------ src/devices/bus/msx/slot/sony08.h | 3 +- 10 files changed, 122 insertions(+), 173 deletions(-) diff --git a/src/devices/bus/msx/slot/fs4600.cpp b/src/devices/bus/msx/slot/fs4600.cpp index 62c2b43879d..7f947b5b7fd 100644 --- a/src/devices/bus/msx/slot/fs4600.cpp +++ b/src/devices/bus/msx/slot/fs4600.cpp @@ -17,9 +17,7 @@ msx_slot_fs4600_device::msx_slot_fs4600_device(const machine_config &mconfig, co , m_nvram(*this, "nvram") , m_rom_region(*this, finder_base::DUMMY_TAG) , m_rombank(*this, "rombank%u", 0U) - , m_view0(*this, "view0") - , m_view1(*this, "view1") - , m_view2(*this, "view2") + , m_view{ {*this, "view0"}, {*this, "view1"}, {*this, "view2"} } , m_region_offset(0) , m_sram_address(0) { @@ -46,47 +44,46 @@ void msx_slot_fs4600_device::device_start() for (int i = 0; i < 3; i++) m_rombank[i]->configure_entries(0, 0x40, m_rom_region->base() + m_region_offset, 0x4000); - page(0)->install_view(0x0000, 0x3fff, m_view0); - m_view0[0].install_read_bank(0x0000, 0x3fff, m_rombank[0]); - m_view0[1].install_read_bank(0x0000, 0x3fff, m_rombank[0]); - m_view0[1].install_write_handler(0x3ffa, 0x3ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); - m_view0[1].install_read_handler(0x3ffd, 0x3ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); - - page(1)->install_view(0x4000, 0x7fff, m_view1); - m_view1[0].install_read_bank(0x4000, 0x7fff, m_rombank[1]); - m_view1[0].install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<1>))); - m_view1[0].install_write_handler(0x6400, 0x6400, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<0>))); - m_view1[0].install_write_handler(0x7000, 0x7000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<2>))); - m_view1[1].install_read_bank(0x4000, 0x7fff, m_rombank[1]); - m_view1[1].install_write_handler(0x7ffa, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); - m_view1[1].install_read_handler(0x7ffd, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); - m_view1[2].install_read_bank(0x4000, 0x7fff, m_rombank[1]); - m_view1[2].install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<1>))); - m_view1[2].install_write_handler(0x6400, 0x6400, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<0>))); - m_view1[2].install_write_handler(0x7000, 0x7000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<2>))); - m_view1[2].install_read_handler(0x7ff0, 0x7ff5, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_r))); - m_view1[3].install_read_bank(0x4000, 0x7fff, m_rombank[1]); - m_view1[3].install_read_handler(0x7ff0, 0x7ff5, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_r))); - m_view1[3].install_write_handler(0x7ffa, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); - m_view1[3].install_read_handler(0x7ffd, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); + page(0)->install_view(0x0000, 0x3fff, m_view[0]); + m_view[0][0].install_read_bank(0x0000, 0x3fff, m_rombank[0]); + m_view[0][1].install_read_bank(0x0000, 0x3fff, m_rombank[0]); + m_view[0][1].install_write_handler(0x3ffa, 0x3ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); + m_view[0][1].install_read_handler(0x3ffd, 0x3ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); + + page(1)->install_view(0x4000, 0x7fff, m_view[1]); + m_view[1][0].install_read_bank(0x4000, 0x7fff, m_rombank[1]); + m_view[1][0].install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<1>))); + m_view[1][0].install_write_handler(0x6400, 0x6400, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<0>))); + m_view[1][0].install_write_handler(0x7000, 0x7000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<2>))); + m_view[1][1].install_read_bank(0x4000, 0x7fff, m_rombank[1]); + m_view[1][1].install_write_handler(0x7ffa, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); + m_view[1][1].install_read_handler(0x7ffd, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); + m_view[1][2].install_read_bank(0x4000, 0x7fff, m_rombank[1]); + m_view[1][2].install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<1>))); + m_view[1][2].install_write_handler(0x6400, 0x6400, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<0>))); + m_view[1][2].install_write_handler(0x7000, 0x7000, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_w<2>))); + m_view[1][2].install_read_handler(0x7ff0, 0x7ff5, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_r))); + m_view[1][3].install_read_bank(0x4000, 0x7fff, m_rombank[1]); + m_view[1][3].install_read_handler(0x7ff0, 0x7ff5, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::bank_r))); + m_view[1][3].install_write_handler(0x7ffa, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); + m_view[1][3].install_read_handler(0x7ffd, 0x7ffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); page(1)->install_write_handler(0x7ff9, 0x7ff9, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::control_w))); - page(2)->install_view(0x8000, 0xbfff, m_view2); - m_view2[0].install_read_bank(0x8000, 0xbfff, m_rombank[2]); - m_view2[1].install_read_bank(0x8000, 0xbfff, m_rombank[2]); - m_view2[1].install_write_handler(0xbffa, 0xbffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); - m_view2[1].install_read_handler(0xbffd, 0xbffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); + page(2)->install_view(0x8000, 0xbfff, m_view[2]); + m_view[2][0].install_read_bank(0x8000, 0xbfff, m_rombank[2]); + m_view[2][1].install_read_bank(0x8000, 0xbfff, m_rombank[2]); + m_view[2][1].install_write_handler(0xbffa, 0xbffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_w))); + m_view[2][1].install_read_handler(0xbffd, 0xbffd, emu::rw_delegate(*this, FUNC(msx_slot_fs4600_device::sram_r))); } void msx_slot_fs4600_device::device_reset() { - m_view0.select(0); - m_view1.select(0); - m_view2.select(0); - m_rombank[0]->set_entry(0); - m_rombank[1]->set_entry(0); - m_rombank[2]->set_entry(0); + for (int i = 0; i < 3; i++) + { + m_view[i].select(0); + m_rombank[i]->set_entry(0); + } } u8 msx_slot_fs4600_device::sram_r() @@ -132,7 +129,7 @@ void msx_slot_fs4600_device::bank_w(u8 data) void msx_slot_fs4600_device::control_w(u8 data) { - m_view0.select((data >> 1) & 0x01); - m_view1.select((data >> 1) & 0x03); - m_view2.select((data >> 1) & 0x01); + m_view[0].select((data >> 1) & 0x01); + m_view[1].select((data >> 1) & 0x03); + m_view[2].select((data >> 1) & 0x01); } diff --git a/src/devices/bus/msx/slot/fs4600.h b/src/devices/bus/msx/slot/fs4600.h index 736ddab499a..5061e9186bf 100644 --- a/src/devices/bus/msx/slot/fs4600.h +++ b/src/devices/bus/msx/slot/fs4600.h @@ -38,9 +38,7 @@ private: required_device m_nvram; required_memory_region m_rom_region; memory_bank_array_creator<3> m_rombank; - memory_view m_view0; - memory_view m_view1; - memory_view m_view2; + memory_view m_view[3]; u32 m_region_offset; u32 m_sram_address; std::vector m_sram; diff --git a/src/devices/bus/msx/slot/fsa1fm.cpp b/src/devices/bus/msx/slot/fsa1fm.cpp index de8f79937b7..ec6dc89e628 100644 --- a/src/devices/bus/msx/slot/fsa1fm.cpp +++ b/src/devices/bus/msx/slot/fsa1fm.cpp @@ -19,12 +19,7 @@ msx_slot_fsa1fm2_device::msx_slot_fsa1fm2_device(const machine_config &mconfig, , msx_internal_slot_interface(mconfig, *this) , m_rom_region(*this, finder_base::DUMMY_TAG) , m_bank(*this, "bank%u", 0U) - , m_view0(*this, "view0") - , m_view1(*this, "view1") - , m_view2(*this, "view2") - , m_view3(*this, "view3") - , m_view4(*this, "view4") - , m_view5(*this, "view5") + , m_view{ {*this, "view0"}, {*this, "view1"}, {*this, "view2"}, {*this, "view3"}, {*this, "view4"}, {*this, "view5"} } , m_region_offset(0) { } @@ -60,25 +55,25 @@ void msx_slot_fsa1fm2_device::device_start() } } - page(0)->install_view(0x0000, 0x1fff, m_view0); - m_view0[0].install_read_bank(0x0000, 0x1fff, m_bank[0]); - m_view0[1].install_readwrite_bank(0x0000, 0x1fff, m_bank[0]); - - page(0)->install_view(0x2000, 0x3fff, m_view1); - m_view1[0].install_read_bank(0x2000, 0x3fff, m_bank[1]); - m_view1[1].install_readwrite_bank(0x2000, 0x3fff, m_bank[1]); - - page(1)->install_view(0x4000, 0x5fff, m_view2); - m_view2[0].install_read_bank(0x4000, 0x5fff, m_bank[2]); - m_view2[1].install_readwrite_bank(0x4000, 0x5fff, m_bank[2]); - - page(1)->install_view(0x6000, 0x7fff, m_view3); - m_view3[0].install_read_bank(0x6000, 0x7fff, m_bank[3]); - m_view3[1].install_readwrite_bank(0x6000, 0x7fff, m_bank[3]); - m_view3[2].install_read_bank(0x6000, 0x7fff, m_bank[3]); - m_view3[2].install_read_handler(0x7ff0, 0x7ff7, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_r))); - m_view3[3].install_readwrite_bank(0x6000, 0x7fff, m_bank[3]); - m_view3[3].install_read_handler(0x7ff0, 0x7ff7, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_r))); + page(0)->install_view(0x0000, 0x1fff, m_view[0]); + m_view[0][0].install_read_bank(0x0000, 0x1fff, m_bank[0]); + m_view[0][1].install_readwrite_bank(0x0000, 0x1fff, m_bank[0]); + + page(0)->install_view(0x2000, 0x3fff, m_view[1]); + m_view[1][0].install_read_bank(0x2000, 0x3fff, m_bank[1]); + m_view[1][1].install_readwrite_bank(0x2000, 0x3fff, m_bank[1]); + + page(1)->install_view(0x4000, 0x5fff, m_view[2]); + m_view[2][0].install_read_bank(0x4000, 0x5fff, m_bank[2]); + m_view[2][1].install_readwrite_bank(0x4000, 0x5fff, m_bank[2]); + + page(1)->install_view(0x6000, 0x7fff, m_view[3]); + m_view[3][0].install_read_bank(0x6000, 0x7fff, m_bank[3]); + m_view[3][1].install_readwrite_bank(0x6000, 0x7fff, m_bank[3]); + m_view[3][2].install_read_bank(0x6000, 0x7fff, m_bank[3]); + m_view[3][2].install_read_handler(0x7ff0, 0x7ff7, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_r))); + m_view[3][3].install_readwrite_bank(0x6000, 0x7fff, m_bank[3]); + m_view[3][3].install_read_handler(0x7ff0, 0x7ff7, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_r))); page(1)->install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_w<2>))); page(1)->install_write_handler(0x6400, 0x6400, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_w<0>))); page(1)->install_write_handler(0x6800, 0x6800, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_w<3>))); @@ -87,27 +82,22 @@ void msx_slot_fsa1fm2_device::device_start() page(1)->install_write_handler(0x7800, 0x7800, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::bank_w<5>))); page(1)->install_write_handler(0x7ff9, 0x7ff9, emu::rw_delegate(*this, FUNC(msx_slot_fsa1fm2_device::control_w))); - page(2)->install_view(0x8000, 0x9fff, m_view4); - m_view4[0].install_read_bank(0x8000, 0x9fff, m_bank[4]); - m_view4[1].install_readwrite_bank(0x8000, 0x9fff, m_bank[4]); + page(2)->install_view(0x8000, 0x9fff, m_view[4]); + m_view[4][0].install_read_bank(0x8000, 0x9fff, m_bank[4]); + m_view[4][1].install_readwrite_bank(0x8000, 0x9fff, m_bank[4]); - page(2)->install_view(0xa000, 0xbfff, m_view5); - m_view5[0].install_read_bank(0xa000, 0xbfff, m_bank[5]); - m_view5[1].install_readwrite_bank(0xa000, 0xbfff, m_bank[5]); + page(2)->install_view(0xa000, 0xbfff, m_view[5]); + m_view[5][0].install_read_bank(0xa000, 0xbfff, m_bank[5]); + m_view[5][1].install_readwrite_bank(0xa000, 0xbfff, m_bank[5]); } void msx_slot_fsa1fm2_device::device_reset() { - m_view0.select(0); - m_view1.select(0); - m_view2.select(0); - m_view3.select(0); - m_view4.select(0); - m_view5.select(0); m_control = 0; for (int i = 0; i < 6 ; i++) { + m_view[i].select(0); m_selected_bank[i] = 0xa8; m_bank[i]->set_entry(0x28); } @@ -117,18 +107,10 @@ template void msx_slot_fsa1fm2_device::set_view() { bool ram_active = (m_selected_bank[Bank] & 0xf4) == 0x84; - if (Bank == 0) - m_view0.select(ram_active ? 1 : 0); - if (Bank == 1) - m_view1.select(ram_active ? 1 : 0); - if (Bank == 2) - m_view2.select(ram_active ? 1 : 0); if (Bank == 3) - m_view3.select((ram_active ? 1 : 0) | (BIT(m_control, 2) ? 2 : 0)); - if (Bank == 4) - m_view4.select(ram_active ? 1 : 0); - if (Bank == 5) - m_view5.select(ram_active ? 1 : 0); + m_view[3].select((ram_active ? 1 : 0) | (BIT(m_control, 2) ? 2 : 0)); + else if (Bank != 2) + m_view[Bank].select(ram_active ? 1 : 0); } template @@ -169,7 +151,7 @@ msx_slot_fsa1fm_device::msx_slot_fsa1fm_device(const machine_config &mconfig, co static INPUT_PORTS_START(fsa1fm) PORT_START("SWITCH") - PORT_CONFNAME(0x04, 0x00, "Firmware is") + PORT_CONFNAME(0x04, 0x00, "Firmware") PORT_CONFSETTING(0x04, "disabled") PORT_CONFSETTING(0x00, "enabled") INPUT_PORTS_END diff --git a/src/devices/bus/msx/slot/fsa1fm.h b/src/devices/bus/msx/slot/fsa1fm.h index 51028e18311..660baa43e99 100644 --- a/src/devices/bus/msx/slot/fsa1fm.h +++ b/src/devices/bus/msx/slot/fsa1fm.h @@ -37,12 +37,7 @@ private: required_memory_region m_rom_region; memory_bank_array_creator<6> m_bank; - memory_view m_view0; - memory_view m_view1; - memory_view m_view2; - memory_view m_view3; - memory_view m_view4; - memory_view m_view5; + memory_view m_view[6]; uint32_t m_region_offset; uint8_t m_selected_bank[6]; bool m_ram_active[6]; diff --git a/src/devices/bus/msx/slot/msx_write.cpp b/src/devices/bus/msx/slot/msx_write.cpp index 2241252a219..dca08d30f10 100644 --- a/src/devices/bus/msx/slot/msx_write.cpp +++ b/src/devices/bus/msx/slot/msx_write.cpp @@ -19,8 +19,7 @@ msx_slot_msx_write_device::msx_slot_msx_write_device(const machine_config &mconf , m_rom_region(*this, finder_base::DUMMY_TAG) , m_switch_port(*this, "SWITCH") , m_rombank(*this, "rombank%u", 0U) - , m_view1(*this, "view1") - , m_view2(*this, "view2") + , m_view{ {*this, "view1"}, {*this, "view2"} } , m_region_offset(0) , m_enabled(true) { @@ -49,26 +48,26 @@ void msx_slot_msx_write_device::device_start() m_rombank[0]->configure_entries(0, 0x20, m_rom_region->base() + m_region_offset, 0x4000); m_rombank[1]->configure_entries(0, 0x20, m_rom_region->base() + m_region_offset, 0x4000); - page(1)->install_view(0x4000, 0x7fff, m_view1); - m_view1[0].install_read_bank(0x4000, 0x7fff, m_rombank[0]); - m_view1[0].install_write_handler(0x6fff, 0x6fff, emu::rw_delegate(*this, FUNC(msx_slot_msx_write_device::bank_w<0>))); - m_view1[0].install_write_handler(0x7fff, 0x7fff, emu::rw_delegate(*this, FUNC(msx_slot_msx_write_device::bank_w<1>))); - m_view1[1]; + page(1)->install_view(0x4000, 0x7fff, m_view[0]); + m_view[0][0].install_read_bank(0x4000, 0x7fff, m_rombank[0]); + m_view[0][0].install_write_handler(0x6fff, 0x6fff, emu::rw_delegate(*this, FUNC(msx_slot_msx_write_device::bank_w<0>))); + m_view[0][0].install_write_handler(0x7fff, 0x7fff, emu::rw_delegate(*this, FUNC(msx_slot_msx_write_device::bank_w<1>))); + m_view[0][1]; - page(2)->install_view(0x8000, 0xbfff, m_view2); - m_view2[0].install_read_bank(0x8000, 0xbfff, m_rombank[1]); - m_view2[1]; + page(2)->install_view(0x8000, 0xbfff, m_view[1]); + m_view[1][0].install_read_bank(0x8000, 0xbfff, m_rombank[1]); + m_view[1][1]; } void msx_slot_msx_write_device::device_reset() { m_enabled = BIT(m_switch_port->read(), 0); - m_rombank[0]->set_entry(0); - m_rombank[1]->set_entry(1); - - m_view1.select(m_enabled ? 0 : 1); - m_view2.select(m_enabled ? 0 : 1); + for (int i = 0; i < 2; i++) + { + m_rombank[i]->set_entry(i); + m_view[i].select(m_enabled ? 0 : 1); + } } template diff --git a/src/devices/bus/msx/slot/msx_write.h b/src/devices/bus/msx/slot/msx_write.h index 70d8203df06..64c9d9f97e7 100644 --- a/src/devices/bus/msx/slot/msx_write.h +++ b/src/devices/bus/msx/slot/msx_write.h @@ -31,8 +31,7 @@ private: required_memory_region m_rom_region; required_ioport m_switch_port; memory_bank_array_creator<2> m_rombank; - memory_view m_view1; - memory_view m_view2; + memory_view m_view[2]; u32 m_region_offset; bool m_enabled; }; diff --git a/src/devices/bus/msx/slot/panasonic08.cpp b/src/devices/bus/msx/slot/panasonic08.cpp index 2a96bd24c68..5de4c1d1913 100644 --- a/src/devices/bus/msx/slot/panasonic08.cpp +++ b/src/devices/bus/msx/slot/panasonic08.cpp @@ -22,11 +22,7 @@ msx_slot_panasonic08_device::msx_slot_panasonic08_device(const machine_config &m , m_nvram(*this, "nvram") , m_rom_region(*this, finder_base::DUMMY_TAG) , m_bank(*this, "bank%u", 0U) - , m_view0(*this, "view0") - , m_view1(*this, "view1") - , m_view3(*this, "view3") - , m_view4(*this, "view4") - , m_view5(*this, "view5") + , m_view{ {*this, "view0"}, {*this, "view1"}, {*this, "view2"}, {*this, "view3"}, {*this, "view4"}, {*this, "view5"} } , m_region_offset(0) , m_control(0) { @@ -61,21 +57,21 @@ void msx_slot_panasonic08_device::device_start() m_bank[i]->configure_entry(0x83, m_sram.data() + 0x2000); } - page(0)->install_view(0x0000, 0x1fff, m_view0); - m_view0[0].install_read_bank(0x0000, 0x1fff, m_bank[0]); - m_view0[1].install_readwrite_bank(0x0000, 0x1fff, m_bank[0]); + page(0)->install_view(0x0000, 0x1fff, m_view[0]); + m_view[0][0].install_read_bank(0x0000, 0x1fff, m_bank[0]); + m_view[0][1].install_readwrite_bank(0x0000, 0x1fff, m_bank[0]); - page(0)->install_view(0x2000, 0x3fff, m_view1); - m_view1[0].install_read_bank(0x2000, 0x3fff, m_bank[1]); - m_view1[1].install_readwrite_bank(0x2000, 0x3fff, m_bank[1]); + page(0)->install_view(0x2000, 0x3fff, m_view[1]); + m_view[1][0].install_read_bank(0x2000, 0x3fff, m_bank[1]); + m_view[1][1].install_readwrite_bank(0x2000, 0x3fff, m_bank[1]); // no sram writing in 4000-7fff? page(1)->install_read_bank(0x4000, 0x5fff, m_bank[2]); - page(1)->install_view(0x6000, 0x7fff, m_view3); - m_view3[0].install_read_bank(0x6000, 0x7fff, m_bank[3]); - m_view3[1].install_read_bank(0x6000, 0x7fff, m_bank[3]); - m_view3[1].install_read_handler(0x7ff0, 0x7ff7, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::bank_r))); + page(1)->install_view(0x6000, 0x7fff, m_view[3]); + m_view[3][0].install_read_bank(0x6000, 0x7fff, m_bank[3]); + m_view[3][1].install_read_bank(0x6000, 0x7fff, m_bank[3]); + m_view[3][1].install_read_handler(0x7ff0, 0x7ff7, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::bank_r))); page(1)->install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::bank_w<0>))); page(1)->install_write_handler(0x6400, 0x6400, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::bank_w<1>))); page(1)->install_write_handler(0x6800, 0x6800, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::bank_w<2>))); @@ -84,13 +80,13 @@ void msx_slot_panasonic08_device::device_start() page(1)->install_write_handler(0x7800, 0x7800, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::bank_w<5>))); page(1)->install_write_handler(0x7ff9, 0x7ff9, emu::rw_delegate(*this, FUNC(msx_slot_panasonic08_device::control_w))); - page(2)->install_view(0x8000, 0x9fff, m_view4); - m_view4[0].install_read_bank(0x8000, 0x9fff, m_bank[4]); - m_view4[1].install_readwrite_bank(0x8000, 0x9fff, m_bank[4]); + page(2)->install_view(0x8000, 0x9fff, m_view[4]); + m_view[4][0].install_read_bank(0x8000, 0x9fff, m_bank[4]); + m_view[4][1].install_readwrite_bank(0x8000, 0x9fff, m_bank[4]); - page(2)->install_view(0xa000, 0xbfff, m_view5); - m_view5[0].install_read_bank(0xa000, 0xbfff, m_bank[5]); - m_view5[1].install_readwrite_bank(0xa000, 0xbfff, m_bank[5]); + page(2)->install_view(0xa000, 0xbfff, m_view[5]); + m_view[5][0].install_read_bank(0xa000, 0xbfff, m_bank[5]); + m_view[5][1].install_readwrite_bank(0xa000, 0xbfff, m_bank[5]); } void msx_slot_panasonic08_device::device_reset() @@ -100,28 +96,19 @@ void msx_slot_panasonic08_device::device_reset() { m_selected_bank[i] = 0; m_bank[i]->set_entry(0); + if (i != 2) + m_view[i].select(0); } - m_view0.select(0); - m_view1.select(0); - m_view3.select(0); - m_view4.select(0); - m_view5.select(0); } template void msx_slot_panasonic08_device::set_view() { bool ram_active = (m_selected_bank[Bank] >= 0x80 && m_selected_bank[Bank] < 0x84); - if (Bank == 0) - m_view0.select(ram_active ? 1 : 0); - if (Bank == 1) - m_view1.select(ram_active ? 1 : 0); if (Bank == 3) - m_view3.select(BIT(m_control, 2) ? 1 : 0); - if (Bank == 4) - m_view4.select(ram_active ? 1 : 0); - if (Bank == 5) - m_view5.select(ram_active ? 1 : 0); + m_view[3].select(BIT(m_control, 2) ? 1 : 0); + else if (Bank != 2) + m_view[Bank].select(ram_active ? 1 : 0); } template diff --git a/src/devices/bus/msx/slot/panasonic08.h b/src/devices/bus/msx/slot/panasonic08.h index 4357b4e8ad0..6fd7ace83f4 100644 --- a/src/devices/bus/msx/slot/panasonic08.h +++ b/src/devices/bus/msx/slot/panasonic08.h @@ -37,11 +37,7 @@ private: required_device m_nvram; required_memory_region m_rom_region; memory_bank_array_creator<6> m_bank; - memory_view m_view0; - memory_view m_view1; - memory_view m_view3; - memory_view m_view4; - memory_view m_view5; + memory_view m_view[6]; u32 m_region_offset; u8 m_selected_bank[6]; u8 m_control; diff --git a/src/devices/bus/msx/slot/sony08.cpp b/src/devices/bus/msx/slot/sony08.cpp index e08efccf9cb..bf13f091ee1 100644 --- a/src/devices/bus/msx/slot/sony08.cpp +++ b/src/devices/bus/msx/slot/sony08.cpp @@ -19,8 +19,7 @@ msx_slot_sony08_device::msx_slot_sony08_device(const machine_config &mconfig, co , m_nvram(*this, "nvram") , m_rom_region(*this, finder_base::DUMMY_TAG) , m_rombank(*this, "rombank%u", 0U) - , m_view0(*this, "view0") - , m_view1(*this, "view1") + , m_view{ {*this, "view0"}, {*this, "view1"} } , m_region_offset(0) { } @@ -47,17 +46,17 @@ void msx_slot_sony08_device::device_start() m_rombank[4]->configure_entries(0, 0x100, m_rom_region->base() + m_region_offset + 0x80000, 0x800); m_rombank[5]->configure_entries(0, 0x100, m_rom_region->base() + m_region_offset + 0x80000, 0x800); - page(0)->install_view(0x0000, 0x3fff, m_view0); - m_view0[0]; - m_view0[1].install_ram(0x0000, 0x3fff, m_sram.data()); + page(0)->install_view(0x0000, 0x3fff, m_view[0]); + m_view[0][0]; + m_view[0][1].install_ram(0x0000, 0x3fff, m_sram.data()); page(1)->install_read_bank(0x4000, 0x5fff, m_rombank[0]); page(1)->install_write_handler(0x4fff, 0x4fff, emu::rw_delegate(*this, FUNC(msx_slot_sony08_device::bank_w<0>))); - page(1)->install_view(0x6000, 0x7fff, m_view1); - m_view1[0].install_read_bank(0x6000, 0x7fff, m_rombank[1]); - m_view1[1].install_read_bank(0x6000, 0x6fff, m_rombank[1]); - m_view1[1].install_read_bank(0x7000, 0x77ff, m_rombank[4]); - m_view1[1].install_read_bank(0x7800, 0x7fff, m_rombank[5]); + page(1)->install_view(0x6000, 0x7fff, m_view[1]); + m_view[1][0].install_read_bank(0x6000, 0x7fff, m_rombank[1]); + m_view[1][1].install_read_bank(0x6000, 0x6fff, m_rombank[1]); + m_view[1][1].install_read_bank(0x7000, 0x77ff, m_rombank[4]); + m_view[1][1].install_read_bank(0x7800, 0x7fff, m_rombank[5]); page(1)->install_write_handler(0x6fff, 0x6fff, emu::rw_delegate(*this, FUNC(msx_slot_sony08_device::bank_w<1>))); page(1)->install_write_handler(0x77ff, 0x77ff, emu::rw_delegate(*this, FUNC(msx_slot_sony08_device::bank_w<4>))); page(1)->install_write_handler(0x7fff, 0x7fff, emu::rw_delegate(*this, FUNC(msx_slot_sony08_device::bank_w<5>))); @@ -69,8 +68,8 @@ void msx_slot_sony08_device::device_start() void msx_slot_sony08_device::device_reset() { - m_view0.select(0); - m_view1.select(0); + for (int i = 0; i < 2; i++) + m_view[i].select(0); for (int i = 0; i < 6; i++) m_rombank[i]->set_entry(0); } @@ -83,8 +82,6 @@ void msx_slot_sony08_device::bank_w(u8 data) else m_rombank[Bank]->set_entry(data & 0x7f); - if (Bank == 0) - m_view0.select(BIT(data, 7) ? 1 : 0); - if (Bank == 1) - m_view1.select(BIT(data, 7) ? 1 : 0); + if (Bank < 2) + m_view[Bank].select(BIT(data, 7) ? 1 : 0); } diff --git a/src/devices/bus/msx/slot/sony08.h b/src/devices/bus/msx/slot/sony08.h index 22538a74a18..2fa9d9e89ca 100644 --- a/src/devices/bus/msx/slot/sony08.h +++ b/src/devices/bus/msx/slot/sony08.h @@ -34,8 +34,7 @@ private: required_device m_nvram; required_memory_region m_rom_region; memory_bank_array_creator<6> m_rombank; - memory_view m_view0; - memory_view m_view1; + memory_view m_view[2]; u32 m_region_offset; std::vector m_sram; }; -- cgit v1.2.3