Previous 199869 Revisions Next

r34118 Wednesday 31st December, 2014 at 02:49:15 UTC by Alex W. Jackson
asteroid.c: use configured bank entries instead of postload (nw)
[src/mame/drivers]asteroid.c
[src/mame/includes]asteroid.h
[src/mame/machine]asteroid.c

trunk/src/mame/drivers/asteroid.c
r242629r242630
237237static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state )
238238   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
239239   AM_RANGE(0x0000, 0x01ff) AM_RAM
240   AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1")
241   AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2")
240   AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1")
241   AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2")
242242   AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r)    /* IN0 */
243243   AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r)    /* IN1 */
244244   AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r)   /* DSW1 */
r242629r242630
258258static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state )
259259   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
260260   AM_RANGE(0x0000, 0x01ff) AM_RAM
261   AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1")
262   AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2")
261   AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1")
262   AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2")
263263   AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r)    /* IN0 */
264264   AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r)    /* IN1 */
265265   AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r)   /* DSW1 */
r242629r242630
699699   MCFG_CPU_PROGRAM_MAP(llander_map)
700700   MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt,  (double)MASTER_CLOCK/4096/12)
701701
702   MCFG_MACHINE_RESET_OVERRIDE(asteroid_state, llander)
703
704702   MCFG_SCREEN_MODIFY("screen")
705703   MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6)
706704   MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070)
r242629r242630
10131011   m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x2007, read8_delegate(FUNC(asteroid_state::asterock_IN0_r),this));
10141012}
10151013
1016DRIVER_INIT_MEMBER(asteroid_state,astdelux)
1017{
1018   save_item(NAME(m_astdelux_bankswitch));
1019   machine().save().register_postload(save_prepost_delegate(FUNC(asteroid_state::astdelux_bankswitch_restore), this));
1020}
1021
10221014/*************************************
10231015 *
10241016 *  Game drivers
r242629r242630
10361028GAME( 1979, meteorho,  asteroid,  asteroid,  asteroid,  driver_device,  0,         ROT0, "bootleg (Hoei)",        "Meteor (bootleg of Asteroids)",     GAME_SUPPORTS_SAVE )
10371029GAME( 1979, hyperspc,  asteroid,  asteroid,  asteroid,  driver_device,  0,         ROT0, "bootleg (Rumiano)",     "Hyperspace (bootleg of Asteroids)", GAME_SUPPORTS_SAVE )
10381030
1039GAMEL(1980, astdelux,  0,         astdelux,  astdelux,  asteroid_state, astdelux,  ROT0, "Atari",   "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux )
1040GAMEL(1980, astdelux2, astdelux,  astdelux,  astdelux,  asteroid_state, astdelux,  ROT0, "Atari",   "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux )
1041GAMEL(1980, astdelux1, astdelux,  astdelux,  astdelux,  asteroid_state, astdelux,  ROT0, "Atari",   "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux )
1031GAMEL(1980, astdelux,  0,         astdelux,  astdelux,  driver_device,  0,         ROT0, "Atari",   "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux )
1032GAMEL(1980, astdelux2, astdelux,  astdelux,  astdelux,  driver_device,  0,         ROT0, "Atari",   "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux )
1033GAMEL(1980, astdelux1, astdelux,  astdelux,  astdelux,  driver_device,  0,         ROT0, "Atari",   "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux )
10421034
10431035GAME( 1979, llander,   0,         llander,   llander,   driver_device,  0,         ROT0, "Atari",   "Lunar Lander (rev 2)",     GAME_SUPPORTS_SAVE )
10441036GAME( 1979, llander1,  llander,   llander,   llander1,  driver_device,  0,         ROT0, "Atari",   "Lunar Lander (rev 1)",     GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/asteroid.h
r242629r242630
2222   required_device<cpu_device> m_maincpu;
2323   required_device<dvg_device> m_dvg;
2424   required_device<discrete_device> m_discrete;
25   
26   /* memory pointers */
27   optional_shared_ptr<UINT8> m_ram1;
28   optional_shared_ptr<UINT8> m_ram2;
29   
30   int m_astdelux_bankswitch; // for postload
31   
32   void astdelux_bankswitch_restore();
33     
25
26   /* memory banks */
27   optional_memory_bank m_ram1;
28   optional_memory_bank m_ram2;
29
3430   DECLARE_WRITE8_MEMBER(astdelux_coin_counter_w);
3531   DECLARE_WRITE8_MEMBER(llander_led_w);
3632   DECLARE_READ8_MEMBER(asteroid_IN0_r);
r242629r242630
5652   
5753   DECLARE_DRIVER_INIT(asterock);
5854   DECLARE_DRIVER_INIT(asteroidb);
59   DECLARE_DRIVER_INIT(astdelux);
60   
55
56   virtual void machine_start();
6157   virtual void machine_reset();
62   DECLARE_MACHINE_RESET(llander);
6358};
6459
6560/*----------- defined in audio/asteroid.c -----------*/
trunk/src/mame/machine/asteroid.c
r242629r242630
9494
9595WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w)
9696{
97   if (data & 4)
98   {
99      membank("bank1")->set_base(m_ram2);
100      membank("bank2")->set_base(m_ram1);
101   }
102   else
103   {
104      membank("bank1")->set_base(m_ram1);
105      membank("bank2")->set_base(m_ram2);
106   }
97   int bank = BIT(data, 2);
98   m_ram1->set_entry(bank);
99   m_ram2->set_entry(bank);
107100
108101   set_led_status (machine(), 0, ~data & 0x02);
109102   set_led_status (machine(), 1, ~data & 0x01);
r242629r242630
112105
113106WRITE8_MEMBER(asteroid_state::astdelux_bank_switch_w)
114107{
115   m_astdelux_bankswitch = data;
116   astdelux_bankswitch_restore();
108   int bank = BIT(data, 7);
109   m_ram1->set_entry(bank);
110   m_ram2->set_entry(bank);
117111}
118112
119void asteroid_state::astdelux_bankswitch_restore()
120{
121   if (m_astdelux_bankswitch & 0x80)
122   {
123      membank("bank1")->set_base(m_ram2);
124      membank("bank2")->set_base(m_ram1);
125   }
126   else
127   {
128      membank("bank1")->set_base(m_ram1);
129      membank("bank2")->set_base(m_ram2);
130   }
131}
132
133113WRITE8_MEMBER(asteroid_state::astdelux_led_w)
134114{
135115   set_led_status(machine(), offset, (data & 0x80) ? 0 : 1);
136116}
137117
138void asteroid_state::machine_reset()
118void asteroid_state::machine_start()
139119{
140   asteroid_bank_switch_w(m_maincpu->space(AS_PROGRAM), 0, 0);
141   m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0);
120   /* configure RAM banks if present (not on llander) */
121   if (m_ram1.target() != NULL)
122   {
123      UINT8 *ram1 = reinterpret_cast<UINT8 *>(memshare("ram1")->ptr());
124      UINT8 *ram2 = reinterpret_cast<UINT8 *>(memshare("ram2")->ptr());
125
126      /* swapped */
127      m_ram1->configure_entry(1, ram2);
128      m_ram2->configure_entry(1, ram1);
129      /* normal */
130      m_ram1->configure_entry(0, ram1);
131      m_ram2->configure_entry(0, ram2);
132   }
142133}
143134
144MACHINE_RESET_MEMBER(asteroid_state, llander)
135void asteroid_state::machine_reset()
145136{
146137   m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0);
138
139   /* reset RAM banks if present */
140   if (m_ram1.target() != NULL)
141   {
142      m_ram1->set_entry(0);
143      m_ram2->set_entry(0);
144   }
147145}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team