diff options
author | Alex W. Jackson <alex.w.jackson@gmail.com> | 2014-12-30 21:49:15 -0500 |
---|---|---|
committer | Alex W. Jackson <alex.w.jackson@gmail.com> | 2014-12-30 21:49:15 -0500 |
commit | 32a25550fe711d3491c426a63661c1a8ccf821f7 (patch) | |
tree | 8bd7fccb0a1d5f86728e65bbb8f3f0f246c05512 | |
parent | eae8f42c6496fd9d5a32845bd450588cf1db2cdb (diff) |
asteroid.c: use configured bank entries instead of postload (nw)
-rw-r--r-- | src/mame/drivers/asteroid.c | 22 | ||||
-rw-r--r-- | src/mame/includes/asteroid.h | 19 | ||||
-rw-r--r-- | src/mame/machine/asteroid.c | 58 |
3 files changed, 42 insertions, 57 deletions
diff --git a/src/mame/drivers/asteroid.c b/src/mame/drivers/asteroid.c index 7009823ce1e..f6abe8e19f2 100644 --- a/src/mame/drivers/asteroid.c +++ b/src/mame/drivers/asteroid.c @@ -237,8 +237,8 @@ WRITE8_MEMBER(asteroid_state::llander_led_w) static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x01ff) AM_RAM - AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1") - AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2") + AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1") + AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2") AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r) /* IN0 */ AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */ AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r) /* DSW1 */ @@ -258,8 +258,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x01ff) AM_RAM - AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1") - AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2") + AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1") + AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2") AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r) /* IN0 */ AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */ AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r) /* DSW1 */ @@ -699,8 +699,6 @@ static MACHINE_CONFIG_DERIVED( llander, asteroid ) MCFG_CPU_PROGRAM_MAP(llander_map) MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, (double)MASTER_CLOCK/4096/12) - MCFG_MACHINE_RESET_OVERRIDE(asteroid_state, llander) - MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6) MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070) @@ -1013,12 +1011,6 @@ DRIVER_INIT_MEMBER(asteroid_state,asterock) m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x2007, read8_delegate(FUNC(asteroid_state::asterock_IN0_r),this)); } -DRIVER_INIT_MEMBER(asteroid_state,astdelux) -{ - save_item(NAME(m_astdelux_bankswitch)); - machine().save().register_postload(save_prepost_delegate(FUNC(asteroid_state::astdelux_bankswitch_restore), this)); -} - /************************************* * * Game drivers @@ -1036,9 +1028,9 @@ GAME( 1979, meteorts, asteroid, asteroid, asteroid, driver_device, 0, GAME( 1979, meteorho, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Hoei)", "Meteor (bootleg of Asteroids)", GAME_SUPPORTS_SAVE ) GAME( 1979, hyperspc, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Rumiano)", "Hyperspace (bootleg of Asteroids)", GAME_SUPPORTS_SAVE ) -GAMEL(1980, astdelux, 0, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux ) -GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux ) -GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux ) +GAMEL(1980, astdelux, 0, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux ) +GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux ) +GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux ) GAME( 1979, llander, 0, llander, llander, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 2)", GAME_SUPPORTS_SAVE ) GAME( 1979, llander1, llander, llander, llander1, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 1)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/asteroid.h b/src/mame/includes/asteroid.h index a19c6a1a7a6..4104def464f 100644 --- a/src/mame/includes/asteroid.h +++ b/src/mame/includes/asteroid.h @@ -22,15 +22,11 @@ public: required_device<cpu_device> m_maincpu; required_device<dvg_device> m_dvg; required_device<discrete_device> m_discrete; - - /* memory pointers */ - optional_shared_ptr<UINT8> m_ram1; - optional_shared_ptr<UINT8> m_ram2; - - int m_astdelux_bankswitch; // for postload - - void astdelux_bankswitch_restore(); - + + /* memory banks */ + optional_memory_bank m_ram1; + optional_memory_bank m_ram2; + DECLARE_WRITE8_MEMBER(astdelux_coin_counter_w); DECLARE_WRITE8_MEMBER(llander_led_w); DECLARE_READ8_MEMBER(asteroid_IN0_r); @@ -56,10 +52,9 @@ public: DECLARE_DRIVER_INIT(asterock); DECLARE_DRIVER_INIT(asteroidb); - DECLARE_DRIVER_INIT(astdelux); - + + virtual void machine_start(); virtual void machine_reset(); - DECLARE_MACHINE_RESET(llander); }; /*----------- defined in audio/asteroid.c -----------*/ diff --git a/src/mame/machine/asteroid.c b/src/mame/machine/asteroid.c index a485d1f66bc..fb2c1296621 100644 --- a/src/mame/machine/asteroid.c +++ b/src/mame/machine/asteroid.c @@ -94,16 +94,9 @@ READ8_MEMBER(asteroid_state::asteroid_DSW1_r) WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w) { - if (data & 4) - { - membank("bank1")->set_base(m_ram2); - membank("bank2")->set_base(m_ram1); - } - else - { - membank("bank1")->set_base(m_ram1); - membank("bank2")->set_base(m_ram2); - } + int bank = BIT(data, 2); + m_ram1->set_entry(bank); + m_ram2->set_entry(bank); set_led_status (machine(), 0, ~data & 0x02); set_led_status (machine(), 1, ~data & 0x01); @@ -112,22 +105,9 @@ WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w) WRITE8_MEMBER(asteroid_state::astdelux_bank_switch_w) { - m_astdelux_bankswitch = data; - astdelux_bankswitch_restore(); -} - -void asteroid_state::astdelux_bankswitch_restore() -{ - if (m_astdelux_bankswitch & 0x80) - { - membank("bank1")->set_base(m_ram2); - membank("bank2")->set_base(m_ram1); - } - else - { - membank("bank1")->set_base(m_ram1); - membank("bank2")->set_base(m_ram2); - } + int bank = BIT(data, 7); + m_ram1->set_entry(bank); + m_ram2->set_entry(bank); } WRITE8_MEMBER(asteroid_state::astdelux_led_w) @@ -135,13 +115,31 @@ WRITE8_MEMBER(asteroid_state::astdelux_led_w) set_led_status(machine(), offset, (data & 0x80) ? 0 : 1); } -void asteroid_state::machine_reset() +void asteroid_state::machine_start() { - asteroid_bank_switch_w(m_maincpu->space(AS_PROGRAM), 0, 0); - m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0); + /* configure RAM banks if present (not on llander) */ + if (m_ram1.target() != NULL) + { + UINT8 *ram1 = reinterpret_cast<UINT8 *>(memshare("ram1")->ptr()); + UINT8 *ram2 = reinterpret_cast<UINT8 *>(memshare("ram2")->ptr()); + + /* swapped */ + m_ram1->configure_entry(1, ram2); + m_ram2->configure_entry(1, ram1); + /* normal */ + m_ram1->configure_entry(0, ram1); + m_ram2->configure_entry(0, ram2); + } } -MACHINE_RESET_MEMBER(asteroid_state, llander) +void asteroid_state::machine_reset() { m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0); + + /* reset RAM banks if present */ + if (m_ram1.target() != NULL) + { + m_ram1->set_entry(0); + m_ram2->set_entry(0); + } } |