summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/seta2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/seta2.c')
-rw-r--r--src/mame/drivers/seta2.c2156
1 files changed, 2156 insertions, 0 deletions
diff --git a/src/mame/drivers/seta2.c b/src/mame/drivers/seta2.c
new file mode 100644
index 00000000000..88bd838b996
--- /dev/null
+++ b/src/mame/drivers/seta2.c
@@ -0,0 +1,2156 @@
+/***************************************************************************
+
+ -= Newer Seta Hardware =-
+
+ driver by Luca Elia (l.elia@tin.it)
+
+
+CPU : TMP68301*
+
+Custom : X1-010 Sound: 8 Bit PCM
+ DX-101 Sprites
+ DX-102 x3
+
+OSC: 50.0000MHz
+ 32.5304MHz
+
+* The Toshiba TMP68301 is a 68HC000 + serial I/O, parallel I/O,
+ 3 timers, address decoder, wait generator, interrupt controller,
+ all integrated in a single chip.
+
+-------------------------------------------------------------------------------------------
+Ordered by Board Year Game By
+-------------------------------------------------------------------------------------------
+P-FG01-1 1995 Guardians / Denjin Makai II Banpresto
+PO-113A 1994 Mobile Suit Gundam EX Revue Banpresto
+P0-123A 1996 Wakakusamonogatari Mahjong Yonshimai Maboroshi Ware
+P0-125A ; KE (Namco) 1996 Kosodate Quiz My Angel Namco
+P0-136A ; KL (Namco) 1997 Kosodate Quiz My Angel 2 Namco
+P0-142A 1999 Puzzle De Bowling Nihon System / Moss
+P0-142A + extra parts 2000 Penguin Brothers Subsino
+B0-003B 2000 Deer Hunting USA Sammy
+B0-003B 2001 Turkey Hunting USA Sammy
+B0-010A 2001 Wing Shooting Championship Sammy
+B0-010A 2002 Trophy Hunting - Bear & Moose Sammy
+-------------------------------------------------------------------------------------------
+
+TODO:
+
+- Proper emulation of the TMP68301 CPU, in a core file.
+- Flip screen / Zooming support.
+- Fix some graphics imperfections (e.g. color depth selection,
+ "tilemap" sprites) [all done? - NS]
+- I added a kludge involving a -0x10 yoffset, this fixes the lifeline in myangel.
+ I didn't find a better way to do it without breaking pzlbowl's title screen.
+
+mj4simai:
+- test mode doesn't work correctly, the grid is ok but when you press a key to go to the
+ next screen (input test) it stays up a second and then drops back into the game
+
+myangel:
+- some gfx at the end of the game (rays just before fireworks, and the border during
+ the wedding) have wrong colors. You can see the rays red, green and yellow because
+ that's how the palette is preinitialized by MAME, but the game never sets up those
+ palette entries. The game selects color depth "1", whose meaning is uncertain, and
+ color code 0 so I see no way to point to a different section of palette RAM.
+
+- there are glitches in the bg horizontal scroll in the wedding sequence at the end of
+ the game. It looks like "scrollx" should be delayed one frame wrt "xoffs".
+
+myangel2:
+- before each level, the background image is shown with completely wrong colors. It
+ corrects itself when the level starts.
+
+grdians:
+- the map screen after the character selection needs zooming. There is a global
+ zoom register that should affect the background map and the level picture but
+ not the frontmost frame. This latter should use color 7ff (the last one)
+ and ignore the individual color codes in the tiles data. Zooming is also
+ used briefly in pengbros.
+
+deerhunt,wschamp:
+- offset tilemap sprite during demo
+
+trophyh:
+- mame hangs for around 15 seconds every now and then, at scene changes.
+ This is probably due to a couple of frames with an odd or corrupt sprites list,
+ taking a long time to render.
+
+***************************************************************************/
+
+/***************************************************************************
+
+MS Gundam Ex Revue
+Banpresto, 1994
+
+This game runs on Seta/Allumer hardware
+
+PCB Layout
+----------
+
+PO-113A BP949KA
+|----------------------------------|
+| X1-010 6264 U28 |
+| 581001 U19 |
+| U3 U5 U2 U4 581001 U17 |
+| 62256 62256 U15 |
+|J U20 |
+|A U77 68301 U18 |
+|M * U16 |
+|M 93C46 U23 |
+|A U22 |
+| U21 |
+| DSW1 50MHz |
+| DSW2 PAL 32.5304MHz |
+| 20MHz PAL |
+|----------------------------------|
+
+Notes:
+ *: unknown QFP208 (has large heatsink on it). Should be similar to other known
+ graphics chips used on Seta hardware of this era.
+ 68301 clock: 16.000MHz
+ VSync: 60Hz
+
+***************************************************************************/
+
+/***************************************************************************
+
+Guardians
+Banpresto, 1995
+
+This hardware is not common Banpresto hardware. Possibly licenced
+to them from another manufacturer? Or an early design that they decided
+not to use for future games? Either way, this game is _extremely_ rare :-)
+
+PCB Layout
+----------
+
+P-FG01-1
+------------------------------------------------------
+| X1-010 6264 U32 CXK581000 |
+| CXK581000 U16 |
+| |
+| U20 |
+| U3 U5 U2 U4 62256 CXK58257 |
+| 62256 CXK58257 U15 |
+| |
+|J U19 |
+|A TMP68301AF-16 |
+|M U18 |
+|M NEC |
+|A NEC DX-101 U22 |
+| DX-102 |
+| U17 |
+| PAL 50MHz |
+| U21 |
+| DSW1(8) |
+| DSW2(8) CXK58257 NEC |
+| CXK58257 DX-102|
+------------------------------------------------------
+
+Notes:
+ HSync: 15.23kHz
+ VSync: 58.5Hz
+
+***************************************************************************/
+
+/***************************************************************************
+
+ Penguin Brothers (Japan)
+
+(c)2000 Subsino
+Board: P0-142A
+CPU: TMP68301 (68000 core)
+
+OSC: 50.0000MHz
+ 32.5304MHz
+ 28.0000MHz
+
+Chips.: DX-101
+ DX-102 x3
+Sound: X1-010
+
+Notes: pzlbowl PCB with extra parts:
+ 28MHz OSC
+ 2x 62256 SRAM
+ 74HC00
+
+***************************************************************************/
+
+/***************************************************************************
+
+Sammy USA Outdoor Shooting Series PCB
+
+PCB B0-003B:
+ Deer Hunting USA (c) 2000 Sammy USA
+ Turkey Hunting USA (c) 2001 Sammy USA
+
+PCB B0-010A:
+ Wing Shooting Championship (c) 2001 Sammy USA
+ Trophy Hunting - Bear & Moose (c) 2002 Sammy USA
+
+
+ CPU: Toshiba TMP68301AF-16 (100 Pin PQFP)
+ Video: NEC DX-101 (240 Pin PQFP)
+ NEC DX-102 (52 Pin PQFP x3)
+ Sound: X1-010 (Mitsubishi M60016 Gate Array, 80 Pin PQFP)
+EEPROM: 93LC46BX (1K Low-power 64 x 16-bit organization serial EEPROM)
+ OSC: 50MHz & 28MHz
+ Other: 8 Position Dipswitch x 2
+ Lattice ispLSI2032
+ Lattice isp1016E (2 for PCB B0-010A, used for light gun input)
+ BAT1 - CR2032 3Volt
+
+PCB Number: B0-003B
++-----------------------------------------------------------+
+| VOL +------+ |
+| |X1-010| M1 |
+| +---+ +---+ |M60016| |
+| | | | | M M |CALRUA| +---+ |
++-+ | U | | U | 2 1 +------+ | | |
+ | | 0 | | 0 | | | |
++-+ | 7 | | 6 | M M | U | |
+| | | | | 2 1 | 1 | |
+| +---+ +---+ | 8 | |
+| Lattice | | |
+| D +---+ C ispLSI2032 | | |
+| S |DX | N BAT1 +-------+ +---+ |
+| W |102| 5 |Toshiba| D |
+| 1 +---+ | TMP | S EEPROM C |
+| C | 68301 | W N |
+| N Lattice +-------+ 2 2 |
+| 6 isp1016E |
+| +----------+ 50MHz |
+| +---+ | | |
+| |DX | SW1 | NEC | M M |
+| |102| | DX-101 | 3 3 |
+| +---+ M M | | |
+| 1 1 | | |
+| +----------+ |
+| |
+| +---+ +---++---++---+ |
+| 28MHz | | | || || | |
+| +---+ | | | || || | |
++-+ |DX | | U | | U || U || U | |
+ | |102| | 4 | | 4 || 3 || 3 | |
++-+ +---+ | 0 | | 1 || 8 || 9 | |
+| | | | || || | |
+| | | | || || | |
+| +---+ +---++---++---+ |
++-----------------------------------------------------------+
+
+PCB Number: B0-010A - This PCB is slightly revised for 2 player play
++-----------------------------------------------------------+
+| VOL +------+ |
+| |X1-010| M1 |
+| +---+ +---+ |M60016| |
+| | | | | M M |CALRUA| +---+ |
++-+ | U | | U | 2 1 +------+ | | |
+ | | 0 | | 0 | | | |
++-+ | 7 | | 6 | M M | U | |
+| | | | | 2 1 | 1 | |
+| +---+ +---+ | 8 | |
+| Lattice | | |
+| D +---+ C ispLSI2032 | | |
+| S |DX | N BAT1 +-------+ +---+ |
+| W |102| 5 |Toshiba| D |
+| 1 +---+ | TMP | S EEPROM C |
+| C | 68301 | W N |
+| N Lattice +-------+ 2 2 |
+| 6 isp1016E |
+| +----------+ 50MHz |
+| +---+ | | |
+| |DX | SW1 | NEC | M M |
+| |102| | DX-101 | 3 3 |
+| +---+ M M | | |
+| 1 1 | | |
+| +----------+ |
+| |
+| +---+ +---++---++---+ |
+| 28MHz | | | || || | |
+| +---+ C | | | || || | |
++-+ |DX | N | U | | U || U || U | |
+ | |102| 7 | 4 | | 4 || 3 || 3 | |
++-+ +---+ | 0 | | 1 || 8 || 9 | |
+| Lattice C | | | || || | |
+| isp1016E N | | | || || | |
+| 8 +---+ +---++---++---+ |
++-----------------------------------------------------------+
+
+Ram M1 are Toshiba TC55257DFL-70L
+Ram M2 are NEC D43001GU-70L
+Ram M3 are ISSI IS62C1024L-70Q
+
+U06 Program rom ST27C801 (even)
+U07 Program rom ST27C801 (odd)
+
+U18 Mask rom (Samples 23C32000 32Mbit (read as 27C322))
+
+U38 - U40 Mask roms (Graphics 23c64020 64Mbit) - 23C64020 read as 27C322 with pin11 +5v & 27C322 with pin11 GND
+
+***************************************************************************/
+
+#include "driver.h"
+#include "machine/tmp68301.h"
+#include "machine/eeprom.h"
+#include "sound/x1_010.h"
+#include "seta.h"
+
+/***************************************************************************
+
+
+ Memory Maps - Main CPU
+
+
+***************************************************************************/
+
+static WRITE16_HANDLER( seta2_sound_bank_w )
+{
+ if (ACCESSING_LSB)
+ {
+ UINT8 *ROM = memory_region( REGION_SOUND1 );
+ int banks = (memory_region_length( REGION_SOUND1 ) - 0x100000) / 0x20000;
+ if (data >= banks)
+ {
+ logerror("CPU #0 PC %06X: invalid sound bank %04X\n",activecpu_get_pc(),data);
+ data %= banks;
+ }
+ memcpy(ROM + offset * 0x20000, ROM + 0x100000 + data * 0x20000, 0x20000);
+ }
+}
+
+
+/***************************************************************************
+ Guardians
+***************************************************************************/
+
+static WRITE16_HANDLER( grdians_lockout_w )
+{
+ if (ACCESSING_LSB)
+ {
+ // initially 0, then either $25 (coin 1) or $2a (coin 2)
+ coin_counter_w(0,data & 0x01); // or 0x04
+ coin_counter_w(1,data & 0x02); // or 0x08
+ }
+// popmessage("%04X", data & 0xffff);
+}
+
+static ADDRESS_MAP_START( grdians_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x304000, 0x30ffff) AM_READ(MRA16_RAM ) // ? seems tile data
+ AM_RANGE(0x600000, 0x600001) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x600002, 0x600003) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0x700000, 0x700001) AM_READ(input_port_2_word_r ) // P1
+ AM_RANGE(0x700002, 0x700003) AM_READ(input_port_3_word_r ) // P2
+ AM_RANGE(0x700004, 0x700005) AM_READ(input_port_4_word_r ) // Coins
+ AM_RANGE(0x70000c, 0x70000d) AM_READ(watchdog_reset16_r ) // Watchdog
+ AM_RANGE(0xb00000, 0xb03fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_READ(MRA16_RAM ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0xfffc00, 0xffffff) AM_READ(MRA16_RAM ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( grdians_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x304000, 0x30ffff) AM_WRITE(MWA16_RAM ) // ? seems tile data
+ AM_RANGE(0x800000, 0x800001) AM_WRITE(grdians_lockout_w )
+ AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0xc50000, 0xc5ffff) AM_WRITE(MWA16_RAM ) // cleared
+ AM_RANGE(0xc60000, 0xc6003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0xe00010, 0xe0001f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+/***************************************************************************
+ Mobile Suit Gundam EX Revue
+***************************************************************************/
+
+static NVRAM_HANDLER(93C46_gundamex)
+{
+ if (read_or_write)
+ {
+ EEPROM_save(file);
+ }
+ else
+ {
+ EEPROM_init(&eeprom_interface_93C46);
+ if (file)
+ {
+ EEPROM_load(file);
+ }
+ else
+ {
+ int length;
+ UINT8 *dat;
+
+ dat = EEPROM_get_data_pointer(&length);
+ dat[0]=0x70;
+ dat[1]=0x08;
+ }
+ }
+}
+
+static READ16_HANDLER( gundamex_eeprom_r )
+{
+ return ((EEPROM_read_bit() & 1)) << 3;
+}
+
+static WRITE16_HANDLER( gundamex_eeprom_w )
+{
+ EEPROM_set_clock_line((data & 0x2) ? ASSERT_LINE : CLEAR_LINE);
+ EEPROM_write_bit(data & 0x1);
+ EEPROM_set_cs_line((data & 0x4) ? CLEAR_LINE : ASSERT_LINE);
+}
+
+static ADDRESS_MAP_START( gundamex_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x500000, 0x57ffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x600000, 0x600001) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x600002, 0x600003) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0x700000, 0x700001) AM_READ(input_port_2_word_r ) // P1
+ AM_RANGE(0x700002, 0x700003) AM_READ(input_port_3_word_r ) // P2
+ AM_RANGE(0x700004, 0x700005) AM_READ(input_port_4_word_r ) // Coins
+ AM_RANGE(0x700008, 0x700009) AM_READ(input_port_5_word_r ) // P1
+ AM_RANGE(0x70000a, 0x70000b) AM_READ(input_port_6_word_r ) // P2
+ AM_RANGE(0xb00000, 0xb03fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xfffd0a, 0xfffd0b) AM_READ(gundamex_eeprom_r ) // parallel data register
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( gundamex_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x500000, 0x57ffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x70000c, 0x70000d) AM_WRITE(watchdog_reset16_w )
+ AM_RANGE(0x800000, 0x800001) AM_WRITE(grdians_lockout_w )
+ AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0xc50000, 0xc5ffff) AM_WRITE(MWA16_RAM ) // cleared
+ AM_RANGE(0xc60000, 0xc6003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0xe00010, 0xe0001f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0xfffd0a, 0xfffd0b) AM_WRITE(gundamex_eeprom_w ) // parallel data register
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+/***************************************************************************
+ Wakakusamonogatari Mahjong Yonshimai
+***************************************************************************/
+
+static int keyboard_row;
+
+static READ16_HANDLER( mj4simai_p1_r )
+{
+ switch (keyboard_row)
+ {
+ case 0x01: return readinputport(3);
+ case 0x02: return readinputport(4);
+ case 0x04: return readinputport(5);
+ case 0x08: return readinputport(6);
+ case 0x10: return readinputport(7);
+ default: logerror("p1_r with keyboard_row = %02x\n",keyboard_row); return 0xffff;
+ }
+}
+
+static WRITE16_HANDLER( mj4simai_keyboard_w )
+{
+ if (ACCESSING_LSB)
+ keyboard_row = data & 0xff;
+}
+
+static ADDRESS_MAP_START( mj4simai_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x600000, 0x600001) AM_READ(mj4simai_p1_r ) // P1
+ AM_RANGE(0x600002, 0x600003) AM_READ(mj4simai_p1_r ) // P2, but I'm using P1 again
+ AM_RANGE(0x600006, 0x600007) AM_READ(watchdog_reset16_r ) // Watchdog
+ AM_RANGE(0x600100, 0x600101) AM_READ(input_port_2_word_r ) //
+ AM_RANGE(0x600300, 0x600301) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x600302, 0x600303) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0xb00000, 0xb03fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_READ(MRA16_RAM ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0xfffc00, 0xffffff) AM_READ(MRA16_RAM ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( mj4simai_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x600004, 0x600005) AM_WRITE(mj4simai_keyboard_w ) // select keyboard row to read
+ AM_RANGE(0x600200, 0x600201) AM_WRITE(MWA16_NOP ) // Leds? Coins?
+ AM_RANGE(0x600300, 0x60030f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0xc60000, 0xc6003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+
+/***************************************************************************
+ Kosodate Quiz My Angel
+***************************************************************************/
+
+static ADDRESS_MAP_START( myangel_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x700000, 0x700001) AM_READ(input_port_2_word_r ) // P1
+ AM_RANGE(0x700002, 0x700003) AM_READ(input_port_3_word_r ) // P2
+ AM_RANGE(0x700004, 0x700005) AM_READ(input_port_4_word_r ) // Coins
+ AM_RANGE(0x700006, 0x700007) AM_READ(watchdog_reset16_r ) // Watchdog
+ AM_RANGE(0x700300, 0x700301) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x700302, 0x700303) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0xb00000, 0xb03fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_READ(MRA16_RAM ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0xfffc00, 0xffffff) AM_READ(MRA16_RAM ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( myangel_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x700200, 0x700201) AM_WRITE(MWA16_NOP ) // Leds? Coins?
+ AM_RANGE(0x700310, 0x70031f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xc00000, 0xc3ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0xc40000, 0xc4ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0xc60000, 0xc6003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+
+/***************************************************************************
+ Kosodate Quiz My Angel 2
+***************************************************************************/
+
+static ADDRESS_MAP_START( myangel2_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x600000, 0x600001) AM_READ(input_port_2_word_r ) // P1
+ AM_RANGE(0x600002, 0x600003) AM_READ(input_port_3_word_r ) // P2
+ AM_RANGE(0x600004, 0x600005) AM_READ(input_port_4_word_r ) // Coins
+ AM_RANGE(0x600006, 0x600007) AM_READ(watchdog_reset16_r ) // Watchdog
+ AM_RANGE(0x600300, 0x600301) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x600302, 0x600303) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0xb00000, 0xb03fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xd00000, 0xd3ffff) AM_READ(MRA16_RAM ) // Sprites
+ AM_RANGE(0xd40000, 0xd4ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0xfffc00, 0xffffff) AM_READ(MRA16_RAM ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( myangel2_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x600200, 0x600201) AM_WRITE(MWA16_NOP ) // Leds? Coins?
+ AM_RANGE(0x600300, 0x60030f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xd00000, 0xd3ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0xd40000, 0xd4ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0xd60000, 0xd6003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+
+/***************************************************************************
+ Puzzle De Bowling
+***************************************************************************/
+
+/* The game checks for a specific value read from the ROM region.
+ The offset to use is stored in RAM at address 0x20BA16 */
+static READ16_HANDLER( pzlbowl_protection_r )
+{
+ UINT32 address = (program_read_word(0x20ba16) << 16) | program_read_word(0x20ba18);
+ return memory_region(REGION_CPU1)[address - 2];
+}
+
+static READ16_HANDLER( pzlbowl_coins_r )
+{
+ return readinputport(4) | (mame_rand(Machine) & 0x80 );
+}
+
+static WRITE16_HANDLER( pzlbowl_coin_counter_w )
+{
+ if (ACCESSING_LSB)
+ {
+ coin_counter_w(0,data & 0x10);
+ coin_counter_w(1,data & 0x20);
+ }
+}
+
+static ADDRESS_MAP_START( pzlbowl_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x400300, 0x400301) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x400302, 0x400303) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0x500000, 0x500001) AM_READ(input_port_2_word_r ) // P1
+ AM_RANGE(0x500002, 0x500003) AM_READ(input_port_3_word_r ) // P2
+ AM_RANGE(0x500004, 0x500005) AM_READ(pzlbowl_coins_r ) // Coins + Protection?
+ AM_RANGE(0x500006, 0x500007) AM_READ(watchdog_reset16_r ) // Watchdog
+ AM_RANGE(0x700000, 0x700001) AM_READ(pzlbowl_protection_r ) // Protection
+ AM_RANGE(0x800000, 0x83ffff) AM_READ(MRA16_RAM ) // Sprites
+ AM_RANGE(0x840000, 0x84ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0x900000, 0x903fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xfffc00, 0xffffff) AM_READ(MRA16_RAM ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( pzlbowl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x400300, 0x40030f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0x500004, 0x500005) AM_WRITE(pzlbowl_coin_counter_w ) // Coins Counter
+ AM_RANGE(0x800000, 0x83ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0x840000, 0x84ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0x860000, 0x86003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0x900000, 0x903fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+
+/***************************************************************************
+ Penguin Bros
+***************************************************************************/
+
+static ADDRESS_MAP_START( penbros_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x210000, 0x23ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x300000, 0x30ffff) AM_READ(MRA16_RAM ) // RAM
+ AM_RANGE(0x500300, 0x500301) AM_READ(input_port_0_word_r ) // DSW 1
+ AM_RANGE(0x500302, 0x500303) AM_READ(input_port_1_word_r ) // DSW 2
+ AM_RANGE(0x600000, 0x600001) AM_READ(input_port_2_word_r ) // P1
+ AM_RANGE(0x600002, 0x600003) AM_READ(input_port_3_word_r ) // P2
+ AM_RANGE(0x600004, 0x600005) AM_READ(input_port_4_word_r ) // Coins
+ AM_RANGE(0x600006, 0x600007) AM_READ(watchdog_reset16_r ) // Watchdog
+// AM_RANGE(0x700000, 0x700001) AM_READ(pzlbowl_protection_r ) // Protection
+ AM_RANGE(0xb00000, 0xb3ffff) AM_READ(MRA16_RAM ) // Sprites
+ AM_RANGE(0xb40000, 0xb4ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0xa00000, 0xa03fff) AM_READ(seta_sound_word_r ) // Sound
+ AM_RANGE(0xfffc00, 0xffffff) AM_READ(MRA16_RAM ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( penbros_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x300000, 0x30ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x210000, 0x23ffff) AM_WRITE(MWA16_RAM ) // RAM
+ AM_RANGE(0x500300, 0x50030f) AM_WRITE(seta2_sound_bank_w ) // Samples Banks
+ AM_RANGE(0x600004, 0x600005) AM_WRITE(pzlbowl_coin_counter_w ) // Coins Counter
+ AM_RANGE(0xb00000, 0xb3ffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
+ AM_RANGE(0xb40000, 0xb4ffff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0xb60000, 0xb6003f) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs ) // Video Registers
+ AM_RANGE(0xa00000, 0xa03fff) AM_WRITE(seta_sound_word_w ) // Sound
+ AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+
+/***************************************************************************
+ Sammy Outdoor Shooting
+***************************************************************************/
+
+static READ16_HANDLER( samshoot_lightgun1_r )
+{
+// popmessage("%02x %02x",readinputport(3),readinputport(2));
+ return (readinputport(2) << 8) | readinputport(3);
+}
+static READ16_HANDLER( samshoot_lightgun2_r )
+{
+ return (readinputport(4) << 8) | readinputport(5);
+}
+
+static WRITE16_HANDLER( samshoot_coin_w )
+{
+ if (ACCESSING_LSB)
+ {
+ coin_counter_w(0, data & 0x10);
+ coin_counter_w(1, data & 0x20);
+ // Are these connected? They are set in I/O test
+ coin_lockout_w(0,~data & 0x40);
+ coin_lockout_w(1,~data & 0x80);
+ }
+// popmessage("%04x",data);
+}
+
+static ADDRESS_MAP_START( samshoot_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE( 0x000000, 0x1fffff ) AM_ROM
+ AM_RANGE( 0x200000, 0x20ffff ) AM_RAM
+ AM_RANGE( 0x300000, 0x30ffff ) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size)
+
+ AM_RANGE( 0x400000, 0x400001 ) AM_READ( input_port_0_word_r ) // DSW 1
+ AM_RANGE( 0x400002, 0x400003 ) AM_READ( input_port_9_word_r ) // Buttons
+
+ AM_RANGE( 0x400300, 0x40030f ) AM_WRITE( seta2_sound_bank_w ) // Samples Banks
+
+ AM_RANGE( 0x500000, 0x500001 ) AM_READ( samshoot_lightgun1_r ) // P1
+ AM_RANGE( 0x580000, 0x580001 ) AM_READ( samshoot_lightgun2_r ) // P2
+
+ AM_RANGE( 0x700000, 0x700001 ) AM_READ( input_port_6_word_r ) // Trigger
+ AM_RANGE( 0x700002, 0x700003 ) AM_READ( input_port_7_word_r ) // Pump
+ AM_RANGE( 0x700004, 0x700005 ) AM_READWRITE( input_port_8_word_r, samshoot_coin_w ) // Coins
+ AM_RANGE( 0x700006, 0x700007 ) AM_READ( watchdog_reset16_r ) // Watchdog?
+
+ AM_RANGE( 0x800000, 0x83ffff ) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) // Sprites
+ AM_RANGE( 0x840000, 0x84ffff ) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) // Palette
+ AM_RANGE( 0x860000, 0x86003f ) AM_WRITE(seta2_vregs_w) AM_BASE(&seta2_vregs) // Video Registers
+
+ AM_RANGE( 0x900000, 0x903fff ) AM_READWRITE( seta_sound_word_r, seta_sound_word_w ) // Sound
+
+ AM_RANGE( 0xfffd0a, 0xfffd0b ) AM_READ( input_port_1_word_r ) // parallel data register (DSW 2)
+ AM_RANGE( 0xfffc00, 0xffffff ) AM_READWRITE( MRA16_RAM, tmp68301_regs_w) AM_BASE(&tmp68301_regs ) // TMP68301 Registers
+ADDRESS_MAP_END
+
+
+
+/***************************************************************************
+
+ Input Ports
+
+***************************************************************************/
+
+/***************************************************************************
+ Mobile Suit Gundam EX Revue
+***************************************************************************/
+
+static INPUT_PORTS_START( gundamex )
+ PORT_START_TAG("IN0") // $600000.w
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Freeze" ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Show Targets" ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") // $600002.w
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_5C ) )
+ PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x0000, "3 Coins/5 Credits" )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 2C_5C ) )
+ PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 1C_5C ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Debug Mode" )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") // $700000.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") // $700002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") // $700004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) //jumper pad
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Language ) ) //jumper pad
+ PORT_DIPSETTING( 0x0020, DEF_STR( English ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Japanese ) )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN5") // $700008.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN6") // $70000a.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+/***************************************************************************
+ Guardians
+***************************************************************************/
+
+static INPUT_PORTS_START( grdians )
+ PORT_START_TAG("IN0") // $600000.w
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) // 0
+ PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) // 1
+ PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) // 2
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) // 3
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Title" )
+ PORT_DIPSETTING( 0x0008, "Guardians" )
+ PORT_DIPSETTING( 0x0000, "Denjin Makai II" )
+ PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0020, "1" )
+ PORT_DIPSETTING( 0x0030, "2" )
+ PORT_DIPSETTING( 0x0010, "3" )
+ PORT_DIPSETTING( 0x0000, "4" )
+ PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") // $600002.w
+ PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) )
+ 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_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0050, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 4C_3C ) )
+ PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 3C_4C ) )
+ PORT_DIPSETTING( 0x0070, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0060, DEF_STR( 2C_5C ) )
+ PORT_DIPSETTING( 0x00d0, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x00b0, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0090, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") // $700000.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") // $700002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") // $700004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Wakakusamonogatari Mahjong Yonshimai
+***************************************************************************/
+
+static INPUT_PORTS_START( mj4simai )
+ PORT_START_TAG("IN0") // $600300.w
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Tumo Pin" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") // $600302.w
+ PORT_DIPNAME( 0x0007, 0x0004, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0004, "0" )
+ PORT_DIPSETTING( 0x0003, "1" )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0001, "3" )
+ PORT_DIPSETTING( 0x0000, "4" )
+ PORT_DIPSETTING( 0x0007, "5" )
+ PORT_DIPSETTING( 0x0006, "6" )
+ PORT_DIPSETTING( 0x0005, "7" )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0010, 0x0000, "Select Girl" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0020, 0x0000, "Com Put" )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Unknown 2-6" )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, "Unknown 2-7" )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") // $600100.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") // $600000(0)
+ PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_A )
+ PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E )
+ PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I )
+ PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M )
+ PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
+ PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT(0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") // $600000(1)
+ PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_B )
+ PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F )
+ PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J )
+ PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N )
+ PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
+ PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET )
+ PORT_BIT(0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
+
+ PORT_START_TAG("IN5") // $600000(2)
+ PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C )
+ PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G )
+ PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K )
+ PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
+ PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
+ PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN6") // $600000(3)
+ PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D )
+ PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H )
+ PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L )
+ PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
+ PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN7") // $600000(4)
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )
+ PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Kosodate Quiz My Angel
+***************************************************************************/
+
+static INPUT_PORTS_START( myangel )
+ PORT_START_TAG("IN0") // $700300.w
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Increase Lives While Playing" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0020, "2" )
+ PORT_DIPSETTING( 0x0030, "3" )
+ PORT_DIPSETTING( 0x0010, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") // $700302.w
+ PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) )
+ 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_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, "Push Start To Freeze (Cheat)")
+ PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") //$700000.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") //$700002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") //$700004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Kosodate Quiz My Angel 2
+***************************************************************************/
+
+static INPUT_PORTS_START( myangel2 )
+ PORT_START_TAG("IN0") //$600300.w
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Increase Lives While Playing" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0020, "2" )
+ PORT_DIPSETTING( 0x0030, "3" )
+ PORT_DIPSETTING( 0x0010, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") //$600302.w
+ PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) )
+ 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_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) /* Listed as "Unused" */
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") //$600000.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") //$600002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") //$600004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Puzzle De Bowling
+***************************************************************************/
+
+static INPUT_PORTS_START( pzlbowl )
+ PORT_START_TAG("IN0") //$400300.w
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( Easiest ) )
+ PORT_DIPSETTING( 0x0028, DEF_STR( Easier ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0038, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Harder ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Very_Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x00c0, 0x00c0, "Winning Rounds (Player VS Player)" )
+ PORT_DIPSETTING( 0x0040, "1" )
+ PORT_DIPSETTING( 0x00c0, "2" ) /* This setting is not defined in the manual */
+ PORT_DIPSETTING( 0x0080, "3" )
+ PORT_DIPSETTING( 0x0000, "5" )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") //$400302.w
+ PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) )
+// PORT_DIPSETTING( 0x0002, DEF_STR( 1C_1C ) ) /* This setting is not defined in the manual */
+ 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( 0x0001, DEF_STR( 1C_3C ) ) /* This setting is not defined in the manual */
+ 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_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Join In" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Language ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( English ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Japanese ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") //$500000.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") //$500002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") //$500004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // unused, test mode shows it
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Protection?
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Penguin Bros
+***************************************************************************/
+
+static INPUT_PORTS_START( penbros )
+ PORT_START_TAG("IN0") //$500300.w
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) )
+ PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") //$500302.w
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0000, "2" )
+ PORT_DIPSETTING( 0x000c, "3" )
+ PORT_DIPSETTING( 0x0004, "4" )
+ PORT_DIPSETTING( 0x0008, "5" )
+ PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x0010, "150k and 500k" )
+ PORT_DIPSETTING( 0x0030, "200k and 700k" )
+ PORT_DIPSETTING( 0x0000, "Every 250k" ) // no extra life after the one at 1500k
+ PORT_DIPSETTING( 0x0020, DEF_STR( None ) )
+ PORT_DIPNAME( 0x00c0, 0x00c0, "Winning Rounds (Player VS Player)" )
+ PORT_DIPSETTING( 0x00c0, "2" )
+ PORT_DIPSETTING( 0x0040, "3" )
+ PORT_DIPSETTING( 0x0080, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") //$600000.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // unsure if used
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3") //$600002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // unsure if used
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN4") //$600004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // unused, test mode shows it
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ 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( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Sammy Outdoor Shooting
+***************************************************************************/
+
+static INPUT_PORTS_START( deerhunt )
+ PORT_START_TAG("DSW1") // IN0 - $400000.w
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3")
+ PORT_DIPSETTING( 0x0005, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:4,5,6")
+ PORT_DIPSETTING( 0x0028, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Discount To Continue" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("DSW2") // IN1 - fffd0a.w
+ PORT_DIPNAME( 0x0001, 0x0001, "Vert. Flip Screen" ) PORT_DIPLOCATION("SW2:1")
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, "Horiz. Flip Screen" ) PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:4,5")
+ PORT_DIPSETTING( 0x0010, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Blood Color" ) PORT_DIPLOCATION("SW2:6")
+ PORT_DIPSETTING( 0x0020, "Red" )
+ PORT_DIPSETTING( 0x0000, "Yellow" )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x0040, "3" )
+ PORT_DIPSETTING( 0x0000, "4" )
+ PORT_DIPNAME( 0x0080, 0x0080, "Gun Type" ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x0080, "Pump Action" )
+ PORT_DIPSETTING( 0x0000, "Hand Gun" )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("GUN1Y") // IN2 - $500000.b
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1, 0, 0) PORT_MINMAX(0x08,0xf8) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(1)
+
+ PORT_START_TAG("GUN1X") // IN3 - $500001.b
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1, 0, 0) PORT_MINMAX(0x25,0xc5) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(1)
+
+ PORT_START_TAG("GUN2Y") // IN4 - $580000.b
+ PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // P2 gun, read but not used
+
+ PORT_START_TAG("GUN2X") // IN5 - $580001.b
+ PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // P2 gun, read but not used
+
+ PORT_START_TAG("TRIGGER") // IN6 - $700000
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SPECIAL ) // trigger
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0xff3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("PUMP") // IN7 - $700003.b
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SPECIAL ) // pump
+ PORT_BIT( 0xffbf, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("COIN") // IN8 - $700005.b
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("BUTTONS") // IN9 - $400002
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // trigger
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) // pump
+ PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( turkhunt )
+ PORT_INCLUDE(deerhunt)
+
+ PORT_MODIFY("DSW2") // IN1 - fffd0a.w
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x0040, "2" )
+ PORT_DIPSETTING( 0x0000, "3" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( wschamp )
+ PORT_INCLUDE(deerhunt)
+
+ PORT_MODIFY("DSW1") // IN0 - $400000.w
+ PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
+ PORT_DIPSETTING( 0x0009, "4 Coins Start, 4 Coins Continue" )
+ PORT_DIPSETTING( 0x0008, "4 Coins Start, 3 Coins Continue" )
+ PORT_DIPSETTING( 0x0007, "4 Coins Start, 2 Coins Continue" )
+ PORT_DIPSETTING( 0x0006, "4 Coins Start, 1 Coin Continue" )
+ PORT_DIPSETTING( 0x000c, "3 Coins Start, 3 Coins Continue" )
+ PORT_DIPSETTING( 0x000b, "3 Coins Start, 2 Coins Continue" )
+ PORT_DIPSETTING( 0x000a, "3 Coins Start, 1 Coin Continue" )
+ PORT_DIPSETTING( 0x000e, "2 Coins Start, 2 Coins Continue" )
+ PORT_DIPSETTING( 0x000d, "2 Coins Start, 1 Coin Continue" )
+ PORT_DIPSETTING( 0x000f, "1 Coin Start, 1 Coin Continue" )
+ PORT_DIPSETTING( 0x0005, "1 Coin 2 Credits, 1 Credit Start & Continue" )
+ PORT_DIPSETTING( 0x0004, "1 Coin 3 Credits, 1 Credit Start & Continue" )
+ PORT_DIPSETTING( 0x0003, "1 Coin 4 Credits, 1 Credit Start & Continue" )
+ PORT_DIPSETTING( 0x0002, "1 Coin 5 Credits, 1 Credit Start & Continue" )
+ PORT_DIPSETTING( 0x0001, "1 Coin 6 Credits, 1 Credit Start & Continue" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" )
+ PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" )
+ PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" )
+ PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("DSW2") // IN1 - fffd0a.w
+ PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x0040, "2" )
+ PORT_DIPSETTING( 0x0000, "3" )
+
+ PORT_MODIFY("GUN2Y") // IN4 - $580000.b
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1, 0, 0) PORT_MINMAX(0x08,0xf8) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(2)
+
+ PORT_MODIFY("GUN2X") // IN5 - $580001.b
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1, 0, 0) PORT_MINMAX(0x25,0xc5) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(2)
+
+ PORT_MODIFY("TRIGGER") // IN6 - $700000
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) // trigger P2
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SPECIAL ) // trigger P1
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0xff1f, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("PUMP") // IN7 - $700003.b
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) // pump P2
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SPECIAL ) // pump P1
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0xff1f, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("COIN") // IN8 - $700005.b
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("BUTTONS") // IN9 - $400002
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // trigger P1
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) // pump P1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // trigger P2
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // pump P2
+ PORT_BIT( 0xffcc, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( trophyh )
+ PORT_INCLUDE(wschamp)
+
+ PORT_MODIFY("DSW2") // IN1 - fffd0a.w
+ PORT_DIPNAME( 0x0020, 0x0020, "Blood Color" ) PORT_DIPLOCATION("SW2:6") /* WSChamp doesn't use Blood Color, so add it back in */
+ PORT_DIPSETTING( 0x0020, "Red" )
+ PORT_DIPSETTING( 0x0000, "Yellow" )
+INPUT_PORTS_END
+
+
+/***************************************************************************
+
+
+ Graphics Layouts
+
+
+***************************************************************************/
+
+static const gfx_layout layout_4bpp_lo =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 4,
+ { RGN_FRAC(1,4)+8,RGN_FRAC(1,4)+0,
+ RGN_FRAC(0,4)+8,RGN_FRAC(0,4)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
+ 8*8*2
+};
+
+static const gfx_layout layout_4bpp_hi =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 4,
+ { RGN_FRAC(3,4)+8,RGN_FRAC(3,4)+0,
+ RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
+ 8*8*2
+};
+
+static const gfx_layout layout_6bpp =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 6,
+ {
+ RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0,
+ RGN_FRAC(1,4)+8,RGN_FRAC(1,4)+0,
+ RGN_FRAC(0,4)+8,RGN_FRAC(0,4)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
+ 8*8*2
+};
+
+static const gfx_layout layout_8bpp =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 8,
+ { RGN_FRAC(3,4)+8,RGN_FRAC(3,4)+0,
+ RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0,
+ RGN_FRAC(1,4)+8,RGN_FRAC(1,4)+0,
+ RGN_FRAC(0,4)+8,RGN_FRAC(0,4)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
+ 8*8*2
+};
+
+static const gfx_layout layout_3bpp_lo =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 3,
+ { RGN_FRAC(1,4)+0,
+ RGN_FRAC(0,4)+8,RGN_FRAC(0,4)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
+ 8*8*2
+};
+
+static const gfx_layout layout_2bpp_hi =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 2,
+ { RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
+ 8*8*2
+};
+
+/* Tiles are 8bpp, but the hardware is additionally able to discard
+ some bitplanes and use the low 4 bits only, or the high 4 bits only */
+static GFXDECODE_START( seta2 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_4bpp_lo, 0, 0x8000/16 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_4bpp_hi, 0, 0x8000/16 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_6bpp, 0, 0x8000/16 ) /* 6bpp, but 4bpp granularity */
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_8bpp, 0, 0x8000/16 ) /* 8bpp, but 4bpp granularity */
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_3bpp_lo, 0, 0x8000/16 ) /* 3bpp, but 4bpp granularity */
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_2bpp_hi, 0, 0x8000/16 ) /* ??? */
+GFXDECODE_END
+
+
+/***************************************************************************
+
+ Machine Drivers
+
+***************************************************************************/
+
+static INTERRUPT_GEN( seta2_interrupt )
+{
+ switch ( cpu_getiloops() )
+ {
+ case 0:
+ /* VBlank is connected to INT0 (external interrupts pin 0) */
+ tmp68301_external_interrupt_0();
+ break;
+ }
+}
+
+static INTERRUPT_GEN( samshoot_interrupt )
+{
+ switch ( cpu_getiloops() )
+ {
+ case 0:
+ tmp68301_external_interrupt_0(); // vblank
+ break;
+ case 1:
+ tmp68301_external_interrupt_2(); // to do: hook up x1-10 interrupts
+ break;
+ }
+}
+
+static struct x1_010_interface x1_010_sound_intf =
+{
+ 0x0000, /* address */
+};
+
+
+static MACHINE_DRIVER_START( mj4simai )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main",M68000,32530400 / 2) /* !! TMP68301 !! */
+ MDRV_CPU_PROGRAM_MAP(mj4simai_readmem,mj4simai_writemem)
+ MDRV_CPU_VBLANK_INT(seta2_interrupt,1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET( tmp68301 )
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(0x200, 0x200)
+ MDRV_SCREEN_VISIBLE_AREA(0x40, 0x1c0-1, 0x80, 0x170-1)
+ MDRV_GFXDECODE(seta2)
+ MDRV_PALETTE_LENGTH(0x8000)
+
+ MDRV_VIDEO_START(seta2)
+ MDRV_VIDEO_UPDATE(seta2)
+ MDRV_VIDEO_EOF(seta2)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(X1_010, 50000000/3)
+ MDRV_SOUND_CONFIG(x1_010_sound_intf)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( gundamex )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_REPLACE("main",M68000,16000000)
+ MDRV_CPU_PROGRAM_MAP(gundamex_readmem,gundamex_writemem)
+
+ MDRV_NVRAM_HANDLER(93C46_gundamex)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0x00, 0x180-1, 0x100, 0x1e0-1)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( grdians )
+
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(grdians_readmem,grdians_writemem)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0x80, 0x80 + 0x130 -1, 0x80, 0x80 + 0xe8 -1)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( myangel )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(myangel_readmem,myangel_writemem)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x178-1, 0x00, 0xf0-1)
+
+ MDRV_VIDEO_START(seta2_offset)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( myangel2 )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(myangel2_readmem,myangel2_writemem)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x178-1, 0x00, 0xf0-1)
+
+ MDRV_VIDEO_START(seta2_offset)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( pzlbowl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(pzlbowl_readmem,pzlbowl_writemem)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0x10, 0x190-1, 0x100, 0x1f0-1)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( penbros )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(penbros_readmem,penbros_writemem)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0x80, 0x160-1)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( samshoot )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mj4simai)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(samshoot_map,0)
+ MDRV_CPU_VBLANK_INT(samshoot_interrupt,2)
+
+ MDRV_NVRAM_HANDLER(generic_0fill)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0x40, 0x180-1, 0x40, 0x130-1)
+MACHINE_DRIVER_END
+
+
+/***************************************************************************
+
+ ROMs Loading
+
+***************************************************************************/
+
+ROM_START( gundamex )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "ka002002.u2", 0x000000, 0x080000, CRC(e850f6d8) SHA1(026325e305676b1f8d3d9e7573920f8b70d7bccb) )
+ ROM_LOAD16_BYTE( "ka002004.u3", 0x000001, 0x080000, CRC(c0fb1208) SHA1(84b25e4c73cb8e023ee5dbf69f588be98700b43f) )
+ ROM_LOAD16_BYTE( "ka002001.u4", 0x100000, 0x080000, CRC(553ebe6b) SHA1(7fb8a159513d31a1d60520ff14e4c4d133fd3e19) )
+ ROM_LOAD16_BYTE( "ka002003.u5", 0x100001, 0x080000, CRC(946185aa) SHA1(524911c4c510d6c3e17a7ab42c7077c2fffbf06b) )
+ ROM_LOAD16_WORD_SWAP( "ka001005.u77", 0x500000, 0x080000, CRC(f01d3d00) SHA1(ff12834e99a76261d619f10d186f4b329fb9cb7a) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_ERASE) /* Sprites */
+ ROM_LOAD( "ka001009.u16", 0x0000000, 0x200000, CRC(997d8d93) SHA1(4cb4cdb7e8208af4b14483610d9d6aa5e13acd89) )
+ ROM_LOAD( "ka001010.u18", 0x0200000, 0x200000, CRC(811b67ca) SHA1(c8cfae6f54c76d63bd625ff011c872ffb75fd2e2) )
+ ROM_LOAD( "ka001011.u20", 0x0400000, 0x200000, CRC(08a72700) SHA1(fb8003aa02dd249c30a757cb43b516260b41c1bf) )
+ ROM_LOAD( "ka001012.u15", 0x0800000, 0x200000, CRC(b789e4a8) SHA1(400b773f24d677a9d47466fdbbe68cb6efc1ad37) )
+ ROM_LOAD( "ka001013.u17", 0x0a00000, 0x200000, CRC(d8a0201f) SHA1(fe8a2407c872adde8aec8e9340b00be4f00a2872) )
+ ROM_LOAD( "ka001014.u19", 0x0c00000, 0x200000, CRC(7635e026) SHA1(116a3daab14a17faca85c4a956b356aaf0fc2276) )
+ ROM_LOAD( "ka001006.u21", 0x1000000, 0x200000, CRC(6aac2f2f) SHA1(fac5478ca2941a93c57f670a058ff626e537bcde) )
+ ROM_LOAD( "ka001007.u22", 0x1200000, 0x200000, CRC(588f9d63) SHA1(ed5148d09d02e3bc12c50c39c5c86e6356b2dd7a) )
+ ROM_LOAD( "ka001008.u23", 0x1400000, 0x200000, CRC(db55a60a) SHA1(03d118c7284ca86219891c473e2a89489710ea27) )
+ ROM_FILL( 0x1800000, 0x600000, 0 ) /* 6bpp instead of 8bpp */
+
+ ROM_REGION( 0x300000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "ka001015.u28", 0x100000, 0x200000, CRC(ada2843b) SHA1(09d06026031bc7558da511c3c0e29187ea0a0099) )
+ROM_END
+
+ROM_START( grdians )
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "u2.bin", 0x000000, 0x080000, CRC(36adc6f2) SHA1(544e87f88179fe1342e7a06a8948ac1828e85108) )
+ ROM_LOAD16_BYTE( "u3.bin", 0x000001, 0x080000, CRC(2704f416) SHA1(9081a12cbb9927d36e1c50b52aa2c6003810ee42) )
+ ROM_LOAD16_BYTE( "u4.bin", 0x100000, 0x080000, CRC(bb52447b) SHA1(61433f683210ab2bc2cf1cc4b5b7a39cc5b6493d) )
+ ROM_LOAD16_BYTE( "u5.bin", 0x100001, 0x080000, CRC(9c164a3b) SHA1(6d688c7af9e7e8e8d54b2e4dfbf41f59c79242eb) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_ERASE) /* Sprites */
+ ROM_LOAD( "u16.bin", 0x0000000, 0x400000, CRC(6a65f265) SHA1(6cad11f718f8bbcff464d41eb4717460769237ed) )
+ ROM_LOAD( "u20.bin", 0x0600000, 0x200000, CRC(a7226ab7) SHA1(408580dd35c568ffef1ebbd87359e3ec1f867020) )
+ ROM_CONTINUE( 0x0400000, 0x200000 )
+
+ ROM_LOAD( "u15.bin", 0x0800000, 0x400000, CRC(01672dcd) SHA1(f61f60e3343cc5b6ccee391ee529966a141566db) )
+ ROM_LOAD( "u19.bin", 0x0e00000, 0x200000, CRC(c0c998a0) SHA1(498fb1877527ed37412537f06a2c39ff0c60f146) )
+ ROM_CONTINUE( 0x0c00000, 0x200000 )
+
+ ROM_LOAD( "u18.bin", 0x1000000, 0x400000, CRC(967babf4) SHA1(42a6311576417c44aeaceb8ba6bb3cd7794e4882) )
+ ROM_LOAD( "u22.bin", 0x1600000, 0x200000, CRC(6239997a) SHA1(87b6d6f30f152f625f82fd858c1290176c7e156e) )
+ ROM_CONTINUE( 0x1400000, 0x200000 )
+
+ ROM_LOAD( "u17.bin", 0x1800000, 0x400000, CRC(0fad0629) SHA1(1bdc8e7c5e39e83d327f14a672ec81b049112da6) )
+ ROM_LOAD( "u21.bin", 0x1e00000, 0x200000, CRC(6f95e466) SHA1(28482fad16a3ac9302f152d81552e6f84a44f3e4) )
+ ROM_CONTINUE( 0x1c00000, 0x200000 )
+
+ ROM_REGION( 0x200000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "u32.bin", 0x100000, 0x100000, CRC(cf0f3017) SHA1(8376d3a674f71aec72f52c72758fbc53d9feb1a1) )
+ROM_END
+
+ROM_START( mj4simai )
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "ll.u2", 0x000000, 0x080000, CRC(7be9c781) SHA1(d29e579706d98909933f6bed2ee292c88ed10d2c) )
+ ROM_LOAD16_BYTE( "lh1.u3", 0x000001, 0x080000, CRC(82aa3f72) SHA1(a93d5dc7cdf12f852a692759d91f6f2951b6b5b5) )
+ ROM_LOAD16_BYTE( "hl.u4", 0x100000, 0x080000, CRC(226063b7) SHA1(1737baffc16ff7261f887911187ece96925fa6ff) )
+ ROM_LOAD16_BYTE( "hh.u5", 0x100001, 0x080000, CRC(23aaf8df) SHA1(b3d678afce4ddef32e48d690c6d07b723dd0c28f) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "cha-03.u16", 0x0000000, 0x400000, CRC(d367429a) SHA1(b32c215ef85c3d0a4c5550cef4f5c4c0e7030b7c) )
+ ROM_LOAD( "cha-04.u18", 0x0400000, 0x400000, CRC(7f2008c3) SHA1(e45d863540eb2381f5d7660d64cdfef87c890768) )
+ ROM_LOAD( "cha-05.u15", 0x0800000, 0x400000, CRC(e94ec40a) SHA1(2685dbc5680b5f76688c6b4fbe40ae682c525bfe) )
+ ROM_LOAD( "cha-06.u17", 0x0c00000, 0x400000, CRC(5cb0b3a9) SHA1(92fb82d45b4c46326d5796981f812e20a8ddb4f2) )
+ ROM_LOAD( "cha-01.u21", 0x1000000, 0x400000, CRC(35f47b37) SHA1(4a8eb088890272f2a069e2c3f00fadf6421f7b0e) )
+ ROM_LOAD( "cha-02.u22", 0x1400000, 0x400000, CRC(f6346860) SHA1(4eebd3fa315b97964fa39b88224f9de7622ba881) )
+ ROM_FILL( 0x1800000, 0x800000, 0 ) /* 6bpp instead of 8bpp */
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "cha-07.u32", 0x100000, 0x400000, CRC(817519ee) SHA1(ed09740cdbf61a328f7b50eb569cf498fb749416) )
+ROM_END
+
+ROM_START( myangel )
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "kq1-prge.u2", 0x000000, 0x080000, CRC(6137d4c0) SHA1(762341e11b56e4a7787a0662833b702b78aee0a9) )
+ ROM_LOAD16_BYTE( "kq1-prgo.u3", 0x000001, 0x080000, CRC(4aad10d8) SHA1(a08e1c4f57c64be829e0807ae2791da947fd60aa) )
+ ROM_LOAD16_BYTE( "kq1-tble.u4", 0x100000, 0x080000, CRC(e332a514) SHA1(dfd255239c80c48c9865e70681b9ddd175b8bf55) )
+ ROM_LOAD16_BYTE( "kq1-tblo.u5", 0x100001, 0x080000, CRC(760cab15) SHA1(fa7ea85ec2ebfaab3111b8631ea6ea3d794d449c) )
+
+ ROM_REGION( 0x1000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "kq1-cg2.u20", 0x000000, 0x200000, CRC(80b4e8de) SHA1(c8685c4f4e3c0415ce0ec88e0288835e504cab00) )
+ ROM_LOAD( "kq1-cg0.u16", 0x200000, 0x200000, CRC(f8ae9a05) SHA1(4f3b41386a48a1608aa96b911e6b74ca775260fb) )
+ ROM_LOAD( "kq1-cg3.u19", 0x400000, 0x200000, CRC(9bdc35c9) SHA1(fd0a1eb3dd10705bce5462263667353632558b58) )
+ ROM_LOAD( "kq1-cg1.u15", 0x600000, 0x200000, CRC(23bd7ea4) SHA1(e925bbadc33fc2586bb18283cf989ab35f28c1e9) )
+ ROM_LOAD( "kq1-cg6.u22", 0x800000, 0x200000, CRC(b25acf12) SHA1(5cca35921f3b376c3cc36f5b009eb845db2e1897) )
+ ROM_LOAD( "kq1-cg4.u18", 0xa00000, 0x200000, CRC(dca7f8f2) SHA1(20595c7940a28d01bdc6610b67aaaeac61ba92e2) )
+ ROM_LOAD( "kq1-cg7.u21", 0xc00000, 0x200000, CRC(9f48382c) SHA1(80dfc33a55123b5d3cdb3ed97b43a527f0254d61) )
+ ROM_LOAD( "kq1-cg5.u17", 0xe00000, 0x200000, CRC(a4bc4516) SHA1(0eb11fa54d16bba1b96f9dd943a68949a3bb9a2f) )
+
+ ROM_REGION( 0x300000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "kq1-snd.u32", 0x100000, 0x200000, CRC(8ca1b449) SHA1(f54096fb5400843af4879135c96760485b6cb319) )
+ROM_END
+
+ROM_START( myangel2 )
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "kqs1ezpr.u2", 0x000000, 0x080000, CRC(2469aac2) SHA1(7dade2de31252e305d24c659c4801dd4687ad1f6) )
+ ROM_LOAD16_BYTE( "kqs1ozpr.u3", 0x000001, 0x080000, CRC(6336375c) SHA1(72089f77e94832e74e0512944acadeccd0dec8b0) )
+ ROM_LOAD16_BYTE( "kqs1e-tb.u4", 0x100000, 0x080000, CRC(e759b4cc) SHA1(4f806a144a47935b2710f8af800ec0d771f12a18) )
+ ROM_LOAD16_BYTE( "kqs1o-tb.u5", 0x100001, 0x080000, CRC(b6168737) SHA1(4c3de877c0c1dca1c43ac737a0bf231335237d3a) )
+
+ ROM_REGION( 0x1800000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "kqs1-cg4.u20", 0x0000000, 0x200000, CRC(d1802241) SHA1(52c45a13d46f7ee8043e85b99d07b1765ca93dcc) )
+ ROM_LOAD( "kqs1-cg0.u16", 0x0200000, 0x400000, CRC(c21a33a7) SHA1(bc6f479a8f4c716ba79a725f160ddeb95fdedbcb) )
+ ROM_LOAD( "kqs1-cg5.u19", 0x0600000, 0x200000, CRC(d86cf19c) SHA1(da5a5b576ce107433605b24d8b9dcd0abd46bcde) )
+ ROM_LOAD( "kqs1-cg1.u15", 0x0800000, 0x400000, CRC(dca799ba) SHA1(8379b11472c27b1945fe7fc274c7fedf756accba) )
+ ROM_LOAD( "kqs1-cg6.u22", 0x0c00000, 0x200000, CRC(3f08886b) SHA1(054546ae44ffa5d0973f4ead080fe720a340e144) )
+ ROM_LOAD( "kqs1-cg2.u18", 0x0e00000, 0x400000, CRC(f7f92c7e) SHA1(24a525a15fded0de6e382b346da6bd5e7b9eced5) )
+ ROM_LOAD( "kqs1-cg7.u21", 0x1200000, 0x200000, CRC(2c977904) SHA1(2589447f2471cdc414266b34aff552044c680d93) )
+ ROM_LOAD( "kqs1-cg3.u17", 0x1400000, 0x400000, CRC(de3b2191) SHA1(d7d6ea07b665cfd834747d3c0776b968ce03bc6a) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "kqs1-snd.u32", 0x100000, 0x400000, CRC(792a6b49) SHA1(341b4e8f248b5032217733bada32e353c67e3888) )
+ROM_END
+
+ROM_START( pzlbowl )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "kup-u06.i03", 0x000000, 0x080000, CRC(314e03ac) SHA1(999398e55161dd75570d418f4c9899e3bf311cc8) )
+ ROM_LOAD16_BYTE( "kup-u07.i03", 0x000001, 0x080000, CRC(a0423a04) SHA1(9539023c5c2f2bf72ee3fb6105443ffd3d61e2f8) )
+
+ ROM_REGION( 0x1000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "kuc-u38.i00", 0x000000, 0x400000, CRC(3db24172) SHA1(89c39963e15c53b799994185d0c8b2e795478939) )
+ ROM_LOAD( "kuc-u39.i00", 0x400000, 0x400000, CRC(9b26619b) SHA1(ea7a0bf46641d15353217b01e761d1a148bee4e7) )
+ ROM_LOAD( "kuc-u40.i00", 0x800000, 0x400000, CRC(7e49a2cf) SHA1(d24683addbc54515c33fb620ac500e6702bd9e17) )
+ ROM_LOAD( "kuc-u41.i00", 0xc00000, 0x400000, CRC(2febf19b) SHA1(8081ac590c0463529777b5e4817305a1a6f6ea41) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "kus-u18.i00", 0x100000, 0x400000, CRC(e2b1dfcf) SHA1(fb0b8be119531a1a27efa46ed7b86b05a37ed585) )
+ROM_END
+
+ROM_START( penbros )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "u06.bin", 0x000000, 0x080000, CRC(7bbdffac) SHA1(d5766cb171b8d2e4c04a6bae37181fa5ada9d797) )
+ ROM_LOAD16_BYTE( "u07.bin", 0x000001, 0x080000, CRC(d50cda5f) SHA1(fc66f55f2070b447c5db85c948ce40adc37512f7) )
+
+ ROM_REGION( 0x1000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "u38.bin", 0x000000, 0x400000, CRC(4247b39e) SHA1(f273931293beced312e02c870bf35e9cf0c91a8b) )
+ ROM_LOAD( "u39.bin", 0x400000, 0x400000, CRC(f9f07faf) SHA1(66fc4a9ad422fb384d2c775e43619137226898fc) )
+ ROM_LOAD( "u40.bin", 0x800000, 0x400000, CRC(dc9e0a96) SHA1(c2c8ccf9039ee0e179b08fdd2d37f29899349cda) )
+ ROM_FILL( 0xc00000, 0x400000, 0 ) /* 6bpp instead of 8bpp */
+
+ ROM_REGION( 0x300000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "u18.bin", 0x100000, 0x200000, CRC(de4e65e2) SHA1(82d4e590c714b3e9bf0ffaf1500deb24fd315595) )
+ROM_END
+
+ROM_START( deerhunt ) /* Deer Hunting USA V4.3 (11/1/2000) */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "as0906e01-v4_3.u06", 0x000000, 0x100000, CRC(20c81f17) SHA1(d41d93d6ee88738cec55f7bf3ce6be1dbec68e09) )
+ ROM_LOAD16_BYTE( "as0907e01-v4_3.u07", 0x000001, 0x100000, CRC(1731aa2a) SHA1(cffae7a99a7f960a62ef0c4454884df17a93c1a6) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "as0901m01.u38", 0x0000000, 0x800000, CRC(1d6acf8f) SHA1(6f61fe21bebb7c87e8e6c3ef3ba73b8cf327dde9) )
+ ROM_LOAD( "as0902m01.u39", 0x0800000, 0x800000, CRC(c7ca2128) SHA1(86be3a3ec2f86f61acfa3d4d261faea3c27dc378) )
+ ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
+ ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ROM_END
+
+ROM_START( deerhuna ) /* Deer Hunting USA V4.2 (xx/x/2000) */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "as0906e01-v4_2.u06", 0x000000, 0x100000, CRC(bb3af36f) SHA1(f04071347e8ad361bf666fcb6c0136e522f19d47) )
+ ROM_LOAD16_BYTE( "as0907e01-v4_2.u07", 0x000001, 0x100000, CRC(83f02117) SHA1(70fc2291bc93af3902aae88688be6a8078f7a07e) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "as0901m01.u38", 0x0000000, 0x800000, CRC(1d6acf8f) SHA1(6f61fe21bebb7c87e8e6c3ef3ba73b8cf327dde9) )
+ ROM_LOAD( "as0902m01.u39", 0x0800000, 0x800000, CRC(c7ca2128) SHA1(86be3a3ec2f86f61acfa3d4d261faea3c27dc378) )
+ ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
+ ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ROM_END
+
+ROM_START( deerhunb ) /* Deer Hunting USA V4.0 (6/15/2000) */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "as0906e01-v4.u06", 0x000000, 0x100000, CRC(07d9b64a) SHA1(f9aac644aab920bbac84b14836ee589ccd51f6db) )
+ ROM_LOAD16_BYTE( "as0907e01-v4.u07", 0x000001, 0x100000, CRC(19973d08) SHA1(da1cc02ce480a62ccaf94d0af1246a340f054b43) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "as0901m01.u38", 0x0000000, 0x800000, CRC(1d6acf8f) SHA1(6f61fe21bebb7c87e8e6c3ef3ba73b8cf327dde9) )
+ ROM_LOAD( "as0902m01.u39", 0x0800000, 0x800000, CRC(c7ca2128) SHA1(86be3a3ec2f86f61acfa3d4d261faea3c27dc378) )
+ ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
+ ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ROM_END
+
+ROM_START( turkhunt ) /* V1.0 is currently the only known version */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "asx906e01.u06", 0x000000, 0x100000, CRC(c96266e1) SHA1(0ca462b3b0f27198e36384eee6ea5c5d4e7e1293) )
+ ROM_LOAD16_BYTE( "asx907e01.u07", 0x000001, 0x100000, CRC(7c67b502) SHA1(6a0e8883a115dac4095d86897e7eca2a007a1c71) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "asx901m01.u38", 0x0000000, 0x800000, BAD_DUMP CRC(23125c93) SHA1(c8735ac43bc67c52cb78ad5bca74fa2082dda040) )
+ ROM_LOAD( "asx902m01.u39", 0x0800000, 0x800000, BAD_DUMP CRC(6e7330dd) SHA1(4a8590e9b8fe4767f7a25760bfe499792948a7ae) )
+ ROM_LOAD( "asx903m01.u40", 0x1000000, 0x800000, BAD_DUMP CRC(5f86c322) SHA1(5a72adb99eea176199f172384cb051e2b045ab94) )
+ ROM_LOAD( "asx904m01.u41", 0x1800000, 0x800000, BAD_DUMP CRC(6177f644) SHA1(120fe32518d133f03176db68f18c8175c1a81b27) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "asx905m01.u18", 0x100000, 0x400000, CRC(8d9dd9a9) SHA1(1fc2f3688d2c24c720dca7357bca6bf5f4016c53) )
+ROM_END
+
+ROM_START( wschamp ) /* V2.0 */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "as1006e02.u06", 0x000000, 0x100000, CRC(0ad01677) SHA1(63e09b9f7cc8b781af1756f86caa0cc0962ae584) )
+ ROM_LOAD16_BYTE( "as1007e02.u07", 0x000001, 0x100000, CRC(572624f0) SHA1(0c2f67daa22f4edd66a2be990dc6cd999faff0fa) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "as1001m01.u38", 0x0000000, 0x800000, CRC(92595579) SHA1(75a7131aedb18b7103677340c3cca7c91aaca2bf) )
+ ROM_LOAD( "as1002m01.u39", 0x0800000, 0x800000, CRC(16c2bb08) SHA1(63926464c8bd8db7d05905a953765e645942beb4) )
+ ROM_LOAD( "as1003m01.u40", 0x1000000, 0x800000, CRC(89618858) SHA1(a8bd07f233482e8f5a256af7ff9577648eb58ef4) )
+ ROM_LOAD( "as1004m01.u41", 0x1800000, 0x800000, CRC(500c0909) SHA1(73ff27d46b9285f34a50a81c21c54437f21e1939) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "as1005m01.u18", 0x100000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
+ROM_END
+
+ROM_START( wschampa ) /* V1.01 */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "as1006e01.u06", 0x000000, 0x100000, CRC(d3d3b2b5) SHA1(2d036d795b40a4ed78bb9f7751f875cfc76276a9) )
+ ROM_LOAD16_BYTE( "as1007e01.u07", 0x000001, 0x100000, CRC(78ede6d9) SHA1(e6d10f52cd4c6bf97288df44911f23bb64fc012c) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "as1001m01.u38", 0x0000000, 0x800000, CRC(92595579) SHA1(75a7131aedb18b7103677340c3cca7c91aaca2bf) )
+ ROM_LOAD( "as1002m01.u39", 0x0800000, 0x800000, CRC(16c2bb08) SHA1(63926464c8bd8db7d05905a953765e645942beb4) )
+ ROM_LOAD( "as1003m01.u40", 0x1000000, 0x800000, CRC(89618858) SHA1(a8bd07f233482e8f5a256af7ff9577648eb58ef4) )
+ ROM_LOAD( "as1004m01.u41", 0x1800000, 0x800000, CRC(500c0909) SHA1(73ff27d46b9285f34a50a81c21c54437f21e1939) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "as1005m01.u18", 0x100000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
+ROM_END
+
+ROM_START( trophyh ) /* V1.0 is currently the only known version */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* TMP68301 Code */
+ ROM_LOAD16_BYTE( "as1106e01.u06", 0x000000, 0x100000, CRC(b4950882) SHA1(2749f7ffc5b543c9f39815f0913a1d1e385b63f4) )
+ ROM_LOAD16_BYTE( "as1107e01.u07", 0x000001, 0x100000, CRC(19ee67cb) SHA1(e75ce66d3ff5aad46ba997c09d6514260e617f55) )
+
+ ROM_REGION( 0x2000000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "as1101m01.u38", 0x0000000, 0x800000, CRC(855ed675) SHA1(84ce229a9feb6331413253a5aed10b362e8102e5) )
+ ROM_LOAD( "as1102m01.u39", 0x0800000, 0x800000, CRC(d186d271) SHA1(3c54438b35adfab8be91df0a633270d6db49beef) )
+ ROM_LOAD( "as1103m01.u40", 0x1000000, 0x800000, CRC(adf8a54e) SHA1(bb28bf219d18082246f7964851a5c49b9c0ba7f5) )
+ ROM_LOAD( "as1104m01.u41", 0x1800000, 0x800000, CRC(387882e9) SHA1(0fdd0c77dabd1066c6f3bd64e357236a76f524ab) )
+
+ ROM_REGION( 0x500000, REGION_SOUND1, 0 ) /* Samples */
+ /* Leave 1MB empty (addressable by the chip) */
+ ROM_LOAD( "as1105m01.u18", 0x100000, 0x400000, CRC(633d0df8) SHA1(3401c424f5c207ef438a9269e0c0e7d482771fed) )
+ROM_END
+
+GAME( 1994, gundamex, 0, gundamex, gundamex, 0, ROT0, "Banpresto", "Mobile Suit Gundam EX Revue", 0 )
+GAME( 1995, grdians, 0, grdians, grdians, 0, ROT0, "Banpresto", "Guardians / Denjin Makai II", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) // Displays (c) Winky Soft at game's end.
+GAME( 1996, mj4simai, 0, mj4simai, mj4simai, 0, ROT0, "Maboroshi Ware", "Wakakusamonogatari Mahjong Yonshimai (Japan)", GAME_NO_COCKTAIL )
+GAME( 1996, myangel, 0, myangel, myangel, 0, ROT0, "Namco", "Kosodate Quiz My Angel (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 1997, myangel2, 0, myangel2, myangel2, 0, ROT0, "Namco", "Kosodate Quiz My Angel 2 (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 1999, pzlbowl, 0, pzlbowl, pzlbowl, 0, ROT0, "Nihon System / Moss", "Puzzle De Bowling (Japan)", GAME_NO_COCKTAIL )
+GAME( 2000, penbros, 0, penbros, penbros, 0, ROT0, "Subsino", "Penguin Brothers (Japan)", GAME_NO_COCKTAIL )
+GAME( 2000, deerhunt, 0, samshoot, deerhunt, 0, ROT0, "Sammy USA Corporation", "Deer Hunting USA V4.3", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 2000, deerhuna, deerhunt, samshoot, deerhunt, 0, ROT0, "Sammy USA Corporation", "Deer Hunting USA V4.2", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 2000, deerhunb, deerhunt, samshoot, deerhunt, 0, ROT0, "Sammy USA Corporation", "Deer Hunting USA V4.0", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 2001, turkhunt, 0, samshoot, turkhunt, 0, ROT0, "Sammy USA Corporation", "Turkey Hunting USA V1.0", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 2001, wschamp, 0, samshoot, wschamp, 0, ROT0, "Sammy USA Corporation", "Wing Shooting Championship V2.0", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 2001, wschampa, wschamp, samshoot, wschamp, 0, ROT0, "Sammy USA Corporation", "Wing Shooting Championship V1.01", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
+GAME( 2002, trophyh, 0, samshoot, trophyh, 0, ROT0, "Sammy USA Corporation", "Trophy Hunting - Bear & Moose V1.0", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )