diff options
-rw-r--r-- | src/mame/drivers/m92.cpp | 275 | ||||
-rw-r--r-- | src/mame/includes/m92.h | 70 | ||||
-rw-r--r-- | src/mame/video/m92.cpp | 35 |
3 files changed, 192 insertions, 188 deletions
diff --git a/src/mame/drivers/m92.cpp b/src/mame/drivers/m92.cpp index 2dc6652a2d9..ccc87fa15c8 100644 --- a/src/mame/drivers/m92.cpp +++ b/src/mame/drivers/m92.cpp @@ -63,6 +63,7 @@ Glitch list! LeagueMan: Raster effects don't work properly (not even cpu time per line?). + Reference : https://youtu.be/K8mvKXnvgXc?t=53s (0.141 update: at least following two seems fixed from a lot of time ... -AS) Perfect Soldiers: @@ -208,6 +209,7 @@ psoldier dip locations still need verification. #include "cpu/nec/v25.h" #include "machine/gen_latch.h" #include "machine/irem_cpu.h" +#include "machine/nvram.h" #include "sound/ym2151.h" #include "sound/iremga20.h" #include "speaker.h" @@ -223,7 +225,7 @@ MACHINE_RESET_MEMBER(m92_state,m92) /*****************************************************************************/ -TIMER_DEVICE_CALLBACK_MEMBER(m92_state::m92_scanline_interrupt) +TIMER_DEVICE_CALLBACK_MEMBER(m92_state::scanline_interrupt) { int scanline = param; @@ -253,41 +255,33 @@ TIMER_DEVICE_CALLBACK_MEMBER(m92_state::m92_scanline_interrupt) /*****************************************************************************/ -READ16_MEMBER(m92_state::m92_eeprom_r) +READ16_MEMBER(m92_state::eeprom_r) { - uint8_t *RAM = memregion("eeprom")->base(); // logerror("%05x: EEPROM RE %04x\n",m_maincpu->pc(),offset); - return RAM[offset] | 0xff00; + return m_eeprom[offset] | 0xff00; } -WRITE16_MEMBER(m92_state::m92_eeprom_w) +WRITE16_MEMBER(m92_state::eeprom_w) { - uint8_t *RAM = memregion("eeprom")->base(); // logerror("%05x: EEPROM WR %04x\n",m_maincpu->pc(),offset); if (ACCESSING_BITS_0_7) - RAM[offset] = data; + m_eeprom[offset] = data; } -WRITE16_MEMBER(m92_state::m92_coincounter_w) +WRITE8_MEMBER(m92_state::coincounter_w) { - if (ACCESSING_BITS_0_7) - { - machine().bookkeeping().coin_counter_w(0, data & 0x01); - machine().bookkeeping().coin_counter_w(1, data & 0x02); - /* Bit 0x8 is Motor(?!), used in Hook, In The Hunt, UCops */ - /* Bit 0x8 is Memcard related in RTypeLeo */ - /* Bit 0x40 set in Blade Master test mode input check */ - } + machine().bookkeeping().coin_counter_w(0, data & 0x01); + machine().bookkeeping().coin_counter_w(1, data & 0x02); + /* Bit 0x8 is Motor(?!), used in Hook, In The Hunt, UCops */ + /* Bit 0x8 is Memcard related in RTypeLeo */ + /* Bit 0x40 set in Blade Master test mode input check */ } -WRITE16_MEMBER(m92_state::m92_bankswitch_w) +WRITE8_MEMBER(m92_state::bankswitch_w) { - if (ACCESSING_BITS_0_7) - { - membank("bank1")->set_entry((data & 0x06) >> 1); - if (data & 0xf9) - logerror("%05x: bankswitch %04x\n", m_maincpu->pc(), data); - } + m_mainbank->set_entry((data & 0x06) >> 1); + if (data & 0xf9) + logerror("%05x: bankswitch %04x\n", m_maincpu->pc(), data); } CUSTOM_INPUT_MEMBER(m92_state::m92_sprite_busy_r) @@ -295,9 +289,17 @@ CUSTOM_INPUT_MEMBER(m92_state::m92_sprite_busy_r) return m_sprite_buffer_busy; } +template<int Layer> +WRITE16_MEMBER(m92_state::pf_control_w) +{ + //Fix for nbbm stage start screen + //m_screen->update_partial(m_screen->vpos()); + COMBINE_DATA(&m_pf_layer[Layer].control[offset]); +} + /*****************************************************************************/ -WRITE16_MEMBER(m92_state::m92_sound_reset_w) +WRITE16_MEMBER(m92_state::sound_reset_w) { if (m_soundcpu) m_soundcpu->set_input_line(INPUT_LINE_RESET, (data) ? CLEAR_LINE : ASSERT_LINE); @@ -305,48 +307,69 @@ WRITE16_MEMBER(m92_state::m92_sound_reset_w) /*****************************************************************************/ -/* appears to be an earlier board */ -void m92_state::lethalth_map(address_map &map) +void m92_state::m92_base_map(address_map &map) { - map(0x00000, 0x7ffff).rom(); - map(0x80000, 0x8ffff).ram().w(FUNC(m92_state::m92_vram_w)).share("vram_data"); map(0xe0000, 0xeffff).ram(); /* System ram */ map(0xf8000, 0xf87ff).ram().share("spriteram"); - map(0xf8800, 0xf8fff).rw(FUNC(m92_state::m92_paletteram_r), FUNC(m92_state::m92_paletteram_w)); - map(0xf9000, 0xf900f).w(FUNC(m92_state::m92_spritecontrol_w)).share("spritecontrol"); - map(0xf9800, 0xf9801).w(FUNC(m92_state::m92_videocontrol_w)); + map(0xf8800, 0xf8fff).rw(FUNC(m92_state::paletteram_r), FUNC(m92_state::paletteram_w)); + map(0xf9000, 0xf900f).w(FUNC(m92_state::spritecontrol_w)).share("spritecontrol"); + map(0xf9800, 0xf9801).w(FUNC(m92_state::videocontrol_w)); map(0xffff0, 0xfffff).rom().region("maincpu", 0x7fff0); } +/* appears to be an earlier board */ +void m92_state::lethalth_map(address_map &map) +{ + m92_base_map(map); + map(0x00000, 0x7ffff).rom(); + map(0x80000, 0x8ffff).ram().w(FUNC(m92_state::vram_w)).share("vram_data"); +} + void m92_state::m92_map(address_map &map) { + m92_base_map(map); + map(0x00000, 0xbffff).rom(); + map(0xc0000, 0xcffff).rom().region("maincpu", 0x00000); /* Mirror used by In The Hunt as protection */ + map(0xd0000, 0xdffff).ram().w(FUNC(m92_state::vram_w)).share("vram_data"); +} + +void m92_state::m92_banked_map(address_map &map) +{ + m92_base_map(map); map(0x00000, 0x9ffff).rom(); - map(0xa0000, 0xbffff).bankr("bank1"); + map(0xa0000, 0xbffff).bankr("mainbank"); map(0xc0000, 0xcffff).rom().region("maincpu", 0x00000); /* Mirror used by In The Hunt as protection */ - map(0xd0000, 0xdffff).ram().w(FUNC(m92_state::m92_vram_w)).share("vram_data"); - map(0xe0000, 0xeffff).ram(); /* System ram */ - map(0xf8000, 0xf87ff).ram().share("spriteram"); - map(0xf8800, 0xf8fff).rw(FUNC(m92_state::m92_paletteram_r), FUNC(m92_state::m92_paletteram_w)); - map(0xf9000, 0xf900f).w(FUNC(m92_state::m92_spritecontrol_w)).share("spritecontrol"); - map(0xf9800, 0xf9801).w(FUNC(m92_state::m92_videocontrol_w)); - map(0xffff0, 0xfffff).rom().region("maincpu", 0x7fff0); + map(0xd0000, 0xdffff).ram().w(FUNC(m92_state::vram_w)).share("vram_data"); +} + +/* This game has an eeprom on the game board */ +void m92_state::majtitl2_map(address_map &map) +{ + m92_banked_map(map); + map(0xf0000, 0xf3fff).rw(FUNC(m92_state::eeprom_r), FUNC(m92_state::eeprom_w)).share("eeprom"); } void m92_state::m92_portmap(address_map &map) { + map(0x00, 0x00).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0x00, 0x01).portr("P1_P2"); map(0x02, 0x03).portr("COINS_DSW3"); + map(0x02, 0x02).w(FUNC(m92_state::coincounter_w)); map(0x04, 0x05).portr("DSW"); map(0x06, 0x07).portr("P3_P4"); map(0x08, 0x08).r("soundlatch2", FUNC(generic_latch_8_device::read)); // answer from sound CPU - map(0x00, 0x00).w("soundlatch", FUNC(generic_latch_8_device::write)); - map(0x02, 0x03).w(FUNC(m92_state::m92_coincounter_w)); map(0x40, 0x43).rw(m_upd71059c, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); - map(0x80, 0x87).w(FUNC(m92_state::m92_pf1_control_w)); - map(0x88, 0x8f).w(FUNC(m92_state::m92_pf2_control_w)); - map(0x90, 0x97).w(FUNC(m92_state::m92_pf3_control_w)); - map(0x98, 0x9f).w(FUNC(m92_state::m92_master_control_w)); - map(0xc0, 0xc1).w(FUNC(m92_state::m92_sound_reset_w)); + map(0x80, 0x87).w(FUNC(m92_state::pf_control_w<0>)); + map(0x88, 0x8f).w(FUNC(m92_state::pf_control_w<1>)); + map(0x90, 0x97).w(FUNC(m92_state::pf_control_w<2>)); + map(0x98, 0x9f).w(FUNC(m92_state::master_control_w)); + map(0xc0, 0xc1).w(FUNC(m92_state::sound_reset_w)); +} + +void m92_state::m92_banked_portmap(address_map &map) +{ + m92_portmap(map); + map(0x20, 0x20).w(FUNC(m92_state::bankswitch_w)); } WRITE16_MEMBER(m92_state::oki_bank_w) @@ -358,16 +381,16 @@ void m92_state::ppan_portmap(address_map &map) { map(0x00, 0x01).portr("P1_P2"); map(0x02, 0x03).portr("COINS_DSW3"); + map(0x02, 0x02).w(FUNC(m92_state::coincounter_w)); map(0x04, 0x05).portr("DSW"); map(0x06, 0x07).portr("P3_P4"); map(0x10, 0x11).w(FUNC(m92_state::oki_bank_w)); map(0x18, 0x18).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x02, 0x03).w(FUNC(m92_state::m92_coincounter_w)); map(0x40, 0x43).rw(m_upd71059c, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); - map(0x80, 0x87).w(FUNC(m92_state::m92_pf1_control_w)); - map(0x88, 0x8f).w(FUNC(m92_state::m92_pf2_control_w)); - map(0x90, 0x97).w(FUNC(m92_state::m92_pf3_control_w)); - map(0x98, 0x9f).w(FUNC(m92_state::m92_master_control_w)); + map(0x80, 0x87).w(FUNC(m92_state::pf_control_w<0>)); + map(0x88, 0x8f).w(FUNC(m92_state::pf_control_w<1>)); + map(0x90, 0x97).w(FUNC(m92_state::pf_control_w<2>)); + map(0x98, 0x9f).w(FUNC(m92_state::master_control_w)); } @@ -907,7 +930,7 @@ MACHINE_CONFIG_START(m92_state::m92) MCFG_MACHINE_RESET_OVERRIDE(m92_state,m92) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m92_state, m92_scanline_interrupt, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m92_state, scanline_interrupt, "screen", 0, 1) /* video hardware */ MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM16) @@ -946,6 +969,13 @@ MACHINE_CONFIG_START(m92_state::m92) MACHINE_CONFIG_END +MACHINE_CONFIG_START(m92_state::m92_banked) + m92(config); + MCFG_DEVICE_MODIFY("maincpu") + MCFG_DEVICE_PROGRAM_MAP(m92_banked_map) + MCFG_DEVICE_IO_MAP(m92_banked_portmap) +MACHINE_CONFIG_END + MACHINE_CONFIG_START(m92_state::gunforce) m92(config); MCFG_DEVICE_MODIFY("soundcpu") @@ -979,11 +1009,21 @@ MACHINE_CONFIG_START(m92_state::mysticri) MACHINE_CONFIG_END MACHINE_CONFIG_START(m92_state::majtitl2) - m92(config); + m92_banked(config); + MCFG_DEVICE_MODIFY("maincpu") + MCFG_DEVICE_PROGRAM_MAP(majtitl2_map) + MCFG_NVRAM_ADD_0FILL("eeprom") + MCFG_DEVICE_MODIFY("soundcpu") MCFG_V25_CONFIG(majtitl2_decryption_table) MACHINE_CONFIG_END +MACHINE_CONFIG_START(m92_state::majtitl2a) + majtitl2(config); + MCFG_DEVICE_MODIFY("soundcpu") + MCFG_V25_CONFIG(mysticri_decryption_table) +MACHINE_CONFIG_END + MACHINE_CONFIG_START(m92_state::hook) m92(config); MCFG_DEVICE_MODIFY("soundcpu") @@ -1025,13 +1065,13 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(m92_state::nbbatman) - m92(config); + m92_banked(config); MCFG_DEVICE_MODIFY("soundcpu") MCFG_V25_CONFIG(leagueman_decryption_table) MACHINE_CONFIG_END MACHINE_CONFIG_START(m92_state::nbbatman2bl) - m92(config); + m92_banked(config); MCFG_DEVICE_REMOVE("soundcpu") MCFG_DEVICE_REMOVE("ymsnd") MCFG_DEVICE_REMOVE("irem") @@ -1054,7 +1094,7 @@ MACHINE_CONFIG_START(m92_state::psoldier) MACHINE_CONFIG_END MACHINE_CONFIG_START(m92_state::dsoccr94j) - m92(config); + m92_banked(config); MCFG_DEVICE_MODIFY("soundcpu") MCFG_V25_CONFIG(dsoccr94_decryption_table) /* video hardware */ @@ -1062,7 +1102,7 @@ MACHINE_CONFIG_START(m92_state::dsoccr94j) MACHINE_CONFIG_END MACHINE_CONFIG_START(m92_state::gunforc2) - m92(config); + m92_banked(config); MCFG_DEVICE_MODIFY("soundcpu") MCFG_V25_CONFIG(lethalth_decryption_table) MACHINE_CONFIG_END @@ -1135,7 +1175,7 @@ ROM_START( skingame ) ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) ) ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */ - ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) + ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) ) ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) ) ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) ) @@ -1172,7 +1212,7 @@ ROM_START( majtitl2 ) ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) ) ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */ - ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) + ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) ) ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) ) ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) ) @@ -1210,7 +1250,7 @@ ROM_START( majtitl2b ) ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) ) ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */ - ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) + ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) ) ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) ) ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) ) @@ -1249,7 +1289,7 @@ ROM_START( majtitl2a ) ROM_LOAD16_BYTE( "mt2sl0-a", 0x00000, 0x10000, CRC(f4ecd7b5) SHA1(250afed334d37b0309f4733b41ba03319b51360f)) ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */ - ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) + ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) ) ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) ) ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) ) @@ -1286,7 +1326,7 @@ ROM_START( majtitl2j ) ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) ) ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */ - ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) + ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) ) ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) ) ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) ) @@ -1323,7 +1363,7 @@ ROM_START( skingame2 ) ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) ) ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */ - ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) + ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) ) ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) ) ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) ) ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) ) @@ -2187,97 +2227,72 @@ ROM_END /***************************************************************************/ -void m92_state::init_m92() -{ - uint8_t *ROM = memregion("maincpu")->base(); - - membank("bank1")->set_base(&ROM[0xa0000]); -} - -/* different address map (no bank1) */ -void m92_state::init_lethalth() -{ -} - /* has bankswitching */ -void m92_state::init_m92_bank() -{ - uint8_t *ROM = memregion("maincpu")->base(); - - membank("bank1")->configure_entries(0, 4, &ROM[0x80000], 0x20000); - m_maincpu->space(AS_IO).install_write_handler(0x20, 0x21, write16_delegate(FUNC(m92_state::m92_bankswitch_w),this)); -} - -/* has bankswitching, has eeprom, needs sprite kludge */ -void m92_state::init_majtitl2() +void m92_state::init_bank() { uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 4, &ROM[0x80000], 0x20000); - m_maincpu->space(AS_IO).install_write_handler(0x20, 0x21, write16_delegate(FUNC(m92_state::m92_bankswitch_w),this)); - - /* This game has an eeprom on the game board */ - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0000, 0xf3fff, read16_delegate(FUNC(m92_state::m92_eeprom_r),this), write16_delegate(FUNC(m92_state::m92_eeprom_w),this)); + m_mainbank->configure_entries(0, 4, &ROM[0x80000], 0x20000); } /* TODO: figure out actual address map and other differences from real Irem h/w */ +/* void m92_state::init_ppan() { - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->set_base(&ROM[0xa0000]); } +*/ /***************************************************************************/ -GAME( 1991, gunforce, 0, gunforce, gunforce, m92_state, init_m92, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1991, gunforcej,gunforce, gunforce, gunforce, m92_state, init_m92, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1991, gunforceu,gunforce, gunforce, gunforce, m92_state, init_m92, ROT0, "Irem America", "Gunforce - Battle Fire Engulfed Terror Island (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1991, gunforce, 0, gunforce, gunforce, m92_state, empty_init, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1991, gunforcej,gunforce, gunforce, gunforce, m92_state, empty_init, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1991, gunforceu,gunforce, gunforce, gunforce, m92_state, empty_init, ROT0, "Irem America", "Gunforce - Battle Fire Engulfed Terror Island (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1991, bmaster, 0, bmaster, bmaster, m92_state, init_m92, ROT0, "Irem", "Blade Master (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1991, crossbld, bmaster, bmaster, bmaster, m92_state, init_m92, ROT0, "Irem", "Cross Blades! (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1991, bmaster, 0, bmaster, bmaster, m92_state, empty_init, ROT0, "Irem", "Blade Master (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1991, crossbld, bmaster, bmaster, bmaster, m92_state, empty_init, ROT0, "Irem", "Cross Blades! (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1991, lethalth, 0, lethalth, lethalth, m92_state, init_lethalth, ROT270, "Irem", "Lethal Thunder (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1991, thndblst, lethalth, lethalth, thndblst, m92_state, init_lethalth, ROT270, "Irem", "Thunder Blaster (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1991, lethalth, 0, lethalth, lethalth, m92_state, empty_init, ROT270, "Irem", "Lethal Thunder (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1991, thndblst, lethalth, lethalth, thndblst, m92_state, empty_init, ROT270, "Irem", "Thunder Blaster (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, uccops, 0, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, uccopsu, uccops, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, uccopsar, uccops, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops - Alpha Renewal Version", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, uccopsj, uccops, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, uccops, 0, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, uccopsu, uccops, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, uccopsar, uccops, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops - Alpha Renewal Version", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, uccopsj, uccops, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, mysticri, 0, mysticri, mysticri, m92_state, init_m92, ROT0, "Irem", "Mystic Riders (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, gunhohki, mysticri, mysticri, mysticri, m92_state, init_m92, ROT0, "Irem", "Mahou Keibitai Gun Hohki (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, mysticri, 0, mysticri, mysticri, m92_state, empty_init, ROT0, "Irem", "Mystic Riders (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, gunhohki, mysticri, mysticri, mysticri, m92_state, empty_init, ROT0, "Irem", "Mahou Keibitai Gun Hohki (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // cheaply produced Korean board, has original chips, but lacks any proper labels // main code is also significantly different to the supported original set, so it might just be a legitimate early revision on a cheap board -GAME( 1992, mysticrib,mysticri, mysticri, mysticri, m92_state, init_m92, ROT0, "Irem", "Mystic Riders (bootleg?)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, mysticrib,mysticri, mysticri, mysticri, m92_state, empty_init, ROT0, "Irem", "Mystic Riders (bootleg?)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, majtitl2, 0, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (World, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // Nanao 08J27291A7 017 9227NK700 sound CPU -GAME( 1992, majtitl2a,majtitl2, mysticri, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (World, set 1, alt sound CPU)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // same as set 1 but for the Nanao 08J27291A6 016 9217NK700 sound CPU -GAME( 1992, majtitl2b,majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (World, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, majtitl2j,majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, skingame, majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem America", "The Irem Skins Game (US set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, skingame2,majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem America", "The Irem Skins Game (US set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, majtitl2, 0, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (World, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // Nanao 08J27291A7 017 9227NK700 sound CPU +GAME( 1992, majtitl2a,majtitl2, majtitl2a, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (World, set 1, alt sound CPU)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // same as set 1 but for the Nanao 08J27291A6 016 9217NK700 sound CPU +GAME( 1992, majtitl2b,majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (World, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, majtitl2j,majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, skingame, majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem America", "The Irem Skins Game (US set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1992, skingame2,majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem America", "The Irem Skins Game (US set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1992, hook, 0, hook, hook, m92_state, init_m92, ROT0, "Irem", "Hook (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, hooku, hook, hook, hook, m92_state, init_m92, ROT0, "Irem America", "Hook (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, hookj, hook, hook, hook, m92_state, init_m92, ROT0, "Irem", "Hook (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, ppan, hook, ppan, hook, m92_state, init_ppan, ROT0, "bootleg", "Peter Pan (bootleg of Hook)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL) // PCB marked 'Peter Pan', no title screen, made in Italy? +GAME( 1992, hook, 0, hook, hook, m92_state, empty_init, ROT0, "Irem", "Hook (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, hooku, hook, hook, hook, m92_state, empty_init, ROT0, "Irem America", "Hook (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, hookj, hook, hook, hook, m92_state, empty_init, ROT0, "Irem", "Hook (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, ppan, hook, ppan, hook, m92_state, empty_init, ROT0, "bootleg", "Peter Pan (bootleg of Hook)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL) // PCB marked 'Peter Pan', no title screen, made in Italy? -GAME( 1992, rtypeleo, 0, rtypeleo, rtypeleo, m92_state, init_m92, ROT0, "Irem", "R-Type Leo (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1992, rtypeleoj,rtypeleo, rtypeleo, rtypeleo, m92_state, init_m92, ROT0, "Irem", "R-Type Leo (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, rtypeleo, 0, rtypeleo, rtypeleo, m92_state, empty_init, ROT0, "Irem", "R-Type Leo (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1992, rtypeleoj,rtypeleo, rtypeleo, rtypeleo, m92_state, empty_init, ROT0, "Irem", "R-Type Leo (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1993, inthunt, 0, inthunt, inthunt, m92_state, init_m92, ROT0, "Irem", "In The Hunt (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1993, inthuntu, inthunt, inthunt, inthunt, m92_state, init_m92, ROT0, "Irem America", "In The Hunt (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) -GAME( 1993, kaiteids, inthunt, inthunt, inthunt, m92_state, init_m92, ROT0, "Irem", "Kaitei Daisensou (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1993, inthunt, 0, inthunt, inthunt, m92_state, empty_init, ROT0, "Irem", "In The Hunt (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1993, inthuntu, inthunt, inthunt, inthunt, m92_state, empty_init, ROT0, "Irem America", "In The Hunt (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1993, kaiteids, inthunt, inthunt, inthunt, m92_state, empty_init, ROT0, "Irem", "Kaitei Daisensou (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1993, nbbatman, 0, nbbatman, nbbatman, m92_state, init_m92_bank, ROT0, "Irem", "Ninja Baseball Bat Man (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL ) -GAME( 1993, nbbatmanu,nbbatman, nbbatman, nbbatman, m92_state, init_m92_bank, ROT0, "Irem America", "Ninja Baseball Bat Man (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL) -GAME( 1993, leaguemn, nbbatman, nbbatman, nbbatman, m92_state, init_m92_bank, ROT0, "Irem", "Yakyuu Kakutou League-Man (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL ) -GAME( 1993, nbbatman2bl,nbbatman,nbbatman2bl, nbbatman, m92_state, init_m92_bank, ROT0, "bootleg", "Ninja Baseball Bat Man II (bootleg)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL ) // different sprite system, MCU as soundcpu, OKI samples for music/sound +GAME( 1993, nbbatman, 0, nbbatman, nbbatman, m92_state, init_bank, ROT0, "Irem", "Ninja Baseball Bat Man (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL ) +GAME( 1993, nbbatmanu,nbbatman, nbbatman, nbbatman, m92_state, init_bank, ROT0, "Irem America", "Ninja Baseball Bat Man (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL) +GAME( 1993, leaguemn, nbbatman, nbbatman, nbbatman, m92_state, init_bank, ROT0, "Irem", "Yakyuu Kakutou League-Man (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL ) +GAME( 1993, nbbatman2bl,nbbatman,nbbatman2bl, nbbatman, m92_state, init_bank, ROT0, "bootleg", "Ninja Baseball Bat Man II (bootleg)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL ) // different sprite system, MCU as soundcpu, OKI samples for music/sound -GAME( 1993, ssoldier, 0, psoldier, psoldier, m92_state, init_m92, ROT0, "Irem America", "Superior Soldiers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1993, psoldier, ssoldier, psoldier, psoldier, m92_state, init_m92, ROT0, "Irem", "Perfect Soldiers (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1993, ssoldier, 0, psoldier, psoldier, m92_state, empty_init, ROT0, "Irem America", "Superior Soldiers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1993, psoldier, ssoldier, psoldier, psoldier, m92_state, empty_init, ROT0, "Irem", "Perfect Soldiers (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1994, dsoccr94j,dsoccr94, dsoccr94j, dsoccr94j, m92_state, init_m92_bank, ROT0, "Irem", "Dream Soccer '94 (Japan, M92 hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1994, dsoccr94j,dsoccr94, dsoccr94j, dsoccr94j, m92_state, init_bank, ROT0, "Irem", "Dream Soccer '94 (Japan, M92 hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1994, gunforc2, 0, gunforc2, gunforc2, m92_state, init_m92_bank, ROT0, "Irem", "Gun Force II (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1994, geostorm, gunforc2, gunforc2, gunforc2, m92_state, init_m92_bank, ROT0, "Irem", "Geo Storm (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) +GAME( 1994, gunforc2, 0, gunforc2, gunforc2, m92_state, init_bank, ROT0, "Irem", "Gun Force II (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) +GAME( 1994, geostorm, gunforc2, gunforc2, gunforc2, m92_state, init_bank, ROT0, "Irem", "Geo Storm (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) diff --git a/src/mame/includes/m92.h b/src/mame/includes/m92.h index 2090bee8a04..f0c07ca5b7a 100644 --- a/src/mame/includes/m92.h +++ b/src/mame/includes/m92.h @@ -29,19 +29,20 @@ public: TIMER_SPRITEBUFFER }; - m92_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_spriteram(*this, "spriteram"), - m_vram_data(*this, "vram_data"), - m_spritecontrol(*this, "spritecontrol"), - m_maincpu(*this, "maincpu"), - m_soundcpu(*this, "soundcpu"), - m_oki(*this, "oki"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_upd71059c(*this, "upd71059c") - { } + m92_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_spriteram(*this, "spriteram"), + m_vram_data(*this, "vram_data"), + m_spritecontrol(*this, "spritecontrol"), + m_maincpu(*this, "maincpu"), + m_soundcpu(*this, "soundcpu"), + m_oki(*this, "oki"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_palette(*this, "palette"), + m_upd71059c(*this, "upd71059c"), + m_eeprom(*this, "eeprom", 16), + m_mainbank(*this, "mainbank") { } required_device<buffered_spriteram16_device> m_spriteram; required_shared_ptr<uint16_t> m_vram_data; @@ -54,6 +55,9 @@ public: required_device<palette_device> m_palette; required_device<pic8259_device> m_upd71059c; + optional_shared_ptr<uint8_t> m_eeprom; + optional_memory_bank m_mainbank; + emu_timer *m_spritebuffer_timer; uint32_t m_raster_irq_position; uint16_t m_videocontrol; @@ -64,40 +68,35 @@ public: uint8_t m_palette_bank; std::vector<uint16_t> m_paletteram; - DECLARE_READ16_MEMBER(m92_eeprom_r); - DECLARE_WRITE16_MEMBER(m92_eeprom_w); - DECLARE_WRITE16_MEMBER(m92_coincounter_w); - DECLARE_WRITE16_MEMBER(m92_bankswitch_w); - DECLARE_WRITE16_MEMBER(m92_sound_reset_w); - DECLARE_WRITE16_MEMBER(m92_spritecontrol_w); - DECLARE_WRITE16_MEMBER(m92_videocontrol_w); - DECLARE_READ16_MEMBER(m92_paletteram_r); - DECLARE_WRITE16_MEMBER(m92_paletteram_w); - DECLARE_WRITE16_MEMBER(m92_vram_w); - DECLARE_WRITE16_MEMBER(m92_pf1_control_w); - DECLARE_WRITE16_MEMBER(m92_pf2_control_w); - DECLARE_WRITE16_MEMBER(m92_pf3_control_w); - DECLARE_WRITE16_MEMBER(m92_master_control_w); + DECLARE_READ16_MEMBER(eeprom_r); + DECLARE_WRITE16_MEMBER(eeprom_w); + DECLARE_WRITE8_MEMBER(coincounter_w); + DECLARE_WRITE8_MEMBER(bankswitch_w); + DECLARE_WRITE16_MEMBER(sound_reset_w); + DECLARE_WRITE16_MEMBER(spritecontrol_w); + DECLARE_WRITE16_MEMBER(videocontrol_w); + DECLARE_READ16_MEMBER(paletteram_r); + DECLARE_WRITE16_MEMBER(paletteram_w); + DECLARE_WRITE16_MEMBER(vram_w); + template<int Layer> DECLARE_WRITE16_MEMBER(pf_control_w); + DECLARE_WRITE16_MEMBER(master_control_w); DECLARE_CUSTOM_INPUT_MEMBER(m92_sprite_busy_r); DECLARE_WRITE16_MEMBER(oki_bank_w); - void init_majtitl2(); - void init_ppan(); - void init_lethalth(); - void init_m92(); - void init_m92_bank(); + void init_bank(); TILE_GET_INFO_MEMBER(get_pf_tile_info); DECLARE_MACHINE_RESET(m92); DECLARE_VIDEO_START(m92); DECLARE_VIDEO_START(ppan); uint32_t screen_update_m92(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_ppan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(m92_scanline_interrupt); + TIMER_DEVICE_CALLBACK_MEMBER(scanline_interrupt); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void ppan_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void m92_update_scroll_positions(); void m92_draw_tiles(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect); void m92(machine_config &config); + void m92_banked(machine_config &config); void inthunt(machine_config &config); void lethalth(machine_config &config); void ppan(machine_config &config); @@ -112,10 +111,15 @@ public: void dsoccr94j(machine_config &config); void gunforce(machine_config &config); void majtitl2(machine_config &config); + void majtitl2a(machine_config &config); void mysticri(machine_config &config); void lethalth_map(address_map &map); void m92_map(address_map &map); + void m92_banked_map(address_map &map); + void m92_banked_portmap(address_map &map); + void m92_base_map(address_map &map); void m92_portmap(address_map &map); + void majtitl2_map(address_map &map); void ppan_portmap(address_map &map); void sound_map(address_map &map); protected: diff --git a/src/mame/video/m92.cpp b/src/mame/video/m92.cpp index 62efdbc1a85..cd650228b24 100644 --- a/src/mame/video/m92.cpp +++ b/src/mame/video/m92.cpp @@ -60,7 +60,7 @@ void m92_state::device_timer(emu_timer &timer, device_timer_id id, int param, vo } -WRITE16_MEMBER(m92_state::m92_spritecontrol_w) +WRITE16_MEMBER(m92_state::spritecontrol_w) { COMBINE_DATA(&m_spritecontrol[offset]); // offset0: sprite list size (negative) @@ -93,10 +93,10 @@ WRITE16_MEMBER(m92_state::m92_spritecontrol_w) spriteram to the buffer. It seems safe to assume 1 word can be copied per clock. */ m_spritebuffer_timer->adjust(attotime::from_hz(XTAL(26'666'666)) * 0x400); } -// logerror("%s: m92_spritecontrol_w %08x %08x\n",m_maincpu->pc(),offset,data); +// logerror("%s: spritecontrol_w %08x %08x\n",m_maincpu->pc(),offset,data); } -WRITE16_MEMBER(m92_state::m92_videocontrol_w) +WRITE16_MEMBER(m92_state::videocontrol_w) { COMBINE_DATA(&m_videocontrol); /* @@ -130,17 +130,17 @@ WRITE16_MEMBER(m92_state::m92_videocontrol_w) /* Access to upper palette bank */ m_palette_bank = (m_videocontrol >> 1) & 1; -// logerror("%s: m92_videocontrol_w %d = %02x\n",m_maincpu->pc(),offset,data); +// logerror("%s: videocontrol_w %d = %02x\n",m_maincpu->pc(),offset,data); } -READ16_MEMBER(m92_state::m92_paletteram_r) +READ16_MEMBER(m92_state::paletteram_r) { - return m_paletteram[offset + 0x400 * m_palette_bank]; + return m_paletteram[offset | (m_palette_bank << 10)]; } -WRITE16_MEMBER(m92_state::m92_paletteram_w) +WRITE16_MEMBER(m92_state::paletteram_w) { - m_palette->write16(space, offset + 0x400 * m_palette_bank, data, mem_mask); + m_palette->write16(space, offset | (m_palette_bank << 10), data, mem_mask); } /*****************************************************************************/ @@ -165,7 +165,7 @@ TILE_GET_INFO_MEMBER(m92_state::get_pf_tile_info) /*****************************************************************************/ -WRITE16_MEMBER(m92_state::m92_vram_w) +WRITE16_MEMBER(m92_state::vram_w) { int laynum; @@ -185,22 +185,7 @@ WRITE16_MEMBER(m92_state::m92_vram_w) /*****************************************************************************/ -WRITE16_MEMBER(m92_state::m92_pf1_control_w) -{ - COMBINE_DATA(&m_pf_layer[0].control[offset]); -} - -WRITE16_MEMBER(m92_state::m92_pf2_control_w) -{ - COMBINE_DATA(&m_pf_layer[1].control[offset]); -} - -WRITE16_MEMBER(m92_state::m92_pf3_control_w) -{ - COMBINE_DATA(&m_pf_layer[2].control[offset]); -} - -WRITE16_MEMBER(m92_state::m92_master_control_w) +WRITE16_MEMBER(m92_state::master_control_w) { uint16_t old = m_pf_master_control[offset]; M92_pf_layer_info *layer; |