Previous 199869 Revisions Next

r39876 Wednesday 22nd July, 2015 at 18:39:57 UTC by Osso
destroyr.c: killed anonymous timers, enabled save state support (nw)
[src/mame/drivers]destroyr.c

trunk/src/mame/drivers/destroyr.c
r248387r248388
2929
3030   destroyr_state(const machine_config &mconfig, device_type type, const char *tag)
3131      : driver_device(mconfig, type, tag),
32      m_alpha_num_ram(*this, "alpha_nuram"),
33      m_major_obj_ram(*this, "major_obj_ram"),
34      m_minor_obj_ram(*this, "minor_obj_ram"),
3532      m_maincpu(*this, "maincpu"),
3633      m_gfxdecode(*this, "gfxdecode"),
3734      m_screen(*this, "screen"),
38      m_palette(*this, "palette") { }
35      m_palette(*this, "palette"),
36      m_alpha_num_ram(*this, "alpha_nuram"),
37      m_major_obj_ram(*this, "major_obj_ram"),
38      m_minor_obj_ram(*this, "minor_obj_ram") { }
3939
40   /* devices */
41   required_device<cpu_device> m_maincpu;
42   required_device<gfxdecode_device> m_gfxdecode;
43   required_device<screen_device> m_screen;
44   required_device<palette_device> m_palette;
45
4046   /* memory pointers */
4147   required_shared_ptr<UINT8> m_alpha_num_ram;
4248   required_shared_ptr<UINT8> m_major_obj_ram;
r248387r248388
5258   int            m_attract;
5359   int            m_motor_speed;
5460   int            m_noise;
61   emu_timer      *m_dial_timer;
62   emu_timer      *m_frame_timer;
5563
56   /* devices */
57   required_device<cpu_device> m_maincpu;
58   required_device<gfxdecode_device> m_gfxdecode;
59   required_device<screen_device> m_screen;
60   required_device<palette_device> m_palette;
64   DECLARE_WRITE8_MEMBER(misc_w);
65   DECLARE_WRITE8_MEMBER(cursor_load_w);
66   DECLARE_WRITE8_MEMBER(interrupt_ack_w);
67   DECLARE_WRITE8_MEMBER(output_w);
68   DECLARE_READ8_MEMBER(input_r);
69   DECLARE_READ8_MEMBER(scanline_r);
6170
62   DECLARE_WRITE8_MEMBER(destroyr_misc_w);
63   DECLARE_WRITE8_MEMBER(destroyr_cursor_load_w);
64   DECLARE_WRITE8_MEMBER(destroyr_interrupt_ack_w);
65   DECLARE_WRITE8_MEMBER(destroyr_output_w);
66   DECLARE_READ8_MEMBER(destroyr_input_r);
67   DECLARE_READ8_MEMBER(destroyr_scanline_r);
6871   virtual void machine_start();
6972   virtual void machine_reset();
7073   DECLARE_PALETTE_INIT(destroyr);
71   UINT32 screen_update_destroyr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72   TIMER_CALLBACK_MEMBER(destroyr_dial_callback);
73   TIMER_CALLBACK_MEMBER(destroyr_frame_callback);
7474
75   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
76
77   TIMER_CALLBACK_MEMBER(dial_callback);
78   TIMER_CALLBACK_MEMBER(frame_callback);
79
7580protected:
7681   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
7782};
7883
7984
80UINT32 destroyr_state::screen_update_destroyr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
85UINT32 destroyr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
8186{
8287   int i, j;
8388
r248387r248388
149154   switch (id)
150155   {
151156   case TIMER_DESTROYR_DIAL:
152      destroyr_dial_callback(ptr, param);
157      dial_callback(ptr, param);
153158      break;
154159   case TIMER_DESTROYR_FRAME:
155      destroyr_frame_callback(ptr, param);
160      frame_callback(ptr, param);
156161      break;
157162   default:
158163      assert_always(FALSE, "Unknown id in destroyr_state::device_timer");
r248387r248388
160165}
161166
162167
163TIMER_CALLBACK_MEMBER(destroyr_state::destroyr_dial_callback)
168TIMER_CALLBACK_MEMBER(destroyr_state::dial_callback)
164169{
165170   int dial = param;
166171
r248387r248388
180185}
181186
182187
183TIMER_CALLBACK_MEMBER(destroyr_state::destroyr_frame_callback)
188TIMER_CALLBACK_MEMBER(destroyr_state::frame_callback)
184189{
185190   m_potsense[0] = 0;
186191   m_potsense[1] = 0;
187192
188193   /* PCB supports two dials, but cab has only got one */
189   timer_set(m_screen->time_until_pos(ioport("PADDLE")->read()), TIMER_DESTROYR_DIAL);
190   timer_set(m_screen->time_until_pos(0), TIMER_DESTROYR_FRAME);
194   m_dial_timer->adjust(m_screen->time_until_pos(ioport("PADDLE")->read()));
195   m_frame_timer->adjust(m_screen->time_until_pos(0));
191196}
192197
193198
r248387r248388
207212}
208213
209214
210WRITE8_MEMBER(destroyr_state::destroyr_misc_w)
215WRITE8_MEMBER(destroyr_state::misc_w)
211216{
212217   /* bits 0 to 2 connect to the sound circuits */
213218   m_attract = data & 0x01;
r248387r248388
222227}
223228
224229
225WRITE8_MEMBER(destroyr_state::destroyr_cursor_load_w)
230WRITE8_MEMBER(destroyr_state::cursor_load_w)
226231{
227232   m_cursor = data;
228233   watchdog_reset_w(space, offset, data);
229234}
230235
231236
232WRITE8_MEMBER(destroyr_state::destroyr_interrupt_ack_w)
237WRITE8_MEMBER(destroyr_state::interrupt_ack_w)
233238{
234239   m_maincpu->set_input_line(0, CLEAR_LINE);
235240}
236241
237242
238WRITE8_MEMBER(destroyr_state::destroyr_output_w)
243WRITE8_MEMBER(destroyr_state::output_w)
239244{
240   if (offset & 8) destroyr_misc_w(space, 8, data);
245   if (offset & 8) misc_w(space, 8, data);
241246
242247   else switch (offset & 7)
243248   {
r248387r248388
269274}
270275
271276
272READ8_MEMBER(destroyr_state::destroyr_input_r)
277READ8_MEMBER(destroyr_state::input_r)
273278{
274279   if (offset & 1)
275280   {
r248387r248388
290295}
291296
292297
293READ8_MEMBER(destroyr_state::destroyr_scanline_r)
298READ8_MEMBER(destroyr_state::scanline_r)
294299{
295300   return m_screen->vpos();
296301}
r248387r248388
299304static ADDRESS_MAP_START( destroyr_map, AS_PROGRAM, 8, destroyr_state )
300305   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
301306   AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0xf00) AM_RAM
302   AM_RANGE(0x1000, 0x1fff) AM_READWRITE(destroyr_input_r, destroyr_output_w)
307   AM_RANGE(0x1000, 0x1fff) AM_READWRITE(input_r, output_w)
303308   AM_RANGE(0x2000, 0x2fff) AM_READ_PORT("IN2")
304309   AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0xf00) AM_WRITEONLY AM_SHARE("alpha_nuram")
305310   AM_RANGE(0x4000, 0x401f) AM_MIRROR(0xfe0) AM_WRITEONLY AM_SHARE("major_obj_ram")
306   AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xff8) AM_WRITE(destroyr_cursor_load_w)
307   AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xff8) AM_WRITE(destroyr_interrupt_ack_w)
311   AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xff8) AM_WRITE(cursor_load_w)
312   AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xff8) AM_WRITE(interrupt_ack_w)
308313   AM_RANGE(0x5002, 0x5007) AM_MIRROR(0xff8) AM_WRITEONLY AM_SHARE("minor_obj_ram")
309   AM_RANGE(0x6000, 0x6fff) AM_READ(destroyr_scanline_r)
314   AM_RANGE(0x6000, 0x6fff) AM_READ(scanline_r)
310315   AM_RANGE(0x7000, 0x7fff) AM_ROM
311316ADDRESS_MAP_END
312317
r248387r248388
469474
470475void destroyr_state::machine_start()
471476{
477   m_dial_timer = timer_alloc(TIMER_DESTROYR_DIAL);
478   m_frame_timer = timer_alloc(TIMER_DESTROYR_FRAME);
479   
472480   save_item(NAME(m_cursor));
473481   save_item(NAME(m_wavemod));
474482   save_item(NAME(m_attract));
r248387r248388
491499   MCFG_SCREEN_REFRESH_RATE(60)
492500   MCFG_SCREEN_SIZE(256, 262)
493501   MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
494   MCFG_SCREEN_UPDATE_DRIVER(destroyr_state, screen_update_destroyr)
502   MCFG_SCREEN_UPDATE_DRIVER(destroyr_state, screen_update)
495503   MCFG_SCREEN_PALETTE("palette")
496504
497505   MCFG_GFXDECODE_ADD("gfxdecode", "palette", destroyr)
r248387r248388
552560ROM_END
553561
554562
555GAMEL( 1977, destroyr,  0,        destroyr, destroyr, driver_device, 0, ORIENTATION_FLIP_X, "Atari", "Destroyer (version O2)", GAME_NO_SOUND, layout_destroyr )
556GAMEL( 1977, destroyr1, destroyr, destroyr, destroyr, driver_device, 0, ORIENTATION_FLIP_X, "Atari", "Destroyer (version O1)", GAME_NO_SOUND, layout_destroyr )
563GAMEL( 1977, destroyr,  0,        destroyr, destroyr, driver_device, 0, ORIENTATION_FLIP_X, "Atari", "Destroyer (version O2)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE, layout_destroyr )
564GAMEL( 1977, destroyr1, destroyr, destroyr, destroyr, driver_device, 0, ORIENTATION_FLIP_X, "Atari", "Destroyer (version O1)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE, layout_destroyr )


Previous 199869 Revisions Next


© 1997-2024 The MAME Team