summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2014-12-24 08:20:34 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2014-12-24 08:20:34 +0100
commitee47ba18c58d7b115b2446cdf2b4da313702f36d (patch)
treee9a252c8e1b49e92970c35ac8fcfe987990e5874
parenteb8e025b26ca7e218228fa1eaa3eb6f81f6ebdf9 (diff)
(MESS)gamate - multi cartridge support [Peter Trauner]
-rw-r--r--src/mess/drivers/gamate.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mess/drivers/gamate.c b/src/mess/drivers/gamate.c
index d3b9aad357a..cf48dbf80df 100644
--- a/src/mess/drivers/gamate.c
+++ b/src/mess/drivers/gamate.c
@@ -2,6 +2,7 @@
PeT mess@utanet.at 2007, 2014
Peter Wilhelmsen peter.wilhelmsen@gmail.com
Morten Shearman Kirkegaard morten+gamate@afdelingp.dk
+ Juan FĂ©lix Mateos vectrex@hackermesh.org
******************************************************************************/
#include "emu.h"
@@ -27,6 +28,7 @@ public:
DECLARE_READ8_MEMBER(protection_r);
DECLARE_READ8_MEMBER(gamate_cart_protection_r);
DECLARE_WRITE8_MEMBER(gamate_cart_protection_w);
+ DECLARE_WRITE8_MEMBER(cart_bankswitchmulti_w);
DECLARE_WRITE8_MEMBER(cart_bankswitch_w);
DECLARE_READ8_MEMBER(gamate_video_r);
DECLARE_READ8_MEMBER(gamate_pad_r);
@@ -134,6 +136,11 @@ WRITE8_MEMBER( gamate_state::gamate_video_w )
}
}
+WRITE8_MEMBER( gamate_state::cart_bankswitchmulti_w )
+{
+ membank("bankmulti")->set_base(m_cart->get_rom_base()+0x4000*data);
+}
+
WRITE8_MEMBER( gamate_state::cart_bankswitch_w )
{
membank("bank")->set_base(m_cart->get_rom_base()+0x4000*data);
@@ -181,11 +188,12 @@ static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state )
AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w)
AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r)
- AM_RANGE(0x6000, 0x9fff) AM_ROM
+ AM_RANGE(0x6000, 0x9fff) AM_READ_BANK("bankmulti")
AM_RANGE(0xa000, 0xdfff) AM_READ_BANK("bank")
AM_RANGE(0x6000, 0x6002) AM_READWRITE(gamate_cart_protection_r, gamate_cart_protection_w)
// AM_RANGE(0x6000, 0xdfff) AM_READWRITE(gamate_cart_r, gamate_cart_w)
+ AM_RANGE(0x8000, 0x8000) AM_WRITE(cart_bankswitchmulti_w)
AM_RANGE(0xc000, 0xc000) AM_WRITE(cart_bankswitch_w)
AM_RANGE(0xf000, 0xffff) AM_ROM AM_SHARE("bios")
@@ -290,9 +298,9 @@ DRIVER_INIT_MEMBER(gamate_state,gamate)
void gamate_state::machine_start()
{
if (m_cart->exists()) {
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x9fff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
// m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r));
- membank("bank")->set_base(m_cart->get_rom_base()+0x4000);
+ membank("bankmulti")->set_base(m_cart->get_rom_base());
+ membank("bank")->set_base(m_cart->get_rom_base()+0x4000); // bankswitched games in reality no offset
}
m_bios[0xdf1]=0xea; m_bios[0xdf2]=0xea; // $47 protection readback
card_protection.address=0x6005-0x6001;