summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit32a25550fe711d3491c426a63661c1a8ccf821f7 (patch)
tree8bd7fccb0a1d5f86728e65bbb8f3f0f246c05512
parenteae8f42c6496fd9d5a32845bd450588cf1db2cdb (diff)
asteroid.c: use configured bank entries instead of postload (nw)
-rw-r--r--src/mame/drivers/asteroid.c22
-rw-r--r--src/mame/includes/asteroid.h19
-rw-r--r--src/mame/machine/asteroid.c58
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);
+ }
}