summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/m72.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/m72.c')
-rw-r--r--src/mame/drivers/m72.c3530
1 files changed, 3530 insertions, 0 deletions
diff --git a/src/mame/drivers/m72.c b/src/mame/drivers/m72.c
new file mode 100644
index 00000000000..5a441775988
--- /dev/null
+++ b/src/mame/drivers/m72.c
@@ -0,0 +1,3530 @@
+/***************************************************************************
+
+IREM M72 board
+
+driver by Nicola Salmoria
+protection information by Nao
+
+ Year Board Protected?
+R-Type 1987 M72 N
+Battle Chopper / Mr. Heli 1987 M72 Y
+Ninja Spirit 1988 M72 Y
+Image Fight 1988 M72 Y
+Legend of Hero Tonma 1989 M72 Y
+X Multiply 1989 M72(1) Y
+Dragon Breed 1989 M81 N
+Dragon Breed 1989 M72 Y
+R-Type II 1989 M82/M84(2) N
+Major Title 1990 M84 N
+Hammerin' Harry / Daiku no Gensan 1990 M82(3) N
+ Daiku no Gensan 1990 M72(4) Y
+Pound for Pound 1990 M85 N
+Air Duel 1990 M72? Y
+Cosmic Cop / 1991 M84 N
+ Gallop - Armed Police Unit 1991 M72 N
+Ken-Go 1991 ? Encrypted
+
+(1) different addressing PALs, so different memory map
+(2) rtype2j has M84 written on the board, but it's the same hardware as rtype2
+(3) multiple versions supported, running on different hardware
+(4) normal M72 memory map, but IRQ vectors and sprite control as in X-Multiply
+
+
+TODO:
+- majtitle_gfx_ctrl_w is unknown, it seems to be used to disable rowscroll,
+ and maybe other things
+
+- Maybe there is a layer enable register, e.g. nspirit shows (for an instant)
+ incomplete screens with bad colors when you start a game.
+
+- A lot of unknown I/O writes from the sound CPU in Pound for Pound.
+
+- the sprite chip triggers IRQ1 when it has finished copying the sprite RAM to its
+ private buffer. This isn't implemented (all games have an empty IRQ1 handler).
+ The cpu board also has support for IRQ3 and IRQ4, coming from the external
+ connectors, but I don't think they are used by any game.
+
+IRQ controller
+--------------
+The initialization consists of one write to port 0x40 and multiple writes
+(2 or 3) to port 0x42. The first value written to 0x42 is the IRQ vector base.
+Kengo probably has a different controller.
+
+Game irqbase 0x40 0x42
+---- ------- ---- ----------
+rtype 0x20 17 20 0F
+bchopper " " "
+nspirit " " "
+loht " " "
+rtype2 " " "
+airduel " " "
+gallop " " "
+imgfight 0x20 17 20 0F 06
+majtitle " " "
+poundfor 0x20 17 20 0F 0A
+xmultipl 0x08 13 08 0F FA
+dbreed " " "
+hharry " " "
+cosmccop 0x18 --------------
+kengo 0x18 --------------
+
+***************************************************************************/
+
+#include "driver.h"
+#include "machine/irem_cpu.h"
+#include "audio/m72.h"
+#include "sound/dac.h"
+#include "sound/2151intf.h"
+#include "m72.h"
+
+
+/* in video/m72.c */
+
+
+static UINT16 *protection_ram;
+
+
+
+/***************************************************************************
+
+Sample playback
+
+In the later games, the sound CPU can program the start offset of the PCM
+samples, but it seems the earlier games have them hardcoded somewhere (maybe
+the protection MCU?).
+So, here I provided some tables with the start offset precomputed.
+They could be built automatically in most cases (00 marks the end of a
+sample), but a couple of games (nspirit, loht) have holes in the numbering
+so we would have to do them differently anyway.
+
+Also, some games (dkgenm72, poundfor, airduel, gallop) have an empty NMI
+handler, so the sample playback has to be handled entirely by external
+hardware; we work around that by using (for all games, not just the ones
+without a NMI handler) a NMI interrupt gen that mimics the behaviour of
+the NMI handler in the other games.
+
+***************************************************************************/
+
+#if 0
+static int find_sample(int num)
+{
+ UINT8 *rom = memory_region(REGION_SOUND1);
+ int len = memory_region_length(REGION_SOUND1);
+ int addr = 0;
+
+ while (num--)
+ {
+ /* find end of sample */
+ while (addr < len && rom[addr]) addr++;
+
+ /* skip 0 filler between samples */
+ while (addr < len && !rom[addr]) addr++;
+ }
+
+ return addr;
+}
+#endif
+
+static INTERRUPT_GEN(fake_nmi)
+{
+ int sample = m72_sample_r(0);
+ if (sample)
+ m72_sample_w(0,sample);
+}
+
+
+static WRITE16_HANDLER( bchopper_sample_trigger_w )
+{
+ static const int a[6] = { 0x0000, 0x0010, 0x2510, 0x6510, 0x8510, 0x9310 };
+ if (ACCESSING_LSB && (data & 0xff) < 6) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( nspirit_sample_trigger_w )
+{
+ static const int a[9] = { 0x0000, 0x0020, 0x2020, 0, 0x5720, 0, 0x7b60, 0x9b60, 0xc360 };
+ if (ACCESSING_LSB && (data & 0xff) < 9) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( imgfight_sample_trigger_w )
+{
+ static const int a[7] = { 0x0000, 0x0020, 0x44e0, 0x98a0, 0xc820, 0xf7a0, 0x108c0 };
+ if (ACCESSING_LSB && (data & 0xff) < 7) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( loht_sample_trigger_w )
+{
+ static const int a[7] = { 0x0000, 0x0020, 0, 0x2c40, 0x4320, 0x7120, 0xb200 };
+ if (ACCESSING_LSB && (data & 0xff) < 7) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( xmultipl_sample_trigger_w )
+{
+ static const int a[3] = { 0x0000, 0x0020, 0x1a40 };
+ if (ACCESSING_LSB && (data & 0xff) < 3) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( dbreed72_sample_trigger_w )
+{
+ static const int a[9] = { 0x00000, 0x00020, 0x02c40, 0x08160, 0x0c8c0, 0x0ffe0, 0x13000, 0x15820, 0x15f40 };
+ if (ACCESSING_LSB && (data & 0xff) < 9) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( airduel_sample_trigger_w )
+{
+ static const int a[16] = {
+ 0x00000, 0x00020, 0x03ec0, 0x05640, 0x06dc0, 0x083a0, 0x0c000, 0x0eb60,
+ 0x112e0, 0x13dc0, 0x16520, 0x16d60, 0x18ae0, 0x1a5a0, 0x1bf00, 0x1c340 };
+ if (ACCESSING_LSB && (data & 0xff) < 16) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( dkgenm72_sample_trigger_w )
+{
+ static const int a[28] = {
+ 0x00000, 0x00020, 0x01800, 0x02da0, 0x03be0, 0x05ae0, 0x06100, 0x06de0,
+ 0x07260, 0x07a60, 0x08720, 0x0a5c0, 0x0c3c0, 0x0c7a0, 0x0e140, 0x0fb00,
+ 0x10fa0, 0x10fc0, 0x10fe0, 0x11f40, 0x12b20, 0x130a0, 0x13c60, 0x14740,
+ 0x153c0, 0x197e0, 0x1af40, 0x1c080 };
+
+ if (ACCESSING_LSB && (data & 0xff) < 28) m72_set_sample_start(a[data & 0xff]);
+}
+
+static WRITE16_HANDLER( gallop_sample_trigger_w )
+{
+ static const int a[31] = {
+ 0x00000, 0x00020, 0x00040, 0x01360, 0x02580, 0x04f20, 0x06240, 0x076e0,
+ 0x08660, 0x092a0, 0x09ba0, 0x0a560, 0x0cee0, 0x0de20, 0x0e620, 0x0f1c0,
+ 0x10200, 0x10220, 0x10240, 0x11380, 0x12760, 0x12780, 0x127a0, 0x13c40,
+ 0x140a0, 0x16760, 0x17e40, 0x18ee0, 0x19f60, 0x1bbc0, 0x1cee0 };
+
+ if (ACCESSING_LSB && (data & 0xff) < 31) m72_set_sample_start(a[data & 0xff]);
+}
+
+
+
+/***************************************************************************
+
+Protection simulation
+
+Most of the games running on this board have an 8751 protection mcu.
+It is not known how it works in detail, however it's pretty clear that it
+shares RAM at b0000-b0fff.
+On startup, the game writes a pattern to the whole RAM, then reads it back
+expecting it to be INVERTED. If it isn't, it reports a RAM error.
+If the RAM passes the test, the program increments every byte up to b0ffb,
+then calls a subroutine at b0000, which has to be provided by the mcu.
+It seems that this routine is not supposed to RET, but instead it should
+jump directly to the game entry point. The routine should also write some
+bytes here and there in RAM (different in every game); those bytes are
+checked at various points during the game, causing a crash if they aren't
+right.
+Note that the program keeps incrementing b0ffe while the game is running,
+maybe this is done to keep the 8751 alive. We don't bother with that.
+
+Finally, to do the ROM test the program asks the mcu to provide the correct
+values. This is done only in service, so doesn't seem to be much of a
+protection. Here we have provided the correct crcs for the available dumps,
+of course there is no guarantee that they are actually good.
+
+All the protection routines below are entirely made up. They get the games
+running, but they have not been derived from the real 8751 code.
+
+***************************************************************************/
+
+#define CODE_LEN 96
+#define CRC_LEN 18
+
+/* Battle Chopper / Mr. Heli */
+static UINT8 bchopper_code[CODE_LEN] =
+{
+ 0x68,0x00,0xa0, // push 0a000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x38,0x38,0x53, // mov [3838h], byte 053h
+ 0xc6,0x06,0x3a,0x38,0x41, // mov [383ah], byte 041h
+ 0xc6,0x06,0x3c,0x38,0x4d, // mov [383ch], byte 04dh
+ 0xc6,0x06,0x3e,0x38,0x4f, // mov [383eh], byte 04fh
+ 0xc6,0x06,0x40,0x38,0x54, // mov [3840h], byte 054h
+ 0xc6,0x06,0x42,0x38,0x4f, // mov [3842h], byte 04fh
+ 0x68,0x00,0xb0, // push 0b000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x00,0x09,0x49^0xff, // mov [0900h], byte 049h
+ 0xc6,0x06,0x00,0x0a,0x49^0xff, // mov [0a00h], byte 049h
+ 0xc6,0x06,0x00,0x0b,0x49^0xff, // mov [0b00h], byte 049h
+ 0xc6,0x06,0x00,0x00,0xcb^0xff, // mov [0000h], byte 0cbh ; retf : bypass protection check during the game
+ 0x68,0x00,0xd0, // push 0d000h
+ 0x1f, // pop ds
+ // the following is for mrheli only, the game checks for
+ // "This game can only be played in Japan..." message in the video text buffer
+ // the message is nowhere to be found in the ROMs, so has to be displayed by the mcu
+ 0xc6,0x06,0x70,0x16,0x77, // mov [1670h], byte 077h
+ 0xea,0x68,0x01,0x40,0x00 // jmp 0040:$0168
+};
+static UINT8 bchopper_crc[CRC_LEN] = { 0x1a,0x12,0x5c,0x08, 0x84,0xb6,0x73,0xd1,
+ 0x54,0x91,0x94,0xeb, 0x00,0x00 };
+static UINT8 mrheli_crc[CRC_LEN] = { 0x24,0x21,0x1f,0x14, 0xf9,0x28,0xfb,0x47,
+ 0x4c,0x77,0x9e,0xc2, 0x00,0x00 };
+
+/* Ninja Spirit */
+static UINT8 nspirit_code[CODE_LEN] =
+{
+ 0x68,0x00,0xa0, // push 0a000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x38,0x38,0x4e, // mov [3838h], byte 04eh
+ 0xc6,0x06,0x3a,0x38,0x49, // mov [383ah], byte 049h
+ 0xc6,0x06,0x3c,0x38,0x4e, // mov [383ch], byte 04eh
+ 0xc6,0x06,0x3e,0x38,0x44, // mov [383eh], byte 044h
+ 0xc6,0x06,0x40,0x38,0x4f, // mov [3840h], byte 04fh
+ 0xc6,0x06,0x42,0x38,0x55, // mov [3842h], byte 055h
+ 0x68,0x00,0xb0, // push 0b000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x00,0x09,0x49^0xff, // mov [0900h], byte 049h
+ 0xc6,0x06,0x00,0x0a,0x49^0xff, // mov [0a00h], byte 049h
+ 0xc6,0x06,0x00,0x0b,0x49^0xff, // mov [0b00h], byte 049h
+ 0x68,0x00,0xd0, // push 0d000h
+ 0x1f, // pop ds
+ // the following is for nspiritj only, the game checks for
+ // "This game can only be played in Japan..." message in the video text buffer
+ // the message is nowhere to be found in the ROMs, so has to be displayed by the mcu
+ 0xc6,0x06,0x70,0x16,0x57, // mov [1670h], byte 057h
+ 0xc6,0x06,0x71,0x16,0x00, // mov [1671h], byte 000h
+ 0xea,0x00,0x00,0x40,0x00 // jmp 0040:$0000
+};
+static UINT8 nspirit_crc[CRC_LEN] = { 0xfe,0x94,0x6e,0x4e, 0xc8,0x33,0xa7,0x2d,
+ 0xf2,0xa3,0xf9,0xe1, 0xa9,0x6c,0x02,0x95, 0x00,0x00 };
+static UINT8 nspiritj_crc[CRC_LEN] = { 0x26,0xa3,0xa5,0xe9, 0xc8,0x33,0xa7,0x2d,
+ 0xf2,0xa3,0xf9,0xe1, 0xbc,0x6c,0x01,0x95, 0x00,0x00 };
+
+/* Image Fight */
+static UINT8 imgfight_code[CODE_LEN] =
+{
+ 0x68,0x00,0xa0, // push 0a000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x38,0x38,0x50, // mov [3838h], byte 050h
+ 0xc6,0x06,0x3a,0x38,0x49, // mov [383ah], byte 049h
+ 0xc6,0x06,0x3c,0x38,0x43, // mov [383ch], byte 043h
+ 0xc6,0x06,0x3e,0x38,0x4b, // mov [383eh], byte 04bh
+ 0xc6,0x06,0x40,0x38,0x45, // mov [3840h], byte 045h
+ 0xc6,0x06,0x42,0x38,0x54, // mov [3842h], byte 054h
+ 0x68,0x00,0xb0, // push 0b000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x00,0x09,0x49^0xff, // mov [0900h], byte 049h
+ 0xc6,0x06,0x00,0x0a,0x49^0xff, // mov [0a00h], byte 049h
+ 0xc6,0x06,0x00,0x0b,0x49^0xff, // mov [0b00h], byte 049h
+ 0xc6,0x06,0x20,0x09,0x49^0xff, // mov [0920h], byte 049h
+ 0xc6,0x06,0x21,0x09,0x4d^0xff, // mov [0921h], byte 04dh
+ 0xc6,0x06,0x22,0x09,0x41^0xff, // mov [0922h], byte 041h
+ 0xc6,0x06,0x23,0x09,0x47^0xff, // mov [0923h], byte 047h
+ 0x68,0x00,0xd0, // push 0d000h
+ 0x1f, // pop ds
+ // the game checks for
+ // "This game can only be played in Japan..." message in the video text buffer
+ // the message is nowhere to be found in the ROMs, so has to be displayed by the mcu
+ 0xc6,0x06,0xb0,0x1c,0x57, // mov [1cb0h], byte 057h
+ 0xea,0x00,0x00,0x40,0x00 // jmp 0040:$0000
+};
+static UINT8 imgfight_crc[CRC_LEN] = { 0x7e,0xcc,0xec,0x03, 0x04,0x33,0xb6,0xc5,
+ 0xbf,0x37,0x92,0x94, 0x00,0x00 };
+
+/* Legend of Hero Tonma */
+static UINT8 loht_code[CODE_LEN] =
+{
+ 0x68,0x00,0xa0, // push 0a000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x3c,0x38,0x47, // mov [383ch], byte 047h
+ 0xc6,0x06,0x3d,0x38,0x47, // mov [383dh], byte 047h
+ 0xc6,0x06,0x42,0x38,0x44, // mov [3842h], byte 044h
+ 0xc6,0x06,0x43,0x38,0x44, // mov [3843h], byte 044h
+ 0x68,0x00,0xb0, // push 0b000h
+ 0x1f, // pop ds
+ 0xc6,0x06,0x00,0x09,0x49^0xff, // mov [0900h], byte 049h
+ 0xc6,0x06,0x00,0x0a,0x49^0xff, // mov [0a00h], byte 049h
+ 0xc6,0x06,0x00,0x0b,0x49^0xff, // mov [0b00h], byte 049h
+
+ 0x68,0x00,0xd0, // push 0d000h // Japan set only
+ 0x1f, // pop ds // Japan set only
+ 0xc6,0x06,0x70,0x16,0x57, // mov [1670h], byte 057h // Japan set only - checks this (W) of WARNING
+
+ 0xea,0x5d,0x01,0x40,0x00 // jmp 0040:$015d
+
+};
+static UINT8 loht_crc[CRC_LEN] = { 0x39,0x00,0x82,0xae, 0x2c,0x9d,0x4b,0x73,
+ 0xfb,0xac,0xd4,0x6d, 0x6d,0x5b,0x77,0xc0, 0x00,0x00 };
+/* service mode crashes at the moment (119u2), so I can't add the CRCs for lohtj */
+
+/* X Multiply */
+static UINT8 xmultipl_code[CODE_LEN] =
+{
+ 0xea,0x30,0x02,0x00,0x0e // jmp 0e00:$0230
+};
+static UINT8 xmultipl_crc[CRC_LEN] = { 0x73,0x82,0x4e,0x3f, 0xfc,0x56,0x59,0x06,
+ 0x05,0x48,0xa8,0xf4, 0x00,0x00 };
+
+/* Dragon Breed */
+static UINT8 dbreed72_code[CODE_LEN] =
+{
+ 0xea,0x6c,0x00,0x00,0x00 // jmp 0000:$006c
+};
+static UINT8 dbreed72_crc[CRC_LEN] = { 0xa4,0x96,0x5f,0xc0, 0xab,0x49,0x9f,0x19,
+ 0x84,0xe6,0xd6,0xca, 0x00,0x00 };
+
+/* Air Duel */
+static UINT8 airduel_code[CODE_LEN] =
+{
+ 0x68,0x00,0xd0, // push 0d000h
+ 0x1f, // pop ds
+ // the game checks for
+ // "This game can only be played in Japan..." message in the video text buffer
+ // the message is nowhere to be found in the ROMs, so has to be displayed by the mcu
+ 0xc6,0x06,0xc0,0x1c,0x57, // mov [1cc0h], byte 057h
+ 0xea,0x69,0x0b,0x00,0x00 // jmp 0000:$0b69
+};
+static UINT8 airduel_crc[CRC_LEN] = { 0x72,0x9c,0xca,0x85, 0xc9,0x12,0xcc,0xea,
+ 0x00,0x00 };
+
+/* Daiku no Gensan */
+static UINT8 dkgenm72_code[CODE_LEN] =
+{
+ 0xea,0x3d,0x00,0x00,0x10 // jmp 1000:$003d
+};
+static UINT8 dkgenm72_crc[CRC_LEN] = { 0xc8,0xb4,0xdc,0xf8, 0xd3,0xba,0x48,0xed,
+ 0x79,0x08,0x1c,0xb3, 0x00,0x00 };
+
+
+static const UINT8 *protection_code, *protection_crc;
+
+static void copy_le(UINT16 *dest, const UINT8 *src, UINT8 bytes)
+{
+ int i;
+
+ for (i = 0; i < bytes; i += 2)
+ dest[i/2] = src[i+0] | (src[i+1] << 8);
+}
+
+static READ16_HANDLER( protection_r )
+{
+ if (ACCESSING_MSB)
+ copy_le(protection_ram,protection_code,CODE_LEN);
+ return protection_ram[0xffa/2+offset];
+}
+
+static WRITE16_HANDLER( protection_w )
+{
+ data ^= 0xffff;
+ COMBINE_DATA(&protection_ram[offset]);
+ data ^= 0xffff;
+
+ if (offset == 0x0fff/2 && ACCESSING_MSB && (data >> 8) == 0)
+ copy_le(&protection_ram[0x0fe0],protection_crc,CRC_LEN);
+}
+
+static void install_protection_handler(UINT8 *code,UINT8 *crc)
+{
+ protection_ram = auto_malloc(0x1000);
+ protection_code = code;
+ protection_crc = crc;
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xb0000, 0xb0fff, 0, 0, MRA16_BANK1);
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xb0ffa, 0xb0ffb, 0, 0, protection_r);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xb0000, 0xb0fff, 0, 0, protection_w);
+ memory_set_bankptr(1, protection_ram);
+}
+
+static DRIVER_INIT( bchopper )
+{
+ install_protection_handler(bchopper_code,bchopper_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, bchopper_sample_trigger_w);
+}
+
+static DRIVER_INIT( mrheli )
+{
+ install_protection_handler(bchopper_code,mrheli_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, bchopper_sample_trigger_w);
+}
+
+static DRIVER_INIT( nspirit )
+{
+ install_protection_handler(nspirit_code,nspirit_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, nspirit_sample_trigger_w);
+}
+
+static DRIVER_INIT( nspiritj )
+{
+ install_protection_handler(nspirit_code,nspiritj_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, nspirit_sample_trigger_w);
+}
+
+static DRIVER_INIT( imgfight )
+{
+ install_protection_handler(imgfight_code,imgfight_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, imgfight_sample_trigger_w);
+}
+
+static DRIVER_INIT( loht )
+{
+ install_protection_handler(loht_code,loht_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, loht_sample_trigger_w);
+
+ /* since we skip the startup tests, clear video RAM to prevent garbage on title screen */
+ memset(m72_videoram2,0,0x4000);
+}
+
+static READ16_HANDLER( m72_main_mcu_r)
+{
+ return protection_ram[offset];
+}
+
+static WRITE16_HANDLER( m72_main_mcu_w)
+{
+ COMBINE_DATA(&protection_ram[offset]);
+}
+
+static DRIVER_INIT( loht_mcu )
+{
+
+ protection_ram = auto_malloc(0x10000);
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xb0000, 0xb0fff, 0, 0, m72_main_mcu_r);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xb0000, 0xb0fff, 0, 0, m72_main_mcu_w);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, loht_sample_trigger_w);
+
+}
+
+
+static DRIVER_INIT( xmultipl )
+{
+ install_protection_handler(xmultipl_code,xmultipl_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, xmultipl_sample_trigger_w);
+}
+
+static DRIVER_INIT( dbreed72 )
+{
+ install_protection_handler(dbreed72_code,dbreed72_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, dbreed72_sample_trigger_w);
+}
+
+static DRIVER_INIT( airduel )
+{
+ install_protection_handler(airduel_code,airduel_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, airduel_sample_trigger_w);
+}
+
+static DRIVER_INIT( dkgenm72 )
+{
+ install_protection_handler(dkgenm72_code,dkgenm72_crc);
+
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, dkgenm72_sample_trigger_w);
+}
+
+static DRIVER_INIT( gallop )
+{
+ memory_install_write16_handler(0, ADDRESS_SPACE_IO, 0xc0, 0xc1, 0, 0, gallop_sample_trigger_w);
+}
+
+
+
+
+static UINT8 *soundram;
+
+
+static READ16_HANDLER( soundram_r )
+{
+ return soundram[offset * 2 + 0] | (soundram[offset * 2 + 1] << 8);
+}
+
+static WRITE16_HANDLER( soundram_w )
+{
+ if (ACCESSING_LSB)
+ soundram[offset * 2 + 0] = data;
+ if (ACCESSING_MSB)
+ soundram[offset * 2 + 1] = data >> 8;
+}
+
+
+static READ16_HANDLER( poundfor_trackball_r )
+{
+ static int prev[4],diff[4];
+
+ if (offset == 0)
+ {
+ int i,curr;
+
+ for (i = 0;i < 4;i++)
+ {
+ curr = readinputport(3+i);
+ diff[i] = (curr - prev[i]);
+ prev[i] = curr;
+ }
+ }
+
+ switch (offset)
+ {
+ default:
+ case 0:
+ return (diff[0] & 0xff) | ((diff[2] & 0xff) << 8);
+ case 1:
+ return ((diff[0] >> 8) & 0x1f) | (diff[2] & 0x1f00) | (readinputport(0) & 0xe0e0);
+ case 2:
+ return (diff[1] & 0xff) | ((diff[3] & 0xff) << 8);
+ case 3:
+ return ((diff[1] >> 8) & 0x1f) | (diff[3] & 0x1f00);
+ }
+}
+
+
+#define CPU1_MEMORY(NAME,ROMSIZE,WORKRAM) \
+static ADDRESS_MAP_START( NAME##_map, ADDRESS_SPACE_PROGRAM, 16 ) \
+ AM_RANGE(0x00000, ROMSIZE-1) AM_ROM \
+ AM_RANGE(WORKRAM, WORKRAM+0x3fff) AM_RAM /* work RAM */ \
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) \
+ AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16) \
+ AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2) \
+ AM_RANGE(0xd0000, 0xd3fff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1) \
+ AM_RANGE(0xd8000, 0xdbfff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2) \
+ AM_RANGE(0xe0000, 0xeffff) AM_READWRITE(soundram_r, soundram_w) \
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM \
+ADDRESS_MAP_END
+
+
+/* ROMSIZE WORKRAM */
+CPU1_MEMORY( rtype, 0x40000, 0x40000 )
+CPU1_MEMORY( m72, 0x80000, 0xa0000 )
+CPU1_MEMORY( xmultipl, 0x80000, 0x80000 )
+CPU1_MEMORY( dbreed72, 0x80000, 0x90000 )
+
+static ADDRESS_MAP_START( dbreed_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM
+ AM_RANGE(0x88000, 0x8bfff) AM_RAM /* work RAM */
+ AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITE(MWA16_RAM) /* leftover from protection?? */
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2)
+ AM_RANGE(0xd0000, 0xd3fff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1)
+ AM_RANGE(0xd8000, 0xdbfff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2)
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rtype2_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM
+ AM_RANGE(0xb0000, 0xb0001) AM_WRITE(m72_irq_line_w)
+ AM_RANGE(0xbc000, 0xbc001) AM_WRITE(m72_dmaon_w)
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xd0000, 0xd3fff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1)
+ AM_RANGE(0xd4000, 0xd7fff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2)
+ AM_RANGE(0xd8000, 0xd8bff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2)
+ AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( majtitle_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM
+ AM_RANGE(0xa0000, 0xa03ff) AM_RAM AM_BASE(&majtitle_rowscrollram)
+ AM_RANGE(0xa4000, 0xa4bff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2)
+ AM_RANGE(0xac000, 0xaffff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1)
+ AM_RANGE(0xb0000, 0xbffff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2) /* larger than the other games */
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xc8000, 0xc83ff) AM_RAM AM_BASE(&spriteram16_2)
+ AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xd0000, 0xd3fff) AM_RAM /* work RAM */
+ AM_RANGE(0xe0000, 0xe0001) AM_WRITE(m72_irq_line_w)
+ AM_RANGE(0xe4000, 0xe4001) AM_WRITE(MWA16_RAM) /* playfield enable? 1 during screen transitions, 0 otherwise */
+ AM_RANGE(0xec000, 0xec001) AM_WRITE(m72_dmaon_w)
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( hharry_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM
+ AM_RANGE(0xa0000, 0xa3fff) AM_RAM /* work RAM */
+ AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITE(MWA16_RAM) /* leftover from protection?? */
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2)
+ AM_RANGE(0xd0000, 0xd3fff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1)
+ AM_RANGE(0xd8000, 0xdbfff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2)
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( hharryu_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM
+ AM_RANGE(0xa0000, 0xa0bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xa8000, 0xa8bff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2)
+ AM_RANGE(0xb0000, 0xb0001) AM_WRITE(m72_irq_line_w)
+ AM_RANGE(0xbc000, 0xbc001) AM_WRITE(m72_dmaon_w)
+ AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITE(MWA16_RAM) /* leftover from protection?? */
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xd0000, 0xd3fff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1)
+ AM_RANGE(0xd4000, 0xd7fff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2)
+ AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( kengo_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x00000, 0x7ffff) AM_ROM
+ AM_RANGE(0xa0000, 0xa0bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xa8000, 0xa8bff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE(&paletteram16_2)
+ AM_RANGE(0xb0000, 0xb0001) AM_WRITE(m72_irq_line_w)
+AM_RANGE(0xb4000, 0xb4001) AM_WRITE(MWA16_NOP) /* ??? */
+ AM_RANGE(0xbc000, 0xbc001) AM_WRITE(m72_dmaon_w)
+ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0x80000, 0x83fff) AM_READWRITE(MRA16_RAM, m72_videoram1_w) AM_BASE(&m72_videoram1)
+ AM_RANGE(0x84000, 0x87fff) AM_READWRITE(MRA16_RAM, m72_videoram2_w) AM_BASE(&m72_videoram2)
+ AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( m72_portmap, ADDRESS_SPACE_IO, 16 )
+ AM_RANGE(0x00, 0x01) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x00, 0x01) AM_WRITE(m72_sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(m72_port02_w) /* coin counters, reset sound cpu, other stuff? */
+ AM_RANGE(0x04, 0x05) AM_WRITE(m72_dmaon_w)
+ AM_RANGE(0x06, 0x07) AM_WRITE(m72_irq_line_w)
+ AM_RANGE(0x40, 0x43) AM_WRITE(MWA16_NOP) /* Interrupt controller, only written to at bootup */
+ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(m72_scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(m72_scrollx2_w)
+/* { 0xc0, 0xc0 trigger sample, filled by init_ function */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rtype2_portmap, ADDRESS_SPACE_IO, 16 )
+ AM_RANGE(0x00, 0x01) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x00, 0x01) AM_WRITE(m72_sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w)
+ AM_RANGE(0x40, 0x43) AM_WRITE(MWA16_NOP) /* Interrupt controller, only written to at bootup */
+ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(m72_scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(m72_scrollx2_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( poundfor_portmap, ADDRESS_SPACE_IO, 16 )
+ AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x08, 0x0f) AM_READ(poundfor_trackball_r)
+ AM_RANGE(0x00, 0x01) AM_WRITE(m72_sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w)
+ AM_RANGE(0x40, 0x43) AM_WRITE(MWA16_NOP) /* Interrupt controller, only written to at bootup */
+ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(m72_scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(m72_scrollx2_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( majtitle_portmap, ADDRESS_SPACE_IO, 16 )
+ AM_RANGE(0x00, 0x01) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x00, 0x01) AM_WRITE(m72_sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w)
+ AM_RANGE(0x40, 0x43) AM_WRITE(MWA16_NOP) /* Interrupt controller, only written to at bootup */
+ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(m72_scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(m72_scrollx2_w)
+ AM_RANGE(0x8e, 0x8f) AM_WRITE(majtitle_gfx_ctrl_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( hharry_portmap, ADDRESS_SPACE_IO, 16 )
+ AM_RANGE(0x00, 0x01) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x00, 0x01) AM_WRITE(m72_sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w) /* coin counters, reset sound cpu, other stuff? */
+ AM_RANGE(0x04, 0x05) AM_WRITE(m72_dmaon_w)
+ AM_RANGE(0x06, 0x07) AM_WRITE(m72_irq_line_w)
+ AM_RANGE(0x40, 0x43) AM_WRITE(MWA16_NOP) /* Interrupt controller, only written to at bootup */
+ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(m72_scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(m72_scrollx2_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( kengo_portmap, ADDRESS_SPACE_IO, 16 )
+ AM_RANGE(0x00, 0x01) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x00, 0x01) AM_WRITE(m72_sound_command_w)
+ AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w)
+ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w)
+ AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w)
+ AM_RANGE(0x84, 0x85) AM_WRITE(m72_scrolly2_w)
+ AM_RANGE(0x86, 0x87) AM_WRITE(m72_scrollx2_w)
+//AM_RANGE(0x8c, 0x8f) AM_WRITE(MWA8_NOP) /* ??? */
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( sound_ram_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(&soundram)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_rom_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xefff) AM_ROM
+ AM_RANGE(0xf000, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_portmap, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x01, 0x01) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w)
+ AM_RANGE(0x02, 0x02) AM_READ(soundlatch_r)
+ AM_RANGE(0x06, 0x06) AM_WRITE(m72_sound_irq_ack_w)
+ AM_RANGE(0x82, 0x82) AM_WRITE(m72_sample_w)
+ AM_RANGE(0x84, 0x84) AM_READ(m72_sample_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rtype2_sound_portmap, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x01, 0x01) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w)
+ AM_RANGE(0x80, 0x80) AM_READ(soundlatch_r)
+ AM_RANGE(0x80, 0x81) AM_WRITE(rtype2_sample_addr_w)
+ AM_RANGE(0x82, 0x82) AM_WRITE(m72_sample_w)
+ AM_RANGE(0x83, 0x83) AM_WRITE(m72_sound_irq_ack_w)
+ AM_RANGE(0x84, 0x84) AM_READ(m72_sample_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( poundfor_sound_portmap, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x10, 0x13) AM_WRITE(poundfor_sample_addr_w)
+ AM_RANGE(0x40, 0x40) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x41, 0x41) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w)
+ AM_RANGE(0x42, 0x42) AM_READ(soundlatch_r)
+ AM_RANGE(0x42, 0x42) AM_WRITE(m72_sound_irq_ack_w)
+ADDRESS_MAP_END
+
+
+
+#define JOYSTICK_1 \
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY \
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY \
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY \
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+
+#define JOYSTICK_2 \
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL \
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL \
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL \
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+
+#define COIN_MODE_1 \
+ PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coinage ) ) \
+ PORT_DIPSETTING( 0x00a0, DEF_STR( 6C_1C ) ) \
+ PORT_DIPSETTING( 0x00b0, DEF_STR( 5C_1C ) ) \
+ PORT_DIPSETTING( 0x00c0, DEF_STR( 4C_1C ) ) \
+ PORT_DIPSETTING( 0x00d0, DEF_STR( 3C_1C ) ) \
+ PORT_DIPSETTING( 0x0010, DEF_STR( 8C_3C ) ) \
+ PORT_DIPSETTING( 0x00e0, DEF_STR( 2C_1C ) ) \
+ PORT_DIPSETTING( 0x0020, DEF_STR( 5C_3C ) ) \
+ PORT_DIPSETTING( 0x0030, DEF_STR( 3C_2C ) ) \
+ PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) ) \
+ PORT_DIPSETTING( 0x0040, DEF_STR( 2C_3C ) ) \
+ PORT_DIPSETTING( 0x0090, DEF_STR( 1C_2C ) ) \
+ PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) \
+ PORT_DIPSETTING( 0x0070, DEF_STR( 1C_4C ) ) \
+ PORT_DIPSETTING( 0x0060, DEF_STR( 1C_5C ) ) \
+ PORT_DIPSETTING( 0x0050, DEF_STR( 1C_6C ) ) \
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+
+#define COIN_MODE_2 \
+ PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) \
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) \
+ PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) \
+ PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) \
+ PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) \
+ PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) \
+ PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_2C ) ) \
+ PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) \
+ PORT_DIPSETTING( 0x0040, DEF_STR( 1C_5C ) ) \
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
+
+
+static INPUT_PORTS_START( rtype )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x0000, "50K 150K 250K 400K 600K" )
+ PORT_DIPSETTING( 0x0008, "100K 200K 350K 500K 700K" )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Yes ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "Invulnerability" )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+/* identical but Demo Sounds is inverted */
+static INPUT_PORTS_START( rtypep )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x0000, "50K 150K 250K 400K 600K" )
+ PORT_DIPSETTING( 0x0008, "100K 200K 350K 500K 700K" )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Yes ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "Invulnerability" )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( bchopper )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0000, "1" )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x0008, "80K 200K 350K" )
+ PORT_DIPSETTING( 0x0000, "100K 250K 400K" )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Yes ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "Invulnerability" )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( nspirit )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Yes ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "Invulnerability" )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( imgfight )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hardest ) )
+ PORT_DIPSETTING( 0x0000, "Debug Mode 2lap" )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( loht )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0000, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0002, "4" )
+ PORT_DIPSETTING( 0x0001, "5" )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Hardest ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "Invulnerability" )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( xmultipl )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Very_Easy ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0008, "1" )
+ PORT_DIPSETTING( 0x0004, "2" )
+ PORT_DIPSETTING( 0x000c, "3" )
+ PORT_DIPSETTING( 0x0000, "4" )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, "Upright (single)" ) PORT_CONDITION("DSW1", 0x1000, PORTCOND_NOTEQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) ) PORT_CONDITION("DSW1", 0x1000, PORTCOND_NOTEQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0000, "Upright (double) On" ) PORT_CONDITION("DSW1", 0x1000, PORTCOND_EQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0200, "Upright (double) Off" ) PORT_CONDITION("DSW1", 0x1000, PORTCOND_EQUALS, 0x0000)
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, "Upright (double) Mode" )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Yes ) )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( dbreed )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x20 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Easy ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Yes ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( rtype2 )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x0020 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ /* Coin Mode 1 */
+ COIN_MODE_1
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Coin Mode" )
+ PORT_DIPSETTING( 0x0400, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x1800, 0x1000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0000, "Upright (2P)" )
+ PORT_DIPSETTING( 0x1800, DEF_STR( Cocktail ) )
+ /* In stop mode, press 2 to stop and 1 to restart */
+ PORT_DIPNAME( 0x2000, 0x2000, "Stop Mode" )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( hharry )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x0020 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Easy ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Continue Limit" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0600, 0x0400, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0000, "Upright (2P)" )
+ PORT_DIPSETTING( 0x0600, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0800, 0x0800, "Coin Mode" )
+ PORT_DIPSETTING( 0x0800, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ /* Coin Mode 1 */
+ PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x1000, "2 Coins/1 Credit, 1 Coin/Continue" )
+ PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( 4C_3C ) )
+ PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ /* Coin mode 2, not supported yet */
+ // COIN_MODE_2
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( poundfor )
+ PORT_START
+ PORT_BIT( 0x001f, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* high bits of trackball X */
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x1f00, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* high bits of trackball X */
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x0020 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, "Round Time" )
+ PORT_DIPSETTING( 0x0002, "60" )
+ PORT_DIPSETTING( 0x0003, "90" )
+ PORT_DIPSETTING( 0x0001, "120" )
+ PORT_DIPSETTING( 0x0000, "150" )
+ PORT_DIPNAME( 0x0004, 0x0004, "Matches/Credit (2P)" )
+ PORT_DIPSETTING( 0x0004, "1" )
+ PORT_DIPSETTING( 0x0000, "2" )
+ PORT_DIPNAME( 0x0008, 0x0008, "Rounds/Match" )
+ PORT_DIPSETTING( 0x0008, "2" )
+ PORT_DIPSETTING( 0x0000, "3" )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Trackball Size" )
+ PORT_DIPSETTING( 0x0020, "Small" )
+ PORT_DIPSETTING( 0x0000, "Large" )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0600, 0x0400, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, "Upright (2P)" )
+ PORT_DIPSETTING( 0x0600, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0800, 0x0800, "Coin Mode" )
+ PORT_DIPSETTING( 0x0800, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+
+ /* Coin Mode 1 */
+ PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( 4C_3C ) )
+ PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x1000, "1 Coin/1 Credit, 1 Coin/Continue" )
+ PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+
+ PORT_START
+ PORT_BIT( 0xffff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(30) PORT_PLAYER(1)
+
+ PORT_START
+ PORT_BIT( 0xffff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(30) PORT_REVERSE PORT_PLAYER(1)
+
+ PORT_START
+ PORT_BIT( 0xffff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(30) PORT_REVERSE PORT_PLAYER(2)
+
+ PORT_START
+ PORT_BIT( 0xffff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(30) PORT_PLAYER(2)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( airduel )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x0020 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Easy ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ PORT_BIT( 0x0030, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0600, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x0800, 0x0800, "Coin Mode" )
+ PORT_DIPSETTING( 0x0800, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ /* Coin Mode 1 */
+ PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) )
+// PORT_DIPSETTING( 0x1000, DEF_STR( Free-Play ) ) /* another free play */
+ PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( 4C_3C ) )
+ PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ /* Coin Mode 2, not supported yet */
+ // COIN_MODE_2
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( gallop )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x0020 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Easy ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0600, 0x0000, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x0200, "Upright (2P)" )
+ PORT_DIPSETTING( 0x0600, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0800, 0x0800, "Coin Mode" )
+ PORT_DIPSETTING( 0x0800, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ /* Coin Mode 1 */
+ PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x1000, "2 Coins/1 Credit, 1 Coin/Continue" )
+ PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( 4C_3C ) )
+ PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ /* Coin mode 2, not supported yet */
+ // COIN_MODE_2
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( kengo )
+ PORT_START
+ JOYSTICK_1
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ JOYSTICK_2
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE ) /* 0x0020 is another test mode */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sprite DMA complete */
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0002, "2" )
+ PORT_DIPSETTING( 0x0003, "3" )
+ PORT_DIPSETTING( 0x0001, "4" )
+ PORT_DIPSETTING( 0x0000, "5" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Easy ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, "Coin Mode" )
+ PORT_DIPSETTING( 0x0800, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ /* Coin Mode 1 */
+ PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x1000, "2 Coins/1 Credit, 1 Coin/Continue" )
+ PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( 4C_3C ) )
+ PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ /* Coin mode 2, not supported yet */
+ // COIN_MODE_2
+INPUT_PORTS_END
+
+
+
+static const gfx_layout tilelayout =
+{
+ 8,8, /* 8*8 characters */
+ RGN_FRAC(1,4), /* NUM characters */
+ 4, /* 4 bits per pixel */
+ { RGN_FRAC(3,4), RGN_FRAC(2,4), RGN_FRAC(1,4), RGN_FRAC(0,4) },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8 /* every char takes 8 consecutive bytes */
+};
+
+static const gfx_layout spritelayout =
+{
+ 16,16, /* 16*16 sprites */
+ RGN_FRAC(1,4), /* NUM characters */
+ 4, /* 4 bits per pixel */
+ { RGN_FRAC(3,4), RGN_FRAC(2,4), RGN_FRAC(1,4), RGN_FRAC(0,4) },
+ { 0, 1, 2, 3, 4, 5, 6, 7,
+ 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
+ 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
+ 32*8 /* every sprite takes 32 consecutive bytes */
+};
+
+static GFXDECODE_START( m72 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, spritelayout, 0, 16 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, tilelayout, 256, 16 )
+ GFXDECODE_ENTRY( REGION_GFX3, 0, tilelayout, 256, 16 )
+GFXDECODE_END
+
+static GFXDECODE_START( rtype2 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, spritelayout, 0, 16 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, tilelayout, 256, 16 )
+GFXDECODE_END
+
+static GFXDECODE_START( majtitle )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, spritelayout, 0, 16 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, tilelayout, 256, 16 )
+ GFXDECODE_ENTRY( REGION_GFX3, 0, spritelayout, 0, 16 )
+GFXDECODE_END
+
+
+
+static struct YM2151interface ym2151_interface =
+{
+ m72_ym2151_irq_handler
+};
+
+
+
+static MACHINE_DRIVER_START( rtype )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(rtype_map,0)
+ MDRV_CPU_IO_MAP(m72_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_ram_map,0)
+ MDRV_CPU_IO_MAP(sound_portmap,0)
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(m72)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(m72)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(m72)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+MACHINE_DRIVER_END
+
+
+static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
+ADDRESS_MAP_END
+
+static WRITE8_HANDLER( m72_mcu_data_w )
+{
+ if (offset&1) protection_ram[offset/2] = (protection_ram[offset/2] & 0x00ff) | (data << 8);
+ else protection_ram[offset/2] = (protection_ram[offset/2] & 0xff00) | (data&0xff);
+}
+
+static READ8_HANDLER(m72_mcu_data_r )
+{
+ UINT8 ret;
+
+ if (offset&1) ret = (protection_ram[offset/2] & 0xff00)>>8;
+ else ret =(protection_ram[offset/2] & 0x00ff);
+
+// printf("ret %02x\n",ret);
+ return ret;
+}
+
+static ADDRESS_MAP_START( mcu_data_map, ADDRESS_SPACE_DATA, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
+ /* shared at b0000 - b0fff on the main cpu */
+ AM_RANGE(0xc000, 0xcfff) AM_READWRITE(m72_mcu_data_r,m72_mcu_data_w )
+ADDRESS_MAP_END
+
+
+static MACHINE_DRIVER_START( m72 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(m72_map,0)
+ MDRV_CPU_IO_MAP(m72_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_ram_map,0)
+ MDRV_CPU_IO_MAP(sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(fake_nmi,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(m72)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(m72)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(m72)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( m72_8751 )
+ MDRV_IMPORT_FROM(m72)
+
+ MDRV_CPU_ADD(I8751, 8000000)
+ MDRV_CPU_PROGRAM_MAP(mcu_map,0)
+ MDRV_CPU_DATA_MAP(mcu_data_map,0)
+ MDRV_CPU_VBLANK_INT(irq0_line_pulse,1)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( dkgenm72 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(m72_map,0)
+ MDRV_CPU_IO_MAP(m72_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_ram_map,0)
+ MDRV_CPU_IO_MAP(sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(fake_nmi,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(xmultipl)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(m72)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(m72)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( xmultipl )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(xmultipl_map,0)
+ MDRV_CPU_IO_MAP(m72_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_ram_map,0)
+ MDRV_CPU_IO_MAP(sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(xmultipl)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(m72)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(m72)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( dbreed )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(dbreed_map,0)
+ MDRV_CPU_IO_MAP(hharry_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(rtype2_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_MACHINE_RESET(xmultipl)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(rtype2)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(hharry)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( dbreed72 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(dbreed72_map,0)
+ MDRV_CPU_IO_MAP(m72_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_ram_map,0)
+ MDRV_CPU_IO_MAP(sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_MACHINE_RESET(xmultipl)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(m72)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(m72)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( rtype2 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(rtype2_map,0)
+ MDRV_CPU_IO_MAP(rtype2_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(rtype2_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(m72)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(rtype2)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(rtype2)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( majtitle )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(majtitle_map,0)
+ MDRV_CPU_IO_MAP(majtitle_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(rtype2_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(m72)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(majtitle)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(majtitle)
+ MDRV_VIDEO_UPDATE(majtitle)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( hharry )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(hharry_map,0)
+ MDRV_CPU_IO_MAP(hharry_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(rtype2_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(xmultipl)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(rtype2)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(hharry)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( hharryu )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(hharryu_map,0)
+ MDRV_CPU_IO_MAP(rtype2_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(rtype2_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(xmultipl)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(rtype2)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(rtype2)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( poundfor )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(rtype2_map,0)
+ MDRV_CPU_IO_MAP(poundfor_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(poundfor_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(fake_nmi,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_MACHINE_RESET(m72)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(rtype2)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(poundfor)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( kengo )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(V30,32000000/4) /* 16 MHz external freq (8MHz internal) */
+ MDRV_CPU_PROGRAM_MAP(kengo_map,0)
+ MDRV_CPU_IO_MAP(kengo_portmap,0)
+ MDRV_CPU_VBLANK_INT(m72_interrupt,256)
+
+ MDRV_CPU_ADD(Z80, 3579545)
+ MDRV_CPU_PROGRAM_MAP(sound_rom_map,0)
+ MDRV_CPU_IO_MAP(rtype2_sound_portmap,0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse,128) /* clocked by V1? (Vigilante) */
+ /* IRQs are generated by main Z80 and YM2151 */
+ MDRV_SCREEN_REFRESH_RATE(55)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_MACHINE_RESET(kengo)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(512, 512)
+ MDRV_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 16*8, (64-16)*8-1 )
+ MDRV_GFXDECODE(rtype2)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_VIDEO_START(poundfor)
+ MDRV_VIDEO_UPDATE(m72)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YM2151, 3579545)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.40)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.40)
+MACHINE_DRIVER_END
+
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( rtype )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD16_BYTE( "rt_r-h0-b.1b", 0x00001, 0x10000, CRC(591c7754) SHA1(0b9d5474bc5963224923126cf84d74a39b8270cc) )
+ ROM_LOAD16_BYTE( "rt_r-l0-b.3b", 0x00000, 0x10000, CRC(a1928df0) SHA1(3001c1b87cd1d441ba1226fb5b9dd6268458c0e8) )
+ ROM_LOAD16_BYTE( "rt_r-h1-b.1c", 0x20001, 0x10000, CRC(a9d71eca) SHA1(008d1dc289df2ae2ba8f93d319c2b2c108cb9b89) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "rt_r-l1-b.3c", 0x20000, 0x10000, CRC(0df3573d) SHA1(0144c846fd0bdb3e4d790f6cb7bb64829e931b76) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD( "rt_r-00.1h", 0x00000, 0x10000, CRC(dad53bc0) SHA1(1e3bc498861946278a0b1fe24259f5d224e265d7) ) /* sprites */
+ ROM_LOAD( "rt_r-01.1j", 0x10000, 0x08000, CRC(5e441e7f) SHA1(6741eb7f2d9d985b5a89eefc73ea44c3e38de6f7) )
+ ROM_RELOAD( 0x18000, 0x08000 )
+ ROM_LOAD( "rt_r-10.1k", 0x20000, 0x10000, CRC(d6a66298) SHA1(d2873d05aa3b257e7699c188880ac3daad672fa5) )
+ ROM_LOAD( "rt_r-11.1l", 0x30000, 0x08000, CRC(791df4f8) SHA1(5239a97222212ac9c019177771cb2b5096b7bc17) )
+ ROM_RELOAD( 0x38000, 0x08000 )
+ ROM_LOAD( "rt_r-20.3h", 0x40000, 0x10000, CRC(fc247c8a) SHA1(01cf0a60f47fa5e2ed430a3f075e69e6cb762a48) )
+ ROM_LOAD( "rt_r-21.3j", 0x50000, 0x08000, CRC(ed793841) SHA1(7e55a9a11fcd989db39bce6be48821b747c7d97f) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_LOAD( "rt_r-30.3k", 0x60000, 0x10000, CRC(eb02a1cb) SHA1(60a394ab53afdcbbf9e88083b8dbe8c897170d77) )
+ ROM_LOAD( "rt_r-31.3l", 0x70000, 0x08000, CRC(8558355d) SHA1(b5467d1f22f6e5f90c5d8a8ac2d55974f287d589) )
+ ROM_RELOAD( 0x78000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-a0.3c", 0x00000, 0x08000, CRC(4e212fb0) SHA1(687061ecade2ebd0bd1343c9c4a831791853f79c) ) /* tiles #1 */
+ ROM_LOAD( "rt_b-a1.3d", 0x08000, 0x08000, CRC(8a65bdff) SHA1(130bf6af521f13247a739a95eab4bdaa24b2ac10) )
+ ROM_LOAD( "rt_b-a2.3a", 0x10000, 0x08000, CRC(5a4ae5b9) SHA1(95c3b64f50e6f673b2bf9b40642c152da5009d25) )
+ ROM_LOAD( "rt_b-a3.3e", 0x18000, 0x08000, CRC(73327606) SHA1(9529ecdedd30e2a0400fb1083117992cc18b5158) )
+
+ ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-b0.3j", 0x00000, 0x08000, CRC(a7b17491) SHA1(5b390770e56ba2d35e108534d7eda8dca996fdf7) ) /* tiles #2 */
+ ROM_LOAD( "rt_b-b1.3k", 0x08000, 0x08000, CRC(b9709686) SHA1(700905a3e9661e0874939f54da2909e1396ce596) )
+ ROM_LOAD( "rt_b-b2.3h", 0x10000, 0x08000, CRC(433b229a) SHA1(14222eaa3e67e5a7f80eafcf22bac4eb2d485a9a) )
+ ROM_LOAD( "rt_b-b3.3f", 0x18000, 0x08000, CRC(ad89b072) SHA1(e2683d0e7415f3abd147e518bf6c87e44744cd4f) )
+ROM_END
+
+ROM_START( rtypej )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD16_BYTE( "rt_r-h0-.1b", 0x00001, 0x10000, CRC(c2940df2) SHA1(cbccd205ef81a0e39990a34d46e3f7d52b62e385) )
+ ROM_LOAD16_BYTE( "rt_r-l0-.3b", 0x00000, 0x10000, CRC(858cc0f6) SHA1(7a256fe3aa3a96e161dd485a90b18c421b61458b) )
+ ROM_LOAD16_BYTE( "rt_r-h1-.1c", 0x20001, 0x10000, CRC(5bcededa) SHA1(4ada3fd207fa57751f8e3d885bc91b374e27035d) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "rt_r-l1-.3c", 0x20000, 0x10000, CRC(4821141c) SHA1(df6cf04c3ecd04b6f27a96871848904575414dae) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD( "rt_r-00.1h", 0x00000, 0x10000, CRC(dad53bc0) SHA1(1e3bc498861946278a0b1fe24259f5d224e265d7) ) /* sprites */
+ ROM_LOAD( "rt_r-01.1j", 0x10000, 0x08000, CRC(5e441e7f) SHA1(6741eb7f2d9d985b5a89eefc73ea44c3e38de6f7) )
+ ROM_RELOAD( 0x18000, 0x08000 )
+ ROM_LOAD( "rt_r-10.1k", 0x20000, 0x10000, CRC(d6a66298) SHA1(d2873d05aa3b257e7699c188880ac3daad672fa5) )
+ ROM_LOAD( "rt_r-11.1l", 0x30000, 0x08000, CRC(791df4f8) SHA1(5239a97222212ac9c019177771cb2b5096b7bc17) )
+ ROM_RELOAD( 0x38000, 0x08000 )
+ ROM_LOAD( "rt_r-20.3h", 0x40000, 0x10000, CRC(fc247c8a) SHA1(01cf0a60f47fa5e2ed430a3f075e69e6cb762a48) )
+ ROM_LOAD( "rt_r-21.3j", 0x50000, 0x08000, CRC(ed793841) SHA1(7e55a9a11fcd989db39bce6be48821b747c7d97f) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_LOAD( "rt_r-30.3k", 0x60000, 0x10000, CRC(eb02a1cb) SHA1(60a394ab53afdcbbf9e88083b8dbe8c897170d77) )
+ ROM_LOAD( "rt_r-31.3l", 0x70000, 0x08000, CRC(8558355d) SHA1(b5467d1f22f6e5f90c5d8a8ac2d55974f287d589) )
+ ROM_RELOAD( 0x78000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-a0.3c", 0x00000, 0x08000, CRC(4e212fb0) SHA1(687061ecade2ebd0bd1343c9c4a831791853f79c) ) /* tiles #1 */
+ ROM_LOAD( "rt_b-a1.3d", 0x08000, 0x08000, CRC(8a65bdff) SHA1(130bf6af521f13247a739a95eab4bdaa24b2ac10) )
+ ROM_LOAD( "rt_b-a2.3a", 0x10000, 0x08000, CRC(5a4ae5b9) SHA1(95c3b64f50e6f673b2bf9b40642c152da5009d25) )
+ ROM_LOAD( "rt_b-a3.3e", 0x18000, 0x08000, CRC(73327606) SHA1(9529ecdedd30e2a0400fb1083117992cc18b5158) )
+
+ ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-b0.3j", 0x00000, 0x08000, CRC(a7b17491) SHA1(5b390770e56ba2d35e108534d7eda8dca996fdf7) ) /* tiles #2 */
+ ROM_LOAD( "rt_b-b1.3k", 0x08000, 0x08000, CRC(b9709686) SHA1(700905a3e9661e0874939f54da2909e1396ce596) )
+ ROM_LOAD( "rt_b-b2.3h", 0x10000, 0x08000, CRC(433b229a) SHA1(14222eaa3e67e5a7f80eafcf22bac4eb2d485a9a) )
+ ROM_LOAD( "rt_b-b3.3f", 0x18000, 0x08000, CRC(ad89b072) SHA1(e2683d0e7415f3abd147e518bf6c87e44744cd4f) )
+ROM_END
+
+ROM_START( rtypejp )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD16_BYTE( "db_b1.bin", 0x00001, 0x10000, CRC(c1865141) SHA1(3302b6529aa903d81eb2196d745eb4f7f8316857) )
+ ROM_LOAD16_BYTE( "db_a1.bin", 0x00000, 0x10000, CRC(5ad2bd90) SHA1(0937dbbdf0cbce2e81cecf4d770bbd8c6bd82801) )
+ ROM_LOAD16_BYTE( "db_b2.bin", 0x20001, 0x10000, CRC(b4f6407e) SHA1(4a00d8e104c580900b4feb318dd162b77b71d0a5) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "db_a2.bin", 0x20000, 0x10000, CRC(6098d86f) SHA1(c6c9c1c2c30d5f190c40e000004bd21606efb8b0) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD( "rt_r-00.1h", 0x00000, 0x10000, CRC(dad53bc0) SHA1(1e3bc498861946278a0b1fe24259f5d224e265d7) ) /* sprites */
+ ROM_LOAD( "rt_r-01.1j", 0x10000, 0x08000, CRC(5e441e7f) SHA1(6741eb7f2d9d985b5a89eefc73ea44c3e38de6f7) )
+ ROM_RELOAD( 0x18000, 0x08000 )
+ ROM_LOAD( "rt_r-10.1k", 0x20000, 0x10000, CRC(d6a66298) SHA1(d2873d05aa3b257e7699c188880ac3daad672fa5) )
+ ROM_LOAD( "rt_r-11.1l", 0x30000, 0x08000, CRC(791df4f8) SHA1(5239a97222212ac9c019177771cb2b5096b7bc17) )
+ ROM_RELOAD( 0x38000, 0x08000 )
+ ROM_LOAD( "rt_r-20.3h", 0x40000, 0x10000, CRC(fc247c8a) SHA1(01cf0a60f47fa5e2ed430a3f075e69e6cb762a48) )
+ ROM_LOAD( "rt_r-21.3j", 0x50000, 0x08000, CRC(ed793841) SHA1(7e55a9a11fcd989db39bce6be48821b747c7d97f) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_LOAD( "rt_r-30.3k", 0x60000, 0x10000, CRC(eb02a1cb) SHA1(60a394ab53afdcbbf9e88083b8dbe8c897170d77) )
+ ROM_LOAD( "rt_r-31.3l", 0x70000, 0x08000, CRC(8558355d) SHA1(b5467d1f22f6e5f90c5d8a8ac2d55974f287d589) )
+ ROM_RELOAD( 0x78000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-a0.3c", 0x00000, 0x08000, CRC(4e212fb0) SHA1(687061ecade2ebd0bd1343c9c4a831791853f79c) ) /* tiles #1 */
+ ROM_LOAD( "rt_b-a1.3d", 0x08000, 0x08000, CRC(8a65bdff) SHA1(130bf6af521f13247a739a95eab4bdaa24b2ac10) )
+ ROM_LOAD( "rt_b-a2.3a", 0x10000, 0x08000, CRC(5a4ae5b9) SHA1(95c3b64f50e6f673b2bf9b40642c152da5009d25) )
+ ROM_LOAD( "rt_b-a3.3e", 0x18000, 0x08000, CRC(73327606) SHA1(9529ecdedd30e2a0400fb1083117992cc18b5158) )
+
+ ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-b0.3j", 0x00000, 0x08000, CRC(a7b17491) SHA1(5b390770e56ba2d35e108534d7eda8dca996fdf7) ) /* tiles #2 */
+ ROM_LOAD( "rt_b-b1.3k", 0x08000, 0x08000, CRC(b9709686) SHA1(700905a3e9661e0874939f54da2909e1396ce596) )
+ ROM_LOAD( "rt_b-b2.3h", 0x10000, 0x08000, CRC(433b229a) SHA1(14222eaa3e67e5a7f80eafcf22bac4eb2d485a9a) )
+ ROM_LOAD( "rt_b-b3.3f", 0x18000, 0x08000, CRC(ad89b072) SHA1(e2683d0e7415f3abd147e518bf6c87e44744cd4f) )
+ROM_END
+
+ROM_START( rtypeu )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD16_BYTE( "rt_r-h0-a.1b", 0x00001, 0x10000, CRC(36008a4e) SHA1(832006cb14a34e1671e305cc8ae606c3c6185a6a) )
+ ROM_LOAD16_BYTE( "rt_r-l0-a.3b", 0x00000, 0x10000, CRC(4aaa668e) SHA1(87059460b59f43f2ca8cd959d76f721facd9de96) )
+ ROM_LOAD16_BYTE( "rt_r-h1-a.1c", 0x20001, 0x10000, CRC(7ebb2a53) SHA1(1466df19888c3374847eb77f702060647e49d6ad) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "rt_r-l1-a.3c", 0x20000, 0x10000, CRC(c28b103b) SHA1(f294a23c3917b97812eb4c7f3a99253fd0cbb7ea) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Roms located on the M72-ROM-C rom board */
+ ROM_LOAD( "rt_r-00.1h", 0x00000, 0x10000, CRC(dad53bc0) SHA1(1e3bc498861946278a0b1fe24259f5d224e265d7) ) /* sprites */
+ ROM_LOAD( "rt_r-01.1j", 0x10000, 0x08000, CRC(5e441e7f) SHA1(6741eb7f2d9d985b5a89eefc73ea44c3e38de6f7) )
+ ROM_RELOAD( 0x18000, 0x08000 )
+ ROM_LOAD( "rt_r-10.1k", 0x20000, 0x10000, CRC(d6a66298) SHA1(d2873d05aa3b257e7699c188880ac3daad672fa5) )
+ ROM_LOAD( "rt_r-11.1l", 0x30000, 0x08000, CRC(791df4f8) SHA1(5239a97222212ac9c019177771cb2b5096b7bc17) )
+ ROM_RELOAD( 0x38000, 0x08000 )
+ ROM_LOAD( "rt_r-20.3h", 0x40000, 0x10000, CRC(fc247c8a) SHA1(01cf0a60f47fa5e2ed430a3f075e69e6cb762a48) )
+ ROM_LOAD( "rt_r-21.3j", 0x50000, 0x08000, CRC(ed793841) SHA1(7e55a9a11fcd989db39bce6be48821b747c7d97f) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_LOAD( "rt_r-30.3k", 0x60000, 0x10000, CRC(eb02a1cb) SHA1(60a394ab53afdcbbf9e88083b8dbe8c897170d77) )
+ ROM_LOAD( "rt_r-31.3l", 0x70000, 0x08000, CRC(8558355d) SHA1(b5467d1f22f6e5f90c5d8a8ac2d55974f287d589) )
+ ROM_RELOAD( 0x78000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-a0.3c", 0x00000, 0x08000, CRC(4e212fb0) SHA1(687061ecade2ebd0bd1343c9c4a831791853f79c) ) /* tiles #1 */
+ ROM_LOAD( "rt_b-a1.3d", 0x08000, 0x08000, CRC(8a65bdff) SHA1(130bf6af521f13247a739a95eab4bdaa24b2ac10) )
+ ROM_LOAD( "rt_b-a2.3a", 0x10000, 0x08000, CRC(5a4ae5b9) SHA1(95c3b64f50e6f673b2bf9b40642c152da5009d25) )
+ ROM_LOAD( "rt_b-a3.3e", 0x18000, 0x08000, CRC(73327606) SHA1(9529ecdedd30e2a0400fb1083117992cc18b5158) )
+
+ ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Roms located on the M72-B-D rom board */
+ ROM_LOAD( "rt_b-b0.3j", 0x00000, 0x08000, CRC(a7b17491) SHA1(5b390770e56ba2d35e108534d7eda8dca996fdf7) ) /* tiles #2 */
+ ROM_LOAD( "rt_b-b1.3k", 0x08000, 0x08000, CRC(b9709686) SHA1(700905a3e9661e0874939f54da2909e1396ce596) )
+ ROM_LOAD( "rt_b-b2.3h", 0x10000, 0x08000, CRC(433b229a) SHA1(14222eaa3e67e5a7f80eafcf22bac4eb2d485a9a) )
+ ROM_LOAD( "rt_b-b3.3f", 0x18000, 0x08000, CRC(ad89b072) SHA1(e2683d0e7415f3abd147e518bf6c87e44744cd4f) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 ) /* Located on M72-A-C CPU/Sound board */
+ ROM_LOAD( "m72_a-8l-.ic66", 0x0000, 0x0100, CRC(b460c438) SHA1(00e20cf754b6fd5138ee4d2f6ec28dff9e292fe6) ) /* TBP24S10 */
+ ROM_LOAD( "m72_a-9l-.ic75", 0x0100, 0x0100, CRC(a4f2c4bc) SHA1(f13b0a4b52dcc6704063b676f09d83dcba170133) ) /* TBP24S10 */
+
+ ROM_REGION( 0x0003, REGION_PLDS, 0 )
+ /* Located on M72-ROM-C rom board */
+ ROM_LOAD( "m72_r-3a-.bin", 0x0000, 0x0001, NO_DUMP ) /* PAL16L8 at 3A */
+ /* Located on M72-A-C CPU/Sound board */
+ ROM_LOAD( "m72_a-3d-.bin", 0x0000, 0x0001, NO_DUMP ) /* PAL16L8 at IC11 */
+ ROM_LOAD( "m72_a-4d-.bin", 0x0000, 0x0001, NO_DUMP ) /* PAL16L8 at IC19 */
+ROM_END
+
+ROM_START( bchopper )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "c-h0-b.rom", 0x00001, 0x10000, CRC(f2feab16) SHA1(03ee874658e0f59957f8425e1ebf9c938737cc19) )
+ ROM_LOAD16_BYTE( "c-l0-b.rom", 0x00000, 0x10000, CRC(9f887096) SHA1(4f41ef29580fc026ea91d110ec6b2e6af83dbd9a) )
+ ROM_LOAD16_BYTE( "c-h1-b.rom", 0x20001, 0x10000, CRC(a995d64f) SHA1(43eb2eb11e6875298a6ef2b18f0f5e587f1bba16) )
+ ROM_LOAD16_BYTE( "c-l1-b.rom", 0x20000, 0x10000, CRC(41dda999) SHA1(4d07a399aaf16bc37b5488e3e4bb60e78811a099) )
+ ROM_LOAD16_BYTE( "c-h3-b.rom", 0x60001, 0x10000, CRC(ab9451ca) SHA1(ec0e0ad592d8b21bb4e6927a452e3b7964cda015) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "c-l3-b.rom", 0x60000, 0x10000, CRC(11562221) SHA1(a2f136a487fb6f30350e8d1e26c0729eb0686c7d) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "bchopper_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "c-00-a.rom", 0x00000, 0x10000, CRC(f6e6e660) SHA1(e066e5ed37719cf2b6fd36e0117f11325bb06f9c) ) /* sprites */
+ ROM_LOAD( "c-01-b.rom", 0x10000, 0x10000, CRC(708cdd37) SHA1(24f3fcd381422f0d75410c2af7a56744e3b4a699) )
+ ROM_LOAD( "c-10-a.rom", 0x20000, 0x10000, CRC(292c8520) SHA1(c552090d295ee1c1ca611b0cddee356e509e2045) )
+ ROM_LOAD( "c-11-b.rom", 0x30000, 0x10000, CRC(20904cf3) SHA1(71fe505f2da53c2eb445b7b758d257d6af42e6f1) )
+ ROM_LOAD( "c-20-a.rom", 0x40000, 0x10000, CRC(1ab50c23) SHA1(43e2f11e5bbf157c47764e04e372f40ed68bab59) )
+ ROM_LOAD( "c-21-b.rom", 0x50000, 0x10000, CRC(c823d34c) SHA1(47383214b6a60e0b1b70208b00c291f8ffed36bc) )
+ ROM_LOAD( "c-30-a.rom", 0x60000, 0x10000, CRC(11f6c56b) SHA1(39a2a674698b044c84fea65ae41a9e003a50b639) )
+ ROM_LOAD( "c-31-b.rom", 0x70000, 0x10000, CRC(23134ec5) SHA1(43453f8a13b51310e04729dc828d391ca9c04da2) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "b-a0-b.rom", 0x00000, 0x10000, CRC(e46ed7bf) SHA1(75abb5f40629f7c40a610a44e068b6c4e3a5126e) ) /* tiles #1 */
+ ROM_LOAD( "b-a1-b.rom", 0x10000, 0x10000, CRC(590605ff) SHA1(fbb5c0cebd28b08d4ce39db4055d6343620e0f1c) )
+ ROM_LOAD( "b-a2-b.rom", 0x20000, 0x10000, CRC(f8158226) SHA1(bb3a8686cd89bb8265b6b9e03682cc0bf6533793) )
+ ROM_LOAD( "b-a3-b.rom", 0x30000, 0x10000, CRC(0f07b9b7) SHA1(63dbec17097f07eb39299372b736fbbc1b11b65e) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "b-b0-.rom", 0x00000, 0x10000, CRC(b5b95776) SHA1(4685b56071b916ce712c45f24da8068dd7e40ed1) ) /* tiles #2 */
+ ROM_LOAD( "b-b1-.rom", 0x10000, 0x10000, CRC(74ca16ee) SHA1(7984bc9a0b46e1b4a8ecac7528d57606305aad73) )
+ ROM_LOAD( "b-b2-.rom", 0x20000, 0x10000, CRC(b82cca04) SHA1(c12b95be311205181b01d15021bcf9f01ed3e0a3) )
+ ROM_LOAD( "b-b3-.rom", 0x30000, 0x10000, CRC(a7afc920) SHA1(92c75463ada39184e731b82ef2883ae6f1f67482) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "c-v0-b.rom", 0x00000, 0x10000, CRC(d0c27e58) SHA1(fec76217cc0c04c723989c3ec127a2bd33d64c60) )
+ROM_END
+
+ROM_START( mrheli )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "mh-c-h0.bin", 0x00001, 0x10000, CRC(e2ca5646) SHA1(9f4fe2f0a45233325bd9336cabb925a1f625453b) )
+ ROM_LOAD16_BYTE( "mh-c-l0.bin", 0x00000, 0x10000, CRC(643e23cd) SHA1(66998a6dfc7ef538540986b61d2414a5ef250d0d) )
+ ROM_LOAD16_BYTE( "mh-c-h1.bin", 0x20001, 0x10000, CRC(8974e84d) SHA1(39e05c80e805dde45f2fc5fc429b75f9b599089c) )
+ ROM_LOAD16_BYTE( "mh-c-l1.bin", 0x20000, 0x10000, CRC(5f8bda69) SHA1(48629d617bd48c9de9c6a567fb203258a56fdbbd) )
+ ROM_LOAD16_BYTE( "mh-c-h3.bin", 0x60001, 0x10000, CRC(143f596e) SHA1(f9d444eebcd53dac925d14b7a2858803b7fd9ce2) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "mh-c-l3.bin", 0x60000, 0x10000, CRC(c0982536) SHA1(45399f8d0577c6e2a277a69303954ce5d2de7c07) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "mrheli_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "mh-c-00.bin", 0x00000, 0x20000, CRC(dec4e121) SHA1(92169b523f1600e994e016dc1959a52958e1d89d) ) /* sprites */
+ ROM_LOAD( "mh-c-10.bin", 0x20000, 0x20000, CRC(7aaa151e) SHA1(efd980bb2eed7084354b7a4aa2f733cd2f876741) )
+ ROM_LOAD( "mh-c-20.bin", 0x40000, 0x20000, CRC(eae0de74) SHA1(3a2469c0eeb18131f989807afb50228f57ccea30) )
+ ROM_LOAD( "mh-c-30.bin", 0x60000, 0x20000, CRC(01d5052f) SHA1(5d5e70913bb7af48193c70209595f27a64fa6cac) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "mh-b-a0.bin", 0x00000, 0x10000, CRC(6a0db256) SHA1(fa3a2dc03da5bbe06a9c9b3d4ed4fddb47c469ac) ) /* tiles #1 */
+ ROM_LOAD( "mh-b-a1.bin", 0x10000, 0x10000, CRC(14ec9795) SHA1(4842e076115efe9daf00dab8f61516d28c19baae) )
+ ROM_LOAD( "mh-b-a2.bin", 0x20000, 0x10000, CRC(dfcb510e) SHA1(2387cde4ec0bae176486e1f7541103fd557fe255) )
+ ROM_LOAD( "mh-b-a3.bin", 0x30000, 0x10000, CRC(957e329b) SHA1(9d48a0b84915e1cef0b0311a3581991dc83ee199) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "b-b0-.rom", 0x00000, 0x10000, CRC(b5b95776) SHA1(4685b56071b916ce712c45f24da8068dd7e40ed1) ) /* tiles #2 */
+ ROM_LOAD( "b-b1-.rom", 0x10000, 0x10000, CRC(74ca16ee) SHA1(7984bc9a0b46e1b4a8ecac7528d57606305aad73) )
+ ROM_LOAD( "b-b2-.rom", 0x20000, 0x10000, CRC(b82cca04) SHA1(c12b95be311205181b01d15021bcf9f01ed3e0a3) )
+ ROM_LOAD( "b-b3-.rom", 0x30000, 0x10000, CRC(a7afc920) SHA1(92c75463ada39184e731b82ef2883ae6f1f67482) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "c-v0-b.rom", 0x00000, 0x10000, CRC(d0c27e58) SHA1(fec76217cc0c04c723989c3ec127a2bd33d64c60) )
+ROM_END
+
+ROM_START( nspirit )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "nin-c-h0.rom", 0x00001, 0x10000, CRC(035692fa) SHA1(d5ab54488344bf405063737ed55d68ff1e64b55f) )
+ ROM_LOAD16_BYTE( "nin-c-l0.rom", 0x00000, 0x10000, CRC(9a405898) SHA1(b28d71c1a6410720a37e6b6518b3cc66d4c32972) )
+ ROM_LOAD16_BYTE( "nin-c-h1.rom", 0x20001, 0x10000, CRC(cbc10586) SHA1(9b1935ea9ebb21fe42ee3a57d6c10f1e8516f23c) )
+ ROM_LOAD16_BYTE( "nin-c-l1.rom", 0x20000, 0x10000, CRC(b75c9a4d) SHA1(03c28896cbe0c9f778c259d59d2e69796902daa8) )
+ ROM_LOAD16_BYTE( "nin-c-h2.rom", 0x40001, 0x10000, CRC(8ad818fa) SHA1(dd25e79b656b7fc6c31d1f8971fd0916295ccdb0) )
+ ROM_LOAD16_BYTE( "nin-c-l2.rom", 0x40000, 0x10000, CRC(c52ca78c) SHA1(2b40cce5a1f5c588b49634e7fd4bc28c9160fe43) )
+ ROM_LOAD16_BYTE( "nin-c-h3.rom", 0x60001, 0x10000, CRC(501104ef) SHA1(e44e060c072affd359e52bf6606b1dd565368d44) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "nin-c-l3.rom", 0x60000, 0x10000, CRC(fd7408b8) SHA1(3cbe72835a561c50265a047f0f5cd62db48378fd) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "nspirit_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "nin-r00.rom", 0x00000, 0x20000, CRC(5f61d30b) SHA1(7754697e43f6117fa604f50885b76014b1dc5760) ) /* sprites */
+ ROM_LOAD( "nin-r10.rom", 0x20000, 0x20000, CRC(0caad107) SHA1(c4eff00327313e05ac8f7c6dbee3a0de1c83fadd) )
+ ROM_LOAD( "nin-r20.rom", 0x40000, 0x20000, CRC(ef3617d3) SHA1(16c175cf45559aacdea6e4002dd8a87f16817cfb) )
+ ROM_LOAD( "nin-r30.rom", 0x60000, 0x20000, CRC(175d2a24) SHA1(d1887efd4d8e74c38c53dbbc541ca8d17f29eb59) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "nin-b-a0.rom", 0x00000, 0x10000, CRC(63f8f658) SHA1(82c02d0f7a2d95dfd8d300c46312d511524775ce) ) /* tiles #1 */
+ ROM_LOAD( "nin-b-a1.rom", 0x10000, 0x10000, CRC(75eb8306) SHA1(2abc359a0bb2863759a68ed60e730761b9751829) )
+ ROM_LOAD( "nin-b-a2.rom", 0x20000, 0x10000, CRC(df532172) SHA1(58b5a79a57e71405b3e1abd41d54cf6a4d12873a) )
+ ROM_LOAD( "nin-b-a3.rom", 0x30000, 0x10000, CRC(4dedd64c) SHA1(8a5c73a024d95e6fe3ab70daafcd5b235418ad36) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "nin-b0.rom", 0x00000, 0x10000, CRC(1b0e08a6) SHA1(892686594970c264babbe8673c258929a5e480f6) ) /* tiles #2 */
+ ROM_LOAD( "nin-b1.rom", 0x10000, 0x10000, CRC(728727f0) SHA1(2f594c77a847ebee71c9da8a644f83ea2a1313d7) )
+ ROM_LOAD( "nin-b2.rom", 0x20000, 0x10000, CRC(f87efd75) SHA1(16474c7ab57b4fbb5cb50799ea6a2326c66706b5) )
+ ROM_LOAD( "nin-b3.rom", 0x30000, 0x10000, CRC(98856cb4) SHA1(aa4fbae972d2e827c75650a71ab4ef73a33cd018) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "nin-v0.rom", 0x00000, 0x10000, CRC(a32e8caf) SHA1(63d56ad3a63fb089056e4a170159120287594ea8) )
+ROM_END
+
+ROM_START( nspiritj )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "c-h0", 0x00001, 0x10000, CRC(8603fab2) SHA1(2c5bc97b6c9648156969b4a9f139081dca19fa24) )
+ ROM_LOAD16_BYTE( "c-l0", 0x00000, 0x10000, CRC(e520fa35) SHA1(05f7e5a1a5ada95809ffd941080fb2c2b54363b7) )
+ ROM_LOAD16_BYTE( "nin-c-h1.rom", 0x20001, 0x10000, CRC(cbc10586) SHA1(9b1935ea9ebb21fe42ee3a57d6c10f1e8516f23c) )
+ ROM_LOAD16_BYTE( "nin-c-l1.rom", 0x20000, 0x10000, CRC(b75c9a4d) SHA1(03c28896cbe0c9f778c259d59d2e69796902daa8) )
+ ROM_LOAD16_BYTE( "nin-c-h2.rom", 0x40001, 0x10000, CRC(8ad818fa) SHA1(dd25e79b656b7fc6c31d1f8971fd0916295ccdb0) )
+ ROM_LOAD16_BYTE( "nin-c-l2.rom", 0x40000, 0x10000, CRC(c52ca78c) SHA1(2b40cce5a1f5c588b49634e7fd4bc28c9160fe43) )
+ ROM_LOAD16_BYTE( "c-h3", 0x60001, 0x10000, CRC(95b63a61) SHA1(bd5ec35fffe6d4898e6712eb6add7c51077b58d2) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "c-l3", 0x60000, 0x10000, CRC(e754a87a) SHA1(9951d972ed13a0415c827beff122bc7ddb078447) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "nspiritj_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "nin-r00.rom", 0x00000, 0x20000, CRC(5f61d30b) SHA1(7754697e43f6117fa604f50885b76014b1dc5760) ) /* sprites */
+ ROM_LOAD( "nin-r10.rom", 0x20000, 0x20000, CRC(0caad107) SHA1(c4eff00327313e05ac8f7c6dbee3a0de1c83fadd) )
+ ROM_LOAD( "nin-r20.rom", 0x40000, 0x20000, CRC(ef3617d3) SHA1(16c175cf45559aacdea6e4002dd8a87f16817cfb) )
+ ROM_LOAD( "nin-r30.rom", 0x60000, 0x20000, CRC(175d2a24) SHA1(d1887efd4d8e74c38c53dbbc541ca8d17f29eb59) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "nin-b-a0.rom", 0x00000, 0x10000, CRC(63f8f658) SHA1(82c02d0f7a2d95dfd8d300c46312d511524775ce) ) /* tiles #1 */
+ ROM_LOAD( "nin-b-a1.rom", 0x10000, 0x10000, CRC(75eb8306) SHA1(2abc359a0bb2863759a68ed60e730761b9751829) )
+ ROM_LOAD( "nin-b-a2.rom", 0x20000, 0x10000, CRC(df532172) SHA1(58b5a79a57e71405b3e1abd41d54cf6a4d12873a) )
+ ROM_LOAD( "nin-b-a3.rom", 0x30000, 0x10000, CRC(4dedd64c) SHA1(8a5c73a024d95e6fe3ab70daafcd5b235418ad36) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "nin-b0.rom", 0x00000, 0x10000, CRC(1b0e08a6) SHA1(892686594970c264babbe8673c258929a5e480f6) ) /* tiles #2 */
+ ROM_LOAD( "nin-b1.rom", 0x10000, 0x10000, CRC(728727f0) SHA1(2f594c77a847ebee71c9da8a644f83ea2a1313d7) )
+ ROM_LOAD( "nin-b2.rom", 0x20000, 0x10000, CRC(f87efd75) SHA1(16474c7ab57b4fbb5cb50799ea6a2326c66706b5) )
+ ROM_LOAD( "nin-b3.rom", 0x30000, 0x10000, CRC(98856cb4) SHA1(aa4fbae972d2e827c75650a71ab4ef73a33cd018) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "nin-v0.rom", 0x00000, 0x10000, CRC(a32e8caf) SHA1(63d56ad3a63fb089056e4a170159120287594ea8) )
+ROM_END
+
+ROM_START( imgfight )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "if-c-h0.bin", 0x00001, 0x10000, CRC(592d2d80) SHA1(d54916a9bfe4b65a972b62202af706135e73518d) )
+ ROM_LOAD16_BYTE( "if-c-l0.bin", 0x00000, 0x10000, CRC(61f89056) SHA1(3e0724dbc2b00a30193ea6cfac8b4331055d4fd4) )
+ ROM_LOAD16_BYTE( "if-c-h3.bin", 0x40001, 0x20000, CRC(ea030541) SHA1(ee4c12773ecced2d755443ce0ca78fb2b2c04805) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "if-c-l3.bin", 0x40000, 0x20000, CRC(c66ae348) SHA1(eca5096ebd5bffc6e68f3fc9969cda9679bd921f) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "imgfight_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "if-c-00.bin", 0x00000, 0x20000, CRC(745e6638) SHA1(43fb1f9da4190fea67eee3aee8caf4219becc21b) ) /* sprites */
+ ROM_LOAD( "if-c-10.bin", 0x20000, 0x20000, CRC(b7108449) SHA1(1f41ebe7164fab86958caaf6749b99425e682657) )
+ ROM_LOAD( "if-c-20.bin", 0x40000, 0x20000, CRC(aef33cba) SHA1(2d8a8458207d0c790c81b1285366463c8540d190) )
+ ROM_LOAD( "if-c-30.bin", 0x60000, 0x20000, CRC(1f98e695) SHA1(5fddcfb17523f8e96f4b85f0cb15d837b81f2bd4) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "if-a-a0.bin", 0x00000, 0x10000, CRC(34ee2d77) SHA1(38826e0318aa8da893fa4c93f217288c015df606) ) /* tiles #1 */
+ ROM_LOAD( "if-a-a1.bin", 0x10000, 0x10000, CRC(6bd2845b) SHA1(149cf14f919590da88b9a8e254690da010709862) )
+ ROM_LOAD( "if-a-a2.bin", 0x20000, 0x10000, CRC(090d50e5) SHA1(4f2a7c76320b3f8dafae90a246187e034fe7562b) )
+ ROM_LOAD( "if-a-a3.bin", 0x30000, 0x10000, CRC(3a8e3083) SHA1(8a75d556790b6bea41ead1a5f95589dd293bdf4e) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "if-a-b0.bin", 0x00000, 0x10000, CRC(b425c829) SHA1(0ccd487dba00bb7cb0ff5d1c67f8fee3e68df5d8) ) /* tiles #2 */
+ ROM_LOAD( "if-a-b1.bin", 0x10000, 0x10000, CRC(e9bfe23e) SHA1(f97a68dbdce7e06d07faab19acf7625cdc8eeaa8) )
+ ROM_LOAD( "if-a-b2.bin", 0x20000, 0x10000, CRC(256e50f2) SHA1(9e9fda4f1f1449548942c0da4478f61fe0d263d1) )
+ ROM_LOAD( "if-a-b3.bin", 0x30000, 0x10000, CRC(4c682785) SHA1(f61f1227e0ad629fdfca106306b17a9f6a9959e3) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "if-c-v0.bin", 0x00000, 0x10000, CRC(cb64a194) SHA1(940fad6b9147bccc8290e112f5973f8ea062b52f) )
+ ROM_LOAD( "if-c-v1.bin", 0x10000, 0x10000, CRC(45b68bf5) SHA1(2fb28793019ca85b3b6d7c4c31eedff1d71f2d83) )
+ROM_END
+
+ROM_START( loht )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "tom_c-h0.rom", 0x00001, 0x20000, CRC(a63204b6) SHA1(d217bc70650a1a1bbe0cf536ec3bb678f670718d) )
+ ROM_LOAD16_BYTE( "tom_c-l0.rom", 0x00000, 0x20000, CRC(e788002f) SHA1(35f509976b342fd47e645453381faa3d86645876) )
+ ROM_LOAD16_BYTE( "tom_c-h3.rom", 0x40001, 0x20000, CRC(714778b5) SHA1(e2eaa35d6b5fa5df5163fe0d7b45fa66667f9947) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "tom_c-l3.rom", 0x40000, 0x20000, CRC(2f049b03) SHA1(21047cb10912b1fc23795673af3ea7de249328b7) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "loht_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "tom_m53.rom", 0x00000, 0x20000, CRC(0b83265f) SHA1(b31918d6442b79c9fe4f20410189788b050a994e) ) /* sprites */
+ ROM_LOAD( "tom_m51.rom", 0x20000, 0x20000, CRC(8ec5f6f3) SHA1(210f2753f5eeb06396758d21ab1778d459add247) )
+ ROM_LOAD( "tom_m49.rom", 0x40000, 0x20000, CRC(a41d3bfd) SHA1(536fb7c0321dbbc1a8b73e9647fba9c53a253fcc) )
+ ROM_LOAD( "tom_m47.rom", 0x60000, 0x20000, CRC(9d81a25b) SHA1(a354537c2fbba85f06485aa8487d7583a7133357) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "tom_m21.rom", 0x00000, 0x10000, CRC(3ca3e771) SHA1(be052e01c5429ee89057c9d408794f2c7744047c) ) /* tiles #1 */
+ ROM_LOAD( "tom_m22.rom", 0x10000, 0x10000, CRC(7a05ee2f) SHA1(7d1ca5db9a5a85610129e3bc6c640ade036fe7f9) )
+ ROM_LOAD( "tom_m20.rom", 0x20000, 0x10000, CRC(79aa2335) SHA1(6b70c79d800a7b755aa7c9a368c4ea74029aaa1e) )
+ ROM_LOAD( "tom_m23.rom", 0x30000, 0x10000, CRC(789e8b24) SHA1(e957cd25c3c155ca295ab1aea03d610f91562cfb) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "tom_m26.rom", 0x00000, 0x10000, CRC(44626bf6) SHA1(571ef74d42d30a272ff0fb33f830652b4a4bad29) ) /* tiles #2 */
+ ROM_LOAD( "tom_m27.rom", 0x10000, 0x10000, CRC(464952cf) SHA1(6b99360b6ba1ed5a72c257f51291f9f7a1ddf363) )
+ ROM_LOAD( "tom_m25.rom", 0x20000, 0x10000, CRC(3db9b2c7) SHA1(02a318ffc459c494b7f40827eff5f89b41ac0426) )
+ ROM_LOAD( "tom_m24.rom", 0x30000, 0x10000, CRC(f01fe899) SHA1(c5ab967b7af55a757638bcdc9975f4b15064022d) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "tom_m44.rom", 0x00000, 0x10000, CRC(3ed51d1f) SHA1(84f3aa17d640df91387e5f1f5b5971cf8dcd4e17) )
+ROM_END
+
+/*
+
+Legend of Hero TONMA
+(c)1989 Irem
+
+M72 System
+Horizontal Freq. = 15.625KHz
+H.Period = 64.0us
+H.Blank = 16.0us
+H.Sync Pulse = 5.0us
+Vertical Freq. = 55.02Hz
+V.Period = 18.176ms
+V.Blank = 1.792ms
+V.Sync Pulse = 384us
+
+ROMs:
+on M72-C mainboard
+set jumper pins
+J1:A
+J2:A
+J3:A
+J4:A
+J5:B
+J6:A
+J7:A
+J9:A
+J10:A
+J11:B
+J12:A
+
+TOM_C-H0- (M5M27C101K, main programs)
+TOM_C-L0-
+TOM_C-H3-
+TOM_C-H0-
+
+R200 (28pin 1Mbit mask, read as 531000)
+R210
+R220
+R230
+
+082 - Samples
+
+TOM_C-PR- (i8751H, read protected, not dumped)
+TOM_C-3F- (PAL, read protected, not dumped)
+
+
+on M72-B-B or M72-B-C or M72-B-D
+set jumper pins (J2, J3, J4, J5) to "B"
+R2A0.A0 (27C512)
+R2A1.A1
+R2A2.A2
+R2A3.A3
+
+078.B0
+079.B1
+080.B2
+081.B3
+
+*/
+
+ROM_START( lohtj )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "tom_c-h0-", 0x00001, 0x20000, CRC(2a752998) SHA1(a88c3c75a1106665c94ddd0945bfaa7696a21b75) )
+ ROM_LOAD16_BYTE( "tom_c-l0-", 0x00000, 0x20000, CRC(a224d928) SHA1(c4744f6ca19ce60b0c03415be979f2a824235a1c) )
+ ROM_LOAD16_BYTE( "tom_c-h3-", 0x40001, 0x20000, CRC(714778b5) SHA1(e2eaa35d6b5fa5df5163fe0d7b45fa66667f9947) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "tom_c-l3-", 0x40000, 0x20000, CRC(2f049b03) SHA1(21047cb10912b1fc23795673af3ea7de249328b7) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "lohtj_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "r200", 0x00000, 0x20000, CRC(0b83265f) SHA1(b31918d6442b79c9fe4f20410189788b050a994e) ) /* sprites */
+ ROM_LOAD( "r210", 0x20000, 0x20000, CRC(8ec5f6f3) SHA1(210f2753f5eeb06396758d21ab1778d459add247) )
+ ROM_LOAD( "r220", 0x40000, 0x20000, CRC(a41d3bfd) SHA1(536fb7c0321dbbc1a8b73e9647fba9c53a253fcc) )
+ ROM_LOAD( "r230", 0x60000, 0x20000, CRC(9d81a25b) SHA1(a354537c2fbba85f06485aa8487d7583a7133357) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "r2a0.a0", 0x00000, 0x10000, CRC(3ca3e771) SHA1(be052e01c5429ee89057c9d408794f2c7744047c) ) /* tiles #1 */
+ ROM_LOAD( "r2a1.a1", 0x10000, 0x10000, CRC(7a05ee2f) SHA1(7d1ca5db9a5a85610129e3bc6c640ade036fe7f9) )
+ ROM_LOAD( "r2a2.a2", 0x20000, 0x10000, CRC(79aa2335) SHA1(6b70c79d800a7b755aa7c9a368c4ea74029aaa1e) )
+ ROM_LOAD( "r2a3.a3", 0x30000, 0x10000, CRC(789e8b24) SHA1(e957cd25c3c155ca295ab1aea03d610f91562cfb) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "078.b0", 0x00000, 0x10000, CRC(44626bf6) SHA1(571ef74d42d30a272ff0fb33f830652b4a4bad29) ) /* tiles #2 */
+ ROM_LOAD( "079.b1", 0x10000, 0x10000, CRC(464952cf) SHA1(6b99360b6ba1ed5a72c257f51291f9f7a1ddf363) )
+ ROM_LOAD( "080.b2", 0x20000, 0x10000, CRC(3db9b2c7) SHA1(02a318ffc459c494b7f40827eff5f89b41ac0426) )
+ ROM_LOAD( "081.b3", 0x30000, 0x10000, CRC(f01fe899) SHA1(c5ab967b7af55a757638bcdc9975f4b15064022d) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "082", 0x00000, 0x10000, CRC(3ed51d1f) SHA1(84f3aa17d640df91387e5f1f5b5971cf8dcd4e17) )
+ROM_END
+
+/*
+CPU cpu: nec v30
+cpu: z80 (sharp LH0080B z80b-cpu)
+cpu: 2x YM2203C
+
+quarzi: 16mhz vicino al v30 e 28mhz vicino allo z80 e ym2203c
+*/
+
+ROM_START( lohtb )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "lohtb03.b", 0x00001, 0x20000, CRC(8b845a70) SHA1(902c623310cd77b25592496745f9c6121149b516) )
+ ROM_LOAD16_BYTE( "lohtb05.d", 0x00000, 0x20000, CRC(e90f7623) SHA1(e6e2f66a39286b2d7c03fc267beb2024913fb4ca) )
+ ROM_LOAD16_BYTE( "lohtb02.a", 0x40001, 0x20000, CRC(714778b5) SHA1(e2eaa35d6b5fa5df5163fe0d7b45fa66667f9947) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "lohtb04.c", 0x40000, 0x20000, CRC(2f049b03) SHA1(21047cb10912b1fc23795673af3ea7de249328b7) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound CPU program (Z80) + Samples*/
+ ROM_LOAD( "lohtb01.02", 0x00000, 0x10000, CRC(e4bd8f03) SHA1(69fe41a978db92daa912cb345c2c7bafd2a6eb93) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */
+ ROM_LOAD( "lohtb14.11", 0x00000, 0x10000, CRC(df5ac5ee) SHA1(5b45417ada402047d97dfb6cee6545686ad26e37) )
+ ROM_LOAD( "lohtb15.12", 0x20000, 0x10000, CRC(45220b01) SHA1(83715cf155f91c82067d69f14b3b01ed77777b7d) )
+ ROM_LOAD( "lohtb16.13", 0x40000, 0x10000, CRC(25b85cfc) SHA1(c7a9962165379193dc6553ed1f977795a79e0f78) )
+ ROM_LOAD( "lohtb17.14", 0x60000, 0x10000, CRC(763fa4ec) SHA1(2d72b1b41f24ae299fde23869942c0b6bbb82363) )
+ ROM_LOAD( "lohtb18.15", 0x10000, 0x10000, CRC(d7ecf849) SHA1(ab86a88eae21e054d4e8a740a60c7c6c198232d4) )
+ ROM_LOAD( "lohtb19.16", 0x30000, 0x10000, CRC(35d1a808) SHA1(9378ff000104ecfb842b3b884197be82c43a01b4))
+ ROM_LOAD( "lohtb20.17", 0x50000, 0x10000, CRC(464d8579) SHA1(b5981f4865ee5439f0e330091927e6d97d29933f) )
+ ROM_LOAD( "lohtb21.18", 0x70000, 0x10000, CRC(a73568c7) SHA1(8fe1867256708cc1ed76d1bed5566b1852b47c40) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_INVERT|ROMREGION_DISPOSE ) /* tiles #1 */
+ ROM_LOAD( "lohtb13.10", 0x00000, 0x10000, CRC(359f17d4) SHA1(2875ba48395e7faa1a58404475be936dcca45ed1) )
+ ROM_LOAD( "lohtb11.08", 0x10000, 0x10000, CRC(73391e8a) SHA1(53ca89b8a10895f817ecdb9fa5eef462edb94ae6) )
+ ROM_LOAD( "lohtb09.06", 0x20000, 0x10000, CRC(7096d390) SHA1(f4a16bf8aef7a1a65619ab022cbdb67d2f191888) )
+ ROM_LOAD( "lohtb07.04", 0x30000, 0x10000, CRC(71a27b81) SHA1(d8fe72d15bbcd5b170d1123d8f4c58874cefdca3) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_INVERT|ROMREGION_DISPOSE ) /* tiles #2 */
+ ROM_LOAD( "lohtb12.09", 0x00000, 0x10000, CRC(4d5e9b53) SHA1(3e3977bab7a66ed0171afcd555d181960e338749) )
+ ROM_LOAD( "lohtb10.07", 0x10000, 0x10000, CRC(4f75a26a) SHA1(79c09a1ad3a6f9cfbd07cb527bbd89d2478ce582) )
+ ROM_LOAD( "lohtb08.05", 0x20000, 0x10000, CRC(34854262) SHA1(37436c12579fb41d22a1596b495f065959c14a26) )
+ ROM_LOAD( "lohtb06.03", 0x30000, 0x10000, CRC(f923183c) SHA1(a6b578191864aefa81e0cad3ba12a2ca491c91cf) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, ROMREGION_ERASEFF ) /* -- no sample roms on bootleg, included with z80 code */
+ROM_END
+
+
+ROM_START( lohtb2 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "loht-a2.bin", 0x00001, 0x10000, CRC(ccc90e54) SHA1(860da001d9b0782adc25cfc3b453383225253d9e) )
+ ROM_LOAD16_BYTE( "loht-a3.bin", 0x20001, 0x10000, CRC(ff8a98de) SHA1(ccb8275241bea81abc01dc36e62557712c1b5a8c) )
+ ROM_LOAD16_BYTE( "loht-a10.bin", 0x00000, 0x10000, CRC(3aa06730) SHA1(483b135f8ee0fc54b1953c7c28e909a88aa2fa2e) )
+ ROM_LOAD16_BYTE( "loht-a11.bin", 0x20000, 0x10000, CRC(eab1d7bc) SHA1(ec50fe89f05ae46e91b9f2f3d4e4383aa764e71d) )
+
+ ROM_LOAD16_BYTE( "loht-a5.bin", 0x40001, 0x10000, CRC(79e007ec) SHA1(b2e4cc4a47f5f127ba9a1a00eaaf067464314ea0) )
+ ROM_RELOAD( 0xc0001, 0x10000 )
+ ROM_LOAD16_BYTE( "loht-a4.bin", 0x60001, 0x10000, CRC(254ea4d5) SHA1(07277bbe2ea6678f0de1f28e40be794880b3faff) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "loht-a13.bin", 0x40000, 0x10000, CRC(b951346e) SHA1(82fa3c4a09a86b74b98c31aaea5c0629ddff83a0) )
+ ROM_RELOAD( 0xc0000, 0x10000 )
+ ROM_LOAD16_BYTE( "loht-a12.bin", 0x60000, 0x10000, CRC(cfb0390d) SHA1(4acc61a51a7ae681bd8d835e2644b44c4d6d7bcb) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "loht-a26.bin", 0x00000, 0x2000, CRC(ac901e17) SHA1(70a73288d594c78ad2aca78ce55a699cb040bede) ) // unprotected??
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "loht-a16.bin", 0x00000, 0x10000, CRC(df5ac5ee) SHA1(5b45417ada402047d97dfb6cee6545686ad26e37) )
+ ROM_LOAD( "loht-a17.bin", 0x10000, 0x10000, CRC(d7ecf849) SHA1(ab86a88eae21e054d4e8a740a60c7c6c198232d4) )
+ ROM_LOAD( "loht-a8.bin", 0x20000, 0x10000, CRC(45220b01) SHA1(83715cf155f91c82067d69f14b3b01ed77777b7d) )
+ ROM_LOAD( "loht-a9.bin", 0x30000, 0x10000, CRC(4af9bb3c) SHA1(04f66caae5b3ae985451002293ad8f609a8d9377) )
+ ROM_LOAD( "loht-a14.bin", 0x40000, 0x10000, CRC(25b85cfc) SHA1(c7a9962165379193dc6553ed1f977795a79e0f78) )
+ ROM_LOAD( "loht-a15.bin", 0x50000, 0x10000, CRC(464d8579) SHA1(b5981f4865ee5439f0e330091927e6d97d29933f) )
+ ROM_LOAD( "loht-a6.bin", 0x60000, 0x10000, CRC(763fa4ec) SHA1(2d72b1b41f24ae299fde23869942c0b6bbb82363) )
+ ROM_LOAD( "loht-a7.bin", 0x70000, 0x10000, CRC(a73568c7) SHA1(8fe1867256708cc1ed76d1bed5566b1852b47c40) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "loht-a19.bin", 0x00000, 0x10000, CRC(3ca3e771) SHA1(be052e01c5429ee89057c9d408794f2c7744047c) ) /* tiles #1 */
+// ROM_LOAD( "loht-a20.bin", 0x10000, 0x10000, BAD_DUMP CRC(db2e3d77) SHA1(3f0758f74490b084321d8b2da29525dd1f19da09) )
+ ROM_LOAD( "loht-a20.bin", 0x10000, 0x10000, CRC(7a05ee2f) SHA1(7d1ca5db9a5a85610129e3bc6c640ade036fe7f9) )
+ ROM_LOAD( "loht-a18.bin", 0x20000, 0x10000, CRC(79aa2335) SHA1(6b70c79d800a7b755aa7c9a368c4ea74029aaa1e) )
+ ROM_LOAD( "loht-a21.bin", 0x30000, 0x10000, CRC(789e8b24) SHA1(e957cd25c3c155ca295ab1aea03d610f91562cfb) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "loht-a24.bin", 0x00000, 0x10000, CRC(44626bf6) SHA1(571ef74d42d30a272ff0fb33f830652b4a4bad29) ) /* tiles #2 */
+ ROM_LOAD( "loht-a25.bin", 0x10000, 0x10000, CRC(464952cf) SHA1(6b99360b6ba1ed5a72c257f51291f9f7a1ddf363) )
+ ROM_LOAD( "loht-a23.bin", 0x20000, 0x10000, CRC(3db9b2c7) SHA1(02a318ffc459c494b7f40827eff5f89b41ac0426) )
+ ROM_LOAD( "loht-a22.bin", 0x30000, 0x10000, CRC(f01fe899) SHA1(c5ab967b7af55a757638bcdc9975f4b15064022d) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "loht-a1.bin", 0x00000, 0x10000, CRC(3ed51d1f) SHA1(84f3aa17d640df91387e5f1f5b5971cf8dcd4e17) )
+ROM_END
+
+
+ROM_START( xmultipl )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ch3.h3", 0x00001, 0x20000, CRC(20685021) SHA1(92f4216320bf525045223b9454fb5bb224c536d8) )
+ ROM_LOAD16_BYTE( "cl3.l3", 0x00000, 0x20000, CRC(93fdd200) SHA1(dd4244ba0ce6c621136b0648374179da44363c01) )
+ ROM_LOAD16_BYTE( "ch0.h0", 0x40001, 0x10000, CRC(9438dd8a) SHA1(dc85789c47d31a96300b4236dc43f065e1b01e4a) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "cl0.l0", 0x40000, 0x10000, CRC(06a9e213) SHA1(9831c110814642703d6e71d49848d854095b7d3a) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "xmultipl_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "t44.00", 0x00000, 0x20000, CRC(db45186e) SHA1(8c8edeb4b7e6b0516f2597823dc27eba9c5d9528) ) /* sprites */
+ ROM_LOAD( "t45.01", 0x20000, 0x20000, CRC(4d0764d4) SHA1(4942333336a110b033f16ac1afa06ffef7b2dad6) )
+ ROM_LOAD( "t46.10", 0x40000, 0x20000, CRC(f0c465a4) SHA1(69c107c860d4e8736431fd86b6821b70a8367eb3) )
+ ROM_LOAD( "t47.11", 0x60000, 0x20000, CRC(1263b24b) SHA1(0445a5381df3a868bed6967c8e5de7169e4be6a3) )
+ ROM_LOAD( "t48.20", 0x80000, 0x20000, CRC(4129944f) SHA1(988b072032d1667c3ac0731fada32fb6978505dc) )
+ ROM_LOAD( "t49.21", 0xa0000, 0x20000, CRC(2346e6f9) SHA1(b3de017dd0353e04d279f57e151c47f5fcc70e9c) )
+ ROM_LOAD( "t50.30", 0xc0000, 0x20000, CRC(e322543e) SHA1(b4c3a7f202d81485d5f0a7b7668ee89fc1edb215) )
+ ROM_LOAD( "t51.31", 0xe0000, 0x20000, CRC(229bf7b1) SHA1(ae42c7efbb6278dd3fa56842361138391f2d49ca) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "t53.a0", 0x00000, 0x20000, CRC(1a082494) SHA1(63a3a84a262833d2cafab41e35df8f10a5e317b1) ) /* tiles #1 */
+ ROM_LOAD( "t54.a1", 0x20000, 0x20000, CRC(076c16c5) SHA1(4be858806b916953d59aceee550e721eaf3996a6) )
+ ROM_LOAD( "t55.a2", 0x40000, 0x20000, CRC(25d877a5) SHA1(48c948bf714c432f534c098123c8f50d5561756f) )
+ ROM_LOAD( "t56.a3", 0x60000, 0x20000, CRC(5b1213f5) SHA1(87782aa0bd04d4378c4ba78b63028ae2709da2f1) )
+
+ ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "t57.b0", 0x00000, 0x20000, CRC(0a84e0c7) SHA1(67ad181a7d2c431cb4bf45955e09754549a03576) ) /* tiles #2 */
+ ROM_LOAD( "t58.b1", 0x20000, 0x20000, CRC(a874121d) SHA1(1351d5901d55059c6472a4588a2e560396903861) )
+ ROM_LOAD( "t59.b2", 0x40000, 0x20000, CRC(69deb990) SHA1(1eed3183efbe576376661b45152a0a21240ecfc8) )
+ ROM_LOAD( "t60.b3", 0x60000, 0x20000, CRC(14c69f99) SHA1(4bea72f8bd421ef3ca559363f7473ce2e7038699) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "t52.v0", 0x00000, 0x20000, CRC(2db1bd80) SHA1(657006d0642ec7fb949bb52821d78fe51a599415) )
+ROM_END
+
+ROM_START( dbreed )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "db-a-h0-.59", 0x00001, 0x10000, CRC(e1177267) SHA1(f226f34ce85305870e659dd4f519bee30936af9a) )
+ ROM_CONTINUE( 0x60001, 0x10000 )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "db-a-l0-.68", 0x00000, 0x10000, CRC(d82b167e) SHA1(f9ccb152feb31971230f61371a906bd900ef34e8) )
+ ROM_CONTINUE( 0x60000, 0x10000 )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "db-a-sp-.14", 0x0000, 0x10000, CRC(54a61560) SHA1(e5fccfcedcadbab1667900f98370043c1907dd89) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "db_k800m.00", 0x00000, 0x20000, CRC(c027a8cf) SHA1(534dc416b8f5587168c7f644d3f9438c8a190491) ) /* sprites */
+ ROM_LOAD( "db_k801m.10", 0x20000, 0x20000, CRC(093faf33) SHA1(2704f644cdce87daf975984f143b1d55ba731c3f) )
+ ROM_LOAD( "db_k802m.20", 0x40000, 0x20000, CRC(055b4c59) SHA1(71315dd7476612f138cb64b905648791d44eb7da) )
+ ROM_LOAD( "db_k803m.30", 0x60000, 0x20000, CRC(8ed63922) SHA1(51daa8a23e637f6b4394598ff4a1d26f65b59c8b) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "db_k804m.a0", 0x00000, 0x20000, CRC(4c83e92e) SHA1(6dade027435c48ab48bd4516d16a9961d4dd6fad) ) /* tiles */
+ ROM_LOAD( "db_k805m.a1", 0x20000, 0x20000, CRC(835ef268) SHA1(89d0bb15201440dffad3ef745970f95505d7ab03) )
+ ROM_LOAD( "db_k806m.a2", 0x40000, 0x20000, CRC(5117f114) SHA1(a401a3e638209b32d4101a5c2e2a8b4612eaa21b) )
+ ROM_LOAD( "db_k807m.a3", 0x60000, 0x20000, CRC(8eb0c978) SHA1(7fc55bbe4d0923db88492bb7160a89de34e11cd6) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "db_a-v0.rom", 0x00000, 0x20000, CRC(312f7282) SHA1(742d56980b4618180e9a0e02051c5aec4d5cdae4) )
+ROM_END
+
+ROM_START( dbreed72 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "db_c-h3.rom", 0x00001, 0x20000, CRC(4bf3063c) SHA1(3f970c9ece2ac700738e217e0b31b3aba2848ab2) )
+ ROM_LOAD16_BYTE( "db_c-l3.rom", 0x00000, 0x20000, CRC(e4b89b79) SHA1(c312925940633e60fb5d0f05044c6e73e4f7fd54) )
+ ROM_LOAD16_BYTE( "db_c-h0.rom", 0x60001, 0x10000, CRC(5aa79fb2) SHA1(b7b862699ddccf90cf18d3822703078668aa1dc7) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "db_c-l0.rom", 0x60000, 0x10000, CRC(ed0f5e06) SHA1(9030840b15e83c18d59c884ed08c93c05fa70c5b) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "dbreed72_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "db_k800m.00", 0x00000, 0x20000, CRC(c027a8cf) SHA1(534dc416b8f5587168c7f644d3f9438c8a190491) ) /* sprites */
+ ROM_LOAD( "db_k801m.10", 0x20000, 0x20000, CRC(093faf33) SHA1(2704f644cdce87daf975984f143b1d55ba731c3f) )
+ ROM_LOAD( "db_k802m.20", 0x40000, 0x20000, CRC(055b4c59) SHA1(71315dd7476612f138cb64b905648791d44eb7da) )
+ ROM_LOAD( "db_k803m.30", 0x60000, 0x20000, CRC(8ed63922) SHA1(51daa8a23e637f6b4394598ff4a1d26f65b59c8b) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "db_k804m.a0", 0x00000, 0x20000, CRC(4c83e92e) SHA1(6dade027435c48ab48bd4516d16a9961d4dd6fad) ) /* tiles #1 */
+ ROM_LOAD( "db_k805m.a1", 0x20000, 0x20000, CRC(835ef268) SHA1(89d0bb15201440dffad3ef745970f95505d7ab03) )
+ ROM_LOAD( "db_k806m.a2", 0x40000, 0x20000, CRC(5117f114) SHA1(a401a3e638209b32d4101a5c2e2a8b4612eaa21b) )
+ ROM_LOAD( "db_k807m.a3", 0x60000, 0x20000, CRC(8eb0c978) SHA1(7fc55bbe4d0923db88492bb7160a89de34e11cd6) )
+
+ ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "db_k804m.b0", 0x00000, 0x20000, CRC(4c83e92e) SHA1(6dade027435c48ab48bd4516d16a9961d4dd6fad) ) /* tiles #2 */
+ ROM_LOAD( "db_k805m.b1", 0x20000, 0x20000, CRC(835ef268) SHA1(89d0bb15201440dffad3ef745970f95505d7ab03) )
+ ROM_LOAD( "db_k806m.b2", 0x40000, 0x20000, CRC(5117f114) SHA1(a401a3e638209b32d4101a5c2e2a8b4612eaa21b) )
+ ROM_LOAD( "db_k807m.b3", 0x60000, 0x20000, CRC(8eb0c978) SHA1(7fc55bbe4d0923db88492bb7160a89de34e11cd6) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "db_c-v0.rom", 0x00000, 0x20000, CRC(312f7282) SHA1(742d56980b4618180e9a0e02051c5aec4d5cdae4) )
+ROM_END
+
+ROM_START( rtype2 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ic54.8d", 0x00001, 0x20000, CRC(d8ece6f4) SHA1(f7bb246fe8b75af24716d419bb3c6e7d9cd0971e) )
+ ROM_LOAD16_BYTE( "ic60.9d", 0x00000, 0x20000, CRC(32cfb2e4) SHA1(d4b44a40e2933040eddb2b09de7bfe28d76c5f25) )
+ ROM_LOAD16_BYTE( "ic53.8b", 0x40001, 0x20000, CRC(4f6e9b15) SHA1(ef733c2615951f54691877ad3e84d08107723324) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ic59.9b", 0x40000, 0x20000, CRC(0fd123bf) SHA1(1133163f6716e9a4bbb437b3a471477d0bd97051) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "ic17.4f", 0x0000, 0x10000, CRC(73ffecb4) SHA1(4795bf0d6263060c3d3759b659bdb189a4087600) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ic31.6l", 0x00000, 0x20000, CRC(2cd8f913) SHA1(a53752b35da95b420dd29a09176d265d292b3938) ) /* sprites */
+ ROM_LOAD( "ic21.4l", 0x20000, 0x20000, CRC(5033066d) SHA1(e125127f0610c63f9e59a585db547be5d49ed863) )
+ ROM_LOAD( "ic32.6m", 0x40000, 0x20000, CRC(ec3a0450) SHA1(632bdd397f1bc67f6970faf7d09ab8d911e105fe) )
+ ROM_LOAD( "ic22.4m", 0x60000, 0x20000, CRC(db6176fc) SHA1(1eaf72af0322490c98461aded202288e387caac1) )
+
+ ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ic50.7s", 0x00000, 0x20000, CRC(f3f8736e) SHA1(37872b30459ad05b2981d4ac84983f3b52d0d2d6) ) /* tiles */
+ ROM_LOAD( "ic51.7u", 0x20000, 0x20000, CRC(b4c543af) SHA1(56042eba711160fc701021c8787414dcaddcdecb) )
+ ROM_LOAD( "ic56.8s", 0x40000, 0x20000, CRC(4cb80d66) SHA1(31c5496c14b277e428a2f22195fe1742d6a577d4) )
+ ROM_LOAD( "ic57.8u", 0x60000, 0x20000, CRC(bee128e0) SHA1(b149dae5f8f67a329d6df033fadf50ad75c0a57a) )
+ ROM_LOAD( "ic65.9r", 0x80000, 0x20000, CRC(2dc9c71a) SHA1(124e89c17f3af034d5a387ff3eab906d289c27f7) )
+ ROM_LOAD( "ic66.9u", 0xa0000, 0x20000, CRC(7533c428) SHA1(ba435cfb6c3c49fcc4d716dcecf8f17545b8eec6) )
+ ROM_LOAD( "ic63.9m", 0xc0000, 0x20000, CRC(a6ad67f2) SHA1(b005b037ce8b3c932089982ecfbccdc922278fe3) )
+ ROM_LOAD( "ic64.9p", 0xe0000, 0x20000, CRC(3686d555) SHA1(d03754d9b8a6a3bfd4a85eeddacc35a36af197bd) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ic14.4c", 0x00000, 0x20000, CRC(637172d5) SHA1(9dd0dc409306287238826bf301e2a7a12d6cd9ce) )
+ROM_END
+
+ROM_START( rtype2j )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "rt2-a-h0.54", 0x00001, 0x20000, CRC(7857ccf6) SHA1(9f6774a8128ee2dbb5b6c42289095275337bc73e) )
+ ROM_LOAD16_BYTE( "rt2-a-l0.60", 0x00000, 0x20000, CRC(cb22cd6e) SHA1(a877cffbac9f55bca8932b12540a4686ba975684) )
+ ROM_LOAD16_BYTE( "rt2-a-h1.53", 0x40001, 0x20000, CRC(49e75d28) SHA1(956bafaaa6711a8a13f2bffe43e8d05d51d8a3c9) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "rt2-a-l1.59", 0x40000, 0x20000, CRC(12ec1676) SHA1(10cee9a87dd954444b0e64fad7f15a5ae529890d) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "ic17.4f", 0x0000, 0x10000, CRC(73ffecb4) SHA1(4795bf0d6263060c3d3759b659bdb189a4087600) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ic31.6l", 0x00000, 0x20000, CRC(2cd8f913) SHA1(a53752b35da95b420dd29a09176d265d292b3938) ) /* sprites */
+ ROM_LOAD( "ic21.4l", 0x20000, 0x20000, CRC(5033066d) SHA1(e125127f0610c63f9e59a585db547be5d49ed863) )
+ ROM_LOAD( "ic32.6m", 0x40000, 0x20000, CRC(ec3a0450) SHA1(632bdd397f1bc67f6970faf7d09ab8d911e105fe) )
+ ROM_LOAD( "ic22.4m", 0x60000, 0x20000, CRC(db6176fc) SHA1(1eaf72af0322490c98461aded202288e387caac1) )
+
+ ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ic50.7s", 0x00000, 0x20000, CRC(f3f8736e) SHA1(37872b30459ad05b2981d4ac84983f3b52d0d2d6) ) /* tiles */
+ ROM_LOAD( "ic51.7u", 0x20000, 0x20000, CRC(b4c543af) SHA1(56042eba711160fc701021c8787414dcaddcdecb) )
+ ROM_LOAD( "ic56.8s", 0x40000, 0x20000, CRC(4cb80d66) SHA1(31c5496c14b277e428a2f22195fe1742d6a577d4) )
+ ROM_LOAD( "ic57.8u", 0x60000, 0x20000, CRC(bee128e0) SHA1(b149dae5f8f67a329d6df033fadf50ad75c0a57a) )
+ ROM_LOAD( "ic65.9r", 0x80000, 0x20000, CRC(2dc9c71a) SHA1(124e89c17f3af034d5a387ff3eab906d289c27f7) )
+ ROM_LOAD( "ic66.9u", 0xa0000, 0x20000, CRC(7533c428) SHA1(ba435cfb6c3c49fcc4d716dcecf8f17545b8eec6) )
+ ROM_LOAD( "ic63.9m", 0xc0000, 0x20000, CRC(a6ad67f2) SHA1(b005b037ce8b3c932089982ecfbccdc922278fe3) )
+ ROM_LOAD( "ic64.9p", 0xe0000, 0x20000, CRC(3686d555) SHA1(d03754d9b8a6a3bfd4a85eeddacc35a36af197bd) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ic14.4c", 0x00000, 0x20000, CRC(637172d5) SHA1(9dd0dc409306287238826bf301e2a7a12d6cd9ce) )
+ROM_END
+
+ROM_START( majtitle )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "mt_m0.bin", 0x00001, 0x20000, CRC(b9682c70) SHA1(b979c0a630397f2a2eb73709cf12c5262c973782) )
+ ROM_LOAD16_BYTE( "mt_l0.bin", 0x00000, 0x20000, CRC(702c9fd6) SHA1(84a5e9e64f4bf235d115f5648b4a108f710ade1d) )
+ ROM_LOAD16_BYTE( "mt_m1.bin", 0x40001, 0x20000, CRC(d9e97c30) SHA1(97f59b614eeeced0a414f8a1693590525a58f788) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "mt_l1.bin", 0x40000, 0x20000, CRC(8dbd91b5) SHA1(2bd01f3fba0fa1ca4b6f8ff57e7dc4434c42ce48) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "mt_sp.bin", 0x0000, 0x10000, CRC(e44260a9) SHA1(a2512033c8cca9a8064eae1ada721202edf06e8e) )
+
+ ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "mt_n0.bin", 0x00000, 0x40000, CRC(5618cddc) SHA1(16d34b431ab9b72067fa669d694e635c88aeb261) ) /* sprites #1 */
+ ROM_LOAD( "mt_n1.bin", 0x40000, 0x40000, CRC(483b873b) SHA1(654efd67b2102521e8c46cd57cefa2cc64cf4fd3) )
+ ROM_LOAD( "mt_n2.bin", 0x80000, 0x40000, CRC(4f5d665b) SHA1(f539d0f5c738ffabfac16121706abe3bb3b2a1fa) )
+ ROM_LOAD( "mt_n3.bin", 0xc0000, 0x40000, CRC(83571549) SHA1(ce0b89aa4b3e3e1cf6ec6136f956577267cdd9d3) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "mt_c0.bin", 0x00000, 0x20000, CRC(780e7a02) SHA1(9776ecb8b5d86636061f8360464001a63bec0842) ) /* tiles */
+ ROM_LOAD( "mt_c1.bin", 0x20000, 0x20000, CRC(45ad1381) SHA1(de281398dcd1c547bde9fa86f8ca409dd8d4aa6c) )
+ ROM_LOAD( "mt_c2.bin", 0x40000, 0x20000, CRC(5df5856d) SHA1(f16163f672de6701b411315c9956ddb74c8464ce) )
+ ROM_LOAD( "mt_c3.bin", 0x60000, 0x20000, CRC(f5316cc8) SHA1(123892d4a7e8d98582ea736afe659afdba8c5f87) )
+
+ ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "mt_f0.bin", 0x00000, 0x20000, CRC(2d5e05d5) SHA1(18bdc9c561dbf0f91642161ca985d2154bd58b5d) ) /* sprites #2 */
+ ROM_LOAD( "mt_f1.bin", 0x20000, 0x20000, CRC(c68cd65f) SHA1(8999b558b4af0f453ada9e4ef705163df96844e6) )
+ ROM_LOAD( "mt_f2.bin", 0x40000, 0x20000, CRC(a71feb2d) SHA1(47e366b422772bed08ee4d1c338970687d6c3b4c) )
+ ROM_LOAD( "mt_f3.bin", 0x60000, 0x20000, CRC(179f7562) SHA1(6d28b199daffc62e8fa9009878ac0bb976ccbb2a) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "mt_vo.bin", 0x00000, 0x20000, CRC(eb24bb2c) SHA1(9fca04fba0249e8213dd164eb6829e1a5acbee65) )
+ROM_END
+
+ROM_START( hharry )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "a-h0-v.rom", 0x00001, 0x20000, CRC(c52802a5) SHA1(7180189c886aebe8d3e7fd38922916cecfddae32) )
+ ROM_LOAD16_BYTE( "a-l0-v.rom", 0x00000, 0x20000, CRC(f463074c) SHA1(aca86345610e65848c276ab278092d35ba215916) )
+ ROM_LOAD16_BYTE( "a-h1-0.rom", 0x60001, 0x10000, CRC(3ae21335) SHA1(780d7a0c5bebe4b914ea5b3741e30630f8c29a4f) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "a-l1-0.rom", 0x60000, 0x10000, CRC(bc6ac5f9) SHA1(c6afba4967a8055f6b63827697425eac743f5a75) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "a-sp-0.rom", 0x0000, 0x10000, CRC(80e210e7) SHA1(66cff58fb37c52e1d8e0567e13b774253e862585) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_00.rom", 0x00000, 0x20000, CRC(ec5127ef) SHA1(014ac8ad7b19cd9b475b72a0f42a4991119501c4) ) /* sprites */
+ ROM_LOAD( "hh_10.rom", 0x20000, 0x20000, CRC(def65294) SHA1(23f5d99fa9f604fde37cb52113bff233d9be1d25) )
+ ROM_LOAD( "hh_20.rom", 0x40000, 0x20000, CRC(bb0d6ad4) SHA1(4ab617fadfc32efad90ed7f0555513f167b0c43a) )
+ ROM_LOAD( "hh_30.rom", 0x60000, 0x20000, CRC(4351044e) SHA1(0d3ce3f4f1473fd997e70de91e7b5b5a5ec60ad4) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_a0.rom", 0x00000, 0x20000, CRC(c577ba5f) SHA1(c882e58cf64deca8eee6f14f3df43ecc932488fc) ) /* tiles */
+ ROM_LOAD( "hh_a1.rom", 0x20000, 0x20000, CRC(429d12ab) SHA1(ccba25eab981fc4e664f76e06a2964066f2ae2e8) )
+ ROM_LOAD( "hh_a2.rom", 0x40000, 0x20000, CRC(b5b163b0) SHA1(82a708fea4953a7c4dcd1d4a1b07f302221ba30b) )
+ ROM_LOAD( "hh_a3.rom", 0x60000, 0x20000, CRC(8ef566a1) SHA1(3afb020a7317efe89c18b2a7773894ce28499d49) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "a-v0-0.rom", 0x00000, 0x20000, CRC(faaacaff) SHA1(ea3a3920255c07aa9c0a7e0191eae257a9f7f558) )
+ROM_END
+
+ROM_START( hharryu )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "a-ho-u.8d", 0x00001, 0x20000, CRC(ede7f755) SHA1(adcec83d6b936ab1a14d039792b9375e9f803a08) )
+ ROM_LOAD16_BYTE( "a-lo-u.9d", 0x00000, 0x20000, CRC(df0726ae) SHA1(7ef163d2e8c14a14328d4365705bb31540bdc7cb) )
+ ROM_LOAD16_BYTE( "a-h1-f.8b", 0x60001, 0x10000, CRC(31b741c5) SHA1(46c1c4cea09477cc4989f3e06e08851d02743e62) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "a-l1-f.9b", 0x60000, 0x10000, CRC(b23e966c) SHA1(f506f6d1f4f7874070e91d1df8f141cca031ce29) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "a-sp-0.rom", 0x0000, 0x10000, CRC(80e210e7) SHA1(66cff58fb37c52e1d8e0567e13b774253e862585) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_00.rom", 0x00000, 0x20000, CRC(ec5127ef) SHA1(014ac8ad7b19cd9b475b72a0f42a4991119501c4) ) /* sprites */
+ ROM_LOAD( "hh_10.rom", 0x20000, 0x20000, CRC(def65294) SHA1(23f5d99fa9f604fde37cb52113bff233d9be1d25) )
+ ROM_LOAD( "hh_20.rom", 0x40000, 0x20000, CRC(bb0d6ad4) SHA1(4ab617fadfc32efad90ed7f0555513f167b0c43a) )
+ ROM_LOAD( "hh_30.rom", 0x60000, 0x20000, CRC(4351044e) SHA1(0d3ce3f4f1473fd997e70de91e7b5b5a5ec60ad4) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_a0.rom", 0x00000, 0x20000, CRC(c577ba5f) SHA1(c882e58cf64deca8eee6f14f3df43ecc932488fc) ) /* tiles */
+ ROM_LOAD( "hh_a1.rom", 0x20000, 0x20000, CRC(429d12ab) SHA1(ccba25eab981fc4e664f76e06a2964066f2ae2e8) )
+ ROM_LOAD( "hh_a2.rom", 0x40000, 0x20000, CRC(b5b163b0) SHA1(82a708fea4953a7c4dcd1d4a1b07f302221ba30b) )
+ ROM_LOAD( "hh_a3.rom", 0x60000, 0x20000, CRC(8ef566a1) SHA1(3afb020a7317efe89c18b2a7773894ce28499d49) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "a-v0-0.rom", 0x00000, 0x20000, CRC(faaacaff) SHA1(ea3a3920255c07aa9c0a7e0191eae257a9f7f558) )
+ROM_END
+
+ROM_START( dkgensan )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "gen-a-h0.bin", 0x00001, 0x20000, CRC(07a45f6d) SHA1(8ffbd395aad244747d9f87062d2b062f41a4829c) )
+ ROM_LOAD16_BYTE( "gen-a-l0.bin", 0x00000, 0x20000, CRC(46478fea) SHA1(fd4ff544588535333c1b98fbc08446ef49b11212) )
+ ROM_LOAD16_BYTE( "gen-a-h1.bin", 0x60001, 0x10000, CRC(54e5b73c) SHA1(5664f6e0a931b1c139e82dc98fcc9e38acd14616) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "gen-a-l1.bin", 0x60000, 0x10000, CRC(894f8a9f) SHA1(57a0885c52a094def03b129a450cc891e6c075c6) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "gen-a-sp.bin", 0x0000, 0x10000, CRC(e83cfc2c) SHA1(3193bdd06a9712fc499e6fc90a33140463ef59fe) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_00.rom", 0x00000, 0x20000, CRC(ec5127ef) SHA1(014ac8ad7b19cd9b475b72a0f42a4991119501c4) ) /* sprites */
+ ROM_LOAD( "hh_10.rom", 0x20000, 0x20000, CRC(def65294) SHA1(23f5d99fa9f604fde37cb52113bff233d9be1d25) )
+ ROM_LOAD( "hh_20.rom", 0x40000, 0x20000, CRC(bb0d6ad4) SHA1(4ab617fadfc32efad90ed7f0555513f167b0c43a) )
+ ROM_LOAD( "hh_30.rom", 0x60000, 0x20000, CRC(4351044e) SHA1(0d3ce3f4f1473fd997e70de91e7b5b5a5ec60ad4) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_a0.rom", 0x00000, 0x20000, CRC(c577ba5f) SHA1(c882e58cf64deca8eee6f14f3df43ecc932488fc) ) /* tiles */
+ ROM_LOAD( "hh_a1.rom", 0x20000, 0x20000, CRC(429d12ab) SHA1(ccba25eab981fc4e664f76e06a2964066f2ae2e8) )
+ ROM_LOAD( "hh_a2.rom", 0x40000, 0x20000, CRC(b5b163b0) SHA1(82a708fea4953a7c4dcd1d4a1b07f302221ba30b) )
+ ROM_LOAD( "hh_a3.rom", 0x60000, 0x20000, CRC(8ef566a1) SHA1(3afb020a7317efe89c18b2a7773894ce28499d49) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "gen-vo.bin", 0x00000, 0x20000, CRC(d8595c66) SHA1(97920c9947fbac609fb901415e5471c6e4ca066c) )
+ROM_END
+
+ROM_START( dkgenm72 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ge72-h0.bin", 0x00001, 0x20000, CRC(a0ad992c) SHA1(6de4105d8454c4e4e62762fdd7e22829acc2442b) )
+ ROM_LOAD16_BYTE( "ge72-l0.bin", 0x00000, 0x20000, CRC(996396f0) SHA1(1a2501ba46bcbc607f772765e8614bc442154a18) )
+ ROM_LOAD16_BYTE( "ge72-h3.bin", 0x60001, 0x10000, CRC(d8b86005) SHA1(dd626cfe50a823066c54cc24d9fdaaf03d61d1e7) )
+ ROM_RELOAD( 0xe0001, 0x10000 )
+ ROM_LOAD16_BYTE( "ge72-l3.bin", 0x60000, 0x10000, CRC(23d303a5) SHA1(b62010f34d71afb590deae458493454f9af38f7c) )
+ ROM_RELOAD( 0xe0000, 0x10000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "dkgenm72_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "hh_00.rom", 0x00000, 0x20000, CRC(ec5127ef) SHA1(014ac8ad7b19cd9b475b72a0f42a4991119501c4) ) /* sprites */
+ ROM_LOAD( "hh_10.rom", 0x20000, 0x20000, CRC(def65294) SHA1(23f5d99fa9f604fde37cb52113bff233d9be1d25) )
+ ROM_LOAD( "hh_20.rom", 0x40000, 0x20000, CRC(bb0d6ad4) SHA1(4ab617fadfc32efad90ed7f0555513f167b0c43a) )
+ ROM_LOAD( "hh_30.rom", 0x60000, 0x20000, CRC(4351044e) SHA1(0d3ce3f4f1473fd997e70de91e7b5b5a5ec60ad4) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ge72b-a0.bin", 0x00000, 0x10000, CRC(f5f56b2a) SHA1(4ef6602052fa70e765d6d7747e672b7108b44f59) ) /* tiles #1 */
+ ROM_LOAD( "ge72-a1.bin", 0x10000, 0x10000, CRC(d194ea08) SHA1(0270897049cd256472df42f3dda856ee707535cd) )
+ ROM_LOAD( "ge72-a2.bin", 0x20000, 0x10000, CRC(2b06bcc3) SHA1(36378a4a69f3c3da96d2dc8df48916af8de50009) )
+ ROM_LOAD( "ge72-a3.bin", 0x30000, 0x10000, CRC(94b96bfa) SHA1(33c1e9045e7a984097f3fe4954b20d954cffbafa) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "ge72-b0.bin", 0x00000, 0x10000, CRC(208796b3) SHA1(38b90732c8d5c77ee84053364a8a7e3daaaabe66) ) /* tiles #2 */
+ ROM_LOAD( "ge72-b1.bin", 0x10000, 0x10000, CRC(b4a7f490) SHA1(851b40650fc8920b49f43f9cc6f19e845a25e945) )
+ ROM_LOAD( "ge72b-b2.bin", 0x20000, 0x10000, CRC(34fe8f7f) SHA1(fbf8839b26be55ad83ad4db538ba3e196c1ab945) )
+ ROM_LOAD( "ge72b-b3.bin", 0x30000, 0x10000, CRC(4b0e92f4) SHA1(16ad9220ca6708028cea18c1c4b57e2b6eb425b4) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "gen-vo.bin", 0x00000, 0x20000, CRC(d8595c66) SHA1(97920c9947fbac609fb901415e5471c6e4ca066c) )
+ROM_END
+
+ROM_START( poundfor )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ppa-h0-b.9e", 0x00001, 0x20000, CRC(50d4a2d8) SHA1(7fd62c6613cb58b512c6c3670fa66a5b9906e6a1) )
+ ROM_LOAD16_BYTE( "ppa-l0-b.9d", 0x00000, 0x20000, CRC(bd997942) SHA1(da484afe3b79e09e323c768a0b2165e6283971a7) )
+ ROM_LOAD16_BYTE( "ppa-h1.9f", 0x40001, 0x20000, CRC(f6c82f48) SHA1(b38a2f9f0f6439b2cf453fec87ca11d959777ee6) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ppa-l1.9c", 0x40000, 0x20000, CRC(5b07b087) SHA1(04a2403eb8c443cb92b880edc612542acdbcafa4) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "ppa-sp.4j", 0x0000, 0x10000, CRC(3f458a5b) SHA1(d73740b2a548bf8a895909da0841f18d9ed32668) )
+
+ ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ppb-n0.bin", 0x00000, 0x40000, CRC(951a41f8) SHA1(59b64f63ea2452c2b42ff7ebf1ff6fc4e7879ce3) ) /* sprites */
+ ROM_LOAD( "ppb-n1.bin", 0x40000, 0x40000, CRC(c609b7f2) SHA1(1da3550c7e4d2a26d75d143934680d9177ba5c35) )
+ ROM_LOAD( "ppb-n2.bin", 0x80000, 0x40000, CRC(318c0b5f) SHA1(1d4cd17dc2f8fc4e523eaf679f21d83e1bfade4e) )
+ ROM_LOAD( "ppb-n3.bin", 0xc0000, 0x40000, CRC(93dc9490) SHA1(3df4d57a7bf19443f5aa6a416bcee968f81d9059) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ppa-g00.bin", 0x00000, 0x20000, CRC(8a88a174) SHA1(d360b9014aec31960538ee488894496248a820dc) ) /* tiles */
+ ROM_LOAD( "ppa-g10.bin", 0x20000, 0x20000, CRC(e48a66ac) SHA1(49b33db6a922d6f1d1417e28714a67431b7c0217) )
+ ROM_LOAD( "ppa-g20.bin", 0x40000, 0x20000, CRC(12b93e79) SHA1(f3d2b76a30874827c8998c1d13a55a3990b699b7) )
+ ROM_LOAD( "ppa-g30.bin", 0x60000, 0x20000, CRC(faa39aee) SHA1(9cc1a468b304437766c04189054d3b8f7ff1f958) )
+
+ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ppa-v0.bin", 0x00000, 0x40000, CRC(03321664) SHA1(51f2b2b712385c1cd55fd069829efac01838d603) )
+ROM_END
+
+ROM_START( poundfoj )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ppa-h0-.9e", 0x00001, 0x20000, CRC(f0165e3b) SHA1(a0482b34c0d05d8f48d1b16f2bc2d5d9ec465dc8) )
+ ROM_LOAD16_BYTE( "ppa-l0-.9d", 0x00000, 0x20000, CRC(f954f99f) SHA1(6e7a9718dc63e595403bfc0f1ceae4a71dc75133) )
+ ROM_LOAD16_BYTE( "ppa-h1.9f", 0x40001, 0x20000, CRC(f6c82f48) SHA1(b38a2f9f0f6439b2cf453fec87ca11d959777ee6) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ppa-l1.9c", 0x40000, 0x20000, CRC(5b07b087) SHA1(04a2403eb8c443cb92b880edc612542acdbcafa4) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "ppa-sp.4j", 0x0000, 0x10000, CRC(3f458a5b) SHA1(d73740b2a548bf8a895909da0841f18d9ed32668) )
+
+ ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ppb-n0.bin", 0x00000, 0x40000, CRC(951a41f8) SHA1(59b64f63ea2452c2b42ff7ebf1ff6fc4e7879ce3) ) /* sprites */
+ ROM_LOAD( "ppb-n1.bin", 0x40000, 0x40000, CRC(c609b7f2) SHA1(1da3550c7e4d2a26d75d143934680d9177ba5c35) )
+ ROM_LOAD( "ppb-n2.bin", 0x80000, 0x40000, CRC(318c0b5f) SHA1(1d4cd17dc2f8fc4e523eaf679f21d83e1bfade4e) )
+ ROM_LOAD( "ppb-n3.bin", 0xc0000, 0x40000, CRC(93dc9490) SHA1(3df4d57a7bf19443f5aa6a416bcee968f81d9059) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ppa-g00.bin", 0x00000, 0x20000, CRC(8a88a174) SHA1(d360b9014aec31960538ee488894496248a820dc) ) /* tiles */
+ ROM_LOAD( "ppa-g10.bin", 0x20000, 0x20000, CRC(e48a66ac) SHA1(49b33db6a922d6f1d1417e28714a67431b7c0217) )
+ ROM_LOAD( "ppa-g20.bin", 0x40000, 0x20000, CRC(12b93e79) SHA1(f3d2b76a30874827c8998c1d13a55a3990b699b7) )
+ ROM_LOAD( "ppa-g30.bin", 0x60000, 0x20000, CRC(faa39aee) SHA1(9cc1a468b304437766c04189054d3b8f7ff1f958) )
+
+ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ppa-v0.bin", 0x00000, 0x40000, CRC(03321664) SHA1(51f2b2b712385c1cd55fd069829efac01838d603) )
+ROM_END
+
+ROM_START( poundfou )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ppa-ho-a.9e", 0x00001, 0x20000, CRC(ff4c83a4) SHA1(1b7791c784bf7c4774e3200b76d65ab0bf0ff93b) )
+ ROM_LOAD16_BYTE( "ppa-lo-a.9d", 0x00000, 0x20000, CRC(3374ce8f) SHA1(7455f8339aeed0ef3d0567baa804b62ca3615283) )
+ ROM_LOAD16_BYTE( "ppa-h1.9f", 0x40001, 0x20000, CRC(f6c82f48) SHA1(b38a2f9f0f6439b2cf453fec87ca11d959777ee6) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ppa-l1.9c", 0x40000, 0x20000, CRC(5b07b087) SHA1(04a2403eb8c443cb92b880edc612542acdbcafa4) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "ppa-sp.4j", 0x0000, 0x10000, CRC(3f458a5b) SHA1(d73740b2a548bf8a895909da0841f18d9ed32668) )
+
+ ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ppb-n0.bin", 0x00000, 0x40000, CRC(951a41f8) SHA1(59b64f63ea2452c2b42ff7ebf1ff6fc4e7879ce3) ) /* sprites */
+ ROM_LOAD( "ppb-n1.bin", 0x40000, 0x40000, CRC(c609b7f2) SHA1(1da3550c7e4d2a26d75d143934680d9177ba5c35) )
+ ROM_LOAD( "ppb-n2.bin", 0x80000, 0x40000, CRC(318c0b5f) SHA1(1d4cd17dc2f8fc4e523eaf679f21d83e1bfade4e) )
+ ROM_LOAD( "ppb-n3.bin", 0xc0000, 0x40000, CRC(93dc9490) SHA1(3df4d57a7bf19443f5aa6a416bcee968f81d9059) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ppa-g00.bin", 0x00000, 0x20000, CRC(8a88a174) SHA1(d360b9014aec31960538ee488894496248a820dc) ) /* tiles */
+ ROM_LOAD( "ppa-g10.bin", 0x20000, 0x20000, CRC(e48a66ac) SHA1(49b33db6a922d6f1d1417e28714a67431b7c0217) )
+ ROM_LOAD( "ppa-g20.bin", 0x40000, 0x20000, CRC(12b93e79) SHA1(f3d2b76a30874827c8998c1d13a55a3990b699b7) )
+ ROM_LOAD( "ppa-g30.bin", 0x60000, 0x20000, CRC(faa39aee) SHA1(9cc1a468b304437766c04189054d3b8f7ff1f958) )
+
+ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ppa-v0.bin", 0x00000, 0x40000, CRC(03321664) SHA1(51f2b2b712385c1cd55fd069829efac01838d603) )
+ROM_END
+
+ROM_START( airduel )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ad-c-h0.bin", 0x00001, 0x20000, CRC(12140276) SHA1(f218c5f2e6795b6295dea064817d7d6b1a7762b6) )
+ ROM_LOAD16_BYTE( "ad-c-l0.bin", 0x00000, 0x20000, CRC(4ac0b91d) SHA1(97e2f633181cd5c25927fd0e2988af2acdb3f388) )
+ ROM_LOAD16_BYTE( "ad-c-h3.bin", 0x40001, 0x20000, CRC(9f7cfca3) SHA1(becf827aa7749c54f1c435ea224e1fd9c8b3f5f9) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ad-c-l3.bin", 0x40000, 0x20000, CRC(9dd343f7) SHA1(9f499936b6d3807aa5b5c18e9811c73c9a2c99f9) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU3, 0 )
+ ROM_LOAD( "airduel_i8751.mcu", 0x00000, 0x10000, NO_DUMP ) // read protected
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ad-00.bin", 0x00000, 0x20000, CRC(2f0d599b) SHA1(a966f806b5e25bb98cc63c46c49e0e676a62afcf) ) /* sprites */
+ ROM_LOAD( "ad-10.bin", 0x20000, 0x20000, CRC(9865856b) SHA1(b18a06899ae29d45e2351594df544220f3f4485a) )
+ ROM_LOAD( "ad-20.bin", 0x40000, 0x20000, CRC(d392aef2) SHA1(0f639a07066cadddc3884eb490885a8745571567) )
+ ROM_LOAD( "ad-30.bin", 0x60000, 0x20000, CRC(923240c3) SHA1(f587a83329087a715a3e42110f74f104e8c8ef1f) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ad-a0.bin", 0x00000, 0x20000, CRC(ce134b47) SHA1(841358cc222c81b8a91edc262f355310d50b4dbb) ) /* tiles #1 */
+ ROM_LOAD( "ad-a1.bin", 0x20000, 0x20000, CRC(097fd853) SHA1(8e08f4f4a747c899bb8e21b347635e26af9edc2d) )
+ ROM_LOAD( "ad-a2.bin", 0x40000, 0x20000, CRC(6a94c1b9) SHA1(55174acbac54236e5fc1b80d120cd6da9fe5524c) )
+ ROM_LOAD( "ad-a3.bin", 0x60000, 0x20000, CRC(6637c349) SHA1(27cb7c89ab73292b43f8ae3c0d803a01ef3d3936) )
+
+ ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "ad-b0.bin", 0x00000, 0x20000, CRC(ce134b47) SHA1(841358cc222c81b8a91edc262f355310d50b4dbb) ) /* tiles #2 */
+ ROM_LOAD( "ad-b1.bin", 0x20000, 0x20000, CRC(097fd853) SHA1(8e08f4f4a747c899bb8e21b347635e26af9edc2d) )
+ ROM_LOAD( "ad-b2.bin", 0x40000, 0x20000, CRC(6a94c1b9) SHA1(55174acbac54236e5fc1b80d120cd6da9fe5524c) )
+ ROM_LOAD( "ad-b3.bin", 0x60000, 0x20000, CRC(6637c349) SHA1(27cb7c89ab73292b43f8ae3c0d803a01ef3d3936) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ad-v0.bin", 0x00000, 0x20000, CRC(339f474d) SHA1(a81bb52598a0e31b2ed6a538755237c5d14d1844) )
+ROM_END
+
+ROM_START( cosmccop )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "cc-d-h0b.bin", 0x00001, 0x40000, CRC(38958b01) SHA1(7d7e217742e33a1fe096adf5bbc93d63ddcfb375) )
+ ROM_RELOAD( 0x80001, 0x40000 )
+ ROM_LOAD16_BYTE( "cc-d-l0b.bin", 0x00000, 0x40000, CRC(eff87f70) SHA1(61f49b8738cf31546d4182680b761705274b01bf) )
+ ROM_RELOAD( 0x80000, 0x40000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "cc-d-sp.bin", 0x0000, 0x10000, CRC(3e3ace60) SHA1(d89b1b84de2887598bb7bcb17b1df1ec8d1862a9) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "cc-c-00.bin", 0x00000, 0x20000, CRC(9d99deaa) SHA1(acf16bea0f482306107d2a305c568406b6c21e9a) ) // cc-b-n0
+ ROM_LOAD( "cc-c-10.bin", 0x20000, 0x20000, CRC(7eb083ed) SHA1(31fa7d532fd46e861c3d19d5b08661653f685a49) ) // cc-b-n1
+ ROM_LOAD( "cc-c-20.bin", 0x40000, 0x20000, CRC(9421489e) SHA1(e43d042bf8b4ebed93558d74ec479ec60a01ca5c) ) // cc-b-n2
+ ROM_LOAD( "cc-c-30.bin", 0x60000, 0x20000, CRC(920ec735) SHA1(2d0949b43dddce7317c45910d6e4868ddf010806) ) // cc-b-n3
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "cc-d-g00.bin", 0x00000, 0x20000, CRC(e7f3d772) SHA1(c7f0bc42e8dde7bae334c7974c3d0ddba3856144) ) /* tiles */
+ ROM_LOAD( "cc-d-g10.bin", 0x20000, 0x20000, CRC(418b4e4c) SHA1(1191f12741ee7a360240f706534c9c83be8d5c2d) )
+ ROM_LOAD( "cc-d-g20.bin", 0x40000, 0x20000, CRC(a4b558eb) SHA1(0babf725de0065dbeca73fa170bd33565305d129) )
+ ROM_LOAD( "cc-d-g30.bin", 0x60000, 0x20000, CRC(f64a3166) SHA1(1661db2a37c76e6b4552e48c04966dbbccab8926) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "cc-c-v0.bin", 0x00000, 0x20000, CRC(6247bade) SHA1(4bc9f86acd09908c74b1ab0e7817c4ff1cad6f0b) ) // cc-d-v0
+ROM_END
+
+ROM_START( gallop )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "cc-c-h0.bin", 0x00001, 0x20000, CRC(2217dcd0) SHA1(9485b6c3eec99e720439e69dcbe0e55798bbff1c) )
+ ROM_LOAD16_BYTE( "cc-c-l0.bin", 0x00000, 0x20000, CRC(ff39d7fb) SHA1(fad95f76050fce04464268b5edff6622b2cb798f) )
+ ROM_LOAD16_BYTE( "cc-c-h3.bin", 0x40001, 0x20000, CRC(9b2bbab9) SHA1(255d4dda55be667f5f1f4324e9e66111738e79b3) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "cc-c-l3.bin", 0x40000, 0x20000, CRC(acd3278e) SHA1(83d7ddfbdb4bc9548a179b728351a21b3b0ac134) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "cc-c-00.bin", 0x00000, 0x20000, CRC(9d99deaa) SHA1(acf16bea0f482306107d2a305c568406b6c21e9a) ) /* sprites */
+ ROM_LOAD( "cc-c-10.bin", 0x20000, 0x20000, CRC(7eb083ed) SHA1(31fa7d532fd46e861c3d19d5b08661653f685a49) )
+ ROM_LOAD( "cc-c-20.bin", 0x40000, 0x20000, CRC(9421489e) SHA1(e43d042bf8b4ebed93558d74ec479ec60a01ca5c) )
+ ROM_LOAD( "cc-c-30.bin", 0x60000, 0x20000, CRC(920ec735) SHA1(2d0949b43dddce7317c45910d6e4868ddf010806) )
+
+ ROM_REGION( 0x040000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "cc-b-a0.bin", 0x00000, 0x10000, CRC(a33472bd) SHA1(962047fe3dd1fb996285ecef615a8ebdb529adef) ) /* tiles #1 */
+ ROM_LOAD( "cc-b-a1.bin", 0x10000, 0x10000, CRC(118b1f2d) SHA1(7413ccc67a8aa9dae156e6ee122b1ca5beeb9a76) )
+ ROM_LOAD( "cc-b-a2.bin", 0x20000, 0x10000, CRC(83cebf48) SHA1(12847827ecbf6b493eb9dbddd0a469729d87a451) )
+ ROM_LOAD( "cc-b-a3.bin", 0x30000, 0x10000, CRC(572903fc) SHA1(03305301bcf939e97044e746594736b1ca1d7c0a) )
+
+ ROM_REGION( 0x040000, REGION_GFX3, ROMREGION_DISPOSE )
+ ROM_LOAD( "cc-b-b0.bin", 0x00000, 0x10000, CRC(0df5b439) SHA1(0775cf92139a111542c8b5f940da0f7f43020982) ) /* tiles #2 */
+ ROM_LOAD( "cc-b-b1.bin", 0x10000, 0x10000, CRC(010b778f) SHA1(cc5bfeb0fbe0ed2fe513458c5785ec0ce5b02f53) )
+ ROM_LOAD( "cc-b-b2.bin", 0x20000, 0x10000, CRC(bda9f6fb) SHA1(a6b655ae5bff0568c1fb56ee8a3874fc6524052c) )
+ ROM_LOAD( "cc-b-b3.bin", 0x30000, 0x10000, CRC(d361ba3f) SHA1(7348fdae03e997e05187a2726eb221edb92553df) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "cc-c-v0.bin", 0x00000, 0x20000, CRC(6247bade) SHA1(4bc9f86acd09908c74b1ab0e7817c4ff1cad6f0b) )
+ROM_END
+
+ROM_START( kengo )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "ken_d-h0.rom", 0x00001, 0x20000, CRC(f4ddeea5) SHA1(bcf016e40886e11c171f2f50de39ac0d8cabcdd1) )
+ ROM_RELOAD( 0xc0001, 0x20000 )
+ ROM_LOAD16_BYTE( "ken_d-l0.rom", 0x00000, 0x20000, CRC(04dc0f81) SHA1(b296529f0bc26d53b344449dfa5a08eca70f30d8) )
+ ROM_RELOAD( 0xc0000, 0x20000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 )
+ ROM_LOAD( "ken_d-sp.rom", 0x0000, 0x10000, CRC(233ca1cf) SHA1(4ebb6162773bd586a10016ccd77998a9b880f474) )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ken_m31.rom", 0x00000, 0x20000, CRC(e00b95a6) SHA1(6efcd8d58f8ebe3a42c60a0aa790b42c0e132777) ) /* sprites */
+ ROM_LOAD( "ken_m21.rom", 0x20000, 0x20000, CRC(d7722f87) SHA1(8606a53b8630934d2b5dfc986bd92ac4142f67e2) )
+ ROM_LOAD( "ken_m32.rom", 0x40000, 0x20000, CRC(30a844c4) SHA1(72b2caba3ee7a229ca56f004516dea8d3f0a7ba6) )
+ ROM_LOAD( "ken_m22.rom", 0x60000, 0x20000, CRC(a00dac85) SHA1(0c1ed852795046926f62843f6b256cbeecf9ebcf) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "ken_m51.rom", 0x00000, 0x20000, CRC(1646cf4f) SHA1(d240cb2bad3e766128e8e40aa7b1bf4f3b9a5559) ) /* tiles */
+ ROM_LOAD( "ken_m57.rom", 0x20000, 0x20000, CRC(a9f88d90) SHA1(c8d4a96fe55fed4b7499550f3c74b03d10306757) )
+ ROM_LOAD( "ken_m66.rom", 0x40000, 0x20000, CRC(e9d17645) SHA1(fbe18d6691686a1c458d4a91169c9850698b5ca7) )
+ ROM_LOAD( "ken_m64.rom", 0x60000, 0x20000, CRC(df46709b) SHA1(e7c2cd752e765bf7b8ff24637305d61031ce0baa) )
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* samples */
+ ROM_LOAD( "ken_m14.rom", 0x00000, 0x20000, CRC(6651e9b7) SHA1(c42009f986c9a9f35732d5cd717d548536469b1c) )
+ROM_END
+
+
+
+static DRIVER_INIT( kengo )
+{
+ irem_cpu_decrypt(0,gunforce_decryption_table);
+}
+
+
+
+GAME( 1987, rtype, 0, rtype, rtype, 0, ROT0, "Irem", "R-Type (World)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypej, rtype, rtype, rtypep, 0, ROT0, "Irem", "R-Type (Japan)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypejp, rtype, rtype, rtypep, 0, ROT0, "Irem", "R-Type (Japan prototype)", GAME_NO_COCKTAIL )
+GAME( 1987, rtypeu, rtype, rtype, rtype, 0, ROT0, "Irem (Nintendo of America license)", "R-Type (US)", GAME_NO_COCKTAIL )
+GAME( 1987, bchopper, 0, m72, bchopper, bchopper, ROT0, "Irem", "Battle Chopper", GAME_NO_COCKTAIL )
+GAME( 1987, mrheli, bchopper, m72, bchopper, mrheli, ROT0, "Irem", "Mr. HELI no Dai-Bouken", GAME_NO_COCKTAIL )
+GAME( 1988, nspirit, 0, m72, nspirit, nspirit, ROT0, "Irem", "Ninja Spirit", GAME_NO_COCKTAIL )
+GAME( 1988, nspiritj, nspirit, m72, nspirit, nspiritj, ROT0, "Irem", "Saigo no Nindou (Japan)", GAME_NO_COCKTAIL )
+GAME( 1988, imgfight, 0, m72, imgfight, imgfight, ROT270, "Irem", "Image Fight (Japan)", 0 )
+GAME( 1989, loht, 0, m72, loht, loht, ROT0, "Irem", "Legend of Hero Tonma", GAME_NO_COCKTAIL )
+GAME( 1989, lohtj, loht, m72, loht, loht, ROT0, "Irem", "Legend of Hero Tonma (Japan)", GAME_NO_COCKTAIL )
+GAME( 1989, lohtb, loht, m72, loht, 0, ROT0, "Irem", "Legend of Hero Tonma (bootleg)", GAME_NOT_WORKING| GAME_NO_COCKTAIL )
+GAME( 1989, lohtb2, loht, m72_8751, loht, loht_mcu, ROT0, "Irem", "Legend of Hero Tonma (bootleg, set 2)", GAME_NO_COCKTAIL )
+GAME( 1989, xmultipl, 0, xmultipl, xmultipl, xmultipl, ROT0, "Irem", "X Multiply (Japan)", GAME_NO_COCKTAIL )
+GAME( 1989, dbreed, 0, dbreed, dbreed, 0, ROT0, "Irem", "Dragon Breed (M81 pcb version)", GAME_NO_COCKTAIL )
+GAME( 1989, dbreed72, dbreed, dbreed72, dbreed, dbreed72, ROT0, "Irem", "Dragon Breed (M72 pcb version)", GAME_NO_COCKTAIL )
+GAME( 1989, rtype2, 0, rtype2, rtype2, 0, ROT0, "Irem", "R-Type II", GAME_NO_COCKTAIL )
+GAME( 1989, rtype2j, rtype2, rtype2, rtype2, 0, ROT0, "Irem", "R-Type II (Japan)", GAME_NO_COCKTAIL )
+GAME( 1990, majtitle, 0, majtitle, rtype2, 0, ROT0, "Irem", "Major Title (Japan)", GAME_NO_COCKTAIL )
+GAME( 1990, hharry, 0, hharry, hharry, 0, ROT0, "Irem", "Hammerin' Harry (World)", GAME_NO_COCKTAIL )
+GAME( 1990, hharryu, hharry, hharryu, hharry, 0, ROT0, "Irem America", "Hammerin' Harry (US)", GAME_NO_COCKTAIL )
+GAME( 1990, dkgensan, hharry, hharryu, hharry, 0, ROT0, "Irem", "Daiku no Gensan (Japan)", GAME_NO_COCKTAIL )
+GAME( 1990, dkgenm72, hharry, dkgenm72, hharry, dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72)", GAME_NO_COCKTAIL )
+GAME( 1990, poundfor, 0, poundfor, poundfor, 0, ROT270, "Irem", "Pound for Pound (World)", GAME_NO_COCKTAIL )
+GAME( 1990, poundfoj, poundfor, poundfor, poundfor, 0, ROT270, "Irem", "Pound for Pound (Japan)", GAME_NO_COCKTAIL )
+GAME( 1990, poundfou, poundfor, poundfor, poundfor, 0, ROT270, "Irem America", "Pound for Pound (US)", GAME_NO_COCKTAIL )
+GAME( 1990, airduel, 0, m72, airduel, airduel, ROT270, "Irem", "Air Duel (Japan)", 0 )
+GAME( 1991, cosmccop, 0, kengo, gallop, 0, ROT0, "Irem", "Cosmic Cop (World)", GAME_NO_COCKTAIL )
+GAME( 1991, gallop, cosmccop, m72, gallop, gallop, ROT0, "Irem", "Gallop - Armed police Unit (Japan)", GAME_NO_COCKTAIL )
+GAME( 1991, kengo, 0, kengo, kengo, kengo, ROT0, "Irem", "Ken-Go", GAME_NO_COCKTAIL )