From 95db34fdd6cbcee6517bd0064585d676c70f88e3 Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 26 Dec 2022 23:30:45 +0100 Subject: tickee.cpp: correct rapidfir/maletmad pixel clock, add maletmad ticket dispenser --- src/mame/misc/tickee.cpp | 318 +++++++++++++++++++++++++++-------------------- 1 file changed, 180 insertions(+), 138 deletions(-) diff --git a/src/mame/misc/tickee.cpp b/src/mame/misc/tickee.cpp index 30d005ee9dc..25ca5c968c3 100644 --- a/src/mame/misc/tickee.cpp +++ b/src/mame/misc/tickee.cpp @@ -15,9 +15,11 @@ * Rapid Fire * Mallet Madness - Known bugs: + TODO: * (Tickee) gun sometimes misfires - * Mallet Madness ticket dispenser isn't working + * rapidfir, maletmad dipswitches (2*8) + * maletmad some animation seems to run unthrottled (eg. the turtle rum barrels level), + though rate of game timer and music is ok ***************************************************************************/ @@ -93,6 +95,7 @@ public: void tickee(machine_config &config); void ghoshunt(machine_config &config); void rapidfir(machine_config &config); + void maletmad(machine_config &config); protected: virtual void machine_start() override; @@ -108,8 +111,8 @@ private: int m_beamxadd = 0; int m_beamyadd = 0; - int m_palette_bank; - uint8_t m_gunx[2]; + int m_palette_bank = 0; + uint8_t m_gunx[2] = { }; void set_beamadd(int x, int y) { m_beamxadd = x; m_beamyadd = y; } @@ -134,10 +137,11 @@ private: uint16_t ffff_r(); uint16_t rapidfir_gun1_r(); uint16_t rapidfir_gun2_r(); - void rapidfir_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void palette_bank_w(uint8_t data); + void rapidfir_output_w(uint8_t data); // Sound - void sound_bank_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void sound_bank_w(uint8_t data); // Memory maps void tickee_map(address_map &map); @@ -146,11 +150,6 @@ private: }; -#define CPU_CLOCK XTAL(40'000'000) -#define VIDEO_CLOCK XTAL(14'318'181) -#define OKI_CLOCK XTAL(1'000'000) - - /************************************* * * Compute X/Y coordinates @@ -178,37 +177,37 @@ TIMER_CALLBACK_MEMBER(tickee_gun_state::trigger_gun_interrupt) int const which = param & 1; int const beamx = (m_screen->hpos() / 2) - 58; - /* once we're ready to fire, set the X coordinate and assert the line */ + // once we're ready to fire, set the X coordinate and assert the line m_gunx[which] = beamx; - /* fire the IRQ at the correct moment */ + // fire the IRQ at the correct moment m_maincpu->set_input_line(param, ASSERT_LINE); } TIMER_CALLBACK_MEMBER(tickee_gun_state::clear_gun_interrupt) { - /* clear the IRQ on the next scanline? */ + // clear the IRQ on the next scanline? m_maincpu->set_input_line(param, CLEAR_LINE); } TIMER_CALLBACK_MEMBER(tickee_gun_state::setup_gun_interrupts) { - /* set a timer to do this again next frame */ + // set a timer to do this again next frame m_setup_gun_timer->adjust(m_screen->time_until_pos(0)); - /* only do work if the palette is flashed */ + // only do work if the palette is flashed if (!m_control || m_control[2]) { int beamx, beamy; - /* generate interrupts for player 1's gun */ + // generate interrupts for player 1's gun get_crosshair_xy(0, beamx, beamy); m_set_gun_int_timer[0]->adjust(m_screen->time_until_pos(beamy + m_beamyadd, beamx + m_beamxadd), 0); m_clear_gun_int_timer[0]->adjust(m_screen->time_until_pos(beamy + m_beamyadd + 1, beamx + m_beamxadd), 0); - /* generate interrupts for player 2's gun */ + // generate interrupts for player 2's gun get_crosshair_xy(1, beamx, beamy); m_set_gun_int_timer[1]->adjust(m_screen->time_until_pos(beamy + m_beamyadd, beamx + m_beamxadd), 1); m_clear_gun_int_timer[1]->adjust(m_screen->time_until_pos(beamy + m_beamyadd + 1, beamx + m_beamxadd), 1); @@ -227,18 +226,15 @@ void tickee_gun_state::machine_start() { tickee_state::machine_start(); - /* start a timer going on the first scanline of every frame */ + // start a timer going on the first scanline of every frame m_setup_gun_timer = timer_alloc(FUNC(tickee_gun_state::setup_gun_interrupts), this); - /* initialize gun set/clear interrupts for both players */ + // initialize gun set/clear interrupts for both players m_set_gun_int_timer[0] = timer_alloc(FUNC(tickee_gun_state::trigger_gun_interrupt), this); m_set_gun_int_timer[1] = timer_alloc(FUNC(tickee_gun_state::trigger_gun_interrupt), this); m_clear_gun_int_timer[0] = timer_alloc(FUNC(tickee_gun_state::clear_gun_interrupt), this); m_clear_gun_int_timer[1] = timer_alloc(FUNC(tickee_gun_state::clear_gun_interrupt), this); - m_palette_bank = 0; - std::fill(std::begin(m_gunx), std::end(m_gunx), 0); - save_item(NAME(m_palette_bank)); save_item(NAME(m_gunx)); } @@ -269,7 +265,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_state::scanline_update) pen_t const *const pens = m_tlc34076->pens(); int coladdr = params->coladdr << 1; - /* blank palette: fill with pen 255 */ + // blank palette: fill with pen 255 if (m_control[2]) { for (int x = params->heblnk; x < params->hsblnk; x++) @@ -277,7 +273,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_state::scanline_update) } else { - /* copy the non-blanked portions of this scanline */ + // copy the non-blanked portions of this scanline for (int x = params->heblnk; x < params->hsblnk; x += 2) { uint16_t pixels = src[coladdr++ & 0xff]; @@ -297,7 +293,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_gun_state::rapidfir_scanline_update) if (m_palette_bank) { - /* blank palette: fill with pen 255 */ + // blank palette: fill with pen 255 for (int x = params->heblnk; x < params->hsblnk; x += 2) { dest[x + 0] = pens[0xff]; @@ -306,7 +302,7 @@ TMS340X0_SCANLINE_RGB32_CB_MEMBER(tickee_gun_state::rapidfir_scanline_update) } else { - /* copy the non-blanked portions of this scanline */ + // copy the non-blanked portions of this scanline for (int x = params->heblnk; x < params->hsblnk; x += 2) { uint16_t pixels = src[coladdr++ & 0xff]; @@ -407,11 +403,26 @@ uint16_t tickee_gun_state::rapidfir_gun2_r() } -void tickee_gun_state::rapidfir_control_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void tickee_gun_state::palette_bank_w(uint8_t data) { - /* other bits like control on tickee? */ - if (ACCESSING_BITS_0_7) - m_palette_bank = data & 1; + m_palette_bank = data & 1; +} + + +void tickee_gun_state::rapidfir_output_w(uint8_t data) +{ + /* bits: + + 0, 1 = coin counters + 2, 3 = recoil? + 4 = ticket motor + */ + + machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); + machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); + + if (m_ticket[0]) + m_ticket[0]->motor_w(BIT(data, 4)); } @@ -422,9 +433,9 @@ void tickee_gun_state::rapidfir_control_w(offs_t offset, uint16_t data, uint16_t * *************************************/ -void tickee_gun_state::sound_bank_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void tickee_gun_state::sound_bank_w(uint8_t data) { - switch (data & 0xff) + switch (data) { case 0x2c: m_oki->set_rom_bank(0); @@ -443,7 +454,7 @@ void tickee_gun_state::sound_bank_w(offs_t offset, uint16_t data, uint16_t mem_m break; default: - logerror("sound_bank_w %04X %04X\n", data, mem_mask); + logerror("sound_bank_w %02X\n", data); break; } } @@ -468,12 +479,12 @@ void tickee_gun_state::tickee_map(address_map &map) map(0x04200100, 0x0420011f).w("ym2", FUNC(ay8910_device::address_data_w)).umask16(0x00ff); map(0x04400000, 0x0440007f).w(FUNC(tickee_gun_state::tickee_control_w)).share(m_control); map(0x04400040, 0x0440004f).portr("IN2"); - map(0xc0000240, 0xc000025f).nopw(); /* seems to be a bug in their code */ + map(0xc0000240, 0xc000025f).nopw(); // seems to be a bug in their code map(0xff000000, 0xffffffff).rom().region("user1", 0); } -/* addreses in the 04x range shifted slightly...*/ +// addresses in the 04x range shifted slightly... void tickee_gun_state::ghoshunt_map(address_map &map) { map(0x00000000, 0x003fffff).ram().share("vram"); @@ -485,7 +496,7 @@ void tickee_gun_state::ghoshunt_map(address_map &map) map(0x04300100, 0x0430010f).r("ym2", FUNC(ay8910_device::data_r)).umask16(0x00ff); map(0x04300100, 0x0430011f).w("ym2", FUNC(ay8910_device::address_data_w)).umask16(0x00ff); map(0x04500000, 0x0450007f).w(FUNC(tickee_gun_state::tickee_control_w)).share(m_control); - map(0xc0000240, 0xc000025f).nopw(); /* seems to be a bug in their code */ + map(0xc0000240, 0xc000025f).nopw(); // seems to be a bug in their code map(0xff000000, 0xffffffff).rom().region("user1", 0); } @@ -501,12 +512,12 @@ void tickee_state::mouseatk_map(address_map &map) map(0x04200100, 0x0420010f).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)).umask16(0x00ff); map(0x04400000, 0x0440007f).w(FUNC(tickee_state::tickee_control_w)).share(m_control); map(0x04400040, 0x0440004f).portr("IN2"); // ? - map(0xc0000240, 0xc000025f).nopw(); /* seems to be a bug in their code */ + map(0xc0000240, 0xc000025f).nopw(); // seems to be a bug in their code map(0xff000000, 0xffffffff).rom().region("user1", 0); } -/* newer hardware */ +// newer hardware void tickee_gun_state::rapidfir_map(address_map &map) { map(0x00000000, 0x007fffff).ram().share("vram"); @@ -514,9 +525,9 @@ void tickee_gun_state::rapidfir_map(address_map &map) map(0xfc000000, 0xfc00000f).r(FUNC(tickee_gun_state::rapidfir_gun1_r)); map(0xfc000100, 0xfc00010f).r(FUNC(tickee_gun_state::rapidfir_gun2_r)); map(0xfc000400, 0xfc00040f).r(FUNC(tickee_gun_state::ffff_r)); - map(0xfc000500, 0xfc00050f).noprw(); - map(0xfc000600, 0xfc00060f).w(FUNC(tickee_gun_state::rapidfir_control_w)); - map(0xfc000700, 0xfc00070f).w(FUNC(tickee_gun_state::sound_bank_w)); + map(0xfc000500, 0xfc00050f).w(FUNC(tickee_gun_state::rapidfir_output_w)).umask16(0x00ff); + map(0xfc000600, 0xfc00060f).w(FUNC(tickee_gun_state::palette_bank_w)).umask16(0x00ff); + map(0xfc000700, 0xfc00070f).w(FUNC(tickee_gun_state::sound_bank_w)).umask16(0x00ff); map(0xfc000800, 0xfc00080f).portr("IN0"); map(0xfc000900, 0xfc00090f).portr("IN1"); map(0xfc000a00, 0xfc000a0f).portr("IN2"); @@ -564,8 +575,8 @@ static INPUT_PORTS_START( tickee ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) // right ticket status + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) // left ticket status PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") @@ -581,16 +592,16 @@ static INPUT_PORTS_START( tickee ) PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("GUNX1") /* fake analog X */ + PORT_START("GUNX1") // fake analog X PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) - PORT_START("GUNY1") /* fake analog Y */ + PORT_START("GUNY1") // fake analog Y PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) - PORT_START("GUNX2") /* fake analog X */ + PORT_START("GUNX2") // fake analog X PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) - PORT_START("GUNY2") /* fake analog Y */ + PORT_START("GUNY2") // fake analog Y PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) INPUT_PORTS_END @@ -622,8 +633,8 @@ static INPUT_PORTS_START( ghoshunt ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) // right ticket status + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) // left ticket status PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0xd8, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -638,21 +649,21 @@ static INPUT_PORTS_START( ghoshunt ) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) // right ticket status + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) // left ticket status PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0xd8, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("GUNX1") /* fake analog X */ + PORT_START("GUNX1") // fake analog X PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) - PORT_START("GUNY1") /* fake analog Y */ + PORT_START("GUNY1") // fake analog Y PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) - PORT_START("GUNX2") /* fake analog X */ + PORT_START("GUNX2") // fake analog X PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) - PORT_START("GUNY2") /* fake analog Y */ + PORT_START("GUNY2") // fake analog Y PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) INPUT_PORTS_END @@ -683,8 +694,8 @@ static INPUT_PORTS_START( mouseatk ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket2", ticket_dispenser_device, line_r) // right ticket status + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) // left ticket status PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") @@ -709,19 +720,21 @@ static INPUT_PORTS_START( rapidfir ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW ) PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN2") PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW0") PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown )) @@ -749,19 +762,41 @@ static INPUT_PORTS_START( rapidfir ) PORT_DIPSETTING( 0x0040, DEF_STR( Yes )) PORT_BIT( 0xff80, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("GUNX1") /* fake analog X */ + PORT_START("GUNX1") // fake analog X PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) - PORT_START("GUNY1") /* fake analog Y */ + PORT_START("GUNY1") // fake analog Y PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) - PORT_START("GUNX2") /* fake analog X */ + PORT_START("GUNX2") // fake analog X PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) - PORT_START("GUNY2") /* fake analog Y */ + PORT_START("GUNY2") // fake analog Y PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) INPUT_PORTS_END +static INPUT_PORTS_START( maletmad ) + PORT_INCLUDE( rapidfir ) + + PORT_MODIFY("IN0") + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket1", ticket_dispenser_device, line_r) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_MODIFY("IN2") + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) + + // 1 mallet, so no there is no 'gun 2' + PORT_MODIFY("GUNX2") + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_MODIFY("GUNY2") + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + /************************************* * @@ -771,11 +806,11 @@ INPUT_PORTS_END void tickee_gun_state::tickee(machine_config &config) { - /* basic machine hardware */ - TMS34010(config, m_maincpu, XTAL(40'000'000)); + // basic machine hardware + TMS34010(config, m_maincpu, 40_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &tickee_gun_state::tickee_map); m_maincpu->set_halt_on_reset(false); - m_maincpu->set_pixel_clock(VIDEO_CLOCK/2); + m_maincpu->set_pixel_clock(14.318181_MHz_XTAL/2); m_maincpu->set_pixels_per_clock(1); m_maincpu->set_scanline_rgb32_callback(FUNC(tickee_gun_state::scanline_update)); @@ -785,101 +820,106 @@ void tickee_gun_state::tickee(machine_config &config) TICKET_DISPENSER(config, m_ticket[0], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); TICKET_DISPENSER(config, m_ticket[1], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); - /* video hardware */ + // video hardware TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_raw(VIDEO_CLOCK/2, 444, 0, 320, 233, 0, 200); + m_screen->set_raw(14.318181_MHz_XTAL/2, 444, 0, 320, 233, 0, 200); m_screen->set_screen_update("maincpu", FUNC(tms34010_device::tms340x0_rgb32)); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ym2149_device &ym1(YM2149(config, "ym1", VIDEO_CLOCK/8)); + ym2149_device &ym1(YM2149(config, "ym1", 14.318181_MHz_XTAL/8)); ym1.port_a_read_callback().set_ioport("DSW"); ym1.port_b_read_callback().set_ioport("IN1"); ym1.add_route(ALL_OUTPUTS, "mono", 0.50); - ym2149_device &ym2(YM2149(config, "ym2", VIDEO_CLOCK/8)); + ym2149_device &ym2(YM2149(config, "ym2", 14.318181_MHz_XTAL/8)); ym2.port_a_read_callback().set_ioport("IN0"); ym2.port_b_read_callback().set_ioport("IN2"); ym2.add_route(ALL_OUTPUTS, "mono", 0.50); } - void tickee_gun_state::ghoshunt(machine_config &config) { tickee(config); - /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &tickee_gun_state::ghoshunt_map); } -void tickee_gun_state::rapidfir(machine_config &config) +void tickee_state::mouseatk(machine_config &config) { - /* basic machine hardware */ - TMS34010(config, m_maincpu, XTAL(50'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &tickee_gun_state::rapidfir_map); + // basic machine hardware + TMS34010(config, m_maincpu, 40_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &tickee_state::mouseatk_map); m_maincpu->set_halt_on_reset(false); - m_maincpu->set_pixel_clock(VIDEO_CLOCK/2); + m_maincpu->set_pixel_clock(14.318181_MHz_XTAL/2); m_maincpu->set_pixels_per_clock(1); - m_maincpu->set_scanline_rgb32_callback(FUNC(tickee_gun_state::rapidfir_scanline_update)); - m_maincpu->set_shiftreg_in_callback(FUNC(tickee_gun_state::rapidfir_to_shiftreg)); - m_maincpu->set_shiftreg_out_callback(FUNC(tickee_gun_state::rapidfir_from_shiftreg)); + m_maincpu->set_scanline_rgb32_callback(FUNC(tickee_state::scanline_update)); - set_beamadd(0, -5); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); - WATCHDOG_TIMER(config, "watchdog"); + TICKET_DISPENSER(config, m_ticket[0], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); + TICKET_DISPENSER(config, m_ticket[1], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); - /* video hardware */ + // video hardware TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_raw(VIDEO_CLOCK/2, 444, 0, 320, 233, 0, 200); + m_screen->set_raw(14.318181_MHz_XTAL/2, 444, 0, 320, 233, 0, 200); m_screen->set_screen_update("maincpu", FUNC(tms34010_device::tms340x0_rgb32)); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - YM2151(config, "ym", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 0.75); + ym2149_device &ym(YM2149(config, "ym", 1_MHz_XTAL)); + ym.port_a_read_callback().set_ioport("DSW"); + ym.port_b_read_callback().set_ioport("IN1"); + ym.add_route(ALL_OUTPUTS, "mono", 0.50); - OKIM6295(config, m_oki, OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.5); + OKIM6295(config, m_oki, 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00); } -void tickee_state::mouseatk(machine_config &config) +void tickee_gun_state::rapidfir(machine_config &config) { - /* basic machine hardware */ - TMS34010(config, m_maincpu, XTAL(40'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &tickee_state::mouseatk_map); + // basic machine hardware + TMS34010(config, m_maincpu, 50_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &tickee_gun_state::rapidfir_map); m_maincpu->set_halt_on_reset(false); - m_maincpu->set_pixel_clock(VIDEO_CLOCK/2); + m_maincpu->set_pixel_clock(18_MHz_XTAL/2); m_maincpu->set_pixels_per_clock(1); - m_maincpu->set_scanline_rgb32_callback(FUNC(tickee_state::scanline_update)); + m_maincpu->set_scanline_rgb32_callback(FUNC(tickee_gun_state::rapidfir_scanline_update)); + m_maincpu->set_shiftreg_in_callback(FUNC(tickee_gun_state::rapidfir_to_shiftreg)); + m_maincpu->set_shiftreg_out_callback(FUNC(tickee_gun_state::rapidfir_from_shiftreg)); + set_beamadd(0, -5); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); - TICKET_DISPENSER(config, m_ticket[0], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); - TICKET_DISPENSER(config, m_ticket[1], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); + WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_raw(VIDEO_CLOCK/2, 444, 0, 320, 233, 0, 200); + m_screen->set_raw(18_MHz_XTAL/2, 556, 0, 384, 293, 0, 240); m_screen->set_screen_update("maincpu", FUNC(tms34010_device::tms340x0_rgb32)); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ym2149_device &ym(YM2149(config, "ym", OKI_CLOCK)); - ym.port_a_read_callback().set_ioport("DSW"); - ym.port_b_read_callback().set_ioport("IN1"); - ym.add_route(ALL_OUTPUTS, "mono", 0.50); + YM2151(config, "ym", 3.579545_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 0.75); - OKIM6295(config, m_oki, OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00); + OKIM6295(config, m_oki, 8_MHz_XTAL/8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.5); +} + +void tickee_gun_state::maletmad(machine_config &config) +{ + rapidfir(config); + + TICKET_DISPENSER(config, m_ticket[0], attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); } @@ -918,7 +958,7 @@ ds1220y.ic1 NVRAM located near ic2 */ ROM_START( tickee ) - ROM_REGION16_LE( 0x200000, "user1", 0 ) /* 34010 code */ + ROM_REGION16_LE( 0x200000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "3.ic4", 0x000000, 0x80000, CRC(5b1e399c) SHA1(681608f06bbaf3d258e9f4768a8a6c5047ad08ec) ) ROM_LOAD16_BYTE( "2.ic3", 0x000001, 0x80000, CRC(1b26d4bb) SHA1(40266ec0fe5897eba85072e5bb39973d34f97546) ) ROM_LOAD16_BYTE( "1.ic2", 0x100000, 0x80000, CRC(f7f0309e) SHA1(4a93e0e203f5a340a56b770a40b9ab00e131644d) ) @@ -981,7 +1021,7 @@ Notes: */ ROM_START( ghoshunt ) - ROM_REGION16_LE( 0x200000, "user1", 0 ) /* 34010 code */ + ROM_REGION16_LE( 0x200000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "ghosthun.7g", 0x000001, 0x80000, CRC(d59716c2) SHA1(717a1a1c5c559569f9e7bc4ae4356d112f0cf4eb) ) ROM_LOAD16_BYTE( "ghosthun.7h", 0x000000, 0x80000, CRC(ef38bfc8) SHA1(12b8f29f4da120f14126cbcdf4019bedd97063c3) ) ROM_LOAD16_BYTE( "ghosthun.7j", 0x100001, 0x80000, CRC(763d7c79) SHA1(f0dec99feeeefeddda6a88276dc306a30a58f4e4) ) @@ -990,7 +1030,7 @@ ROM_END ROM_START( tutstomb ) - ROM_REGION16_LE( 0x200000, "user1", 0 ) /* 34010 code */ + ROM_REGION16_LE( 0x200000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "tutstomb.7g", 0x000001, 0x80000, CRC(b74d3cf2) SHA1(2221b565362183a97a959389e8a0a026ca89e0ce) ) ROM_LOAD16_BYTE( "tutstomb.7h", 0x000000, 0x80000, CRC(177f3afb) SHA1(845f982a66a8b69b0ea0045399102e8bb33f7fbf) ) ROM_LOAD16_BYTE( "tutstomb.7j", 0x100001, 0x80000, CRC(69094f31) SHA1(eadae8847d0ff1568e63f71bf09a84dc443fdc1c)) @@ -1025,7 +1065,7 @@ DB25 and DB15 are not populated. */ ROM_START( mouseatk ) - ROM_REGION16_LE( 0x200000, "user1", 0 ) /* 34010 code */ + ROM_REGION16_LE( 0x200000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "ms-attk2-rev.a1.u8", 0x000000, 0x80000, CRC(a150525c) SHA1(a6be8524ae435502eeeeeaafa856dc812121d4e3) ) ROM_LOAD16_BYTE( "ms-attk3-rev.a1.u9", 0x000001, 0x80000, CRC(f060091d) SHA1(b3a2099d5ca5a658a7a87bb11a20c27a6a2f11f2) ) ROM_LOAD16_BYTE( "ms-attk4-rev.a1.u10", 0x100000, 0x80000, CRC(19806349) SHA1(3431dc70897f50e1be7578dd4ef99fa9be4450cf) ) @@ -1092,14 +1132,14 @@ ROMs : RF11.U2 27C040 \ */ -ROM_START( rapidfir ) /* Version 1.1, test menu shows "Build 239" */ - ROM_REGION16_LE( 0x400000, "user1", 0 ) /* 34010 code */ +ROM_START( rapidfir ) // Version 1.1, test menu shows "Build 239" + ROM_REGION16_LE( 0x400000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "rf11.u8", 0x000000, 0x80000, CRC(f7d8df33) SHA1(0abd54bbccfa90d830cbbdbcf2058197af980981) ) ROM_LOAD16_BYTE( "rf11.u9", 0x000001, 0x80000, CRC(a72af935) SHA1(ed0deb6f51681f70e07ad7c05a92f6a0f2063f7a) ) - ROM_LOAD16_BYTE( "rf10.u6", 0x100000, 0x80000, CRC(e8d2e5d2) SHA1(db93014598f7b76785e0fd5c0ac8808a3be06435) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf10.u7", 0x100001, 0x80000, CRC(0e33f2ed) SHA1(9b2533e001b94ccc97b95e31762186f59d5a3b9c) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf10.u4", 0x200000, 0x80000, CRC(8a088468) SHA1(f94dc78158e5656657d3b26c5b0ca88f39eb5ff4) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf10.u5", 0x200001, 0x80000, CRC(593b3df2) SHA1(301fa06031eff54fb2d9e08f80fc3c26e5c51da9) ) /* Can be labeled V1.0 or V1.1 */ + ROM_LOAD16_BYTE( "rf10.u6", 0x100000, 0x80000, CRC(e8d2e5d2) SHA1(db93014598f7b76785e0fd5c0ac8808a3be06435) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf10.u7", 0x100001, 0x80000, CRC(0e33f2ed) SHA1(9b2533e001b94ccc97b95e31762186f59d5a3b9c) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf10.u4", 0x200000, 0x80000, CRC(8a088468) SHA1(f94dc78158e5656657d3b26c5b0ca88f39eb5ff4) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf10.u5", 0x200001, 0x80000, CRC(593b3df2) SHA1(301fa06031eff54fb2d9e08f80fc3c26e5c51da9) ) // Can be labeled V1.0 or V1.1 ROM_LOAD16_BYTE( "rf11.u2", 0x300000, 0x80000, CRC(ffa0c695) SHA1(bccdefe7cee15999c416fdcb16a65b1bc6e12d13) ) ROM_LOAD16_BYTE( "rf11.u3", 0x300001, 0x80000, CRC(ac63b863) SHA1(c9160aec6179d1f550279b80fd4c2a14ce94fdab) ) @@ -1108,16 +1148,16 @@ ROM_START( rapidfir ) /* Version 1.1, test menu shows "Build 239" */ ROM_LOAD( "rf11.u510", 0x080000, 0x80000, CRC(6209c8fe) SHA1(bfbd63445b4ac2d4253c4b5354e1058070290084) ) ROM_END -ROM_START( rapidfira ) /* Version 1.1, test menu shows "Build 238" */ - ROM_REGION16_LE( 0x400000, "user1", 0 ) /* 34010 code */ +ROM_START( rapidfira ) // Version 1.1, test menu shows "Build 238" + ROM_REGION16_LE( 0x400000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "rf11.u8", 0x000000, 0x80000, CRC(f7d8df33) SHA1(0abd54bbccfa90d830cbbdbcf2058197af980981) ) ROM_LOAD16_BYTE( "rf11.u9", 0x000001, 0x80000, CRC(a72af935) SHA1(ed0deb6f51681f70e07ad7c05a92f6a0f2063f7a) ) - ROM_LOAD16_BYTE( "rf10.u6", 0x100000, 0x80000, CRC(e8d2e5d2) SHA1(db93014598f7b76785e0fd5c0ac8808a3be06435) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf10.u7", 0x100001, 0x80000, CRC(0e33f2ed) SHA1(9b2533e001b94ccc97b95e31762186f59d5a3b9c) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf10.u4", 0x200000, 0x80000, CRC(8a088468) SHA1(f94dc78158e5656657d3b26c5b0ca88f39eb5ff4) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf10.u5", 0x200001, 0x80000, CRC(593b3df2) SHA1(301fa06031eff54fb2d9e08f80fc3c26e5c51da9) ) /* Can be labeled V1.0 or V1.1 */ - ROM_LOAD16_BYTE( "rf11-u2", 0x300000, 0x80000, CRC(bcb7195a) SHA1(04b14facfe84973737f94b5278fb59668af0a47c) ) /* Only U2 & U3 differ from Build 239, labeled the same */ - ROM_LOAD16_BYTE( "rf11-u3", 0x300001, 0x80000, CRC(e455a0b5) SHA1(5568f55ccfd6cba373f4b4f3e61f0a4f391b01c0) ) /* Only U2 & U3 differ from Build 239, labeled the same */ + ROM_LOAD16_BYTE( "rf10.u6", 0x100000, 0x80000, CRC(e8d2e5d2) SHA1(db93014598f7b76785e0fd5c0ac8808a3be06435) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf10.u7", 0x100001, 0x80000, CRC(0e33f2ed) SHA1(9b2533e001b94ccc97b95e31762186f59d5a3b9c) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf10.u4", 0x200000, 0x80000, CRC(8a088468) SHA1(f94dc78158e5656657d3b26c5b0ca88f39eb5ff4) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf10.u5", 0x200001, 0x80000, CRC(593b3df2) SHA1(301fa06031eff54fb2d9e08f80fc3c26e5c51da9) ) // Can be labeled V1.0 or V1.1 + ROM_LOAD16_BYTE( "rf11-u2", 0x300000, 0x80000, CRC(bcb7195a) SHA1(04b14facfe84973737f94b5278fb59668af0a47c) ) // Only U2 & U3 differ from Build 239, labeled the same + ROM_LOAD16_BYTE( "rf11-u3", 0x300001, 0x80000, CRC(e455a0b5) SHA1(5568f55ccfd6cba373f4b4f3e61f0a4f391b01c0) ) // Only U2 & U3 differ from Build 239, labeled the same ROM_REGION( 0x100000, "oki", 0 ) ROM_LOAD( "rf11.u507", 0x000000, 0x80000, CRC(899d1e15) SHA1(ca22b4ad714a5212bc9347eb3a5b660c02bad7e5) ) @@ -1125,8 +1165,8 @@ ROM_START( rapidfira ) /* Version 1.1, test menu shows "Build 238" */ ROM_END -ROM_START( rapidfire ) /* Version 1.0, test menu shows "Build 236" */ - ROM_REGION16_LE( 0x400000, "user1", 0 ) /* 34010 code */ +ROM_START( rapidfire ) // Version 1.0, test menu shows "Build 236" + ROM_REGION16_LE( 0x400000, "user1", 0 ) // 34010 code ROM_LOAD16_BYTE( "rf10.u8", 0x000000, 0x80000, CRC(71d42125) SHA1(e34bdb08aa1b85ba4dd219b7f6de6f99a1ed8758) ) ROM_LOAD16_BYTE( "rf10.u9", 0x000001, 0x80000, CRC(d70e67c2) SHA1(e0876027f58584dae949a4f3c9391bd013912ee8) ) ROM_LOAD16_BYTE( "rf10.u6", 0x100000, 0x80000, CRC(e8d2e5d2) SHA1(db93014598f7b76785e0fd5c0ac8808a3be06435) ) @@ -1152,9 +1192,9 @@ Same exact PCB as Rapid Fire */ -ROM_START( maletmad ) /* Version 2.1 */ - ROM_REGION16_LE( 0x400000, "user1", 0 ) /* 34010 code */ - /* U8 & U9 not populated */ +ROM_START( maletmad ) // Version 2.1 + ROM_REGION16_LE( 0x400000, "user1", 0 ) // 34010 code + // U8 & U9 not populated ROM_LOAD16_BYTE( "malletmadness_v2.1.u6", 0x100000, 0x80000, CRC(83309174) SHA1(d387c8bc4d3c640f16525241892cc8d5d5da7f60) ) ROM_LOAD16_BYTE( "malletmadness_v2.1.u7", 0x100001, 0x80000, CRC(4642587e) SHA1(076eda538d570074028e9b4394f1a8a459678137) ) ROM_LOAD16_BYTE( "malletmadness_v2.1.u4", 0x200000, 0x80000, CRC(70ca968c) SHA1(74c66a67568b428ae5e20377038c7ea0cd33b25e) ) @@ -1164,7 +1204,7 @@ ROM_START( maletmad ) /* Version 2.1 */ ROM_REGION( 0x100000, "oki", 0 ) ROM_LOAD( "malletmadness_v2.1.u507", 0x000000, 0x80000, CRC(6a2c9021) SHA1(bff61ef696a2104a32aab6fdc51f504385d0c769) ) - /* U510 not populated */ + // U510 not populated ROM_END } // anonymous namespace @@ -1176,11 +1216,13 @@ ROM_END * *************************************/ -GAME( 1994, tickee, 0, tickee, tickee, tickee_gun_state, empty_init, ROT0, "Raster Elite", "Tickee Tickats", 0 ) -GAME( 1996, ghoshunt, 0, ghoshunt, ghoshunt, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Ghost Hunter", 0 ) -GAME( 1996, tutstomb, 0, ghoshunt, ghoshunt, tickee_gun_state, empty_init, ROT0, "Island Design", "Tut's Tomb", 0 ) -GAME( 1996, mouseatk, 0, mouseatk, mouseatk, tickee_state, empty_init, ROT0, "ICE", "Mouse Attack", 0 ) -GAME( 1998, rapidfir, 0, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Rapid Fire v1.1 (Build 239)", 0 ) -GAME( 1998, rapidfira, rapidfir, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Rapid Fire v1.1 (Build 238)", 0 ) -GAME( 1998, rapidfire, rapidfir, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Rapid Fire v1.0 (Build 236)", 0 ) -GAME( 1999, maletmad, 0, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Mallet Madness v2.1", 0 ) +GAME( 1994, tickee, 0, tickee, tickee, tickee_gun_state, empty_init, ROT0, "Raster Elite", "Tickee Tickats", 0 ) +GAME( 1996, ghoshunt, 0, ghoshunt, ghoshunt, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Ghost Hunter", 0 ) +GAME( 1996, tutstomb, 0, ghoshunt, ghoshunt, tickee_gun_state, empty_init, ROT0, "Island Design", "Tut's Tomb", 0 ) + +GAME( 1996, mouseatk, 0, mouseatk, mouseatk, tickee_state, empty_init, ROT0, "ICE", "Mouse Attack", 0 ) + +GAME( 1998, rapidfir, 0, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Rapid Fire v1.1 (Build 239)", 0 ) +GAME( 1998, rapidfira, rapidfir, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Rapid Fire v1.1 (Build 238)", 0 ) +GAME( 1998, rapidfire, rapidfir, rapidfir, rapidfir, tickee_gun_state, empty_init, ROT0, "Hanaho Games", "Rapid Fire v1.0 (Build 236)", 0 ) +GAME( 1999, maletmad, 0, maletmad, maletmad, tickee_gun_state, empty_init, ROT0, "Hanaho Games (Capcom license)", "Mallet Madness v2.1", 0 ) -- cgit v1.2.3