diff options
Diffstat (limited to 'src/mame/drivers/ultratnk.cpp')
-rw-r--r-- | src/mame/drivers/ultratnk.cpp | 85 |
1 files changed, 46 insertions, 39 deletions
diff --git a/src/mame/drivers/ultratnk.cpp b/src/mame/drivers/ultratnk.cpp index 9d4ed0a3ade..62cc6275b88 100644 --- a/src/mame/drivers/ultratnk.cpp +++ b/src/mame/drivers/ultratnk.cpp @@ -71,91 +71,98 @@ TIMER_CALLBACK_MEMBER(ultratnk_state::nmi_callback) if (ioport("IN0")->read() & 0x40) m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); - timer_set(m_screen->time_until_pos(scanline), TIMER_NMI, scanline); + m_nmi_timer->adjust(m_screen->time_until_pos(scanline), scanline); +} + + +void ultratnk_state::machine_start() +{ + m_nmi_timer = timer_alloc(TIMER_NMI); + + save_item(NAME(m_da_latch)); + save_item(NAME(m_collision)); } void ultratnk_state::machine_reset() { - timer_set(m_screen->time_until_pos(32), TIMER_NMI, 32); + m_nmi_timer->adjust(m_screen->time_until_pos(32), 32); } -READ8_MEMBER(ultratnk_state::ultratnk_wram_r) +READ8_MEMBER(ultratnk_state::wram_r) { - uint8_t *videoram = m_videoram; - return videoram[0x380 + offset]; + return m_videoram[0x380 + offset]; } -READ8_MEMBER(ultratnk_state::ultratnk_analog_r) +READ8_MEMBER(ultratnk_state::analog_r) { return (ioport("ANALOG")->read() << (~offset & 7)) & 0x80; } -READ8_MEMBER(ultratnk_state::ultratnk_coin_r) +READ8_MEMBER(ultratnk_state::coin_r) { return (ioport("COIN")->read() << (~offset & 7)) & 0x80; } -READ8_MEMBER(ultratnk_state::ultratnk_collision_r) +READ8_MEMBER(ultratnk_state::collision_r) { return (ioport("COLLISION")->read() << (~offset & 7)) & 0x80; } -READ8_MEMBER(ultratnk_state::ultratnk_options_r) +READ8_MEMBER(ultratnk_state::options_r) { return (ioport("DIP")->read() >> (2 * (offset & 3))) & 3; } -WRITE8_MEMBER(ultratnk_state::ultratnk_wram_w) +WRITE8_MEMBER(ultratnk_state::wram_w) { - uint8_t *videoram = m_videoram; - videoram[0x380 + offset] = data; + m_videoram[0x380 + offset] = data; } -WRITE8_MEMBER(ultratnk_state::ultratnk_collision_reset_w) +WRITE8_MEMBER(ultratnk_state::collision_reset_w) { m_collision[(offset >> 1) & 3] = 0; } -WRITE8_MEMBER(ultratnk_state::ultratnk_da_latch_w) +WRITE8_MEMBER(ultratnk_state::da_latch_w) { m_da_latch = data & 15; } -WRITE8_MEMBER(ultratnk_state::ultratnk_led_1_w) +WRITE8_MEMBER(ultratnk_state::led_1_w) { output().set_led_value(0, offset & 1); /* left player start */ } -WRITE8_MEMBER(ultratnk_state::ultratnk_led_2_w) +WRITE8_MEMBER(ultratnk_state::led_2_w) { output().set_led_value(1, offset & 1); /* right player start */ } -WRITE8_MEMBER(ultratnk_state::ultratnk_lockout_w) +WRITE8_MEMBER(ultratnk_state::lockout_w) { machine().bookkeeping().coin_lockout_global_w(~offset & 1); } -WRITE8_MEMBER(ultratnk_state::ultratnk_fire_1_w) +WRITE8_MEMBER(ultratnk_state::fire_1_w) { m_discrete->write(space, ULTRATNK_FIRE_EN_1, offset & 1); } -WRITE8_MEMBER(ultratnk_state::ultratnk_fire_2_w) +WRITE8_MEMBER(ultratnk_state::fire_2_w) { m_discrete->write(space, ULTRATNK_FIRE_EN_2, offset & 1); } -WRITE8_MEMBER(ultratnk_state::ultratnk_attract_w) +WRITE8_MEMBER(ultratnk_state::attract_w) { m_discrete->write(space, ULTRATNK_ATTRACT_EN, data & 1); } -WRITE8_MEMBER(ultratnk_state::ultratnk_explosion_w) +WRITE8_MEMBER(ultratnk_state::explosion_w) { m_discrete->write(space, ULTRATNK_EXPLOSION_DATA, data & 15); } @@ -166,27 +173,27 @@ static ADDRESS_MAP_START( ultratnk_cpu_map, AS_PROGRAM, 8, ultratnk_state ) ADDRESS_MAP_GLOBAL_MASK(0x3fff) AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x700) AM_RAM - AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x700) AM_READWRITE(ultratnk_wram_r, ultratnk_wram_w) - AM_RANGE(0x0800, 0x0bff) AM_MIRROR(0x400) AM_RAM_WRITE(ultratnk_video_ram_w) AM_SHARE("videoram") + AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x700) AM_READWRITE(wram_r, wram_w) + AM_RANGE(0x0800, 0x0bff) AM_MIRROR(0x400) AM_RAM_WRITE(video_ram_w) AM_SHARE("videoram") AM_RANGE(0x1000, 0x17ff) AM_READ_PORT("IN0") AM_RANGE(0x1800, 0x1fff) AM_READ_PORT("IN1") - AM_RANGE(0x2000, 0x2007) AM_MIRROR(0x718) AM_READ(ultratnk_analog_r) - AM_RANGE(0x2020, 0x2027) AM_MIRROR(0x718) AM_READ(ultratnk_coin_r) - AM_RANGE(0x2040, 0x2047) AM_MIRROR(0x718) AM_READ(ultratnk_collision_r) - AM_RANGE(0x2060, 0x2063) AM_MIRROR(0x71c) AM_READ(ultratnk_options_r) + AM_RANGE(0x2000, 0x2007) AM_MIRROR(0x718) AM_READ(analog_r) + AM_RANGE(0x2020, 0x2027) AM_MIRROR(0x718) AM_READ(coin_r) + AM_RANGE(0x2040, 0x2047) AM_MIRROR(0x718) AM_READ(collision_r) + AM_RANGE(0x2060, 0x2063) AM_MIRROR(0x71c) AM_READ(options_r) - AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x71f) AM_WRITE(ultratnk_attract_w) - AM_RANGE(0x2020, 0x2027) AM_MIRROR(0x718) AM_WRITE(ultratnk_collision_reset_w) - AM_RANGE(0x2040, 0x2041) AM_MIRROR(0x718) AM_WRITE(ultratnk_da_latch_w) - AM_RANGE(0x2042, 0x2043) AM_MIRROR(0x718) AM_WRITE(ultratnk_explosion_w) + AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x71f) AM_WRITE(attract_w) + AM_RANGE(0x2020, 0x2027) AM_MIRROR(0x718) AM_WRITE(collision_reset_w) + AM_RANGE(0x2040, 0x2041) AM_MIRROR(0x718) AM_WRITE(da_latch_w) + AM_RANGE(0x2042, 0x2043) AM_MIRROR(0x718) AM_WRITE(explosion_w) AM_RANGE(0x2044, 0x2045) AM_MIRROR(0x718) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x2066, 0x2067) AM_MIRROR(0x710) AM_WRITE(ultratnk_lockout_w) - AM_RANGE(0x2068, 0x2069) AM_MIRROR(0x710) AM_WRITE(ultratnk_led_1_w) - AM_RANGE(0x206a, 0x206b) AM_MIRROR(0x710) AM_WRITE(ultratnk_led_2_w) - AM_RANGE(0x206c, 0x206d) AM_MIRROR(0x710) AM_WRITE(ultratnk_fire_2_w) - AM_RANGE(0x206e, 0x206f) AM_MIRROR(0x710) AM_WRITE(ultratnk_fire_1_w) + AM_RANGE(0x2066, 0x2067) AM_MIRROR(0x710) AM_WRITE(lockout_w) + AM_RANGE(0x2068, 0x2069) AM_MIRROR(0x710) AM_WRITE(led_1_w) + AM_RANGE(0x206a, 0x206b) AM_MIRROR(0x710) AM_WRITE(led_2_w) + AM_RANGE(0x206c, 0x206d) AM_MIRROR(0x710) AM_WRITE(fire_2_w) + AM_RANGE(0x206e, 0x206f) AM_MIRROR(0x710) AM_WRITE(fire_1_w) AM_RANGE(0x2800, 0x2fff) AM_NOP /* diagnostic ROM */ AM_RANGE(0x3000, 0x3fff) AM_ROM @@ -314,8 +321,8 @@ static MACHINE_CONFIG_START( ultratnk, ultratnk_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, 256, VTOTAL, 0, 224) - MCFG_SCREEN_UPDATE_DRIVER(ultratnk_state, screen_update_ultratnk) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(ultratnk_state, screen_vblank_ultratnk)) + MCFG_SCREEN_UPDATE_DRIVER(ultratnk_state, screen_update) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(ultratnk_state, screen_vblank)) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", ultratnk) @@ -358,4 +365,4 @@ ROM_START( ultratnk ) ROM_END -GAME( 1978, ultratnk, 0, ultratnk, ultratnk, driver_device, 0, 0, "Atari (Kee Games)", "Ultra Tank", 0 ) +GAME( 1978, ultratnk, 0, ultratnk, ultratnk, driver_device, 0, 0, "Atari (Kee Games)", "Ultra Tank", MACHINE_SUPPORTS_SAVE ) |