From 482a4d92491f3e785b0936f9dc486e5045b85de8 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 27 Feb 2015 18:33:18 +0100 Subject: capbowl.c: killed anonymous timer, enabled save state support (nw) tms34061.c: added save state support (nw) --- src/emu/video/tms34061.c | 12 ++++++-- src/mame/drivers/capbowl.c | 73 +++++++++++++++------------------------------ src/mame/includes/capbowl.h | 44 ++++++++++++++++----------- src/mame/video/capbowl.c | 12 ++++---- 4 files changed, 64 insertions(+), 77 deletions(-) diff --git a/src/emu/video/tms34061.c b/src/emu/video/tms34061.c index b0111eedaf0..3bd85f9cf38 100644 --- a/src/emu/video/tms34061.c +++ b/src/emu/video/tms34061.c @@ -60,9 +60,7 @@ void tms34061_device::device_start() /* allocate memory for VRAM */ m_vram = auto_alloc_array_clear(machine(), UINT8, m_vramsize + 256 * 2); - /* not really a save state, just there for debugging purposes */ - save_pointer(NAME(m_vram), m_vramsize); - + /* allocate memory for latch RAM */ m_latchram = auto_alloc_array_clear(machine(), UINT8, m_vramsize + 256 * 2); @@ -95,6 +93,14 @@ void tms34061_device::device_start() /* start vertical interrupt timer */ m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tms34061_device::interrupt), this)); + + save_item(NAME(m_regs)); + save_item(NAME(m_xmask)); + save_item(NAME(m_yshift)); + save_pointer(NAME(m_vram), m_vramsize); + save_pointer(NAME(m_latchram), m_vramsize); + save_item(NAME(m_latchdata)); + save_pointer(NAME(m_shiftreg), m_vramsize); } //------------------------------------------------- diff --git a/src/mame/drivers/capbowl.c b/src/mame/drivers/capbowl.c index a39f650957d..2e23106f9ae 100644 --- a/src/mame/drivers/capbowl.c +++ b/src/mame/drivers/capbowl.c @@ -103,7 +103,7 @@ * *************************************/ -INTERRUPT_GEN_MEMBER(capbowl_state::capbowl_interrupt) +INTERRUPT_GEN_MEMBER(capbowl_state::interrupt) { if (ioport("SERVICE")->read() & 1) /* get status of the F2 key */ device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); /* trigger self test */ @@ -121,8 +121,8 @@ void capbowl_state::device_timer(emu_timer &timer, device_timer_id id, int param { switch (id) { - case TIMER_CAPBOWL_UPDATE: - capbowl_update(ptr, param); + case TIMER_UPDATE: + update(ptr, param); break; default: assert_always(FALSE, "Unknown id in capbowl_state::device_timer"); @@ -130,14 +130,14 @@ void capbowl_state::device_timer(emu_timer &timer, device_timer_id id, int param } -TIMER_CALLBACK_MEMBER(capbowl_state::capbowl_update) +TIMER_CALLBACK_MEMBER(capbowl_state::update) { int scanline = param; m_screen->update_partial(scanline - 1); scanline += 32; if (scanline > 240) scanline = 32; - timer_set(m_screen->time_until_pos(scanline), TIMER_CAPBOWL_UPDATE, scanline); + m_update_timer->adjust(m_screen->time_until_pos(scanline), scanline); } @@ -190,28 +190,13 @@ WRITE8_MEMBER(capbowl_state::track_reset_w) * *************************************/ -WRITE8_MEMBER(capbowl_state::capbowl_sndcmd_w) +WRITE8_MEMBER(capbowl_state::sndcmd_w) { m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); soundlatch_byte_w(space, offset, data); } - -/************************************* - * - * Handler called by the 2203 emulator - * when the internal timers cause an IRQ - * - *************************************/ - -WRITE_LINE_MEMBER(capbowl_state::firqhandler) -{ - m_audiocpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); -} - - - /************************************* * * Main CPU memory handlers @@ -223,8 +208,8 @@ static ADDRESS_MAP_START( capbowl_map, AS_PROGRAM, 8, capbowl_state ) AM_RANGE(0x4000, 0x4000) AM_WRITEONLY AM_SHARE("rowaddress") AM_RANGE(0x4800, 0x4800) AM_WRITE(capbowl_rom_select_w) AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x5800, 0x5fff) AM_READWRITE(capbowl_tms34061_r, capbowl_tms34061_w) - AM_RANGE(0x6000, 0x6000) AM_WRITE(capbowl_sndcmd_w) + AM_RANGE(0x5800, 0x5fff) AM_READWRITE(tms34061_r, tms34061_w) + AM_RANGE(0x6000, 0x6000) AM_WRITE(sndcmd_w) AM_RANGE(0x6800, 0x6800) AM_WRITE(track_reset_w) AM_READNOP /* + watchdog */ AM_RANGE(0x7000, 0x7000) AM_READ(track_0_r) /* + other inputs */ AM_RANGE(0x7800, 0x7800) AM_READ(track_1_r) /* + other inputs */ @@ -236,8 +221,8 @@ static ADDRESS_MAP_START( bowlrama_map, AS_PROGRAM, 8, capbowl_state ) AM_RANGE(0x0000, 0x001f) AM_READWRITE(bowlrama_blitter_r, bowlrama_blitter_w) AM_RANGE(0x4000, 0x4000) AM_WRITEONLY AM_SHARE("rowaddress") AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x5800, 0x5fff) AM_READWRITE(capbowl_tms34061_r, capbowl_tms34061_w) - AM_RANGE(0x6000, 0x6000) AM_WRITE(capbowl_sndcmd_w) + AM_RANGE(0x5800, 0x5fff) AM_READWRITE(tms34061_r, tms34061_w) + AM_RANGE(0x6000, 0x6000) AM_WRITE(sndcmd_w) AM_RANGE(0x6800, 0x6800) AM_WRITE(track_reset_w) AM_READNOP /* + watchdog */ AM_RANGE(0x7000, 0x7000) AM_READ(track_0_r) /* + other inputs */ AM_RANGE(0x7800, 0x7800) AM_READ(track_1_r) /* + other inputs */ @@ -299,17 +284,6 @@ static INPUT_PORTS_START( capbowl ) INPUT_PORTS_END -/************************************* - * - * TMS34061 interfacing - * - *************************************/ - -WRITE_LINE_MEMBER(capbowl_state::generate_tms34061_interrupt) -{ - m_maincpu->set_input_line(M6809_FIRQ_LINE, state); -} - /************************************* * * Machine driver @@ -318,14 +292,15 @@ WRITE_LINE_MEMBER(capbowl_state::generate_tms34061_interrupt) void capbowl_state::machine_start() { + m_update_timer = timer_alloc(TIMER_UPDATE); + save_item(NAME(m_blitter_addr)); - save_item(NAME(m_last_trackball_val[0])); - save_item(NAME(m_last_trackball_val[1])); + save_item(NAME(m_last_trackball_val)); } void capbowl_state::machine_reset() { - timer_set(m_screen->time_until_pos(32), TIMER_CAPBOWL_UPDATE, 32); + m_update_timer->adjust(m_screen->time_until_pos(32), 32); m_blitter_addr = 0; m_last_trackball_val[0] = 0; @@ -338,7 +313,7 @@ static MACHINE_CONFIG_START( capbowl, capbowl_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6809E, MASTER_CLOCK) MCFG_CPU_PROGRAM_MAP(capbowl_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", capbowl_state, capbowl_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", capbowl_state, interrupt) MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_ASTABLE(100000.0, 100000.0, 0.1e-6) * 15.5) // ~0.3s MCFG_CPU_ADD("audiocpu", M6809E, MASTER_CLOCK) @@ -354,18 +329,18 @@ static MACHINE_CONFIG_START( capbowl, capbowl_state ) MCFG_SCREEN_SIZE(360, 256) MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 244) MCFG_SCREEN_REFRESH_RATE(57) - MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update_capbowl) + MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update) MCFG_DEVICE_ADD("tms34061", TMS34061, 0) MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */ MCFG_TMS34061_VRAM_SIZE(0x10000) /* size of video RAM */ - MCFG_TMS34061_INTERRUPT_CB(WRITELINE(capbowl_state, generate_tms34061_interrupt)) /* interrupt gen callback */ + MCFG_TMS34061_INTERRUPT_CB(INPUTLINE("maincpu", M6809_FIRQ_LINE)) /* interrupt gen callback */ /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK/2) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(capbowl_state, firqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE)) MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("ticket", ticket_dispenser_device, read)) MCFG_AY8910_PORT_B_WRITE_CB(DEVWRITE8("ticket", ticket_dispenser_device, write)) /* Also a status LED. See memory map above */ MCFG_SOUND_ROUTE(0, "mono", 0.07) @@ -492,9 +467,9 @@ DRIVER_INIT_MEMBER(capbowl_state,capbowl) * *************************************/ -GAME( 1988, capbowl, 0, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 1)", 0 ) -GAME( 1988, capbowl2, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 2)", 0 ) -GAME( 1988, capbowl3, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 3)", 0 ) -GAME( 1988, capbowl4, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 4)", 0 ) -GAME( 1989, clbowl, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Coors Light Bowling", 0 ) -GAME( 1991, bowlrama, 0, bowlrama, capbowl, driver_device, 0, ROT270, "P&P Marketing", "Bowl-O-Rama", 0 ) +GAME( 1988, capbowl, 0, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1988, capbowl2, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1988, capbowl3, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 3)", GAME_SUPPORTS_SAVE ) +GAME( 1988, capbowl4, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 4)", GAME_SUPPORTS_SAVE ) +GAME( 1989, clbowl, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Coors Light Bowling", GAME_SUPPORTS_SAVE ) +GAME( 1991, bowlrama, 0, bowlrama, capbowl, driver_device, 0, ROT270, "P&P Marketing", "Bowl-O-Rama", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/capbowl.h b/src/mame/includes/capbowl.h index 2d5252f60b1..99ff693862a 100644 --- a/src/mame/includes/capbowl.h +++ b/src/mame/includes/capbowl.h @@ -12,16 +12,22 @@ class capbowl_state : public driver_device public: enum { - TIMER_CAPBOWL_UPDATE + TIMER_UPDATE }; capbowl_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_rowaddress(*this, "rowaddress"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_tms34061(*this, "tms34061"), - m_screen(*this, "screen") { } + m_screen(*this, "screen"), + m_rowaddress(*this, "rowaddress") { } + + /* devices */ + required_device m_maincpu; + required_device m_audiocpu; + required_device m_tms34061; + required_device m_screen; /* memory pointers */ required_shared_ptr m_rowaddress; @@ -31,31 +37,33 @@ public: /* input-related */ UINT8 m_last_trackball_val[2]; + + emu_timer *m_update_timer; - /* devices */ - required_device m_maincpu; - required_device m_audiocpu; - required_device m_tms34061; - required_device m_screen; - - DECLARE_WRITE8_MEMBER(capbowl_rom_select_w); + // common DECLARE_READ8_MEMBER(track_0_r); DECLARE_READ8_MEMBER(track_1_r); DECLARE_WRITE8_MEMBER(track_reset_w); - DECLARE_WRITE8_MEMBER(capbowl_sndcmd_w); - DECLARE_WRITE8_MEMBER(capbowl_tms34061_w); - DECLARE_READ8_MEMBER(capbowl_tms34061_r); + DECLARE_WRITE8_MEMBER(sndcmd_w); + DECLARE_WRITE8_MEMBER(tms34061_w); + DECLARE_READ8_MEMBER(tms34061_r); + + // capbowl specific + DECLARE_WRITE8_MEMBER(capbowl_rom_select_w); + + // bowlrama specific DECLARE_WRITE8_MEMBER(bowlrama_blitter_w); DECLARE_READ8_MEMBER(bowlrama_blitter_r); + DECLARE_DRIVER_INIT(capbowl); virtual void machine_start(); virtual void machine_reset(); - UINT32 screen_update_capbowl(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(capbowl_interrupt); - TIMER_CALLBACK_MEMBER(capbowl_update); + + INTERRUPT_GEN_MEMBER(interrupt); + TIMER_CALLBACK_MEMBER(update); + + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); inline rgb_t pen_for_pixel( UINT8 *src, UINT8 pix ); - DECLARE_WRITE_LINE_MEMBER(firqhandler); - DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); diff --git a/src/mame/video/capbowl.c b/src/mame/video/capbowl.c index 94571f4b0be..5e227ae918b 100644 --- a/src/mame/video/capbowl.c +++ b/src/mame/video/capbowl.c @@ -15,7 +15,7 @@ * *************************************/ -WRITE8_MEMBER(capbowl_state::capbowl_tms34061_w) +WRITE8_MEMBER(capbowl_state::tms34061_w) { int func = (offset >> 8) & 3; int col = offset & 0xff; @@ -30,7 +30,7 @@ WRITE8_MEMBER(capbowl_state::capbowl_tms34061_w) } -READ8_MEMBER(capbowl_state::capbowl_tms34061_r) +READ8_MEMBER(capbowl_state::tms34061_r) { int func = (offset >> 8) & 3; int col = offset & 0xff; @@ -123,10 +123,8 @@ inline rgb_t capbowl_state::pen_for_pixel( UINT8 *src, UINT8 pix ) } -UINT32 capbowl_state::screen_update_capbowl(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +UINT32 capbowl_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int x, y; - /* first get the current display state */ m_tms34061->get_display_state(); @@ -138,12 +136,12 @@ UINT32 capbowl_state::screen_update_capbowl(screen_device &screen, bitmap_rgb32 } /* now regenerate the bitmap */ - for (y = cliprect.min_y; y <= cliprect.max_y; y++) + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { UINT8 *src = &m_tms34061->m_display.vram[256 * y]; UINT32 *dest = &bitmap.pix32(y); - for (x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2) + for (int x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2) { UINT8 pix = src[32 + (x / 2)]; *dest++ = pen_for_pixel(src, pix >> 4); -- cgit v1.2.3