Previous 199869 Revisions Next

r36127 Friday 27th February, 2015 at 17:33:18 UTC by Osso
capbowl.c: killed anonymous timer, enabled save state support (nw)
tms34061.c: added save state support (nw)
[src/emu/video]tms34061.c
[src/mame/drivers]capbowl.c
[src/mame/includes]capbowl.h
[src/mame/video]capbowl.c

trunk/src/emu/video/tms34061.c
r244638r244639
6060
6161   /* allocate memory for VRAM */
6262   m_vram = auto_alloc_array_clear(machine(), UINT8, m_vramsize + 256 * 2);
63   /* not really a save state, just there for debugging purposes */
64   save_pointer(NAME(m_vram), m_vramsize);
65
63   
6664   /* allocate memory for latch RAM */
6765   m_latchram = auto_alloc_array_clear(machine(), UINT8, m_vramsize + 256 * 2);
6866
r244638r244639
9593
9694   /* start vertical interrupt timer */
9795   m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tms34061_device::interrupt), this));
96   
97   save_item(NAME(m_regs));
98   save_item(NAME(m_xmask));
99   save_item(NAME(m_yshift));
100   save_pointer(NAME(m_vram), m_vramsize);
101   save_pointer(NAME(m_latchram), m_vramsize);
102   save_item(NAME(m_latchdata));
103   save_pointer(NAME(m_shiftreg), m_vramsize);
98104}
99105
100106//-------------------------------------------------
trunk/src/mame/drivers/capbowl.c
r244638r244639
103103 *
104104 *************************************/
105105
106INTERRUPT_GEN_MEMBER(capbowl_state::capbowl_interrupt)
106INTERRUPT_GEN_MEMBER(capbowl_state::interrupt)
107107{
108108   if (ioport("SERVICE")->read() & 1)                      /* get status of the F2 key */
109109      device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);    /* trigger self test */
r244638r244639
121121{
122122   switch (id)
123123   {
124   case TIMER_CAPBOWL_UPDATE:
125      capbowl_update(ptr, param);
124   case TIMER_UPDATE:
125      update(ptr, param);
126126      break;
127127   default:
128128      assert_always(FALSE, "Unknown id in capbowl_state::device_timer");
r244638r244639
130130}
131131
132132
133TIMER_CALLBACK_MEMBER(capbowl_state::capbowl_update)
133TIMER_CALLBACK_MEMBER(capbowl_state::update)
134134{
135135   int scanline = param;
136136
137137   m_screen->update_partial(scanline - 1);
138138   scanline += 32;
139139   if (scanline > 240) scanline = 32;
140   timer_set(m_screen->time_until_pos(scanline), TIMER_CAPBOWL_UPDATE, scanline);
140   m_update_timer->adjust(m_screen->time_until_pos(scanline), scanline);
141141}
142142
143143
r244638r244639
190190 *
191191 *************************************/
192192
193WRITE8_MEMBER(capbowl_state::capbowl_sndcmd_w)
193WRITE8_MEMBER(capbowl_state::sndcmd_w)
194194{
195195   m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
196196   soundlatch_byte_w(space, offset, data);
197197}
198198
199199
200
201200/*************************************
202201 *
203 *  Handler called by the 2203 emulator
204 *  when the internal timers cause an IRQ
205 *
206 *************************************/
207
208WRITE_LINE_MEMBER(capbowl_state::firqhandler)
209{
210   m_audiocpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
211}
212
213
214
215/*************************************
216 *
217202 *  Main CPU memory handlers
218203 *
219204 *************************************/
r244638r244639
223208   AM_RANGE(0x4000, 0x4000) AM_WRITEONLY AM_SHARE("rowaddress")
224209   AM_RANGE(0x4800, 0x4800) AM_WRITE(capbowl_rom_select_w)
225210   AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("nvram")
226   AM_RANGE(0x5800, 0x5fff) AM_READWRITE(capbowl_tms34061_r, capbowl_tms34061_w)
227   AM_RANGE(0x6000, 0x6000) AM_WRITE(capbowl_sndcmd_w)
211   AM_RANGE(0x5800, 0x5fff) AM_READWRITE(tms34061_r, tms34061_w)
212   AM_RANGE(0x6000, 0x6000) AM_WRITE(sndcmd_w)
228213   AM_RANGE(0x6800, 0x6800) AM_WRITE(track_reset_w) AM_READNOP   /* + watchdog */
229214   AM_RANGE(0x7000, 0x7000) AM_READ(track_0_r)         /* + other inputs */
230215   AM_RANGE(0x7800, 0x7800) AM_READ(track_1_r)         /* + other inputs */
r244638r244639
236221   AM_RANGE(0x0000, 0x001f) AM_READWRITE(bowlrama_blitter_r, bowlrama_blitter_w)
237222   AM_RANGE(0x4000, 0x4000) AM_WRITEONLY AM_SHARE("rowaddress")
238223   AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("nvram")
239   AM_RANGE(0x5800, 0x5fff) AM_READWRITE(capbowl_tms34061_r, capbowl_tms34061_w)
240   AM_RANGE(0x6000, 0x6000) AM_WRITE(capbowl_sndcmd_w)
224   AM_RANGE(0x5800, 0x5fff) AM_READWRITE(tms34061_r, tms34061_w)
225   AM_RANGE(0x6000, 0x6000) AM_WRITE(sndcmd_w)
241226   AM_RANGE(0x6800, 0x6800) AM_WRITE(track_reset_w) AM_READNOP    /* + watchdog */
242227   AM_RANGE(0x7000, 0x7000) AM_READ(track_0_r)         /* + other inputs */
243228   AM_RANGE(0x7800, 0x7800) AM_READ(track_1_r)         /* + other inputs */
r244638r244639
301286
302287/*************************************
303288 *
304 *  TMS34061 interfacing
305 *
306 *************************************/
307
308WRITE_LINE_MEMBER(capbowl_state::generate_tms34061_interrupt)
309{
310   m_maincpu->set_input_line(M6809_FIRQ_LINE, state);
311}
312
313/*************************************
314 *
315289 *  Machine driver
316290 *
317291 *************************************/
318292
319293void capbowl_state::machine_start()
320294{
295   m_update_timer = timer_alloc(TIMER_UPDATE);
296   
321297   save_item(NAME(m_blitter_addr));
322   save_item(NAME(m_last_trackball_val[0]));
323   save_item(NAME(m_last_trackball_val[1]));
298   save_item(NAME(m_last_trackball_val));
324299}
325300
326301void capbowl_state::machine_reset()
327302{
328   timer_set(m_screen->time_until_pos(32), TIMER_CAPBOWL_UPDATE, 32);
303   m_update_timer->adjust(m_screen->time_until_pos(32), 32);
329304
330305   m_blitter_addr = 0;
331306   m_last_trackball_val[0] = 0;
r244638r244639
338313   /* basic machine hardware */
339314   MCFG_CPU_ADD("maincpu", M6809E, MASTER_CLOCK)
340315   MCFG_CPU_PROGRAM_MAP(capbowl_map)
341   MCFG_CPU_VBLANK_INT_DRIVER("screen", capbowl_state,  capbowl_interrupt)
316   MCFG_CPU_VBLANK_INT_DRIVER("screen", capbowl_state,  interrupt)
342317   MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_ASTABLE(100000.0, 100000.0, 0.1e-6) * 15.5) // ~0.3s
343318
344319   MCFG_CPU_ADD("audiocpu", M6809E, MASTER_CLOCK)
r244638r244639
354329   MCFG_SCREEN_SIZE(360, 256)
355330   MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 244)
356331   MCFG_SCREEN_REFRESH_RATE(57)
357   MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update_capbowl)
332   MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update)
358333
359334   MCFG_DEVICE_ADD("tms34061", TMS34061, 0)
360335   MCFG_TMS34061_ROWSHIFT(8)  /* VRAM address is (row << rowshift) | col */
361336   MCFG_TMS34061_VRAM_SIZE(0x10000) /* size of video RAM */
362   MCFG_TMS34061_INTERRUPT_CB(WRITELINE(capbowl_state, generate_tms34061_interrupt))      /* interrupt gen callback */
337   MCFG_TMS34061_INTERRUPT_CB(INPUTLINE("maincpu", M6809_FIRQ_LINE))      /* interrupt gen callback */
363338
364339   /* sound hardware */
365340   MCFG_SPEAKER_STANDARD_MONO("mono")
366341
367342   MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK/2)
368   MCFG_YM2203_IRQ_HANDLER(WRITELINE(capbowl_state, firqhandler))
343   MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE))
369344   MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("ticket", ticket_dispenser_device, read))
370345   MCFG_AY8910_PORT_B_WRITE_CB(DEVWRITE8("ticket", ticket_dispenser_device, write))  /* Also a status LED. See memory map above */
371346   MCFG_SOUND_ROUTE(0, "mono", 0.07)
r244638r244639
492467 *
493468 *************************************/
494469
495GAME( 1988, capbowl,  0,       capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 1)", 0 )
496GAME( 1988, capbowl2, capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 2)", 0 )
497GAME( 1988, capbowl3, capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 3)", 0 )
498GAME( 1988, capbowl4, capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 4)", 0 )
499GAME( 1989, clbowl,   capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Coors Light Bowling", 0 )
500GAME( 1991, bowlrama, 0,       bowlrama, capbowl, driver_device, 0,        ROT270, "P&P Marketing", "Bowl-O-Rama", 0 )
470GAME( 1988, capbowl,  0,       capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 1)", GAME_SUPPORTS_SAVE )
471GAME( 1988, capbowl2, capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 2)", GAME_SUPPORTS_SAVE )
472GAME( 1988, capbowl3, capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 3)", GAME_SUPPORTS_SAVE )
473GAME( 1988, capbowl4, capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 4)", GAME_SUPPORTS_SAVE )
474GAME( 1989, clbowl,   capbowl, capbowl,  capbowl, capbowl_state, capbowl,  ROT270, "Incredible Technologies / Capcom", "Coors Light Bowling", GAME_SUPPORTS_SAVE )
475GAME( 1991, bowlrama, 0,       bowlrama, capbowl, driver_device, 0,        ROT270, "P&P Marketing", "Bowl-O-Rama", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/capbowl.h
r244638r244639
1212public:
1313   enum
1414   {
15      TIMER_CAPBOWL_UPDATE
15      TIMER_UPDATE
1616   };
1717
1818   capbowl_state(const machine_config &mconfig, device_type type, const char *tag)
1919      : driver_device(mconfig, type, tag),
20      m_rowaddress(*this, "rowaddress"),
2120      m_maincpu(*this, "maincpu"),
2221      m_audiocpu(*this, "audiocpu"),
2322      m_tms34061(*this, "tms34061"),
24      m_screen(*this, "screen") { }
23      m_screen(*this, "screen"),
24      m_rowaddress(*this, "rowaddress") { }
2525
26   /* devices */
27   required_device<cpu_device> m_maincpu;
28   required_device<cpu_device> m_audiocpu;
29   required_device<tms34061_device> m_tms34061;
30   required_device<screen_device> m_screen;
31
2632   /* memory pointers */
2733   required_shared_ptr<UINT8> m_rowaddress;
2834
r244638r244639
3137
3238   /* input-related */
3339   UINT8 m_last_trackball_val[2];
40   
41   emu_timer *m_update_timer;
3442
35   /* devices */
36   required_device<cpu_device> m_maincpu;
37   required_device<cpu_device> m_audiocpu;
38   required_device<tms34061_device> m_tms34061;
39   required_device<screen_device> m_screen;
40
41   DECLARE_WRITE8_MEMBER(capbowl_rom_select_w);
43   // common
4244   DECLARE_READ8_MEMBER(track_0_r);
4345   DECLARE_READ8_MEMBER(track_1_r);
4446   DECLARE_WRITE8_MEMBER(track_reset_w);
45   DECLARE_WRITE8_MEMBER(capbowl_sndcmd_w);
46   DECLARE_WRITE8_MEMBER(capbowl_tms34061_w);
47   DECLARE_READ8_MEMBER(capbowl_tms34061_r);
47   DECLARE_WRITE8_MEMBER(sndcmd_w);
48   DECLARE_WRITE8_MEMBER(tms34061_w);
49   DECLARE_READ8_MEMBER(tms34061_r);
50   
51   // capbowl specific
52   DECLARE_WRITE8_MEMBER(capbowl_rom_select_w);
53   
54   // bowlrama specific
4855   DECLARE_WRITE8_MEMBER(bowlrama_blitter_w);
4956   DECLARE_READ8_MEMBER(bowlrama_blitter_r);
57   
5058   DECLARE_DRIVER_INIT(capbowl);
5159   virtual void machine_start();
5260   virtual void machine_reset();
53   UINT32 screen_update_capbowl(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
54   INTERRUPT_GEN_MEMBER(capbowl_interrupt);
55   TIMER_CALLBACK_MEMBER(capbowl_update);
61   
62   INTERRUPT_GEN_MEMBER(interrupt);
63   TIMER_CALLBACK_MEMBER(update);
64   
65   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
5666   inline rgb_t pen_for_pixel( UINT8 *src, UINT8 pix );
57   DECLARE_WRITE_LINE_MEMBER(firqhandler);
58   DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt);
5967
6068protected:
6169   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
trunk/src/mame/video/capbowl.c
r244638r244639
1515 *
1616 *************************************/
1717
18WRITE8_MEMBER(capbowl_state::capbowl_tms34061_w)
18WRITE8_MEMBER(capbowl_state::tms34061_w)
1919{
2020   int func = (offset >> 8) & 3;
2121   int col = offset & 0xff;
r244638r244639
3030}
3131
3232
33READ8_MEMBER(capbowl_state::capbowl_tms34061_r)
33READ8_MEMBER(capbowl_state::tms34061_r)
3434{
3535   int func = (offset >> 8) & 3;
3636   int col = offset & 0xff;
r244638r244639
123123}
124124
125125
126UINT32 capbowl_state::screen_update_capbowl(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
126UINT32 capbowl_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
127127{
128   int x, y;
129
130128   /* first get the current display state */
131129   m_tms34061->get_display_state();
132130
r244638r244639
138136   }
139137
140138   /* now regenerate the bitmap */
141   for (y = cliprect.min_y; y <= cliprect.max_y; y++)
139   for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
142140   {
143141      UINT8 *src = &m_tms34061->m_display.vram[256 * y];
144142      UINT32 *dest = &bitmap.pix32(y);
145143
146      for (x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)
144      for (int x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)
147145      {
148146         UINT8 pix = src[32 + (x / 2)];
149147         *dest++ = pen_for_pixel(src, pix >> 4);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team