Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 recent contributor

Users who have contributed to this file recently

4335 lines (3512 sloc) 215 KB
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
/***************************************************************************
This driver contains several Konami 68000 based games. For the most part they
run on incompatible boards, but since 90% of the work is done by the custom
ICs emulated in video/konamiic.c, we can just as well keep them all
together.
driver by Nicola Salmoria
Notes:
- Golfing Greats has a peculiar way to know where the ball is laying: the
hardware latches the color of roz pixel at the center (more or less) of the
screen, and uses that to determine if it's water, fairway etc.
TODO:
- glfgretj is in worse shape than glfgreat, the latter is at least playable,
the former hangs.
- glfgretj uses a special controller.
1 "shot controller (with stance selection button on the top of it)" and 3
buttons for shot direction (right/left) and club selection.
Twist the "shot controller" to adjust shot power, then release it.
The controller returns to its default position by internal spring.
- prmrsocr: when the field rotates before the penalty kicks, parts of the
053936 tilemap that shouldn't be seen are visible. Maybe the tilemap ROM is
banked, or there are controls to clip the visible region (registers 0x06 and
0x07 of the 053936) or both.
- is PORT_VBLANK really vblank or something else? Investigate.
- some slowdowns in lgtnfght when there are many sprites on screen - vblank issue?
Updates:
- blswhstl: sprites are left on screen during attract mode(fixed)
Sprite buffer should be cleared at vblank start. On the GX OBJDMA
automatically occurs 32.0-42.7us after clearing but on older boards
using the k053245, DMA must be triggered manually. The game uses a
trick to disable sprites by simply not triggering OBJDMA.
- a garbage sprite is STILL sticking on screen in ssriders.(fixed)
- sprite colors / zoomed placement in tmnt2(improved MCU sim)
- I don't think I'm handling the palette dim control in tmnt2/ssriders
correctly. TMNT2 stays dimmed most of the time.(fixed)
- sprite lag, quite evident in lgtnfght and mia but also in the others.
Also see the left corner of the wall in punkshot DownTown level(should be better)
- ssriders: Billy no longer goes berserk at stage 4's boss.
* uncertain bugs:
- Detana!! Twin Bee's remaining sprite lag does not appear to be
emulation related. While these common one-pixel lags are very obvious
on VGA-class displays they're virtually invisible on TV and older
15kHz arcade monitors.
***************************************************************************/
#include "emu.h"
#include "includes/tmnt.h"
#include "includes/konamipt.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
#include "machine/k054321.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "sound/k054539.h"
#include "sound/okim6295.h"
#include "sound/samples.h"
#include "sound/ym2151.h"
#include "speaker.h"
READ16_MEMBER(tmnt_state::k052109_word_noA12_r)
{
/* some games have the A12 line not connected, so the chip spans */
/* twice the memory range, with mirroring */
offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
return m_k052109->word_r(offset);
}
WRITE16_MEMBER(tmnt_state::k052109_word_noA12_w)
{
/* some games have the A12 line not connected, so the chip spans */
/* twice the memory range, with mirroring */
offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
m_k052109->word_w(offset, data, mem_mask);
}
WRITE16_MEMBER(tmnt_state::punkshot_k052109_word_w)
{
/* it seems that a word write is supposed to affect only the MSB. The */
/* "ROUND 1" text in punkshtj goes lost otherwise. */
if (ACCESSING_BITS_8_15)
m_k052109->write(offset, (data >> 8) & 0xff);
else if (ACCESSING_BITS_0_7)
m_k052109->write(offset + 0x2000, data & 0xff);
}
WRITE16_MEMBER(tmnt_state::punkshot_k052109_word_noA12_w)
{
/* some games have the A12 line not connected, so the chip spans */
/* twice the memory range, with mirroring */
offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
punkshot_k052109_word_w(space, offset, data, mem_mask);
}
/* the interface with the 053245 is weird. The chip can address only 0x800 bytes */
/* of RAM, but they put 0x4000 there. The CPU can access them all. Address lines */
/* A1, A5 and A6 don't go to the 053245. */
READ16_MEMBER(tmnt_state::k053245_scattered_word_r)
{
if (offset & 0x0031)
return m_spriteram[offset];
else
{
offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3);
return m_k053245->k053245_word_r(offset);
}
}
WRITE16_MEMBER(tmnt_state::k053245_scattered_word_w)
{
COMBINE_DATA(m_spriteram + offset);
if (!(offset & 0x0031))
{
offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3);
m_k053245->k053245_word_w(offset, data, mem_mask);
}
}
READ16_MEMBER(tmnt_state::k053244_word_noA1_r)
{
offset &= ~1; /* handle mirror address */
return m_k053245->k053244_r(offset + 1) | (m_k053245->k053244_r(offset) << 8);
}
WRITE16_MEMBER(tmnt_state::k053244_word_noA1_w)
{
offset &= ~1; /* handle mirror address */
if (ACCESSING_BITS_8_15)
m_k053245->k053244_w(offset, (data >> 8) & 0xff);
if (ACCESSING_BITS_0_7)
m_k053245->k053244_w(offset + 1, data & 0xff);
}
/* cuebrick, mia, tmnt */
INTERRUPT_GEN_MEMBER(tmnt_state::tmnt_interrupt)
{
if (m_irq5_mask)
device.execute().set_input_line(M68K_IRQ_5, HOLD_LINE);
}
/* punkshot, blswhstl, tmnt2, ssriders, thndrx2 */
INTERRUPT_GEN_MEMBER(tmnt_state::punkshot_interrupt)
{
if (m_k052109->is_irq_enabled())
device.execute().set_input_line(M68K_IRQ_4, HOLD_LINE);
}
/* lgtnfght, glfgreat, prmrsocr */
INTERRUPT_GEN_MEMBER(tmnt_state::lgtnfght_interrupt)
{
if (m_k052109->is_irq_enabled())
device.execute().set_input_line(M68K_IRQ_5, HOLD_LINE);
}
WRITE8_MEMBER(tmnt_state::glfgreat_sound_w)
{
m_k053260->main_write(offset, data);
if (offset)
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
}
WRITE16_MEMBER(tmnt_state::prmrsocr_sound_irq_w)
{
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
}
WRITE8_MEMBER(tmnt_state::prmrsocr_audio_bankswitch_w)
{
membank("bank1")->set_entry(data & 7);
}
READ8_MEMBER(tmnt_state::tmnt_sres_r)
{
return m_tmnt_soundlatch;
}
WRITE8_MEMBER(tmnt_state::tmnt_sres_w)
{
/* bit 1 resets the UPD7795C sound chip */
m_upd7759->reset_w(data & 2);
/* bit 2 plays the title music */
if (data & 0x04)
{
if (!m_samples->playing(0))
m_samples->start_raw(0, m_sampledata, 0x40000, 20000);
}
else
m_samples->stop(0);
m_tmnt_soundlatch = data;
}
WRITE8_MEMBER(tmnt_state::tmnt_upd_start_w)
{
m_upd7759->start_w(data & 1);
}
READ8_MEMBER(tmnt_state::tmnt_upd_busy_r)
{
return m_upd7759->busy_r() ? 1 : 0;
}
SAMPLES_START_CB_MEMBER(tmnt_state::tmnt_decode_sample)
{
int i;
uint8_t *source = memregion("title")->base();
save_item(NAME(m_sampledata));
/* Sound sample for TMNT.D05 is stored in the following mode (ym3012 format):
*
* Bit 15-13: Exponent (2 ^ x)
* Bit 12-3 : Sound data (10 bit)
*
* (Sound info courtesy of Dave <dave@finalburn.com>)
*/
for (i = 0; i < 0x40000; i++)
{
int val = source[2 * i] + source[2 * i + 1] * 256;
int expo = val >> 13;
val = (val >> 3) & (0x3ff); /* 10 bit, Max Amplitude 0x400 */
val -= 0x200; /* Centralize value */
val <<= (expo - 3);
m_sampledata[i] = val;
}
}
#if 0
static int sound_nmi_enabled;
void tmnt_state::sound_nmi_callback( int param )
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, ( sound_nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE );
sound_nmi_enabled = 0;
}
#endif
void tmnt_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_NMI:
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
break;
default:
assert_always(false, "Unknown id in tmnt_state::device_timer");
}
}
WRITE8_MEMBER(tmnt_state::sound_arm_nmi_w)
{
// sound_nmi_enabled = 1;
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
timer_set(attotime::from_usec(50), TIMER_NMI); /* kludge until the K053260 is emulated correctly */
}
READ16_MEMBER(tmnt_state::punkshot_kludge_r)
{
/* I don't know what's going on here; at one point, the code reads location */
/* 0xffffff, and returning 0 causes the game to mess up - locking up in a */
/* loop where the ball is continuously bouncing from the basket. Returning */
/* a random number seems to prevent that. */
return machine().rand();
}
/* protection simulation derived from a bootleg */
READ16_MEMBER(tmnt_state::ssriders_protection_r)
{
int data = space.read_word(0x105a0a);
int cmd = space.read_word(0x1058fc);
switch (cmd)
{
case 0x100b:
/* read twice in a row, first result discarded? */
/* data is always == 0x75c */
return 0x0064;
case 0x6003:
/* start of level */
return data & 0x000f;
case 0x6004:
return data & 0x001f;
case 0x6000:
return data & 0x0001;
case 0x0000:
return data & 0x00ff;
case 0x6007:
return data & 0x00ff;
case 0x8abc:
/* collision table */
data = -space.read_word(0x105818);
data = ((data / 8 - 4) & 0x1f) * 0x40;
// 0x1040c8 is the x scroll buffer, avoids stutter on slopes + scrolling (and it's actually more logical as HW pov)
data += ((space.read_word(0x105cb0) + space.read_word(0x1040c8) - 6) / 8 + 12) & 0x3f;
return data;
default:
popmessage("%06x: unknown protection read",m_maincpu->pc());
logerror("%06x: read 1c0800 (D7=%02x 1058fc=%02x 105a0a=%02x)\n",m_maincpu->pc(),(uint32_t)m_maincpu->state_int(M68K_D7),cmd,data);
return 0xffff;
}
}
WRITE16_MEMBER(tmnt_state::ssriders_protection_w)
{
if (offset == 1)
{
int logical_pri, hardware_pri;
/* create sprite priority attributes */
hardware_pri = 1;
for (logical_pri = 1; logical_pri < 0x100; logical_pri <<= 1)
{
int i;
for (i = 0; i < 128; i++)
{
if ((space.read_word(0x180006 + 128 * i) >> 8) == logical_pri)
{
m_k053245->k053245_word_w(8 * i, hardware_pri, 0x00ff);
hardware_pri++;
}
}
}
}
}
/***************************************************************************
EEPROM
***************************************************************************/
READ16_MEMBER(tmnt_state::blswhstl_coin_r)
{
int res;
/* bit 3 is service button */
/* bit 6 is ??? VBLANK? OBJMPX? */
res = ioport("COINS")->read();
m_toggle ^= 0x40;
return res ^ m_toggle;
}
READ16_MEMBER(tmnt_state::ssriders_eeprom_r)
{
int res;
/* bit 0 is EEPROM data */
/* bit 1 is EEPROM ready */
/* bit 2 is VBLANK (???) */
/* bit 7 is service button */
res = ioport("EEPROM")->read();
m_toggle ^= 0x04;
return res ^ m_toggle;
}
READ16_MEMBER(tmnt_state::sunsetbl_eeprom_r)
{
int res;
/* bit 0 is EEPROM data */
/* bit 1 is EEPROM ready */
/* bit 2 is VBLANK (???) */
/* bit 3 is service button */
res = ioport("EEPROM")->read();
m_toggle ^= 0x04;
return res ^ m_toggle;
}
WRITE16_MEMBER(tmnt_state::blswhstl_eeprom_w)
{
if (ACCESSING_BITS_0_7)
{
/* bit 0 is data */
/* bit 1 is cs (active low) */
/* bit 2 is clock (active high) */
ioport("EEPROMOUT")->write(data, 0xff);
}
}
READ16_MEMBER(tmnt_state::thndrx2_eeprom_r)
{
int res;
/* bit 0 is EEPROM data */
/* bit 1 is EEPROM ready */
/* bit 3 is VBLANK (???) */
/* bit 7 is service button */
res = ioport("P2/EEPROM")->read();
m_toggle ^= 0x0800;
return (res ^ m_toggle);
}
WRITE16_MEMBER(tmnt_state::thndrx2_eeprom_w)
{
if (ACCESSING_BITS_0_7)
{
/* bit 0 is data */
/* bit 1 is cs (active low) */
/* bit 2 is clock (active high) */
ioport("EEPROMOUT")->write(data, 0xff);
/* bit 5 triggers IRQ on sound cpu */
if (m_last == 0 && (data & 0x20) != 0)
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
m_last = data & 0x20;
/* bit 6 = enable char ROM reading through the video RAM */
m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
}
}
WRITE16_MEMBER(tmnt_state::prmrsocr_eeprom_w)
{
if (ACCESSING_BITS_0_7)
{
prmrsocr_122000_w(space, offset, data, mem_mask);
}
if (ACCESSING_BITS_8_15)
{
/* bit 8 is data */
/* bit 9 is cs (active low) */
/* bit 10 is clock (active high) */
ioport("EEPROMOUT")->write(data, 0xffff);
}
}
WRITE8_MEMBER(tmnt_state::cuebrick_nvbank_w)
{
membank("nvrambank")->set_entry(data);
}
void tmnt_state::cuebrick_main_map(address_map &map)
{
map(0x000000, 0x01ffff).rom();
map(0x040000, 0x043fff).ram(); /* main RAM */
map(0x060000, 0x063fff).ram(); /* main RAM */
map(0x080000, 0x080fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
map(0x0a0000, 0x0a0001).portr("COINS").w(FUNC(tmnt_state::tmnt_0a0000_w));
map(0x0a0002, 0x0a0003).portr("P1");
map(0x0a0004, 0x0a0005).portr("P2");
map(0x0a0010, 0x0a0011).portr("DSW2").w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x0a0012, 0x0a0013).portr("DSW1");
map(0x0a0018, 0x0a0019).portr("DSW3");
map(0x0b0000, 0x0b03ff).bankrw("nvrambank");
map(0x0b0400, 0x0b0400).w(FUNC(tmnt_state::cuebrick_nvbank_w));
map(0x0c0000, 0x0c0003).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0xff00);
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
map(0x140000, 0x140007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x140400, 0x1407ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
}
void tmnt_state::mia_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x040000, 0x043fff).ram(); /* main RAM */
map(0x060000, 0x063fff).ram(); /* main RAM */
map(0x080000, 0x080fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
map(0x0a0000, 0x0a0001).portr("COINS").w(FUNC(tmnt_state::tmnt_0a0000_w));
map(0x0a0002, 0x0a0003).portr("P1");
map(0x0a0004, 0x0a0005).portr("P2");
map(0x0a0009, 0x0a0009).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x0a0010, 0x0a0011).portr("DSW1").w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x0a0012, 0x0a0013).portr("DSW2");
map(0x0a0018, 0x0a0019).portr("DSW3");
#if 0
map(0x0c0000, 0x0c0001).w(FUNC(tmnt_state::tmnt_priority_w));
#endif
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
// AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
map(0x140000, 0x140007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x140400, 0x1407ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
}
void tmnt_state::tmnt_main_map(address_map &map)
{
map(0x000000, 0x05ffff).rom();
map(0x060000, 0x063fff).ram(); /* main RAM */
map(0x080000, 0x080fff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).umask16(0x00ff).share("palette");
map(0x0a0000, 0x0a0001).portr("COINS").w(FUNC(tmnt_state::tmnt_0a0000_w));
map(0x0a0002, 0x0a0003).portr("P1");
map(0x0a0004, 0x0a0005).portr("P2");
map(0x0a0006, 0x0a0007).portr("P3");
map(0x0a0009, 0x0a0009).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x0a0010, 0x0a0011).portr("DSW1").w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x0a0012, 0x0a0013).portr("DSW2");
map(0x0a0014, 0x0a0015).portr("P4");
map(0x0a0018, 0x0a0019).portr("DSW3");
map(0x0c0000, 0x0c0001).w(FUNC(tmnt_state::tmnt_priority_w));
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
// AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
map(0x140000, 0x140007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x140400, 0x1407ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
}
void tmnt_state::punkshot_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x080000, 0x083fff).ram(); /* main RAM */
map(0x090000, 0x090fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x0a0000, 0x0a0001).portr("DSW1/DSW2");
map(0x0a0002, 0x0a0003).portr("COINS/DSW3");
map(0x0a0004, 0x0a0005).portr("P3/P4");
map(0x0a0006, 0x0a0007).portr("P1/P2");
map(0x0a0020, 0x0a0021).w(FUNC(tmnt_state::punkshot_0a0020_w));
map(0x0a0040, 0x0a0043).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
map(0x0a0060, 0x0a007f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
map(0x0a0080, 0x0a0081).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::punkshot_k052109_word_noA12_w));
map(0x110000, 0x110007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x110400, 0x1107ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
map(0xfffffc, 0xffffff).r(FUNC(tmnt_state::punkshot_kludge_r));
}
void tmnt_state::lgtnfght_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x080000, 0x080fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x090000, 0x093fff).ram(); /*main RAM */
map(0x0a0000, 0x0a0001).portr("COINS");
map(0x0a0002, 0x0a0003).portr("P1");
map(0x0a0004, 0x0a0005).portr("P2");
map(0x0a0006, 0x0a0007).portr("DSW1");
map(0x0a0008, 0x0a0009).portr("DSW2");
map(0x0a0010, 0x0a0011).portr("DSW3");
map(0x0a0018, 0x0a0019).w(FUNC(tmnt_state::lgtnfght_0a0018_w));
map(0x0a0020, 0x0a0023).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
map(0x0a0028, 0x0a0029).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x0b0000, 0x0b3fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
map(0x0c0000, 0x0c001f).rw(FUNC(tmnt_state::k053244_word_noA1_r), FUNC(tmnt_state::k053244_word_noA1_w));
map(0x0e0000, 0x0e001f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
map(0x100000, 0x107fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
}
WRITE16_MEMBER(tmnt_state::ssriders_soundkludge_w)
{
/* I think this is more than just a trigger */
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
}
void tmnt_state::blswhstl_main_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x180000, 0x183fff).rw(m_k052109, FUNC(k052109_device::word_r), FUNC(k052109_device::word_w));
map(0x204000, 0x207fff).ram(); /* main RAM */
map(0x300000, 0x303fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x500000, 0x50003f).rw(m_k054000, FUNC(k054000_device::read), FUNC(k054000_device::write)).umask16(0x00ff);
map(0x680000, 0x68001f).rw(FUNC(tmnt_state::k053244_word_noA1_r), FUNC(tmnt_state::k053244_word_noA1_w));
map(0x700000, 0x700001).portr("P1");
map(0x700002, 0x700003).portr("P2");
map(0x700004, 0x700005).r(FUNC(tmnt_state::blswhstl_coin_r));
map(0x700006, 0x700007).portr("EEPROM");
map(0x700200, 0x700201).w(FUNC(tmnt_state::blswhstl_eeprom_w));
map(0x700300, 0x700301).w(FUNC(tmnt_state::blswhstl_700300_w));
map(0x700400, 0x700401).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0x780600, 0x780603).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
map(0x780604, 0x780605).w(FUNC(tmnt_state::ssriders_soundkludge_w));
map(0x780700, 0x78071f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
}
WRITE16_MEMBER(tmnt_state::k053251_glfgreat_w)
{
int i;
if (ACCESSING_BITS_8_15)
{
m_k053251->write(offset, (data >> 8) & 0xff);
/* FIXME: in the old code k052109 tilemaps were tilemaps 2,3,4 for k053251
and got marked as dirty in the write above... how was the original hardware working?!? */
for (i = 0; i < 3; i++)
{
if (m_k053251->get_tmap_dirty(2 + i))
{
m_k052109->tilemap_mark_dirty(i);
m_k053251->set_tmap_dirty(2 + i, 0);
}
}
}
}
void tmnt_state::glfgreat_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x103fff).ram(); /* main RAM */
map(0x104000, 0x107fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
map(0x108000, 0x108fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x10c000, 0x10cfff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w)); /* 053936? */
map(0x110000, 0x11001f).w(FUNC(tmnt_state::k053244_word_noA1_w)); /* duplicate! */
map(0x114000, 0x11401f).rw(m_k053245, FUNC(k05324x_device::k053244_r), FUNC(k05324x_device::k053244_w)).umask16(0x00ff); /* duplicate! */
map(0x118000, 0x11801f).w(m_k053936, FUNC(k053936_device::ctrl_w));
map(0x11c000, 0x11c01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0xff00);
map(0x120000, 0x120001).portr("P1/P2");
map(0x120002, 0x120003).portr("P3/P4");
map(0x120004, 0x120005).portr("COINS/DSW3");
map(0x120006, 0x120007).portr("DSW1/DSW2");
map(0x121000, 0x121001).r(FUNC(tmnt_state::glfgreat_ball_r)); /* returns the color of the center pixel of the roz layer */
map(0x122000, 0x122001).w(FUNC(tmnt_state::glfgreat_122000_w));
map(0x124000, 0x124001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x125000, 0x125003).r(m_k053260, FUNC(k053260_device::main_read)).umask16(0xff00).w(FUNC(tmnt_state::glfgreat_sound_w)).umask16(0xff00);
map(0x200000, 0x207fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
map(0x300000, 0x3fffff).r(FUNC(tmnt_state::glfgreat_rom_r));
}
void tmnt_state::prmrsocr_main_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x103fff).ram(); /* main RAM */
map(0x104000, 0x107fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
map(0x108000, 0x108fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x10c000, 0x10cfff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w));
map(0x110000, 0x11001f).w(FUNC(tmnt_state::k053244_word_noA1_w)); /* duplicate! */
map(0x114000, 0x11401f).rw(m_k053245, FUNC(k05324x_device::k053244_r), FUNC(k05324x_device::k053244_w)).umask16(0x00ff); /* duplicate! */
map(0x118000, 0x11801f).w(m_k053936, FUNC(k053936_device::ctrl_w));
map(0x11c000, 0x11c01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0xff00);
map(0x120000, 0x120001).portr("P1/COINS");
map(0x120002, 0x120003).portr("P2/EEPROM");
map(0x121000, 0x12101f).m("k054321", FUNC(k054321_device::main_map)).umask16(0x00ff);
map(0x122000, 0x122001).w(FUNC(tmnt_state::prmrsocr_eeprom_w)); /* EEPROM + video control */
map(0x123000, 0x123001).w(FUNC(tmnt_state::prmrsocr_sound_irq_w));
map(0x200000, 0x207fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
map(0x280000, 0x280001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x300000, 0x33ffff).r(FUNC(tmnt_state::prmrsocr_rom_r));
}
#if 1
inline uint32_t tmnt_state::tmnt2_get_word( uint32_t addr )
{
if (addr <= 0x07ffff / 2)
return(m_tmnt2_rom[addr]);
else if (addr >= 0x104000 / 2 && addr <= 0x107fff / 2)
return(m_sunset_104000[addr - 0x104000 / 2]);
else if (addr >= 0x180000 / 2 && addr <= 0x183fff / 2)
return(m_spriteram[addr - 0x180000 / 2]);
return 0;
}
void tmnt_state::tmnt2_put_word( address_space &space, uint32_t addr, uint16_t data )
{
uint32_t offs;
if (addr >= 0x180000 / 2 && addr <= 0x183fff / 2)
{
m_spriteram[addr - 0x180000 / 2] = data;
offs = addr - 0x180000 / 2;
if (!(offs & 0x0031))
{
offs = ((offs & 0x000e) >> 1) | ((offs & 0x1fc0) >> 3);
m_k053245->k053245_word_w(offs, data, 0xffff);
}
}
else if (addr >= 0x104000 / 2 && addr <= 0x107fff / 2)
m_sunset_104000[addr - 0x104000 / 2] = data;
}
WRITE16_MEMBER(tmnt_state::tmnt2_1c0800_w)
{
uint32_t src_addr, dst_addr, mod_addr, attr1, code, attr2, cbase, cmod, color;
int xoffs, yoffs, xmod, ymod, zmod, xzoom, yzoom, i;
uint16_t *mcu;
uint16_t src[4], mod[24];
uint8_t keepaspect, xlock, ylock, zlock;
COMBINE_DATA(m_tmnt2_1c0800 + offset);
if (offset != 0x18/2 || !ACCESSING_BITS_8_15)
return;
mcu = m_tmnt2_1c0800;
if ((mcu[8] & 0xff00) != 0x8200)
return;
src_addr = (mcu[0] | (mcu[1] & 0xff) << 16) >> 1;
dst_addr = (mcu[2] | (mcu[3] & 0xff) << 16) >> 1;
mod_addr = (mcu[4] | (mcu[5] & 0xff) << 16) >> 1;
zlock = (mcu[8] & 0xff) == 0x0001;
for (i = 0; i < 4; i++)
src[i] = tmnt2_get_word(src_addr + i);
for (i = 0; i < 24; i++) mod[i] =
tmnt2_get_word(mod_addr + i);
code = src[0]; // code
i = src[1];
attr1 = i >> 2 & 0x3f00; // flip y, flip x and sprite size
attr2 = i & 0x380; // mirror y, mirror x, shadow
cbase = i & 0x01f; // base color
cmod = mod[0x2a / 2] >> 8;
color = (cbase != 0x0f && cmod <= 0x1f && !zlock) ? cmod : cbase;
xoffs = (int16_t)src[2]; // local x
yoffs = (int16_t)src[3]; // local y
i = mod[0];
attr2 |= i & 0x0060; // priority
keepaspect = (i & 0x0014) == 0x0014;
if (i & 0x8000) { attr1 |= 0x8000; } // active
if (keepaspect) { attr1 |= 0x4000; } // keep aspect
// if (i & 0x????) { attr1 ^= 0x2000; yoffs = -yoffs; } // flip y (not used?)
if (i & 0x4000) { attr1 ^= 0x1000; xoffs = -xoffs; } // flip x
xmod = (int16_t)mod[6]; // global x
ymod = (int16_t)mod[7]; // global y
zmod = (int16_t)mod[8]; // global z
xzoom = mod[0x1c / 2];
yzoom = (keepaspect) ? xzoom : mod[0x1e / 2];
ylock = xlock = (i & 0x0020 && (!xzoom || xzoom == 0x100));
/*
Scale factor is non-linear. The zoom vales are looked-up from
two to three nested tables and passed through a series of math
operations. The MCU is suspected to have its own tables for
translating zoom values to final scale factors or it knows where
to fetch them in ROM. There is no access to its internal code so
the scale curve is only approximated.
The most accurate method is to trace how MCU zoom is transformed
from ROM data, reverse the maths, plug the result into the sprite
zoom code and derive the scale factor from there; but zooming
would still suffer from precision loss in k053245->sprites_draw()
and drawgfx() producing gaps in logical sprite groups.
A few sample points on the real curve:
Zoom | Scale factor
------+--------------
0 | 0.0
0x2c | 0x40/0x8d
0x2f | 0x40/0x80
0x4f | 1.0
0x60 | 0x40/0x2f
0x7b | 0x40/0x14
*/
if (!xlock)
{
i = xzoom - 0x4f00;
if (i > 0)
{
i >>= 8;
xoffs += (int)(pow(i, /*1.898461*/1.891292) * xoffs / 599.250121);
}
else if (i < 0)
{
i = (i >> 3) + (i >> 4) + (i >> 5) + (i >> 6) + xzoom;
xoffs = (i > 0) ? (xoffs * i / 0x4f00) : 0;
}
}
if (!ylock)
{
i = yzoom - 0x4f00;
if (i > 0)
{
i >>= 8;
yoffs += (int)(pow(i, /*1.898461*/1.891292) * yoffs / 599.250121);
}
else if (i < 0)
{
i = (i >> 3) + (i >> 4) + (i >> 5) + (i >> 6) + yzoom;
yoffs = (i > 0) ? (yoffs * i / 0x4f00) : 0;
}
}
if (!zlock) yoffs += zmod;
xoffs += xmod;
yoffs += ymod;
tmnt2_put_word(space, dst_addr + 0, attr1);
tmnt2_put_word(space, dst_addr + 2, code);
tmnt2_put_word(space, dst_addr + 4, (uint32_t)yoffs);
tmnt2_put_word(space, dst_addr + 6, (uint32_t)xoffs);
tmnt2_put_word(space, dst_addr + 12, attr2 | color);
}
#else // for reference; do not remove
WRITE16_MEMBER(tmnt_state::tmnt2_1c0800_w)
{
COMBINE_DATA(m_tmnt2_1c0800 + offset);
if (offset == 0x0008 && (m_tmnt2_1c0800[0x8] & 0xff00) == 0x8200)
{
uint32_t CellSrc;
uint32_t CellVar;
uint16_t *src;
int dst;
int x,y;
CellVar = m_tmnt2_1c0800[0x04] | (m_tmnt2_1c0800[0x05] << 16 );
dst = m_tmnt2_1c0800[0x02] | (m_tmnt2_1c0800[0x03] << 16 );
CellSrc = m_tmnt2_1c0800[0x00] | (m_tmnt2_1c0800[0x01] << 16 );
// if (CellDest >= 0x180000 && CellDest < 0x183fe0) {
CellVar -= 0x104000;
src = (uint16_t *)(memregion("maincpu")->base() + CellSrc);
CellVar >>= 1;
write_word(dst + 0x00, 0x8000 | ((src[1] & 0xfc00) >> 2)); /* size, flip xy */
write_word(dst + 0x04, src[0]); /* code */
write_word(dst + 0x18, (src[1] & 0x3ff) ^ /* color, mirror, priority */
(sunset_104000[CellVar + 0x00] & 0x0060));
/* base color modifier */
/* TODO: this is wrong, e.g. it breaks the explosions when you kill an */
/* enemy, or surfs in the sewer level (must be blue for all enemies). */
/* It fixes the enemies, though, they are not all purple when you throw them around. */
/* Also, the bosses don't blink when they are about to die - don't know */
/* if this is correct or not. */
// if (m_sunset_104000[CellVar + 0x15] & 0x001f)
// dst + 0x18->write_word((read_word(dst + 0x18) & 0xffe0) |
// (m_sunset_104000[CellVar + 0x15] & 0x001f));
x = src[2];
if (m_sunset_104000[CellVar + 0x00] & 0x4000)
{
/* flip x */
write_word(dst + 0x00, read_word(dst + 0x00) ^ 0x1000);
x = -x;
}
x += m_sunset_104000[CellVar + 0x06];
write_word(dst + 0x0c, x);
y = src[3];
y += m_sunset_104000[CellVar + 0x07];
/* don't do second offset for shadows */
if ((m_tmnt2_1c0800[0x08] & 0x00ff) != 0x01)
y += m_sunset_104000[CellVar + 0x08];
write_word(dst + 0x08, y);
#if 0
logerror("copy command %04x sprite %08x data %08x: %04x%04x %04x%04x modifiers %08x:%04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x\n",
m_tmnt2_1c0800[0x05],
CellDest,CellSrc,
src[0], src[1], src[2], src[3],
CellVar*2,
m_sunset_104000[CellVar + 0x00],
m_sunset_104000[CellVar + 0x01],
m_sunset_104000[CellVar + 0x02],
m_sunset_104000[CellVar + 0x03],
m_sunset_104000[CellVar + 0x04],
m_sunset_104000[CellVar + 0x05],
m_sunset_104000[CellVar + 0x06],
m_sunset_104000[CellVar + 0x07],
m_sunset_104000[CellVar + 0x08],
m_sunset_104000[CellVar + 0x09],
m_sunset_104000[CellVar + 0x0a],
m_sunset_104000[CellVar + 0x0b],
m_sunset_104000[CellVar + 0x0c],
m_sunset_104000[CellVar + 0x0d],
m_sunset_104000[CellVar + 0x0e],
m_sunset_104000[CellVar + 0x0f],
m_sunset_104000[CellVar + 0x10],
m_sunset_104000[CellVar + 0x11],
m_sunset_104000[CellVar + 0x12],
m_sunset_104000[CellVar + 0x13],
m_sunset_104000[CellVar + 0x14],
m_sunset_104000[CellVar + 0x15],
m_sunset_104000[CellVar + 0x16],
m_sunset_104000[CellVar + 0x17]
);
#endif
// }
}
}
#endif
void tmnt_state::tmnt2_main_map(address_map &map)
{
map(0x000000, 0x0fffff).rom().share("tmnt2_rom");
map(0x104000, 0x107fff).ram().share("sunset_104000"); /* main RAM */
map(0x140000, 0x140fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x180000, 0x183fff).ram().w(FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram"); // k053245_scattered_word_r
map(0x1c0000, 0x1c0001).portr("P1");
map(0x1c0002, 0x1c0003).portr("P2");
map(0x1c0004, 0x1c0005).portr("P3");
map(0x1c0006, 0x1c0007).portr("P4");
map(0x1c0100, 0x1c0101).portr("COINS");
map(0x1c0102, 0x1c0103).r(FUNC(tmnt_state::ssriders_eeprom_r));
map(0x1c0200, 0x1c0201).w(FUNC(tmnt_state::ssriders_eeprom_w)); /* EEPROM and gfx control */
map(0x1c0300, 0x1c0301).w(FUNC(tmnt_state::ssriders_1c0300_w));
map(0x1c0400, 0x1c0401).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0x1c0500, 0x1c057f).ram(); /* TMNT2 only (1J) unknown, mostly MCU blit offsets */
// AM_RANGE(0x1c0800, 0x1c0801) AM_READ(ssriders_protection_r) /* protection device */
map(0x1c0800, 0x1c081f).w(FUNC(tmnt_state::tmnt2_1c0800_w)).share("tmnt2_1c0800"); /* protection device */
map(0x5a0000, 0x5a001f).rw(FUNC(tmnt_state::k053244_word_noA1_r), FUNC(tmnt_state::k053244_word_noA1_w));
map(0x5c0600, 0x5c0603).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
map(0x5c0604, 0x5c0605).w(FUNC(tmnt_state::ssriders_soundkludge_w));
map(0x5c0700, 0x5c071f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
map(0x600000, 0x603fff).rw(m_k052109, FUNC(k052109_device::word_r), FUNC(k052109_device::word_w));
}
void tmnt_state::ssriders_main_map(address_map &map)
{
map(0x000000, 0x0bffff).rom();
map(0x104000, 0x107fff).ram(); /* main RAM */
map(0x140000, 0x140fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x180000, 0x183fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
map(0x1c0000, 0x1c0001).portr("P1");
map(0x1c0002, 0x1c0003).portr("P2");
map(0x1c0004, 0x1c0005).portr("P3");
map(0x1c0006, 0x1c0007).portr("P4");
map(0x1c0100, 0x1c0101).portr("COINS");
map(0x1c0102, 0x1c0103).r(FUNC(tmnt_state::ssriders_eeprom_r));
map(0x1c0200, 0x1c0201).w(FUNC(tmnt_state::ssriders_eeprom_w)); /* EEPROM and gfx control */
map(0x1c0300, 0x1c0301).w(FUNC(tmnt_state::ssriders_1c0300_w));
map(0x1c0400, 0x1c0401).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0x1c0500, 0x1c057f).ram(); /* TMNT2 only (1J) unknown */
map(0x1c0800, 0x1c0801).r(FUNC(tmnt_state::ssriders_protection_r));
map(0x1c0800, 0x1c0803).w(FUNC(tmnt_state::ssriders_protection_w));
map(0x5a0000, 0x5a001f).rw(FUNC(tmnt_state::k053244_word_noA1_r), FUNC(tmnt_state::k053244_word_noA1_w));
map(0x5c0600, 0x5c0603).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
map(0x5c0604, 0x5c0605).w(FUNC(tmnt_state::ssriders_soundkludge_w));
map(0x5c0700, 0x5c071f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
map(0x600000, 0x603fff).rw(m_k052109, FUNC(k052109_device::word_r), FUNC(k052109_device::word_w));
}
void tmnt_state::sunsetbl_main_map(address_map &map)
{
map(0x000000, 0x0bffff).rom();
map(0x104000, 0x107fff).ram(); /* main RAM */
map(0x14c000, 0x14cfff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x14e700, 0x14e71f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
map(0x180000, 0x183fff).rw(FUNC(tmnt_state::k053245_scattered_word_r), FUNC(tmnt_state::k053245_scattered_word_w)).share("spriteram");
map(0x184000, 0x18ffff).ram();
map(0x1c0300, 0x1c0301).w(FUNC(tmnt_state::ssriders_1c0300_w));
map(0x1c0400, 0x1c0401).nopw();
map(0x5a0000, 0x5a001f).rw(FUNC(tmnt_state::k053244_word_noA1_r), FUNC(tmnt_state::k053244_word_noA1_w));
map(0x600000, 0x603fff).rw(m_k052109, FUNC(k052109_device::word_r), FUNC(k052109_device::word_w));
map(0x604020, 0x60402f).nopw(); /* written every frame */
map(0x604200, 0x604201).nopw(); /* watchdog */
map(0x6119e2, 0x6119e3).nopw(); /* written a lot in some test menus (PC=18204) */
map(0xc00000, 0xc00001).portr("P1");
map(0xc00002, 0xc00003).portr("P2");
map(0xc00004, 0xc00005).portr("P3");
map(0xc00006, 0xc00007).portr("P4");
map(0xc00200, 0xc00201).w(FUNC(tmnt_state::ssriders_eeprom_w)); /* EEPROM and gfx control */
map(0xc00404, 0xc00405).portr("COINS");
map(0xc00406, 0xc00407).r(FUNC(tmnt_state::sunsetbl_eeprom_r));
map(0xc00601, 0xc00601).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x75d288, 0x75d289).nopr(); // read repeatedly in some test menus (PC=181f2)
}
void tmnt_state::thndrx2_main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x103fff).ram(); /* main RAM */
map(0x200000, 0x200fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30001f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
map(0x400000, 0x400003).rw(m_k053260, FUNC(k053260_device::main_read), FUNC(k053260_device::main_write)).umask16(0x00ff);
map(0x500000, 0x50003f).rw(m_k054000, FUNC(k054000_device::read), FUNC(k054000_device::write)).umask16(0x00ff);
map(0x500100, 0x500101).w(FUNC(tmnt_state::thndrx2_eeprom_w));
map(0x500200, 0x500201).portr("P1/COINS");
map(0x500202, 0x500203).r(FUNC(tmnt_state::thndrx2_eeprom_r));
map(0x500300, 0x500301).nopw(); /* watchdog reset? irq enable? */
map(0x600000, 0x607fff).rw(FUNC(tmnt_state::k052109_word_noA12_r), FUNC(tmnt_state::k052109_word_noA12_w));
map(0x700000, 0x700007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w));
map(0x700400, 0x7007ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w));
}
void tmnt_state::mia_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0xa000, 0xa000).r("soundlatch", FUNC(generic_latch_8_device::read));
map(0xb000, 0xb00d).rw(m_k007232, FUNC(k007232_device::read), FUNC(k007232_device::write));
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
}
void tmnt_state::tmnt_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0x9000, 0x9000).rw(FUNC(tmnt_state::tmnt_sres_r), FUNC(tmnt_state::tmnt_sres_w)); /* title music & UPD7759C reset */
map(0xa000, 0xa000).r("soundlatch", FUNC(generic_latch_8_device::read));
map(0xb000, 0xb00d).rw(m_k007232, FUNC(k007232_device::read), FUNC(k007232_device::write));
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xd000, 0xd000).w(m_upd7759, FUNC(upd7759_device::port_w));
map(0xe000, 0xe000).w(FUNC(tmnt_state::tmnt_upd_start_w));
map(0xf000, 0xf000).r(FUNC(tmnt_state::tmnt_upd_busy_r));
}
void tmnt_state::punkshot_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf801).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xfa00, 0xfa00).w(FUNC(tmnt_state::sound_arm_nmi_w));
map(0xfc00, 0xfc2f).rw(m_k053260, FUNC(k053260_device::read), FUNC(k053260_device::write));
}
void tmnt_state::lgtnfght_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0xa000, 0xa001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xc000, 0xc02f).rw(m_k053260, FUNC(k053260_device::read), FUNC(k053260_device::write));
}
void tmnt_state::glfgreat_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf82f).rw(m_k053260, FUNC(k053260_device::read), FUNC(k053260_device::write));
map(0xfa00, 0xfa00).w(FUNC(tmnt_state::sound_arm_nmi_w));
}
void tmnt_state::ssriders_audio_map(address_map &map)
{
map(0x0000, 0xefff).rom();
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf801).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xfa00, 0xfa2f).rw(m_k053260, FUNC(k053260_device::read), FUNC(k053260_device::write));
map(0xfc00, 0xfc00).w(FUNC(tmnt_state::sound_arm_nmi_w));
}
void tmnt_state::thndrx2_audio_map(address_map &map)
{
map(0x0000, 0xefff).rom();
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf801).mirror(0x0010).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xfa00, 0xfa00).w(FUNC(tmnt_state::sound_arm_nmi_w));
map(0xfc00, 0xfc2f).rw(m_k053260, FUNC(k053260_device::read), FUNC(k053260_device::write));
}
void tmnt_state::prmrsocr_audio_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank1");
map(0xc000, 0xdfff).ram();
map(0xe000, 0xe12f).lrw8("k054539_rw",
[this](offs_t offset) { return m_k054539->read(((offset & 0x100) << 1) | (offset & 0xff)); },
[this](offs_t offset, u8 data) { m_k054539->write(((offset & 0x100) << 1) | (offset & 0xff), data); });
map(0xf000, 0xf003).m("k054321", FUNC(k054321_device::sound_map));
map(0xf800, 0xf800).w(FUNC(tmnt_state::prmrsocr_audio_bankswitch_w));
}
static INPUT_PORTS_START( cuebrick )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_BUTTON3, IPT_UNUSED )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_BUTTON3, IPT_UNUSED )
PORT_START("DSW1")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "Invalid", SW1)
/* "Invalid" = both coin slots disabled */
PORT_START("DSW2")
PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:1" ) // manual says "not used"
PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW2:2" ) // manual says "not used"
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x18, 0x08, "Machine Name" ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x18, DEF_STR( None ) )
PORT_DIPSETTING( 0x10, "Lewis" )
PORT_DIPSETTING( 0x08, "Johnson" )
PORT_DIPSETTING( 0x00, "George" )
PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x60, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x20, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x00, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x00, "Upright Controls" ) PORT_DIPLOCATION("SW3:2")
PORT_DIPSETTING( 0x02, DEF_STR( Single ) )
PORT_DIPSETTING( 0x00, DEF_STR( Dual ) )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW3:4" )
INPUT_PORTS_END
static INPUT_PORTS_START( mia )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_BUTTON3, IPT_UNUSED )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_BUTTON3, IPT_UNUSED )
PORT_START("DSW1")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "Invalid", SW1)
/* "Invalid" = both coin slots disabled */
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x03, "2" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "7" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" )
PORT_DIPNAME( 0x18, 0x08, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x18, "30K, Every 80K" ) // Japan factory default
PORT_DIPSETTING( 0x10, "50K, Every 100K" )
PORT_DIPSETTING( 0x08, "50K Only" ) // US factory default
PORT_DIPSETTING( 0x00, "100K Only" )
PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x60, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) ) // Japan factory default
PORT_DIPSETTING( 0x20, DEF_STR( Difficult ) ) // US factory default
PORT_DIPSETTING( 0x00, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "VRAM Character Check" ) PORT_DIPLOCATION("SW3:2") // JP manual says "not used"
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW3:4" )
INPUT_PORTS_END
static INPUT_PORTS_START( tmnt )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("P3")
KONAMI16_LSB( 3, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("P4")
KONAMI16_LSB( 4, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) )
PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW1:5" ) // manual says "not used", but doesn't "should be kept OFF"
PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:6" ) // ditto
PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" ) // ditto
PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:8" ) // ditto
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x03, "1" )
PORT_DIPSETTING( 0x02, "2" )
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" ) // manual says "not used", but doesn't "should be kept OFF"
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" ) // ditto
PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:5" ) // ditto
PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x60, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x20, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x00, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW3:2" ) // manual says "not used and should be kept OFF"
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW3:4" ) // ditto
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( tmnt2p )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 )
PORT_START("P3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P4")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW1")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
/* "No Coin B" = coins produce sound, but no effect on coin counter */
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x03, "1" )
PORT_DIPSETTING( 0x02, "2" ) // US and Japan factory default = "2"
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" ) // manual says "not used", but doesn't "should be kept OFF"
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" ) // ditto
PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:5" ) // ditto
PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x60, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x20, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x00, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW3:2" ) // manual says "not used and should be kept OFF"
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW3:4" ) // ditto
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( punkshtj ) // Japan 2 Players
PORT_START("DSW1/DSW2")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
PORT_DIPUNUSED_DIPLOC( 0x0100, IP_ACTIVE_LOW, "SW2:1" ) // manual says "not used", but doesn't "should be kept OFF"
PORT_DIPUNUSED_DIPLOC( 0x0200, IP_ACTIVE_LOW, "SW2:2" ) // manual says "not used", but doesn't "should be kept OFF"
PORT_DIPNAME( 0x0c00, 0x0800, "Period Length" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c00, "1 Minutes" )
PORT_DIPSETTING( 0x0800, "2 Minutes" )
PORT_DIPSETTING( 0x0400, "3 Minutes" )
PORT_DIPSETTING( 0x0000, "4 Minutes" )
PORT_DIPUNUSED_DIPLOC( 0x1000, IP_ACTIVE_LOW, "SW2:5" ) // manual says "not used", but doesn't "should be kept OFF"
PORT_DIPNAME( 0x6000, 0x4000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x6000, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("COINS/DSW3")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x2000, IP_ACTIVE_LOW, "SW3:2" ) // manual says "not used and should be kept OFF"
PORT_SERVICE_DIPLOC( 0x4000, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPNAME( 0x8000, 0x8000, "Freeze" ) PORT_DIPLOCATION("SW3:4") // manual says "not used and should be kept OFF"
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("P1/P2")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_UNKNOWN )
KONAMI16_MSB( 2, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("P3/P4")
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( punkshtj4 ) // FICTITIOUS Japan 4 Players
PORT_INCLUDE( punkshtj )
PORT_MODIFY("COINS/DSW3")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE3 )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE4 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("P3/P4")
KONAMI16_LSB( 3, IPT_UNKNOWN, IPT_UNKNOWN )
KONAMI16_MSB( 4, IPT_UNKNOWN, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( punksht_us_coinage )
PORT_MODIFY("DSW1/DSW2")
PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) )
PORT_DIPNAME( 0x0010, 0x0010, "Continue" ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0000, "1 Coin" )
PORT_DIPUNUSED_DIPLOC( 0x0020, IP_ACTIVE_LOW, "SW1:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW1:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
// US manual says
// Set No. 5, 6, 7, 8 OFF in Dip Switch No. 1
// Put Dip Switch No. 5 to ON to give
// "1 coin = CONTINUE"
INPUT_PORTS_END
static INPUT_PORTS_START( punkshot ) // US 4 Players set1
PORT_INCLUDE( punkshtj4 )
PORT_INCLUDE( punksht_us_coinage )
PORT_MODIFY("DSW1/DSW2")
PORT_DIPNAME( 0x0300, 0x0300, "Energy" ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0300, "30" )
PORT_DIPSETTING( 0x0200, "40" )
PORT_DIPSETTING( 0x0100, "50" )
PORT_DIPSETTING( 0x0000, "60" )
PORT_DIPNAME( 0x0c00, 0x0800, "Period Length" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c00, "2 Minutes" )
PORT_DIPSETTING( 0x0800, "3 Minutes" )
PORT_DIPSETTING( 0x0400, "4 Minutes" )
PORT_DIPSETTING( 0x0000, "5 Minutes" )
PORT_DIPNAME( 0x6000, 0x6000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x6000, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Difficult ) )
INPUT_PORTS_END
static INPUT_PORTS_START( punksht2 ) // US 2 Players set2
PORT_INCLUDE( punkshtj )
PORT_INCLUDE( punksht_us_coinage )
PORT_MODIFY("DSW1/DSW2")
PORT_DIPNAME( 0x0300, 0x0300, "Energy" ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0300, "40" )
PORT_DIPSETTING( 0x0200, "50" )
PORT_DIPSETTING( 0x0100, "60" )
PORT_DIPSETTING( 0x0000, "70" )
PORT_DIPNAME( 0x0c00, 0x0c00, "Period Length" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c00, "3 Minutes" )
PORT_DIPSETTING( 0x0800, "4 Minutes" )
PORT_DIPSETTING( 0x0400, "5 Minutes" )
PORT_DIPSETTING( 0x0000, "6 Minutes" )
PORT_DIPNAME( 0x6000, 0x6000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x6000, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( lgtnfght )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* vblank? checked during boot */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_BUTTON3, IPT_UNKNOWN )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_BUTTON3, IPT_UNKNOWN )
PORT_START("DSW2")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
/* "No Coin B" = coins produce sound, but no effect on coin counter */
PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x03, "2" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "7" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" ) // manual says "not used"
PORT_DIPNAME( 0x18, 0x18, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x18, "100K, 400K" )
PORT_DIPSETTING( 0x10, "150K, 500K" )
PORT_DIPSETTING( 0x08, "200K Only" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x60, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x20, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x00, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x00, "Sound" ) PORT_DIPLOCATION("SW3:2")
PORT_DIPSETTING( 0x02, DEF_STR( Mono ) )
PORT_DIPSETTING( 0x00, DEF_STR( Stereo ) )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW3:4" ) // manual says "not used"
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( trigon )
PORT_INCLUDE( lgtnfght )
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x18, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x18, "100K, 400K" ) // US factory default
PORT_DIPSETTING( 0x10, "150K, 500K" ) // JP factory default
PORT_DIPSETTING( 0x08, "200K Only" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
INPUT_PORTS_END
static INPUT_PORTS_START( blswhstl )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* VBLANK? OBJMPX? */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_START("EEPROM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
INPUT_PORTS_END
static INPUT_PORTS_START( glfgreat )
PORT_START("DSW1/DSW2")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
/* "No Coin B" = coins produce sound, but no effect on coin counter */
PORT_DIPNAME( 0x0300, 0x0100, "Players/Controllers" ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0300, "4/1" ) // Upright
PORT_DIPSETTING( 0x0200, "4/2" ) // Upright (P1&P3=1stCtrl P2&P4=2ndCtrl)
PORT_DIPSETTING( 0x0100, "4/4" ) // Upright
PORT_DIPSETTING( 0x0000, "3/3" ) // Upright
PORT_DIPNAME( 0x0400, 0x0000, "Sound" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0400, DEF_STR( Mono ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Stereo ) )
PORT_DIPNAME( 0x1800, 0x1800, "Initial/Maximum Credit" ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x1800, "2/3" )
PORT_DIPSETTING( 0x1000, "2/4" )
PORT_DIPSETTING( 0x0800, "2/5" )
PORT_DIPSETTING( 0x0000, "3/5" )
PORT_DIPNAME( 0x6000, 0x4000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x6000, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Difficult ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Difficult ) )
PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("COINS/DSW3")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* service coin */
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_SERVICE2) PORT_NAME(DEF_STR(Test))
PORT_DIPNAME( 0x0800, 0x0000, "Freeze" ) /* ?? VBLANK ?? */
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x2000, IP_ACTIVE_LOW, "SW3:2" ) // manual says "not used"
PORT_SERVICE_DIPLOC( 0x4000, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPUNUSED_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW3:4" ) // manual says "not used"
PORT_START("P1/P2")
KONAMI16_LSB( 1, IPT_BUTTON3, IPT_BUTTON4 )
KONAMI16_MSB( 2, IPT_BUTTON3, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_START("P3/P4")
KONAMI16_LSB( 3, IPT_BUTTON3, IPT_BUTTON4 ) PORT_PLAYER(3)
KONAMI16_MSB( 4, IPT_BUTTON3, IPT_BUTTON4 ) PORT_PLAYER(4)
INPUT_PORTS_END
static INPUT_PORTS_START( glfgreatu )
PORT_INCLUDE( glfgreat )
PORT_MODIFY("DSW1/DSW2")
PORT_DIPNAME( 0x1800, 0x1000, "Initial/Maximum Credit" ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x1800, "2/2" )
PORT_DIPSETTING( 0x1000, "2/3" )
PORT_DIPSETTING( 0x0800, "2/4" )
PORT_DIPSETTING( 0x0000, "2/5" )
INPUT_PORTS_END
static INPUT_PORTS_START( glfgreatj )
PORT_INCLUDE( glfgreatu )
PORT_MODIFY("DSW1/DSW2")
PORT_DIPNAME( 0x0300, 0x0100, "Players/Controllers" ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0300, "2/1" ) // Upright
PORT_DIPSETTING( 0x0200, "2/2" ) // Upright
PORT_DIPSETTING( 0x0100, "4/2" ) // Cocktail (P1&P3 <-> P2&P4)
PORT_DIPSETTING( 0x0000, "4/4" ) // Cocktail (P1&P2 <-> P3&P4)
PORT_MODIFY("P1/P2")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_NAME("Spare (P1 Left)")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_NAME("Spare (P1 Right)")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_NAME("P1 Stance Select")
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_NAME("Spare (P1 Down)")
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Right Direction")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Left Direction")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Club Select")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Spare (P1 Button 4)") // shown in service mode DIP SW1:9, SW2:9 and SW3:5
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Left)")
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Right)")
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("P2 Stance Select")
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Down)")
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Right Direction")
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Left Direction")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Club Select")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("Spare (P2 Button 4)")
PORT_MODIFY("P3/P4")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_NAME("Spare (P3 Left)")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_NAME("Spare (P3 Right)")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_NAME("P3 Stance Select")
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_NAME("Spare (P3 Down)")
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 Right Direction")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 Left Direction")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 Club Select")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3) PORT_NAME("Spare (P3 Button 4)")
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Left)")
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Right)")
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_NAME("P4 Stance Select")
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Down)")
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 Right Direction")
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 Left Direction")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 Club Select")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4) PORT_NAME("Spare (P4 Button 4)")
INPUT_PORTS_END
static INPUT_PORTS_START( ssriders )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 )
PORT_START("P2")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 )
PORT_START("P3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P4")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("EEPROM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: OBJMPX */
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* ?? TMNT2: NVBLK */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: IPL0 */
PORT_BIT( 0x60, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */
PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW )
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
INPUT_PORTS_END
static INPUT_PORTS_START( ssridr4p )
PORT_INCLUDE( ssriders )
PORT_MODIFY("COINS")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
PORT_MODIFY("P1")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_MODIFY("P2")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_MODIFY("P3")
KONAMI16_LSB( 3, IPT_UNKNOWN, IPT_UNKNOWN )
PORT_MODIFY("P4")
KONAMI16_LSB( 4, IPT_UNKNOWN, IPT_UNKNOWN )
INPUT_PORTS_END
/* Same as 'ssridr4p', but additional Start button for each player. Seemingly only needed in sets with *U* region/version codes (EG: ADD, UDA).
COIN3, COIN4, SERVICE3 and SERVICE4 only have an effect in the "test mode". */
static INPUT_PORTS_START( ssrid4ps )
PORT_INCLUDE( ssridr4p )
PORT_MODIFY("P1")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 )
PORT_MODIFY("P2")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 )
PORT_MODIFY("P3")
KONAMI16_LSB( 3, IPT_UNKNOWN, IPT_START3 )
PORT_MODIFY("P4")
KONAMI16_LSB( 4, IPT_UNKNOWN, IPT_START4 )
INPUT_PORTS_END
/* Version for the bootleg, which has the service switch a little different */
static INPUT_PORTS_START( sunsetbl )
PORT_INCLUDE( ssrid4ps )
PORT_MODIFY("EEPROM")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */
INPUT_PORTS_END
static INPUT_PORTS_START( qgakumon )
PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // Joystick control : Left
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) // Joystick control : Right
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // Joystick control : Up
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // Joystick control : Down
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // Joystick control : Button
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // Joystick control : Left
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) // Joystick control : Right
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // Joystick control : Up
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // Joystick control : Down
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // Joystick control : Button
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("P3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P4")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("EEPROM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: OBJMPX */
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") /* ?? TMNT2: NVBLK (needs to be ACTIVE_HIGH to avoid problems) */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ?? TMNT2: IPL0 */
PORT_BIT( 0x60, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */
PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW )
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
INPUT_PORTS_END
static INPUT_PORTS_START( thndrx2 )
PORT_START("P1/COINS")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0800, IP_ACTIVE_LOW )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2/EEPROM")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* VBLK?? */
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
INPUT_PORTS_END
static INPUT_PORTS_START( prmrsocr )
PORT_START("P1/COINS")
KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0200, IP_ACTIVE_LOW )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_DIPNAME( 0x1000, 0x0000, "Sound" ) PORT_DIPLOCATION("SW:1")
PORT_DIPSETTING( 0x1000, DEF_STR( Mono ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Stereo ) )
PORT_DIPUNUSED_DIPLOC( 0x2000, IP_ACTIVE_LOW, "SW:2" ) // manual says "not used"
PORT_DIPUNUSED_DIPLOC( 0x4000, IP_ACTIVE_LOW, "SW:3" ) // manual says "not used"
PORT_DIPUNUSED_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW:4" ) // manual says "not used"
PORT_START("P2/EEPROM")
KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
INPUT_PORTS_END
WRITE8_MEMBER(tmnt_state::volume_callback)
{
m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
}
MACHINE_START_MEMBER(tmnt_state,common)
{
save_item(NAME(m_toggle));
save_item(NAME(m_last));
save_item(NAME(m_tmnt_soundlatch));
save_item(NAME(m_sprite_colorbase));
save_item(NAME(m_layer_colorbase));
save_item(NAME(m_layerpri));
save_item(NAME(m_sorted_layer));
save_item(NAME(m_irq5_mask));
}
MACHINE_RESET_MEMBER(tmnt_state,common)
{
m_toggle = 0;
m_last = 0;
m_tmnt_soundlatch = 0;
m_irq5_mask = 0;
}
void tmnt_state::cuebrick(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 8000000); /* 8 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::cuebrick_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::tmnt_interrupt));
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_mia));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
m_palette->set_membits(8);
m_palette->enable_shadows();
m_palette->enable_hilights();
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
MCFG_VIDEO_START_OVERRIDE(tmnt_state,cuebrick)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::cuebrick_tile_callback), this);
K051960(config, m_k051960, 0);
m_k051960->set_palette(m_palette);
m_k051960->set_screen("screen");
m_k051960->set_sprite_callback(FUNC(tmnt_state::mia_sprite_callback), this);
m_k051960->set_plane_order(K051960_PLANEORDER_MIA);
/* sound hardware */
SPEAKER(config, "mono").front_center();
ym2151_device &ymsnd(YM2151(config, "ymsnd", XTAL(3'579'545)));
ymsnd.irq_handler().set_inputline(m_maincpu, M68K_IRQ_6);
ymsnd.add_route(0, "mono", 1.0);
ymsnd.add_route(1, "mono", 1.0);
}
void tmnt_state::mia(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000)/3);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::mia_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::tmnt_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::mia_audio_map);
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_mia));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
m_palette->set_membits(8);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,mia)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::mia_tile_callback), this);
K051960(config, m_k051960, 0);
m_k051960->set_palette(m_palette);
m_k051960->set_screen("screen");
m_k051960->set_sprite_callback(FUNC(tmnt_state::mia_sprite_callback), this);
m_k051960->set_plane_order(K051960_PLANEORDER_MIA);
/* sound hardware */
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, "soundlatch");
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "mono", 1.0).add_route(1, "mono", 1.0);
K007232(config, m_k007232, XTAL(3'579'545));
m_k007232->port_write().set(FUNC(tmnt_state::volume_callback));
m_k007232->add_route(0, "mono", 0.20);
m_k007232->add_route(1, "mono", 0.20);
}
MACHINE_RESET_MEMBER(tmnt_state,tmnt)
{
/* the UPD7759 control flip-flops are cleared: /ST is 1, /RESET is 0 */
m_upd7759->start_w(0);
m_upd7759->reset_w(1);
}
void tmnt_state::tmnt(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000)/3);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::tmnt_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::tmnt_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::tmnt_audio_map);
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,tmnt)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(12*8, (64-12)*8-1, 2*8, 30*8-1 );
// verified against real hardware
screen.set_screen_update(FUNC(tmnt_state::screen_update_tmnt));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
m_palette->set_membits(8);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,tmnt)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K051960(config, m_k051960, 0);
m_k051960->set_palette(m_palette);
m_k051960->set_screen("screen");
m_k051960->set_sprite_callback(FUNC(tmnt_state::tmnt_sprite_callback), this);
m_k051960->set_plane_order(K051960_PLANEORDER_MIA);
/* sound hardware */
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, "soundlatch");
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "mono", 1.0).add_route(1, "mono", 1.0);
K007232(config, m_k007232, XTAL(3'579'545));
m_k007232->port_write().set(FUNC(tmnt_state::volume_callback));
m_k007232->add_route(0, "mono", 0.33);
m_k007232->add_route(1, "mono", 0.33);
UPD7759(config, "upd", XTAL(640'000)).add_route(ALL_OUTPUTS, "mono", 0.60);
SAMPLES(config, m_samples);
m_samples->set_channels(1); /* 1 channel for the title music */
m_samples->set_samples_start_callback(FUNC(tmnt_state::tmnt_decode_sample));
m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
}
void tmnt_state::punkshot(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::punkshot_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::punkshot_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::punkshot_audio_map);
/* NMIs are generated by the 053260 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_punkshot));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K051960(config, m_k051960, 0);
m_k051960->set_palette(m_palette);
m_k051960->set_screen("screen");
m_k051960->set_sprite_callback(FUNC(tmnt_state::punkshot_sprite_callback), this);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "mono").front_center();
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "mono", 1.0).add_route(1, "mono", 1.0);
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(ALL_OUTPUTS, "mono", 0.70);
}
void tmnt_state::lgtnfght(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::lgtnfght_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::lgtnfght_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::lgtnfght_audio_map);
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(12*8, (64-12)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_lgtnfght));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,lgtnfght)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::lgtnfght_sprite_callback), this);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(0, "lspeaker", 0.70);
m_k053260->add_route(1, "rspeaker", 0.70);
}
void tmnt_state::blswhstl(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2); /* Confirmed */
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::blswhstl_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::punkshot_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map);
/* NMIs are generated by the 053260 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(12*8, (64-12)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_lgtnfght));
screen.screen_vblank().set(FUNC(tmnt_state::screen_vblank_blswhstl));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state, blswhstl)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::blswhstl_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::blswhstl_sprite_callback), this);
K053251(config, m_k053251, 0);
K054000(config, m_k054000, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 0.70).add_route(1, "rspeaker", 0.70);
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(0, "rspeaker", 0.50); /* fixed inverted stereo channels */
m_k053260->add_route(1, "lspeaker", 0.50);
}
static const gfx_layout zoomlayout =
{
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4,
9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
16*64
};
static GFXDECODE_START( gfx_glfgreat )
GFXDECODE_ENTRY( "zoom", 0, zoomlayout, 0x400, 16 )
GFXDECODE_END
void tmnt_state::glfgreat(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2); /* Confirmed */
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::glfgreat_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::lgtnfght_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::glfgreat_audio_map);
/* NMIs are generated by the 053260 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_glfgreat));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_glfgreat);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,glfgreat)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::lgtnfght_sprite_callback), this);
K053936(config, m_k053936, 0);
m_k053936->set_wrap(1);
m_k053936->set_offsets(85, 0);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(0, "lspeaker", 1.0);
m_k053260->add_route(1, "rspeaker", 1.0);
}
MACHINE_START_MEMBER(tmnt_state,prmrsocr)
{
MACHINE_START_CALL_MEMBER(common);
uint8_t *ROM = memregion("audiocpu")->base();
membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
}
void tmnt_state::prmrsocr(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2); /* Confirmed */
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::prmrsocr_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::lgtnfght_interrupt));
Z80(config, m_audiocpu, 8000000); /* ? */
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::prmrsocr_audio_map);
/* NMIs are generated by the 054539 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,prmrsocr)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_glfgreat));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_glfgreat);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,prmrsocr)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::prmrsocr_sprite_callback), this);
K053936(config, m_k053936, 0);
m_k053936->set_offsets(85, 1);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
K054321(config, "k054321", "lspeaker", "rspeaker");
K054539(config, m_k054539, XTAL(18'432'000));
m_k054539->timer_handler().set_inputline("audiocpu", INPUT_LINE_NMI);
m_k054539->add_route(0, "lspeaker", 1.0);
m_k054539->add_route(1, "rspeaker", 1.0);
}
void tmnt_state::tmnt2(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::tmnt2_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::punkshot_interrupt));
Z80(config, m_audiocpu, 8000000);
/* 8 MHz; clock is correct, but there's 1 cycle wait for ROM/RAM access. */
/* Access speed of ROM/RAM used on the machine is 150ns, without the wait, they cannot run on 8MHz. */
/* We are not emulating the wait state, so the ROM test ends at 02 instead of 00. */
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map);
/* NMIs are generated by the 053260 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_tmnt2));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,lgtnfght)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::lgtnfght_sprite_callback), this);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(0, "lspeaker", 0.75);
m_k053260->add_route(1, "rspeaker", 0.75);
}
void tmnt_state::ssriders(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(32'000'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::punkshot_interrupt));
Z80(config, m_audiocpu, 8000000);
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::ssriders_audio_map);
/* NMIs are generated by the 053260 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_tmnt2));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
MCFG_VIDEO_START_OVERRIDE(tmnt_state,lgtnfght)
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::lgtnfght_sprite_callback), this);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(0, "lspeaker", 0.70);
m_k053260->add_route(1, "rspeaker", 0.70);
}
void tmnt_state::sunsetbl(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::sunsetbl_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::irq4_line_hold));
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_tmnt2));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::ssbl_tile_callback), this);
K053245(config, m_k053245, 0);
m_k053245->set_palette(m_palette);
m_k053245->set_sprite_callback(FUNC(tmnt_state::lgtnfght_sprite_callback), this);
K053251(config, m_k053251, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
oki.add_route(ALL_OUTPUTS, "lspeaker", 1.0);
oki.add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}
void tmnt_state::thndrx2(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 12000000); /* 12 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &tmnt_state::thndrx2_main_map);
m_maincpu->set_vblank_int("screen", FUNC(tmnt_state::punkshot_interrupt));
Z80(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &tmnt_state::thndrx2_audio_map);
/* NMIs are generated by the 053260 */
MCFG_MACHINE_START_OVERRIDE(tmnt_state,common)
MCFG_MACHINE_RESET_OVERRIDE(tmnt_state,common)
EEPROM_ER5911_8BIT(config, "eeprom");
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(64*8, 32*8);
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(tmnt_state::screen_update_thndrx2));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 2048);
m_palette->enable_shadows();
m_palette->enable_hilights();
K052109(config, m_k052109, 0);
m_k052109->set_palette(m_palette);
m_k052109->set_screen(nullptr);
m_k052109->set_tile_callback(FUNC(tmnt_state::tmnt_tile_callback), this);
K051960(config, m_k051960, 0);
m_k051960->set_palette(m_palette);
m_k051960->set_screen("screen");
m_k051960->set_sprite_callback(FUNC(tmnt_state::thndrx2_sprite_callback), this);
K053251(config, m_k053251, 0);
K054000(config, m_k054000, 0);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
K053260(config, m_k053260, XTAL(3'579'545));
m_k053260->add_route(0, "lspeaker", 0.75);
m_k053260->add_route(1, "rspeaker", 0.75);
}
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( cuebrick )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*64k for 68000 code */
ROM_LOAD16_BYTE( "903d25.g12", 0x00000, 0x10000, CRC(8d575663) SHA1(0e308e04936efa80351bf808ac304d3fcc82f19a) )
ROM_LOAD16_BYTE( "903d24.f12", 0x00001, 0x10000, CRC(2973625d) SHA1(e2496704390930761204624d4bf6b0b68d3133ab) )
ROM_REGION( 0x40000, "k052109", 0 ) /* tiles */
ROM_LOAD32_BYTE( "903c29.k21", 0x000000, 0x10000, CRC(fada986d) SHA1(79d13dcee5433457c25a8cca0093bddd55165a72) )
ROM_LOAD32_BYTE( "903c28.k19", 0x000001, 0x10000, CRC(80d2bfaf) SHA1(3b38558d4f17309154457e9e7780a25577d1858d) )
ROM_LOAD32_BYTE( "903c27.k17", 0x000002, 0x10000, CRC(5bd4b8e1) SHA1(0bc5e508af20e479c7913fab1ef158165fe67079) )
ROM_LOAD32_BYTE( "903c26.k15", 0x000003, 0x10000, CRC(f808fa3d) SHA1(2b0fa1581acc5c4f7055e6faad97664ef16cc082) )
ROM_REGION( 0x40000, "k051960", 0 ) /* sprites */
ROM_LOAD32_BYTE( "903d23.k12", 0x000000, 0x10000, CRC(c39fc9fd) SHA1(fe5a63e5d898f985f9ab9be5b701af4a8e2a9049) )
ROM_LOAD32_BYTE( "903d22.k10", 0x000001, 0x10000, CRC(95ad8591) SHA1(4e3c8c794be1cd78044eb0eebfa3c755e2aaf54f) )
ROM_LOAD32_BYTE( "903d21.k8", 0x000002, 0x10000, CRC(3c7bf8cd) SHA1(c487e0109f56b3b0e2aa2c4db2dfb30ad74fb0ab) )
ROM_LOAD32_BYTE( "903d20.k6", 0x000003, 0x10000, CRC(2872a1bb) SHA1(da7c7a41860283eac49facaa3beb712d3be7db56) )
ROM_END
ROM_START( mia )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "808t20.h17", 0x00000, 0x20000, CRC(6f0acb1d) SHA1(af3447fd4645cb03b1660df2ae076fa53ff81945) )
ROM_LOAD16_BYTE( "808t21.j17", 0x00001, 0x20000, CRC(42a30416) SHA1(8d9d27de96e79cae5230705beecadff0180cc479) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "808e03.f4", 0x00000, 0x08000, CRC(3d93a7cd) SHA1(dcdd327e78f32436b276d0666f62a5b733b296e8) )
ROM_REGION( 0x40000, "k052109", 0 ) /* tiles */
ROM_LOAD32_BYTE( "808e12.f28", 0x000000, 0x10000, CRC(d62f1fde) SHA1(1e55084f1294b6ac7c152fcd1800511fcab5d360) )
ROM_LOAD32_BYTE( "808e13.h28", 0x000001, 0x10000, CRC(1fa708f4) SHA1(9511a19f50fb61571c2986c72d1a85e87b8d0495) )
ROM_LOAD32_BYTE( "808e22.i28", 0x000002, 0x10000, CRC(73d758f6) SHA1(69e7079c3178f6f5acae533dae4854808c45bc29) )
ROM_LOAD32_BYTE( "808e23.k28", 0x000003, 0x10000, CRC(8ff08b21) SHA1(9a8a03a960967f6f1d982b490f1724427538ecac) )
ROM_REGION( 0x100000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "808d17.j4", 0x00000, 0x80000, CRC(d1299082) SHA1(c3c07b0517e7428ccd1cdf9e15aaf16d98e7c4cd) )
ROM_LOAD32_WORD( "808d15.h4", 0x00002, 0x80000, CRC(2b22a6b6) SHA1(8e1af0627a4eac045128c4096e2cfb59c3d2f5ef) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "808a18.f16", 0x0000, 0x0100, CRC(eb95aede) SHA1(8153eb516ae9753910c6d6a2143e91e079586836) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "808d01.d4", 0x00000, 0x20000, CRC(fd4d37c0) SHA1(ef91c6e7bb57c27a9a51729fffd1bfe3e806fb61) ) /* samples for 007232 */
ROM_END
ROM_START( mia2 )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "808s20.h17", 0x00000, 0x20000, CRC(caa2897f) SHA1(58f69586d1cd49acf64cf34a69a9ba88dba0923c) )
ROM_LOAD16_BYTE( "808s21.j17", 0x00001, 0x20000, CRC(3d892ffb) SHA1(f6c0f8aa83f5688c8b57c5a66a481f65a5d4f530) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "808e03.f4", 0x00000, 0x08000, CRC(3d93a7cd) SHA1(dcdd327e78f32436b276d0666f62a5b733b296e8) )
ROM_REGION( 0x40000, "k052109", 0 ) /* tiles */
ROM_LOAD32_BYTE( "808e12.f28", 0x000000, 0x10000, CRC(d62f1fde) SHA1(1e55084f1294b6ac7c152fcd1800511fcab5d360) )
ROM_LOAD32_BYTE( "808e13.h28", 0x000001, 0x10000, CRC(1fa708f4) SHA1(9511a19f50fb61571c2986c72d1a85e87b8d0495) )
ROM_LOAD32_BYTE( "808e22.i28", 0x000002, 0x10000, CRC(73d758f6) SHA1(69e7079c3178f6f5acae533dae4854808c45bc29) )
ROM_LOAD32_BYTE( "808e23.k28", 0x000003, 0x10000, CRC(8ff08b21) SHA1(9a8a03a960967f6f1d982b490f1724427538ecac) )
ROM_REGION( 0x100000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "808d17.j4", 0x00000, 0x80000, CRC(d1299082) SHA1(c3c07b0517e7428ccd1cdf9e15aaf16d98e7c4cd) )
ROM_LOAD32_WORD( "808d15.h4", 0x00002, 0x80000, CRC(2b22a6b6) SHA1(8e1af0627a4eac045128c4096e2cfb59c3d2f5ef) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "808a18.f16", 0x0000, 0x0100, CRC(eb95aede) SHA1(8153eb516ae9753910c6d6a2143e91e079586836) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "808d01.d4", 0x00000, 0x20000, CRC(fd4d37c0) SHA1(ef91c6e7bb57c27a9a51729fffd1bfe3e806fb61) ) /* samples for 007232 */
ROM_END
ROM_START( tmnt )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-x23.j17", 0x00000, 0x20000, CRC(a9549004) SHA1(bf9be5983af2282f627fb8408c069415c9b90229) )
ROM_LOAD16_BYTE( "963-x24.k17", 0x00001, 0x20000, CRC(e5cc9067) SHA1(649db4a09864eb8aba44cb77b580f1f28cfd80ed) )
ROM_LOAD16_BYTE( "963-x21.j15", 0x40000, 0x10000, CRC(5789cf92) SHA1(c1d1c958813062e5df5ac62e90ee4ce11f7e4a24) )
ROM_LOAD16_BYTE( "963-x22.k15", 0x40001, 0x10000, CRC(0a74e277) SHA1(c349d3c25eb05cc30ec1fd823475d971f3649f8b) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 )
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmntu )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-r23.j17", 0x00000, 0x20000, CRC(a7f61195) SHA1(db231ffb045f512040793b6815bcb998cee04c3d) )
ROM_LOAD16_BYTE( "963-r24.k17", 0x00001, 0x20000, CRC(661e056a) SHA1(4773883a66540c07dbc969881689184697355537) )
ROM_LOAD16_BYTE( "963-r21.j15", 0x40000, 0x10000, CRC(de047bb6) SHA1(d41d11f1b7dfd3824308f7fff43a5a7ced432ec2) )
ROM_LOAD16_BYTE( "963-r22.k15", 0x40001, 0x10000, CRC(d86a0888) SHA1(c761b3e8acc45a36ae691758c639eb826a8ab5b2) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmntua )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-j23.j17", 0x00000, 0x20000, CRC(f77314e2) SHA1(aeb7a397a17b6ff587e3c536286a4942975e7a20) )
ROM_LOAD16_BYTE( "963-j24.k17", 0x00001, 0x20000, CRC(47f662d3) SHA1(d26e932b13920ca23a654a647b1e02097a264a3a) )
ROM_LOAD16_BYTE( "963-j21.j15", 0x40000, 0x10000, CRC(7bee9fe8) SHA1(1489cbd81176a586d21442d3e9cf4e585ca72bb4) )
ROM_LOAD16_BYTE( "963-j22.k15", 0x40001, 0x10000, CRC(2efed09f) SHA1(be84f71a076b360708f15b555ffb8612eb7f0f08) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmntub )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-h23.j17", 0x00000, 0x20000, CRC(718086e1) SHA1(6fd07a36195521be101782a05a9ecbcc5aaebbbd) )
ROM_LOAD16_BYTE( "963-h24.k17", 0x00001, 0x20000, CRC(2f7d66e1) SHA1(53bd51458609662066b696f3edd19075e883bcde) )
ROM_LOAD16_BYTE( "963-h21.j15", 0x40000, 0x10000, CRC(1944641e) SHA1(6664dbd9856d3d579a63c6537feef9a6e9bd09c5) )
ROM_LOAD16_BYTE( "963-h22.k15", 0x40001, 0x10000, CRC(50ce5512) SHA1(641bf4d60a64f23cd3b52af983565dc6b38037c1) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmht )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-f23.j17", 0x00000, 0x20000, CRC(9cb5e461) SHA1(b693e61070d6ce7ac59ff3f0a824cfefb37b33eb) )
ROM_LOAD16_BYTE( "963-f24.k17", 0x00001, 0x20000, CRC(2d902fab) SHA1(5a9a3bb0b6c2824eb971a8c0aa8d3069d3c63d06) )
ROM_LOAD16_BYTE( "963-f21.j15", 0x40000, 0x10000, CRC(9fa25378) SHA1(9ed0bba148e7c5e78224c5168053eeafc2e4b663) )
ROM_LOAD16_BYTE( "963-f22.k15", 0x40001, 0x10000, CRC(2127ee53) SHA1(e614260883872fd27cd641e6b4787672b2a44139) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmhta )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-s23.j17", 0x00000, 0x20000, CRC(b5af7eee) SHA1(082c8faabb0d409f73a17d7d342c0afb0f936b91) )
ROM_LOAD16_BYTE( "963-s24.k17", 0x00001, 0x20000, CRC(bcb8ce8b) SHA1(d9a74627598e29110002ea5d81a4f165d7566329) )
ROM_LOAD16_BYTE( "963-s21.j15", 0x40000, 0x10000, CRC(0b88bfa6) SHA1(22d552c0aaab336cd7c36d57fde22a64257a0633) )
ROM_LOAD16_BYTE( "963-s22.k15", 0x40001, 0x10000, CRC(44ce6d4b) SHA1(17e3baa33ab182f21b2686786ba570514830ed83) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmhtb ) // the code is closest to tmntua near the start, and the data is closest to all the UK sets, especially tmhta, so I'm guessing it's a UK revision of the tmntua codebase
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "unk3.i17", 0x00000, 0x20000, CRC(537eb047) SHA1(97e6dbc486c7d057355db7fcbdc0a2c2cad2c653) ) /* unknown 963 xxx Konami code for this set */
ROM_LOAD16_BYTE( "unk4.k17", 0x00001, 0x20000, CRC(5afae564) SHA1(8d5fbf9530ad8d095c12b7e0f8c499c1436c4d47) )
ROM_LOAD16_BYTE( "unk2.j15", 0x40000, 0x10000, CRC(ee34de05) SHA1(507d7fb178dbbe87dd373a81ad3f350ee2f7d923) )
ROM_LOAD16_BYTE( "unk5.k15", 0x40001, 0x10000, CRC(5ef58d4e) SHA1(5df71c61a90c3e9d28ec3b8055d7ee97bc283e01) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmntj )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963_223.j17", 0x00000, 0x20000, CRC(0d34a5ff) SHA1(a387f3e7c727dc66ebb0e1f40e4ab8dc83f647e5) )
ROM_LOAD16_BYTE( "963_224.k17", 0x00001, 0x20000, CRC(2fd453f2) SHA1(8eb68cba3b5f5baf2c00172942a3d2bf578d0196) )
ROM_LOAD16_BYTE( "963_221.j15", 0x40000, 0x10000, CRC(fa8e25fd) SHA1(129cb9498508cdabdda3cf4fc86ff716fe1da940) )
ROM_LOAD16_BYTE( "963_222.k15", 0x40001, 0x10000, CRC(ca437a4f) SHA1(96922d2dcd0d84dc0d09a3ba9800b1154b5e2486) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmnta )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "tmnt j17.bin", 0x00000, 0x20000, CRC(00819687) SHA1(65624465b8af21000ca42b759c6fe123b4570e08) )
ROM_LOAD16_BYTE( "tmnt k17.bin", 0x00001, 0x20000, CRC(6930e085) SHA1(3c35c663346a81d06cd0169fbae08c19d1bde2eb) )
ROM_LOAD16_BYTE( "tmnt j15.bin", 0x40000, 0x10000, CRC(fd1e2e01) SHA1(63c3e8adcb5025a0a11f28e623cf2692f5f030a3) )
ROM_LOAD16_BYTE( "tmnt k15.bin", 0x40001, 0x10000, CRC(b01eea79) SHA1(3f0201ed471380fcafaf2e570454c3d742c0e03d) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 )
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmht2p )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-u23.j17", 0x00000, 0x20000, CRC(58bec748) SHA1(6cf146d6de8ef01c0705394d135abebc3aeaae16) )
ROM_LOAD16_BYTE( "963-u24.k17", 0x00001, 0x20000, CRC(dce87c8d) SHA1(b85018ffc226ec7dfc97f9cd0f4454951c6e5918) )
ROM_LOAD16_BYTE( "963-u21.j15", 0x40000, 0x10000, CRC(abce5ead) SHA1(2b3674497bb4f688c5f0e1cc9a078b3feb01475d) )
ROM_LOAD16_BYTE( "963-u22.k15", 0x40001, 0x10000, CRC(4ecc8d6b) SHA1(ce29aecbd98c0a07f48766564de173facb310371) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmht2pa )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-_23.j17", 0x00000, 0x20000, CRC(8698061a) SHA1(f01aa535e8fb63fb57cd06c0ad6bb7720fe14a84) )
ROM_LOAD16_BYTE( "963-_24.k17", 0x00001, 0x20000, CRC(4036c075) SHA1(38701c34f8baa70934d5c4434230f3f09e28386a) )
ROM_LOAD16_BYTE( "963-_21.j15", 0x40000, 0x10000, CRC(ddcc979c) SHA1(5dfabe2af341f19349872ea12b183750804eab56) )
ROM_LOAD16_BYTE( "963-_22.k15", 0x40001, 0x10000, CRC(71a38d27) SHA1(11c92f2b772ddac3d432c9a1d57ab0b5dd2c9137) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmnt2pj )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963-123.j17", 0x00000, 0x20000, CRC(6a3527c9) SHA1(a5a8cbec3fae3f37d4d82a7700cec3c96c6a362f) )
ROM_LOAD16_BYTE( "963-124.k17", 0x00001, 0x20000, CRC(2c4bfa15) SHA1(0264ef6f15806d52d6f7869034f5a3024ba1cea2) )
ROM_LOAD16_BYTE( "963-121.j15", 0x40000, 0x10000, CRC(4181b733) SHA1(306601597102a1bc79880e557889a6fce7b30b7b) )
ROM_LOAD16_BYTE( "963-122.k15", 0x40001, 0x10000, CRC(c64eb5ff) SHA1(e546f1cb81e98a38833cd0affe73e2bc1d95d017) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( tmnt2po )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "tmnt123.j17", 0x00000, 0x20000, CRC(2d905183) SHA1(38c77a08733f9da1dc6f1c510a2c8dac34848787) )
ROM_LOAD16_BYTE( "tmnt124.k17", 0x00001, 0x20000, CRC(e0125352) SHA1(e2a297bf96d0fa1d19ce767786453c489d49d693) )
ROM_LOAD16_BYTE( "tmnt21.j15", 0x40000, 0x10000, CRC(12deeafb) SHA1(1f70a326f8f4a896da297b4f66ca467894d22159) )
ROM_LOAD16_BYTE( "tmnt22.k15", 0x40001, 0x10000, CRC(aec4f1c3) SHA1(189ed93bc9ee4a1ff1c0ca7b80f4e817e5484e69) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "963a28.h27", 0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
ROM_LOAD32_WORD( "963a29.k27", 0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "963a17.h4", 0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )
ROM_LOAD32_WORD( "963a15.k4", 0x000002, 0x80000, CRC(1f324eed) SHA1(971a675578518fffa341a943d0cc4fdea005fde0) )
ROM_LOAD32_WORD( "963a18.h6", 0x100000, 0x80000, CRC(dd51adef) SHA1(5010c0911b0b9e4f23a785e8a751a0bde5be5be0) )
ROM_LOAD32_WORD( "963a16.k6", 0x100002, 0x80000, CRC(d4bd9984) SHA1(d780ae7f72e16767c3a492544f02f0f1a332ab22) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */
ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */
ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */
ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */
ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */
ROM_LOAD( "963a27.d18", 0x00000, 0x20000, CRC(2dfd674b) SHA1(bbec5896c70056964fbc972a84bd5b0dfc6af257) ) /* samples for UPD7759C */
ROM_REGION( 0x80000, "title", 0 ) /* 512k for the title music sample */
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
ROM_START( punkshot )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "907-j02.i7", 0x00000, 0x20000, CRC(dbb3a23b) SHA1(78f999f4e5b12641195a7f9f7fedf696e32ff0c0) )
ROM_LOAD16_BYTE( "907-j03.i10", 0x00001, 0x20000, CRC(2151d1ab) SHA1(e71768142b903825f8104ffc90906b0d471599e0) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "907f01.e8", 0x0000, 0x8000, CRC(f040c484) SHA1(f76a739cacc0aba98a5bf85a48c81cef0d9bbfb4) )
ROM_REGION( 0x80000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "907d06.e23", 0x000000, 0x40000, CRC(f5cc38f4) SHA1(e6dc9994582a08740dc2fcb30a38771053627d5f) )
ROM_LOAD32_WORD( "907d05.e22", 0x000002, 0x40000, CRC(e25774c1) SHA1(74fda3b418b4b0064b5e660a93122b07f6d41416) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) )
ROM_LOAD32_WORD( "907d08.k7", 0x000002, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) )
ROM_REGION( 0x80000, "k053260", 0 ) /* samples for 053260 */
ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) )
ROM_END
ROM_START( punkshot2 )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "907m02.i7", 0x00000, 0x20000, CRC(59e14575) SHA1(249fc98a2d5fa3e4779438c37d22c0256be8d3fa) )
ROM_LOAD16_BYTE( "907m03.i10", 0x00001, 0x20000, CRC(adb14b1e) SHA1(c5db1c3b70ab3e53cd6a600b82bdccda4db05f90) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "907f01.e8", 0x0000, 0x8000, CRC(f040c484) SHA1(f76a739cacc0aba98a5bf85a48c81cef0d9bbfb4) )
ROM_REGION( 0x80000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "907d06.e23", 0x000000, 0x40000, CRC(f5cc38f4) SHA1(e6dc9994582a08740dc2fcb30a38771053627d5f) )
ROM_LOAD32_WORD( "907d05.e22", 0x000002, 0x40000, CRC(e25774c1) SHA1(74fda3b418b4b0064b5e660a93122b07f6d41416) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) )
ROM_LOAD32_WORD( "907d08.k7", 0x000002, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) )
ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */
ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) )
ROM_END
ROM_START( punkshot2e )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "907_2.i7", 0x00000, 0x20000, CRC(aa55516c) SHA1(297202c3dc817b016b646341712e7e1805bc98a5) )
ROM_LOAD16_BYTE( "907_3.i10", 0x00001, 0x20000, CRC(0d3aa3d5) SHA1(39a9f4aac9463a88f1f57dc9aeb5718793aaa2c1) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "907f01.e8", 0x0000, 0x8000, CRC(f040c484) SHA1(f76a739cacc0aba98a5bf85a48c81cef0d9bbfb4) )
ROM_REGION( 0x80000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "907d06.e23", 0x000000, 0x40000, CRC(f5cc38f4) SHA1(e6dc9994582a08740dc2fcb30a38771053627d5f) )
ROM_LOAD32_WORD( "907d05.e22", 0x000002, 0x40000, CRC(e25774c1) SHA1(74fda3b418b4b0064b5e660a93122b07f6d41416) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) )
ROM_LOAD32_WORD( "907d08.k7", 0x000002, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) )
ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */
ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) )
ROM_END
ROM_START( punkshotj )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "907z02.i7", 0x00000, 0x20000, CRC(7a3a5c89) SHA1(240967b911df8939b048bbcdfcac668455fc82e9) )
ROM_LOAD16_BYTE( "907z03.i10", 0x00001, 0x20000, CRC(22a3d9d6) SHA1(76f016435956088aa680297ee9ba0abda446a7bb) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "907f01.e8", 0x0000, 0x8000, CRC(f040c484) SHA1(f76a739cacc0aba98a5bf85a48c81cef0d9bbfb4) )
ROM_REGION( 0x80000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "907d06.e23", 0x000000, 0x40000, CRC(f5cc38f4) SHA1(e6dc9994582a08740dc2fcb30a38771053627d5f) )
ROM_LOAD32_WORD( "907d05.e22", 0x000002, 0x40000, CRC(e25774c1) SHA1(74fda3b418b4b0064b5e660a93122b07f6d41416) )
ROM_REGION( 0x200000, "k051960", 0 ) /* sprites */
ROM_LOAD32_WORD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) )
ROM_LOAD32_WORD( "907d08.k7", 0x000002, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) )
ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */
ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) )
ROM_END
ROM_START( lgtnfght )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "939k02.e11", 0x00000, 0x20000, CRC(2dfefa53) SHA1(135f3d06b04f950d1afc5fc0f8237c7af0e426b5) )
ROM_LOAD16_BYTE( "939k03.e15", 0x00001, 0x20000, CRC(14f0c454) SHA1(bc1fd3a58b493b443b93077014fdf37cf563e879) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "939e01.d7", 0x0000, 0x8000, CRC(4a5fc848) SHA1(878825e07c2718b7c923ad7c77daddf18cb28beb) )
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
ROM_LOAD32_WORD( "939a07.k14", 0x000000, 0x80000, CRC(7955dfcf) SHA1(012644c1bfbe2e5d1c7ba25f29ebfde7dbfd1c0d) )
ROM_LOAD32_WORD( "939a08.k19", 0x000002, 0x80000, CRC(ed95b385) SHA1(5aa5291cf1a8935b0a65ae10aa20b9cf9a138b03) )
ROM_REGION( 0x100000, "k053245", 0 ) /* sprites */
ROM_LOAD32_WORD( "939a06.k8", 0x000000, 0x80000, CRC(e393c206) SHA1(9b35fc6dba1f15c3d9d69ff5a4e1673c539aa533) )
ROM_LOAD32_WORD( "939a05.k2", 0x000002, 0x80000, CRC(3662d47a) SHA1(789c3f07ce812902050970f48be5115b8e95bea0) )
ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */
ROM_LOAD( "939a04.c5", 0x0000, 0x80000, CRC(c24e2b6e) SHA1(affc142883c2383afd08dcf156e48709ceca49fd) )
ROM_END
ROM_START( lgtnfghtu )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 2*128k for 68000 code */
ROM_LOAD16_BYTE( "939m02.e11", 0x00000, 0x20000, CRC(61a12184) SHA1(f6d82aa0a444f885fd1e5d3d1464798b639a1710) )
ROM_LOAD16_BYTE( "939m03.e15", 0x00001,