mirror of
https://github.com/holub/mame
synced 2025-06-17 01:38:59 +03:00
(MESS) hunter2 : added banking
This commit is contained in:
parent
b26c3a4d61
commit
56e70aab3f
@ -20,6 +20,9 @@ public:
|
|||||||
, m_maincpu(*this, "maincpu")
|
, m_maincpu(*this, "maincpu")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
DECLARE_DRIVER_INIT(hunter2);
|
||||||
|
DECLARE_WRITE8_MEMBER(porte0_w);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void machine_reset();
|
virtual void machine_reset();
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
@ -27,12 +30,16 @@ private:
|
|||||||
|
|
||||||
static ADDRESS_MAP_START(hunter2_mem, AS_PROGRAM, 8, hunter2_state)
|
static ADDRESS_MAP_START(hunter2_mem, AS_PROGRAM, 8, hunter2_state)
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("roms", 0)
|
AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bankr0") AM_WRITE_BANK("bankw0")
|
||||||
AM_RANGE(0x8000, 0xbfff) AM_RAM
|
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
|
AM_RANGE(0xc000, 0xffff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START(hunter2_io, AS_IO, 8, hunter2_state)
|
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
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -40,9 +47,68 @@ ADDRESS_MAP_END
|
|||||||
static INPUT_PORTS_START( hunter2 )
|
static INPUT_PORTS_START( hunter2 )
|
||||||
INPUT_PORTS_END
|
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()
|
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 )
|
static MACHINE_CONFIG_START( hunter2, hunter2_state )
|
||||||
@ -54,12 +120,15 @@ MACHINE_CONFIG_END
|
|||||||
|
|
||||||
/* ROM definition */
|
/* ROM definition */
|
||||||
ROM_START( hunter2 )
|
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( "tr032kx8mrom0.ic50", 0x0000, 0x8000, CRC(694d252c) SHA1(b11dbf24faf648596d92b1823e25a8e4fb7f542c) )
|
||||||
ROM_LOAD( "tr032kx8mrom1.ic51", 0x8000, 0x8000, CRC(82901642) SHA1(d84f2bbd2e9e052bd161a313c240a67918f774ad) )
|
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
|
ROM_END
|
||||||
|
|
||||||
/* Driver */
|
/* Driver */
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
|
/* 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 )
|
COMP( 1981, hunter2, 0, 0, hunter2, hunter2, hunter2_state, hunter2, "Husky", "Hunter 2", GAME_IS_SKELETON )
|
||||||
|
Loading…
Reference in New Issue
Block a user