summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/tvg01.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/tvg01.cpp')
-rw-r--r--src/mame/drivers/tvg01.cpp34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/mame/drivers/tvg01.cpp b/src/mame/drivers/tvg01.cpp
index 7d280fea3e7..fbbe4141b04 100644
--- a/src/mame/drivers/tvg01.cpp
+++ b/src/mame/drivers/tvg01.cpp
@@ -72,6 +72,7 @@ public:
tvg01_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_player_inputs{{*this, "INP1.%u", 0U}, {*this, "INP2.%u", 0U}}
+ , m_banked_rom(*this, "banked_rom")
{
}
@@ -83,20 +84,23 @@ protected:
private:
template <int P> void input_select_w(u8 data);
u8 player_inputs_r();
+ void bank_select_w(u8 data);
+ u8 bank_r(offs_t offset);
void mem_map(address_map &map);
void io_map(address_map &map);
required_ioport_array<6> m_player_inputs[2];
+ required_region_ptr<u8> m_banked_rom;
u8 m_input_select[2];
+ u8 m_bank_select;
};
void tvg01_state::machine_start()
{
- membank("gfxbank")->configure_entries(0, 4, memregion("gfx")->base(), 0x4000);
-
save_item(NAME(m_input_select));
+ save_item(NAME(m_bank_select));
}
template <int P>
@@ -117,11 +121,27 @@ u8 tvg01_state::player_inputs_r()
return result;
}
+void tvg01_state::bank_select_w(u8 data)
+{
+ m_bank_select = data;
+}
+
+u8 tvg01_state::bank_r(offs_t offset)
+{
+ u8 result = 0xff;
+
+ for (int i = 0; i < 4; i++)
+ if (!BIT(m_bank_select, i))
+ result &= m_banked_rom[i * 0x4000 + offset];
+
+ return result;
+}
+
void tvg01_state::mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("program", 0);
map(0x8000, 0x87ff).ram().share("nvram");
- map(0xc000, 0xffff).bankr("gfxbank");
+ map(0xc000, 0xffff).r(FUNC(tvg01_state::bank_r));
}
void tvg01_state::io_map(address_map &map)
@@ -260,7 +280,7 @@ void tvg01_state::theboat(machine_config &config)
i8255_device &ppi1(I8255(config, "ppi1")); // D8255AC-2
ppi1.in_pa_callback().set_ioport("INP0");
- ppi1.out_pb_callback().set_membank("gfxbank").mask(0x03);
+ ppi1.out_pb_callback().set(FUNC(tvg01_state::bank_select_w));
i8255_device &ppi2(I8255(config, "ppi2")); // D8255AC-2
ppi2.out_pa_callback().set(FUNC(tvg01_state::input_select_w<0>));
@@ -286,10 +306,10 @@ ROM_START(theboat)
ROM_LOAD("1.ic3", 0x0000, 0x4000, CRC(04a0ef56) SHA1(40256f858032efa1375d336f141dbbd08a8802f7))
ROM_LOAD("2.ic5", 0x4000, 0x4000, CRC(c18d4a61) SHA1(c40a8b7dcaa90ed871be20605fc853949361257e))
- ROM_REGION(0x10000, "gfx", 0)
- ROM_LOAD("3.ic8", 0x8000, 0x4000, CRC(74b44e32) SHA1(b36c90a13511c5bf4aef079ac506605096e39067))
+ ROM_REGION(0x10000, "banked_rom", 0) // contains both code and data
+ ROM_LOAD("3.ic8", 0x0000, 0x4000, CRC(74b44e32) SHA1(b36c90a13511c5bf4aef079ac506605096e39067))
ROM_LOAD("4.ic11", 0x4000, 0x4000, CRC(4ea36fa3) SHA1(b020a478e8dd72154916c67d71255b5a6a822d6d))
- ROM_LOAD("5.ic14", 0xc000, 0x4000, CRC(7899a587) SHA1(13cbb7e837e14bc49d8b34dbf876b666cdf48979))
+ ROM_LOAD("5.ic14", 0x8000, 0x4000, CRC(7899a587) SHA1(13cbb7e837e14bc49d8b34dbf876b666cdf48979))
// Empty socket for one more ROM (IC16),
ROM_END