(MESS) hunter2 : added banking

This commit is contained in:
Robbbert 2014-03-06 10:49:56 +00:00
parent b26c3a4d61
commit 56e70aab3f

View File

@ -20,6 +20,9 @@ public:
, m_maincpu(*this, "maincpu")
{ }
DECLARE_DRIVER_INIT(hunter2);
DECLARE_WRITE8_MEMBER(porte0_w);
private:
virtual void machine_reset();
required_device<cpu_device> m_maincpu;
@ -27,12 +30,16 @@ private:
static ADDRESS_MAP_START(hunter2_mem, AS_PROGRAM, 8, hunter2_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("roms", 0)
AM_RANGE(0x8000, 0xbfff) AM_RAM
AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bankr0") AM_WRITE_BANK("bankw0")
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bankr1") AM_WRITE_BANK("bankw1")
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bankr2") AM_WRITE_BANK("bankw2")
AM_RANGE(0xc000, 0xffff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(hunter2_io, AS_IO, 8, hunter2_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0xe0, 0xe0) AM_WRITE(porte0_w)
ADDRESS_MAP_END
@ -40,9 +47,68 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( hunter2 )
INPUT_PORTS_END
/*
data bank0 bank1 bank2
00 00 01 02
01 00 01 03
02 00 01 04
....
09 00 01 11
80 16 17 18
....
8F 61 62 63
*/
WRITE8_MEMBER( hunter2_state::porte0_w )
{
if (data < 0x0a)
{
membank("bankr0")->set_entry(0);
membank("bankr1")->set_entry(0);
membank("bankr2")->set_entry(data);
membank("bankw0")->set_entry(0);
membank("bankw1")->set_entry(0);
membank("bankw2")->set_entry(0);
}
else
if ((data >= 0x80) && (data <= 0x8f))
{
data -= 0x70;
membank("bankr0")->set_entry(data);
membank("bankr1")->set_entry(data);
membank("bankr2")->set_entry(data);
membank("bankw0")->set_entry(data);
membank("bankw1")->set_entry(data);
membank("bankw2")->set_entry(data);
}
}
void hunter2_state::machine_reset()
{
membank("bankr0")->set_entry(0);
membank("bankr1")->set_entry(0);
membank("bankr2")->set_entry(0);
membank("bankw0")->set_entry(0);
membank("bankw1")->set_entry(0);
membank("bankw2")->set_entry(0);
}
// it is presumed that writing to rom will go nowhere
DRIVER_INIT_MEMBER( hunter2_state, hunter2 )
{
UINT8 *rom = memregion("roms")->base();
UINT8 *ram = memregion("rams")->base();
membank("bankr0")->configure_entries( 0, 10, &rom[0x00000], 0x0000);
membank("bankr0")->configure_entries(16, 16, &ram[0x00000], 0xc000);
membank("bankr1")->configure_entries( 0, 10, &rom[0x04000], 0x0000);
membank("bankr1")->configure_entries(16, 16, &ram[0x04000], 0xc000);
membank("bankr2")->configure_entries( 0, 10, &rom[0x08000], 0x4000);
membank("bankr2")->configure_entries(16, 16, &ram[0x08000], 0xc000);
membank("bankw0")->configure_entries( 0, 10, &ram[0xc0000], 0x0000);
membank("bankw0")->configure_entries(16, 16, &ram[0x00000], 0xc000);
membank("bankw1")->configure_entries( 0, 10, &ram[0xc0000], 0x0000);
membank("bankw1")->configure_entries(16, 16, &ram[0x04000], 0xc000);
membank("bankw2")->configure_entries( 0, 10, &ram[0xc0000], 0x0000);
membank("bankw2")->configure_entries(16, 16, &ram[0x08000], 0xc000);
}
static MACHINE_CONFIG_START( hunter2, hunter2_state )
@ -54,12 +120,15 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( hunter2 )
ROM_REGION(0x10000, "roms", 0)
ROM_REGION(0x30000, "roms", ROMREGION_ERASEFF) // board has space for 6 roms, but only 2 are populated normally
ROM_LOAD( "tr032kx8mrom0.ic50", 0x0000, 0x8000, CRC(694d252c) SHA1(b11dbf24faf648596d92b1823e25a8e4fb7f542c) )
ROM_LOAD( "tr032kx8mrom1.ic51", 0x8000, 0x8000, CRC(82901642) SHA1(d84f2bbd2e9e052bd161a313c240a67918f774ad) )
// 48 x 4k blocks plus 1 sinkhole
ROM_REGION(0xc4000, "rams", ROMREGION_ERASEVAL(0xa5)) // board can have up to 736k of ram, but 192k is standard
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
COMP( 1981, hunter2, 0, 0, hunter2, hunter2, driver_device, 0, "Husky", "Hunter 2", GAME_IS_SKELETON )
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
COMP( 1981, hunter2, 0, 0, hunter2, hunter2, hunter2_state, hunter2, "Husky", "Hunter 2", GAME_IS_SKELETON )