summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/toaplan1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/toaplan1.cpp')
-rw-r--r--src/mame/drivers/toaplan1.cpp2929
1 files changed, 2929 insertions, 0 deletions
diff --git a/src/mame/drivers/toaplan1.cpp b/src/mame/drivers/toaplan1.cpp
new file mode 100644
index 00000000000..619ac98c7a5
--- /dev/null
+++ b/src/mame/drivers/toaplan1.cpp
@@ -0,0 +1,2929 @@
+// license:BSD-3-Clause
+// copyright-holders:Darren Olafson, Quench
+/***************************************************************************
+
+ ToaPlan game hardware from 1988-1991
+ ------------------------------------
+ MAME Driver by: Darren Olafson
+ Technical info: Carl-Henrik Skarstedt & Magnus Danielsson
+ Driver updates: Quench
+ Video updates : SUZ
+
+
+Supported games:
+
+ ROM set Toaplan
+ name board No Game name
+ --------------------------------------------------
+ rallybik TP-O12 Rally Bike/Dash Yarou
+ truxton TP-O13B Truxton/Tatsujin
+ hellfire B90 HellFire (2 Player version) Uses Taito rom ID number
+ hellfire1 B90 HellFire (1 Player version) Uses Taito rom ID number
+ hellfire2a B90 HellFire (2 Player older version) Uses Taito rom ID number
+ hellfire1a B90 HellFire (1 Player older version) Uses Taito rom ID number
+ zerowing TP-O15 Zero Wing (2 player simultaneous version)
+ zerowing1 TP-O15 Zero Wing (1 Player version)
+ zerowingw TP-O15 Zero Wing (2 player simultaneous version, Williams Electronics Games, Inc)
+ demonwld TP-O16 Demon's World/Horror Story [1990]
+ demonwl1 TP-O16 Demon's World/Horror Story [1989] (Taito license)
+ demonwl2 TP-O16 Demon's World/Horror Story [1989] (early edition)
+ demonwl3 TP-O16 Demon's World/Horror Story [1989] (first edition)
+ fireshrk TP-O17 Fire Shark (World) [1990]
+ fireshrka TP-O17 Fire Shark (World) [1989]
+ samesame TP-O17 Same! Same! Same! (Japan) [1989] (1 Player version)
+ samesam2 TP-O17 Same! Same! Same! (Japan) [1989] (2 Player version)
+ outzone TP-O18 Out Zone
+ outzoneh TP-018 Out Zone (harder version)
+ outzonea TP-018 Out Zone (old version)
+ outzoneb TP-018 Out Zone (older version)
+ outzonec TP-O18 Out Zone (oldest version, from board serial number 2122)
+ vimana TP-O19 Vimana (From board serial number 1547.04 [July '94])
+ vimanaj TP-O19 Vimana (Japan version)
+ vimanan TP-O19 Vimana (Nova Apparate GMBH & Co license)
+
+
+Notes:
+ Fire Shark and Same! Same! Same! have a hidden function for the
+ service input. When invulnerability is enabled, pressing the
+ service input makes the screen scroll faster.
+
+ Demonwld (Toaplan copyright) is a newer version, and has a different game
+ level sequence compared to the Taito licensed version.
+
+
+Stephh's and AWJ's notes (based on the games M68000 and Z80 code and some tests) :
+
+1) 'rallybik'
+
+ - Region read from DSWB (port 0x50 in CPU1) then stored at 0x8004 (CPU1 shared RAM) =
+ 0x180008.w (CPU0 shared RAM) then stored at 0x0804f4.w .
+ - Coinage relies on bits 4 and 5 of the region (code at 0x0bda in CPU1) :
+ * ..10.... : TOAPLAN_COINAGE_WORLD (tables at 0x0c35 (COIN1) and 0x0c3d (COIN2) in CPU1)
+ * else : TOAPLAN_COINAGE_JAPAN (table at 0x0c25 (COIN1 AND COIN2) in CPU1)
+ - Title screen relies on bits 4 and 5 of the region (code at 0x00220e) :
+ * ..00.... : "Dash Yarou"
+ * else : "Rally Bike"
+ - Notice screen relies on bits 4 and 5 of the region (code at 0x001ac0) :
+ * ..00.... : "FOR USE IN JAPAN ONLY"
+ * else : no notice screen
+ - Copyright relies on bits 4 and 5 of the region (code at 0x001e68) :
+ * ..00.... : "TAITO CORPORATION" / "ALL RIGHTS RESERVED"
+ * ..01.... : "TAITO AMERICA CORP." / "ALL RIGHTS RESERVED"
+ * ..10.... : "TAITO CORP. JAPAN" / "ALL RIGHTS RESERVED"
+ * ..11.... : "TAITO AMERICA CORP." / "LICENCED TO ROMSTAR"
+ - Number of letters for initials relies on bits 4 and 5 of the region
+ (code at 0x0008fe = init - code at 0x0022e8 = enter) :
+ * ..00.... : 6 letters
+ * else : 3 letters
+ - To enter the "test mode", press START1 when the grid is displayed.
+ - When "TEST" Switch is ON, you can do the following with the STARTn buttons :
+ * press START2 to pause game
+ * press START1 to unpause game
+ * when START1 and START2 are pressed, the game enters in "slow motion" mode
+ - When "TEST" Switch is ON, collision and fuel consuption routines are not called.
+ Don't forget to turn the "TEST" Switch OFF when time is over on bonus stage,
+ or the level will never end !
+ - When cabinet is set to "Upright", you can use joystick and buttons from both players
+ (code at 0x001c44).
+
+2) 'truxton'
+
+ - Region read from Territory Jumper (port 0x70 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x18000a.w (CPU0 shared RAM) then stored at 0x081b7c.w .
+ - Coinage relies on bits 0 and 1 of the region (code at 0x0ccc in CPU1) :
+ * ......00 : TOAPLAN_COINAGE_JAPAN (table at 0x0d21 (COIN1 AND COIN2) in CPU1)
+ * ......01 : TOAPLAN_COINAGE_JAPAN (table at 0x0d29 (COIN1 AND COIN2) in CPU1)
+ * ......10 : TOAPLAN_COINAGE_WORLD (tables at 0x0d31 (COIN1) and 0x0d39 (COIN2) in CPU1)
+ * ......11 : TOAPLAN_COINAGE_JAPAN (table at 0x0d21 (COIN1 AND COIN2) in CPU1)
+ - Title screen relies on bits 0 to 2 of the region (code at 0x002c58) :
+ * .....000 : "Tatsujin"
+ * else : "Truxton"
+ - Notice screen relies on bits 0 to 2 of the region (code at 0x004eb0) :
+ * ......1. : no notice screen
+ * .....000 : "FOR USE IN JAPAN ONLY"
+ * else : "FOR USE IN U.S.A. ONLY"
+ - Copyright relies on bits 0 to 2 of the region (code at 0x003050) :
+ * .....000 : "TAITO CORPORATION" / "ALL RIGHTS RESERVED"
+ * .....001 : "TAITO AMERICA CORP." / "LICENCED TO ROMSTAR FOR U.S.A."
+ * .....01. : "TAITO CORPORATION" / "ALL RIGHTS RESERVED"
+ * .....1.. : "TAITO AMERICA CORP."
+ - Number of letters for initials relies on bits 0 to 2 of the region
+ (code at 0x000976 = init - code at 0x0004a6 = enter) :
+ * .....000 : 6 letters
+ * else : 3 letters
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x004546) :
+ * ......00 : "FOR JAPAN"
+ * ......01 : "FOR U.S.A."
+ * ......1. : "FOR EUROPE"
+ Jumpers 3 and 4 status is updated but they are always listed as unused.
+ - To enter the "test mode", press START1 when the grid is displayed.
+ - To enter the sound test, press START2 when the grid is displayed.
+ - Set the "Service Mode" Dip Switch to ON while playing for invulnerability.
+ - Set the "Dip Switch Display" Dip Switch to ON while playing to pause the game.
+ - The "TEST" switch has the same effect as the "Service Mode" Dip Switch (DSWA bit 2).
+ - When cabinet is set to "Upright", you can use joystick and buttons from both players
+ (code at 0x002856).
+
+
+3) 'hellfire' and "clones"
+
+ - The "TEST" switch has the same effect as the "Service Mode" Dip Switch (DSWA bit 2).
+
+3a) 'hellfire'
+
+ - Region read from Territory Jumper (port 0x20 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x0c000a.w (CPU0 shared RAM) then stored at 0x042414.w .
+ - Coinage relies on bits 0 and 1 of the region (code at 0x0bc9 in CPU1) :
+ * ......00 : TOAPLAN_COINAGE_JAPAN (table at 0x0c1e (COIN1 AND COIN2) in CPU1)
+ * ......01 : TOAPLAN_COINAGE_JAPAN (table at 0x0c26 (COIN1 AND COIN2) in CPU1)
+ * ......1. : TOAPLAN_COINAGE_WORLD (tables at 0x0c2e (COIN1) and 0x0c36 (COIN2) in CPU1)
+ - Notice screen relies on bit 0 of the region (code at 0x000600) :
+ * .......0 : "FOR USE IN JAPAN ONLY"
+ * .......1 : "FOR USE IN U.S.A. ONLY"
+ But this routine is only called if both bits 0 and 1 of the region are set to 0
+ (code at 0x0005bc), so there is a notice screen only when the region is set to "Japan".
+ - Copyright always displays "@ TOAPLAN CO. LTD. 1989" but the second line relies on
+ bits 0 and 1 of the region (code at 0x0075dc) :
+ * ......01 : "LICENSED TO TAITO AMERICA CORPORATION"
+ * ....else : "LICENSED TO TAITO CORPORATION"
+ - Number of letters for initials is hard-coded to 3 letters (display ". . .").
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x0009d8) :
+ * ......00 : "FOR JAPAN"
+ * ......01 : "FOR U.S.A."
+ * ......1. : "FOR EUROPE"
+ - When "Invulnerability" Dip Switch is ON, you can do the following with the STARTn buttons :
+ * press START2 to pause game
+ * press START1 to unpause game
+ * when START1 and START2 are pressed, the game enters in "slow motion" mode
+ - DSWA bit 0 ("Cabinet" in the 1P sets) and DSWB bit 7 ("Allow Continue" in the 1P sets)
+ are both unused (they are not even tested).
+
+3b) 'hellfire1'
+
+ - Region read from Territory Jumper (port 0x20 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x0c000a.w (CPU0 shared RAM) then stored at 0x04222e.w .
+ - Same sound CPU as in 'hellfire', so same coinage infos.
+ - Notice screen relies on bits 0 and 1 of the region (code at 0x0005b0) :
+ * ......1. : no notice screen
+ * ......00 : "FOR USE IN JAPAN ONLY"
+ * ......01 : "FOR USE IN U.S.A. ONLY"
+ - Copyright does NOT rely on the region, it is hard-coded in the M68000 ROMS.
+ - Number of letters for initials relies on bit 0 of the region (code at 0x002aec) :
+ * .......0 : 6 letters
+ * .......1 : 3 letters
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x0009c4), but some data has been altered not to display "FOR U.S.A."
+ So you get the following :
+ * ......0. : "FOR JAPAN"
+ * ......1. : "FOR EUROPE"
+ - When "Invulnerability" Dip Switch is ON, you can do the following with the STARTn buttons :
+ * press START2 to pause game
+ * press START1 to unpause game
+ * when START1 and START2 are pressed, the game enters in "slow motion" mode
+ - When cabinet is set to "Upright", you can use joystick and buttons from both players
+ (code at 0x0066ba).
+
+3c) 'hellfire2a'
+
+ - Region read from Territory Jumper (port 0x20 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x0c000a.w (CPU0 shared RAM) then stored at 0x042414.w .
+ - Same sound CPU as in 'hellfire', so same coinage infos.
+ - Notice screen relies on bits 0 and 1 of the region (code at 0x0005c0) :
+ * ......1. : no notice screen
+ * ......00 : "FOR USE IN JAPAN ONLY"
+ * ......01 : "FOR USE IN U.S.A. ONLY"
+ However, because of the 'bra' instruction at 0x00059c, there is never a notice screen !
+ - Copyright does NOT rely on the region, it is hard-coded in the M68000 ROMS.
+ - Number of letters for initials relies on bit 1 of the region in the init routine (code at 0x000fce) :
+ * ......0. : 6 letters
+ * ......1. : 3 letters
+ But there are no more tests on the region and only 3 letters can be entered (display ". . .") .
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x0009d0) :
+ * ......00 : "FOR JAPAN"
+ * ......01 : "FOR U.S.A."
+ * ......1. : "FOR EUROPE"
+ - There is no "Invulnerability" Dip Switch, but when bit 2 of RAM address 0x042685.b is set
+ you can't die, and when bit 0 of the same address is set you can pause and enter slow motion.
+ However, I can't find any condition that causes either of these bits to be set :(
+ - Like older games (from Flying Shark to Truxton) "service mode" shows only a grid with colors,
+ and there is a separate "Dip Switch Display" (DSWB bit 6).
+ - To enter the "test mode", press START1 when the grid is displayed.
+ - To enter the sound test, press START2 when the grid is displayed.
+ - DSWA bit 0 ("Cabinet" in the 1P sets) and DSWB bit 7 ("Allow Continue" in the 1P sets)
+ are both unused. However, in the Dip Switches screen they are both listed as used !
+ - The other sets have checksums near the end of the M68000 program ROMs starting at 0x03fff0,
+ but in 'hellfire2a' the "checksums" are 0xffffffff ! However, because of the 'ori #$4, SR'
+ instruction at 0x000782, the ROM checksum test always "passes".
+ - Based on the incorrect Dip Switch Display, the absent ROM checksums and patched-out ROM test,
+ I wonder if this is some kind of prototype or test version.
+
+3d) 'hellfire1a'
+
+ - Region read from Territory Jumper (port 0x20 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x0c000a.w (CPU0 shared RAM) then stored at 0x04222e.w .
+ - Coinage relies on bits 0 and 1 of the region (code at 0x0bb7 in CPU1) :
+ * ......00 : TOAPLAN_COINAGE_JAPAN (table at 0x0c0c (COIN1 AND COIN2) in CPU1)
+ * ......01 : TOAPLAN_COINAGE_JAPAN (table at 0x0c14 (COIN1 AND COIN2) in CPU1)
+ * ......10 : TOAPLAN_COINAGE_WORLD (tables at 0x0c1c (COIN1) and 0x0c24 (COIN2) in CPU1)
+ * ......11 : TOAPLAN_COINAGE_JAPAN (table at 0x0c0c (COIN1 AND COIN2) in CPU1)
+ - Notice screen relies on bits 0 and 1 of the region (code at 0x0005b0) :
+ * ......1. : no notice screen
+ * ......00 : "FOR USE IN JAPAN ONLY"
+ * ......01 : "FOR USE IN U.S.A. ONLY"
+ - Copyright does NOT rely on the region, it is hard-coded in the M68000 ROMS.
+ - Number of letters for initials relies on bits 0 and 1 of the region, but it is buggy :
+ in the init routine (code at 0x001386), bit 1 is tested (0 = 6 letters - 1 = 3 letters),
+ but in the enter routine (code at 0x002c98), bit 0 is tested ! So you get the following :
+ * ......00 : 6 letters with default high-scores initials filled with "......"
+ * ......01 : 3 letters with default high-scores initials filled with " ..."
+ * ......10 : 6 letters with default high-scores initials filled with "...000"
+ * ......11 : 3 letters with default high-scores initials filled with " ..."
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x0009ba) :
+ * ......00 : "FOR JAPAN"
+ * ......01 : "FOR U.S.A."
+ * ......1. : "FOR EUROPE"
+ - There is no "Invulnerability" Dip Switch, but when bit 2 of RAM address 0x0424b1.b is set
+ you can't die, and when bit 0 of the same address is set you can pause and enter slow motion.
+ However, I can't find any condition that causes either of these bits to be set :(
+ - Like older games (from Flying Shark to Truxton) "service mode" shows only a grid with colors,
+ and there is a separate "Dip Switch Display" (DSWB bit 6).
+ - To enter the "test mode", press START1 when the grid is displayed.
+ - To enter the sound test, press START2 when the grid is displayed.
+ - When cabinet is set to "Upright", you can use joystick and buttons from both players
+ (code at 0x0068ec).
+ - The other sets have 29 sounds you can play in the sound test, but 'hellfire1a' has only 28.
+ In the other sets "sound number 14" is a sound effect and "sound number 15" is the first BGM,
+ but 'hellfire1a' is missing that sound effect and instead "sound number 14" is the first BGM !
+ - The slightly different coinage and the "missing" sound effect account for the differences in
+ the Z80 code between 'hellfire1a' and the other sets.
+
+
+4) 'zerowing' and "clones"
+
+ - When "Invulnerability" Dip Switch is ON, you can do the following with the STARTn buttons :
+ * press START2 to pause game
+ * press START1 to unpause game
+ * when START1 and START2 are pressed, the game enters in "slow motion" mode
+ - When "Invulnerability" Dip Switch is ON, you can't die (of course), but you also can't move
+ nor shoot while "captured" by an enemy or the background ! So you have to wait until enemy
+ gives up or background scrolls enough to "free" you.
+ - The "TEST" switch has the same effect as the "Service Mode" Dip Switch (DSWA bit 2).
+
+4a) 'zerowing'
+
+ - Region read from Territory Jumper (port 0x70 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x44000a.w (CPU0 shared RAM) then stored at 0x081810.w .
+ - Coinage relies on bits 0 and 1 of the region (code at 0x0c59 in CPU1) :
+ * ......00 : TOAPLAN_COINAGE_JAPAN (table at 0x0cae (COIN1 AND COIN2) in CPU1)
+ * ......01 : TOAPLAN_COINAGE_JAPAN (table at 0x0cb6 (COIN1 AND COIN2) in CPU1)
+ * ......1. : TOAPLAN_COINAGE_WORLD (tables at 0x0cbe (COIN1) and 0x0cc6 (COIN2) in CPU1)
+ - Notice screen relies on bit 0 of the region (code at 0x000564) :
+ * .......0 : "FOR USE IN JAPAN ONLY"
+ * .......1 : "FOR USE IN U.S.A. ONLY"
+ But this routine is only called if both bits 0 and 1 of the region are set to 0
+ (code at 0x000530), so there is a notice screen only when the region is set to "Japan".
+ - Copyright does NOT rely on the region, it is hard-coded in the M68000 ROMS.
+ - Number of letters for initials relies on bits 0 and 1 of the region, but it is buggy :
+ in the init routine (code at 0x000de0), bit 1 is tested (0 = 6 letters - 1 = 3 letters),
+ but in the enter routine (code at 0x001bf4), bit 0 is tested ! So you get the following :
+ * ......00 : 6 letters with default high-scores initials filled with "......"
+ * ......01 : 3 letters with default high-scores initials filled with " ..."
+ * ......10 : 6 letters with default high-scores initials filled with "...000"
+ * ......11 : 3 letters with default high-scores initials filled with " ..."
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x000922) :
+ * ......00 : "FOR JAPAN"
+ * ......01 : "FOR U.S.A."
+ * ......1. : "FOR EUROPE"
+ - When cabinet is set to "Upright", you can use joystick and buttons from both players
+ (code at 0x00541a).
+
+4b) 'zerowing2'
+
+ - Region read from Territory Jumper (port 0x70 in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x44000a.w (CPU0 shared RAM) then stored at 0x081ae2.w .
+ - Same sound CPU as in 'zerowing', so same coinage infos.
+ - Notice screen relies on bits 0 and 1 of the region (code at 0x0005c2) :
+ * ......1. : no notice screen
+ * ......00 : "FOR USE IN JAPAN ONLY"
+ * ......01 : "FOR USE IN U.S.A. ONLY"
+ However, because of the 'bra' instruction at 0x00059e, there is never a notice screen !
+ - Copyright does NOT rely on the region, it is hard-coded in the M68000 ROMS.
+ It is different from the one in 'zerowing' though.
+ - Number of letters for initials relies on bit 1 of the region in the init routine (code at 0x000e64) :
+ * ......0. : 6 letters
+ * ......1. : 3 letters
+ But there are no more tests on the region and only 3 letters can be entered (display ". . .") .
+ - Jumper displayed in the Dip Switches screen relies on bits 0 and 1 of the region
+ (code at 0x0009b2), but some data has been altered not to display "FOR JAPAN"
+ So you get the following :
+ * ......0. : "FOR U.S.A."
+ * ......1. : "FOR EUROPE"
+ - DSWA bit 0 ("Cabinet" in the 1P set) and DSWB bit 7 ("Allow Continue" in the 1P set)
+ are both unused (they are not even tested).
+ - Here are some differences I noticed with 'zerowing' :
+ * you get the twin ships when starting a new life
+ * speed range is 0x14-0x2c instead of 0x10-0x30 (but still +0x08)
+ There might be some other differences, but as the M68000 code is heavily modified and as
+ many addresses in RAM are different, it isn't very easy to spot which ones :( Any help is welcome !
+
+
+5) 'demonwld' and "clones"
+
+ TO DO !
+
+
+6) 'fireshrk' and "clones"
+
+ TO DO !
+
+
+7) 'outzone' and "clones"
+
+ - The "TEST" switch has the same effect as the "Invulnerability" Dip Switch (DSWB bit 6).
+
+7a) 'outzone'
+
+ - Region read from Territory Jumper (port 0x1c in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x14000a.w (CPU0 shared RAM) then 0x2401ca.w is set based on bits 0 to 3 of the region
+ (code at 0x013b68):
+ * ....0000 : 0x2401ca.w = 0000 (display Japanese story demo, etc.)
+ * ....0001 : 0x2401ca.w = 0001 (display FBI logo)
+ * ....0010 : 0x2401ca.w = 0002
+ * ....0011 : 0x2401ca.w = 0003
+ * ....0100 : 0x2401ca.w = 0004
+ * ....0101 : 0x2401ca.w = 0005
+ * ....0110 : 0x2401ca.w = 0006
+ * ....0111 : 0x2401ca.w = 0007 (display FBI logo)
+ * ....1000 : 0x2401ca.w = 0008
+ * else : 0x2401ca.w = 0000 (display Japanese story demo, etc.)
+ This RAM address is also checked in many other places in the M68000 code.
+ - Coinage relies on bits 0 to 3 of the region (code at 0x0e77 in CPU1) :
+ * ....0001 : TOAPLAN_COINAGE_JAPAN (table at 0x0f04 (COIN1 AND COIN2) in CPU1)
+ * ....0010 : TOAPLAN_COINAGE_WORLD (tables at 0x0f0c (COIN1) and 0x0f14 (COIN2) in CPU1)
+ * else : TOAPLAN_COINAGE_JAPAN (table at 0x0efc (COIN1 AND COIN2) in CPU1)
+ - Notice screen relies on region stored at 0x2401ca.w (code at 0x013bbc) :
+ * 0000 : "JAPAN ONLY"
+ * 0001 : "U.S.A. ONLY"
+ * 0002 : "EUROPE ONLY"
+ * 0003 : "HONG KONG ONLY"
+ * 0004 : "KOREA ONLY"
+ * 0005 : "TAIWAN ONLY"
+ * 0006 : "TAIWAN ONLY"
+ * 0007 : "U.S.A. ONLY"
+ * 0008 : "HONG KONG & CHINA"
+ - Copyright relies on region stored at 0x2401ca.w (code at 0x0050b4 - table at 0x0050e8) :
+ * 0000 : "@ TOAPLAN CO.,LTD. 1990" / "ALL RIGHTS RESERVED" / "" / ""
+ * 0001 : "@1990 TOAPLAN CO.,LTD." / "ALL RIGHTS RESERVED" / "" / ""
+ * 0002 : "@1990 TOAPLAN CO.,LTD." / "ALL RIGHTS RESERVED" / "" / ""
+ * 0003 : "@1990 TOAPLAN CO.,LTD." / "ALL RIGHTS RESERVED" / "" / ""
+ * 0004 : "@1990 TOAPLAN CO.,LTD." / "ALL RIGHTS RESERVED" / "" / ""
+ * 0005 : "@1990 TOAPLAN CO.,LTD." / "ALL RIGHTS RESERVED" / "" / ""
+ * 0006 : "@1990 TOAPLAN CO.,LTD." / "LICENSED TO" / "SPACY CO.,LTD." / "FOR TAIWAN"
+ * 0007 : "@1990 TOAPLAN CO.,LTD." / "LICENSED TO" / "ROMSTAR, INC." / "FOR U.S.A."
+ * 0008 : "@1990 TOAPLAN CO.,LTD." / "LICENSED TO" / "HONEST TRADING CO." / "FOR HONG KONG & CHINA"
+ If 0x2401ca.w >= 0006, the Toaplan logo is moved up to make room for the additional lines of text.
+
+7b) 'outzoneh'
+
+ - Same sound CPU as in 'outzone', so same coinage infos.
+ - Same notice screen and copyright infos as 'outzone'.
+ - This set is very similar to 'outzone'. I have found the following differences:
+ - Table at 0x000f70 contains data related to the "Difficulty" Dip Switches:
+ DSWB & 0x3 'outzoneh' 'outzone' and others
+ ---------- ---------- --------------------
+ * ......00 04 02
+ * ......01 00 00
+ * ......10 08 04
+ * ......11 0C 08
+ So "Normal" difficulty in 'outzoneh' is equivalent to "Hard" in the other sets,
+ "Hard" is equivalent to "Very Hard" in the other sets, and "Very Hard" is even
+ more difficult!
+ - Code in these routines is different from 'outzone' and the other sets:
+ 'outzoneh' 'outzone' When executed?
+ ---------- --------- --------------
+ * 0x005570 0x005570 once per spawn of first enemy type in game (brown with red 'gun' and blue 'eyes')
+ * 0x005800 0x005810 once per spawn of another enemy type (near end of stage 1, not sure which one)
+ * 0x00c140 0x00c160 once per spawn of many enemy types
+ * 0x00c1e0 0x00c214 once per frame while fighting stage bosses
+ - In the first three routines, the code in 'outzoneh' is shorter than the code in 'outzone'
+ and the other sets. It looks like the other sets check some conditions (stage number,
+ play time, etc.) to decide whether to spawn a weaker or stronger version of the enemy,
+ while 'outzoneh' skips some of those checks and spawns the stronger version more often.
+ - For the fourth routine, all sets except 'outzoneh' have 'rts' as the first instruction,
+ so 'outzoneh' is the only set where this routine actually does anything.
+ However, other than somehow relating to bosses, I don't yet know what it does :(
+ - Because the player input data for the demonstrations isn't changed to compensate
+ for the higher difficulty, the player dies almost immediately in the second demo.
+ - Due to the shorter code in 'outzoneh', all code and data between 0x005578 and 0x0142a0
+ is shifted, so there may be other differences I have overlooked. In particular, the
+ special item the player picks up in the first demo is different, and I haven't found
+ exactly why. Special items seem to be affected by a pseudorandom number generator,
+ so the different item could merely be due to different execution timing between sets.
+
+7c) 'outzonea'
+
+ - Same sound CPU as in 'outzone', so same coinage infos.
+ - This set is almost identical to 'outzone', with only two differences :
+ - The 'jmp' instruction at 0x0003e6 goes to an invalid instruction, causing a crash
+ if you set the "Service Mode" Dip Switch to ON while the game is running.
+ 'outzonea' is the only set with this bug, the other four sets all correctly
+ go to service mode.
+ - Notice and copyright for region 0008 say "HONG KONG" instead of "HONG KONG & CHINA".
+ Because of the shorter text, data between 0x015dd1 and 0x016f73 is shifted.
+
+7d) 'outzoneb'
+
+ - Different sound CPU program from 'outzone', but same coinage infos.
+ - Sound data in the sound CPU ROM is different. Because the data in 'outzoneb' is shorter,
+ all data and code after 0x1ac3 is shifted. It looks like the actual changes are in data
+ used by sounds 2, 8, and 19. However, I can't hear any obvious differences :(
+ - This set's sound CPU ROM lacks a checksum. However, because of the 'xor a' instruction
+ at 0x50e6, the ROM checksum test always "passes".
+ - Same notice screen and copyright infos as 'outzonea'.
+ - This set has many M68000 code and data differences from the other sets, too many
+ to list one by one as with 'outzoneh'. Many RAM addresses used are also different.
+ - Spelling error on the Sound Check screen: "BUTTAN" instead of "BUTTON".
+ - This set and 'outzonec' have a hidden use for the two "Unused" Dip Switches.
+ If DSWA bit 0 ("Unused") and DSWB bit 7 (also "Unused") are both set to ON and
+ P2 joystick is held DOWN during startup, the CRTC registers are programmed for a
+ smaller VTOTAL than usual, giving a higher frame rate but cutting off the edges
+ of the screen (the effect of this isn't correctly emulated yet)
+ - Likewise, if DSWA bit 0 is ON and DSWB bit 7 is OFF, the game never starts up
+ (it seems to infinitely repeat one of the RAM tests)
+
+7e) 'outzonec'
+
+ - Region read from Territory Jumper (port 0x1c in CPU1) then stored at 0x8005 (CPU1 shared RAM) =
+ 0x14000a.w (CPU0 shared RAM), then 0x2401ca.w is set based on bits 0 to 2 of the region
+ (code at 0x012742) :
+ * .....000 : 0x2401ca.w = 0000 (display Japanese story demo, etc.)
+ * .....001 : 0x2401ca.w = 0001 (display FBI logo)
+ * .....002 : 0x2401ca.w = 0002
+ * else : 0x2401ca.w = 0003
+ This RAM address is also checked in many other places in the M68000 code.
+ - Same coinage infos as 'outzone', but see below about the sound CPU.
+ - Notice screen relies directly on bits 0 to 2 of the region stored at 0x14000a.w,
+ NOT on 0x2401ca.w (code at 0x01277a):
+ * .....000 : "JAPAN ONLY"
+ * .....001 : "U.S.A. ONLY"
+ * .....010 : "EUROPE ONLY"
+ * .....011 : "HONG KONG ONLY"
+ * .....100 : "KOREA ONLY"
+ * .....101 : "TAIWAN ONLY"
+ * else : no notice screen
+ - Copyright does NOT rely on the region, it is hard-coded in the M68000 ROMS.
+ - This set has by far the most code and data differences from any of the other sets.
+ However, it is slightly more similar to 'outzoneb' than to the other three.
+ - Same "BUTTAN" spelling error on the Sound Check screen as 'outzoneb'.
+ - Same use for the "unused" Dip Switches as 'outzoneb'.
+ - Many of the sound commands the M68000 sends to the Z80 are shifted by 2
+ compared to the other sets, e.g.:
+ Sound effect 'outzonec' 'outzone' and others
+ ------------ ---------- --------------------
+ * Japanese story text no sound 0x26
+ * player 8-way shot 0x26 0x28
+ * player 3-way shot 0x27 0x29
+ * title logo letters 0x2a 0x2c
+ For this reason this set plays many different (and strange/inappropriate)
+ sound effects from the other sets. This is probably not intentional, but rather
+ this set probably should have a different sound CPU ROM, like 'hellfire1a' does.
+ The M68000 code in this set is definitely older than 'outzoneb', but the Z80 code
+ is newer than 'outzoneb', which seems very unlikely to be correct.
+ Most likely the board it came from was either bootlegged or repaired by someone
+ who used the wrong Z80 ROM and didn't notice or care that the sounds were wrong.
+ Because of this I've tagged the Z80 ROM as a BAD_DUMP and tagged this set with
+ MACHINE_IMPERFECT_SOUND until the correct Z80 ROM is found and dumped.
+
+
+8) 'vimana' and "clones"
+
+8a) 'vimana'
+
+ - Region read from Territory Jumper (0x440011.b).
+ - Coinage relies on bits 0 to 3 of the region :
+ * ....0010 : TOAPLAN_COINAGE_WORLD
+ * else : TOAPLAN_COINAGE_JAPAN
+ This a guess based on the "test mode" (code at 0x01a804) because of the missing Z180 CPU.
+ - Notice screen relies on bits 0 to 3 of the region (code at 0x018bf2 - table at 0x019736) :
+ * ....0000 : "JAPAN ONLY"
+ * ....0001 : "U.S.A. ONLY"
+ * ....0010 : "EUROPE ONLY"
+ * ....0011 : "HONG KONG ONLY"
+ * ....0100 : "KOREA ONLY"
+ * ....0101 : "TAIWAN ONLY"
+ * ....0110 : "TAIWAN ONLY"
+ * ....0111 : "U.S.A. ONLY"
+ * ....1000 : "HONG KONG ONLY"
+ * ....1001 : ""
+ * ....1010 : ""
+ * ....1011 : ""
+ * ....1100 : ""
+ * ....1101 : ""
+ * ....1110 : ""
+ * ....1111 : "JAPAN ONLY"
+ - Copyright always displays "@ TOAPLAN CO. LTD. 1991" but the other lines rely on
+ bits 0 to 3 of the region (code at 0x016512 - tables at 0x01948e and 0x019496) :
+ * ....0000 : "DISTRIBUTED BY" / ""
+ * ....0001 : "ALL RIGHTS RESERVED" / ""
+ * ....0010 : "ALL RIGHTS RESERVED" / ""
+ * ....0011 : "ALL RIGHTS RESERVED" / ""
+ * ....0100 : "ALL RIGHTS RESERVED" / ""
+ * ....0101 : "ALL RIGHTS RESERVED" / ""
+ * ....0110 : "LICENCED TO SPACY CO., LTD" / "FOR TAIWAN"
+ * ....0111 : "LICENCED TO ROMSTAR, INC." / "FOR U.S.A."
+ * ....1000 : "LICENCED TO HONEST TRADING CO." / "FOR HONG KONG AND CHINA."
+ * ....1001 : "" / ""
+ * ....1010 : "" / ""
+ * ....1011 : "" / ""
+ * ....1100 : "" / ""
+ * ....1101 : "" / ""
+ * ....1110 : "" / ""
+ * ....1111 : "DISTRIBUTED BY" / ""
+ An additional Tecmo logo also relies on bits 0 to 3 of the region :
+ * ....0000 : display
+ * ....1111 : display
+ * else : no display
+ So the Tecmo logo is only displayed when the region is set to "Japan" (right to the
+ "DISTRIBUTED BY" text).
+ - FBI logo (after displaying the hi-scores) relies on bits 0 to 3 of the region
+ (code at 0x0163f4) :
+ * ....0001 : display
+ * ....0111 : display
+ * else : no display
+ So the FBI logo is only displayed when the region is set to "USA" or "USA (Romstar)".
+ - Number of letters for initials is hard-coded to 3 letters.
+ - Jumper displayed in the Dip Switches screen relies on bits 0 to 3 of the region
+ (code at 0x01a89c - tables at 0x019d1e) :
+ * ....0000 : "FOR JAPAN. "
+ * ....0001 : "FOR U.S.A. "
+ * ....0010 : "FOR EUROPE "
+ * ....0011 : "FOR HONG KONG"
+ * ....0100 : "FOR KOREA "
+ * ....0101 : "FOR TAIWAN "
+ * ....0110 : "FOR TAIWAN "
+ * ....0111 : "FOR U.S.A. "
+ * ....1000 : "FOR HONG KONG"
+ * ....1001 : " "
+ * ....1010 : " "
+ * ....1011 : " "
+ * ....1100 : " "
+ * ....1101 : " "
+ * ....1110 : " "
+ * ....1111 : "FOR JAPAN. "
+ - When "Invulnerability" Dip Switch is ON, you can do the following with the STARTn buttons :
+ * press START2 to pause game
+ * press START1 to unpause game
+ * when START1 and START2 are pressed, the game enters in "slow motion" mode
+ - When "Invulnerability" Dip Switch is ON, you can press F1 ("Fast Scrolling", in fact
+ the unused 3rd button of player 1) to advance quickly to your desired area.
+ - When "Invulnerability" Dip Switch is ON, you can press the unused 3rd button of player 2,
+ but as its effect is completely unknown (code at 0x0010aa), I've decided not to map it for now.
+ - It's hard to tell which regions can be used for this set and which one is the default one.
+ However, as the text at the "end" (after the "CONGRATULATIONS" message) is in English,
+ I've decided to disable the ones related to Japan (0x00 and 0x0f).
+ - Routine at 0x017c18 is sound related and is seems to share memory with the Z180.
+ Unfortunately I haven't been able to understand yet how to produce a sound :(
+ Routine at 0x017ca6 stops producing a sound by reseting values in shared memory with the Z180.
+
+8b) 'vimanan'
+
+ - The only difference with 'vimana' is the different copyright when region is set to Europe :
+ * ....0010 : "NOVA APPARATE GMBH & CO" / ""
+ Because of this additional text, other texts, code and data are shifted after 0x019e9c.
+
+8c) 'vimanaj'
+
+ - The only difference I've noticed with 'vimana' is the text at the "end" is in Japanese.
+ This is why I've disabled all regions which aren't related to Japan.
+ - Sound routines at 0x01792c and 0x0179ba.
+
+
+To Do:
+ Add support for HD647180 (Z180) sound CPUs (once their internal ROMS are dumped).
+ These are:
+ Fire Shark / Same! Same! Same!
+ Vimana
+ In the meantime, it can be interesting to simulate the basic communications (coinage and credits)
+ between the M68000 and the Z180. [stephh]
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "cpu/z180/z180.h"
+#include "cpu/tms32010/tms32010.h"
+#include "includes/toaplipt.h"
+#include "includes/toaplan1.h"
+#include "sound/3812intf.h"
+
+
+/***************************** 68000 Memory Map *****************************/
+
+static ADDRESS_MAP_START( rallybik_main_map, AS_PROGRAM, 16, toaplan1_rallybik_state )
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM
+ AM_RANGE(0x040000, 0x07ffff) AM_ROM
+ AM_RANGE(0x080000, 0x083fff) AM_RAM
+ AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE(0x100000, 0x100001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x100002, 0x100003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x100004, 0x100007) AM_READWRITE(rallybik_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x100010, 0x10001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0x140000, 0x140001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x140000, 0x140001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x140002, 0x140003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x140008, 0x14000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x144000, 0x1447ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x146000, 0x1467ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x180000, 0x180fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
+ AM_RANGE(0x1c0000, 0x1c0003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x1c8000, 0x1c8001) AM_WRITE(toaplan1_reset_sound_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( truxton_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x080000, 0x083fff) AM_RAM
+ AM_RANGE(0x0c0000, 0x0c0001) AM_READ(toaplan1_frame_done_r)
+ AM_RANGE(0x0c0002, 0x0c0003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0x0c0004, 0x0c0005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0x0c0006, 0x0c0007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ AM_RANGE(0x100000, 0x100001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x100002, 0x100003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x100004, 0x100007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x100010, 0x10001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0x140000, 0x140001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x140000, 0x140001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x140002, 0x140003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x140008, 0x14000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x144000, 0x1447ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x146000, 0x1467ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x180000, 0x180fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
+ AM_RANGE(0x1c0000, 0x1c0003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x1c0006, 0x1c0007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ AM_RANGE(0x1d0000, 0x1d0001) AM_WRITE(toaplan1_reset_sound_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( hellfire_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x040000, 0x047fff) AM_RAM
+ AM_RANGE(0x080000, 0x080001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x080000, 0x080001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x080002, 0x080003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x080008, 0x08000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x084000, 0x0847ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x086000, 0x0867ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x0c0000, 0x0c0fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
+ AM_RANGE(0x100000, 0x100001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x100002, 0x100003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x100004, 0x100007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x100010, 0x10001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0x140000, 0x140001) AM_READ(toaplan1_frame_done_r)
+ AM_RANGE(0x140002, 0x140003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0x140004, 0x140005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0x140006, 0x140007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ AM_RANGE(0x180000, 0x180003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x180006, 0x180007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ AM_RANGE(0x180008, 0x180009) AM_WRITE(toaplan1_reset_sound_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( zerowing_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM
+ AM_RANGE(0x040000, 0x07ffff) AM_ROM
+ AM_RANGE(0x080000, 0x087fff) AM_RAM
+ AM_RANGE(0x0c0000, 0x0c0003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x0c0006, 0x0c0007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ AM_RANGE(0x400000, 0x400001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x400002, 0x400003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x400008, 0x40000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x404000, 0x4047ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x406000, 0x4067ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x440000, 0x440fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
+ AM_RANGE(0x480000, 0x480001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x480002, 0x480003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x480004, 0x480007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x480010, 0x48001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0x4c0000, 0x4c0001) AM_READ(toaplan1_frame_done_r)
+ AM_RANGE(0x4c0002, 0x4c0003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0x4c0004, 0x4c0005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0x4c0006, 0x4c0007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( demonwld_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x400000, 0x400001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x400002, 0x400003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x400008, 0x40000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x404000, 0x4047ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x406000, 0x4067ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x600000, 0x600fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
+ AM_RANGE(0x800000, 0x800001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x800002, 0x800003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x800004, 0x800007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x800010, 0x80001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0xa00000, 0xa00001) AM_READ(toaplan1_frame_done_r)
+ AM_RANGE(0xa00002, 0xa00003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0xa00004, 0xa00005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0xa00006, 0xa00007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ AM_RANGE(0xc00000, 0xc03fff) AM_RAM
+ AM_RANGE(0xe00000, 0xe00003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0xe00006, 0xe00007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ AM_RANGE(0xe00008, 0xe00009) AM_WRITE(toaplan1_reset_sound_w)
+ AM_RANGE(0xe0000a, 0xe0000b) AM_WRITE(demonwld_dsp_ctrl_w) /* DSP Comms control */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( samesame_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM
+ AM_RANGE(0x040000, 0x07ffff) AM_ROM
+ AM_RANGE(0x080000, 0x080003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x080006, 0x080007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ AM_RANGE(0x0c0000, 0x0c3fff) AM_RAM /* Frame done at $c1ada */
+ AM_RANGE(0x100000, 0x100001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x100000, 0x100001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x100002, 0x100003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x100008, 0x10000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x104000, 0x1047ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x106000, 0x1067ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x140000, 0x140001) AM_READ_PORT("P1")
+ AM_RANGE(0x140002, 0x140003) AM_READ_PORT("P2")
+ AM_RANGE(0x140004, 0x140005) AM_READ_PORT("DSWA")
+ AM_RANGE(0x140006, 0x140007) AM_READ_PORT("DSWB")
+ AM_RANGE(0x140008, 0x140009) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x14000a, 0x14000b) AM_READ(samesame_port_6_word_r) /* Territory, and MCU ready */
+ AM_RANGE(0x14000c, 0x14000d) AM_WRITE(samesame_coin_w) /* Coin counter/lockout */
+// AM_RANGE(0x14000e, 0x14000f) AM_WRITE(samesame_mcu_w) /* Commands sent to HD647180 */
+ AM_RANGE(0x180000, 0x180001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x180002, 0x180003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x180004, 0x180007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x180010, 0x18001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0x1c0000, 0x1c0001) AM_READ(toaplan1_frame_done_r)
+// AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(?? disable sprite refresh ??)
+ AM_RANGE(0x1c0002, 0x1c0003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0x1c0004, 0x1c0005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0x1c0006, 0x1c0007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( outzone_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x100000, 0x100001) AM_READ(toaplan1_frame_done_r)
+ AM_RANGE(0x100002, 0x100003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0x100004, 0x100005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0x100006, 0x100007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ AM_RANGE(0x140000, 0x140fff) AM_READWRITE(toaplan1_shared_r, toaplan1_shared_w)
+ AM_RANGE(0x200000, 0x200001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x200002, 0x200003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x200004, 0x200007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x200010, 0x20001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ AM_RANGE(0x240000, 0x243fff) AM_RAM
+ AM_RANGE(0x300000, 0x300001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x300000, 0x300001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x300002, 0x300003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x300008, 0x30000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x304000, 0x3047ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x306000, 0x3067ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x340000, 0x340003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x340006, 0x340007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( vimana_main_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x080000, 0x080003) AM_WRITE(toaplan1_tile_offsets_w)
+ AM_RANGE(0x080006, 0x080007) AM_WRITE(toaplan1_fcu_flipscreen_w)
+ AM_RANGE(0x0c0000, 0x0c0001) AM_READ(toaplan1_frame_done_r)
+ AM_RANGE(0x0c0002, 0x0c0003) AM_READWRITE(toaplan1_spriteram_offs_r, toaplan1_spriteram_offs_w)
+ AM_RANGE(0x0c0004, 0x0c0005) AM_READWRITE(toaplan1_spriteram16_r, toaplan1_spriteram16_w)
+ AM_RANGE(0x0c0006, 0x0c0007) AM_READWRITE(toaplan1_spritesizeram16_r, toaplan1_spritesizeram16_w)
+ AM_RANGE(0x400000, 0x400001) AM_READ_PORT("VBLANK")
+// AM_RANGE(0x400000, 0x400001) AM_WRITE(?? video frame related ??)
+ AM_RANGE(0x400002, 0x400003) AM_WRITE(toaplan1_intenable_w)
+ AM_RANGE(0x400008, 0x40000f) AM_WRITE(toaplan1_bcu_control_w)
+ AM_RANGE(0x404000, 0x4047ff) AM_RAM_WRITE(toaplan1_bgpalette_w) AM_SHARE("bgpalette")
+ AM_RANGE(0x406000, 0x4067ff) AM_RAM_WRITE(toaplan1_fgpalette_w) AM_SHARE("fgpalette")
+ AM_RANGE(0x440000, 0x440005) AM_READWRITE(vimana_mcu_r, vimana_mcu_w) /* shared memory from 0x440000 to 0x44ffff ? */
+ AM_RANGE(0x440006, 0x440007) AM_READ_PORT("DSWA")
+ AM_RANGE(0x440008, 0x440009) AM_READ(vimana_system_port_r) /* "SYSTEM" + coinage simulation */
+ AM_RANGE(0x44000a, 0x44000b) AM_READ_PORT("P1")
+ AM_RANGE(0x44000c, 0x44000d) AM_READ_PORT("P2")
+ AM_RANGE(0x44000e, 0x44000f) AM_READ_PORT("DSWB")
+ AM_RANGE(0x440010, 0x440011) AM_READ_PORT("TJUMP")
+ AM_RANGE(0x480000, 0x487fff) AM_RAM
+ AM_RANGE(0x4c0000, 0x4c0001) AM_WRITE(toaplan1_bcu_flipscreen_w)
+ AM_RANGE(0x4c0002, 0x4c0003) AM_READWRITE(toaplan1_tileram_offs_r, toaplan1_tileram_offs_w)
+ AM_RANGE(0x4c0004, 0x4c0007) AM_READWRITE(toaplan1_tileram16_r, toaplan1_tileram16_w)
+ AM_RANGE(0x4c0010, 0x4c001f) AM_READWRITE(toaplan1_scroll_regs_r, toaplan1_scroll_regs_w)
+ADDRESS_MAP_END
+
+
+/***************************** Z80 Memory Map *******************************/
+
+static ADDRESS_MAP_START( toaplan1_sound_map, AS_PROGRAM, 8, toaplan1_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("sharedram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rallybik_sound_io_map, AS_IO, 8, toaplan1_rallybik_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("P1")
+ AM_RANGE(0x10, 0x10) AM_READ_PORT("P2")
+ AM_RANGE(0x20, 0x20) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x30, 0x30) AM_WRITE(rallybik_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0x40, 0x40) AM_READ_PORT("DSWA")
+ AM_RANGE(0x50, 0x50) AM_READ_PORT("DSWB")
+ AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( truxton_sound_io_map, AS_IO, 8, toaplan1_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("P1")
+ AM_RANGE(0x10, 0x10) AM_READ_PORT("P2")
+ AM_RANGE(0x20, 0x20) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x30, 0x30) AM_WRITE(toaplan1_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0x40, 0x40) AM_READ_PORT("DSWA")
+ AM_RANGE(0x50, 0x50) AM_READ_PORT("DSWB")
+ AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ AM_RANGE(0x70, 0x70) AM_READ_PORT("TJUMP")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( hellfire_sound_io_map, AS_IO, 8, toaplan1_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("DSWA")
+ AM_RANGE(0x10, 0x10) AM_READ_PORT("DSWB")
+ AM_RANGE(0x20, 0x20) AM_READ_PORT("TJUMP")
+ AM_RANGE(0x30, 0x30) AM_WRITE(toaplan1_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0x40, 0x40) AM_READ_PORT("P1")
+ AM_RANGE(0x50, 0x50) AM_READ_PORT("P2")
+ AM_RANGE(0x60, 0x60) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x70, 0x71) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( zerowing_sound_io_map, AS_IO, 8, toaplan1_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("P1")
+ AM_RANGE(0x08, 0x08) AM_READ_PORT("P2")
+ AM_RANGE(0x20, 0x20) AM_READ_PORT("DSWA")
+ AM_RANGE(0x28, 0x28) AM_READ_PORT("DSWB")
+ AM_RANGE(0x80, 0x80) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x88, 0x88) AM_READ_PORT("TJUMP")
+ AM_RANGE(0xa0, 0xa0) AM_WRITE(toaplan1_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0xa8, 0xa9) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( demonwld_sound_io_map, AS_IO, 8, toaplan1_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ AM_RANGE(0x20, 0x20) AM_READ_PORT("TJUMP")
+ AM_RANGE(0x40, 0x40) AM_WRITE(toaplan1_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0x60, 0x60) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x80, 0x80) AM_READ_PORT("P1")
+ AM_RANGE(0xa0, 0xa0) AM_READ_PORT("DSWB")
+ AM_RANGE(0xc0, 0xc0) AM_READ_PORT("P2")
+ AM_RANGE(0xe0, 0xe0) AM_READ_PORT("DSWA")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( outzone_sound_io_map, AS_IO, 8, toaplan1_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
+ AM_RANGE(0x04, 0x04) AM_WRITE(toaplan1_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0x08, 0x08) AM_READ_PORT("DSWA")
+ AM_RANGE(0x0c, 0x0c) AM_READ_PORT("DSWB")
+ AM_RANGE(0x10, 0x10) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x14, 0x14) AM_READ_PORT("P1")
+ AM_RANGE(0x18, 0x18) AM_READ_PORT("P2")
+ AM_RANGE(0x1c, 0x1c) AM_READ_PORT("TJUMP")
+ADDRESS_MAP_END
+
+
+/***************************** TMS32010 Memory Map **************************/
+
+static ADDRESS_MAP_START( DSP_program_map, AS_PROGRAM, 16, toaplan1_state )
+ AM_RANGE(0x000, 0x7ff) AM_ROM
+ADDRESS_MAP_END
+
+ /* $000 - 08F TMS32010 Internal Data RAM in Data Address Space */
+
+static ADDRESS_MAP_START( DSP_io_map, AS_IO, 16, toaplan1_state )
+ AM_RANGE(0, 0) AM_WRITE(demonwld_dsp_addrsel_w)
+ AM_RANGE(1, 1) AM_READWRITE(demonwld_dsp_r, demonwld_dsp_w)
+ AM_RANGE(3, 3) AM_WRITE(demonwld_dsp_bio_w)
+ AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(demonwld_BIO_r)
+ADDRESS_MAP_END
+
+
+/***************************** HD647180 Memory Map **************************/
+
+static ADDRESS_MAP_START( hd647180_mem_map, AS_PROGRAM, 8, toaplan1_state )
+ AM_RANGE(0x00000, 0x03fff) AM_ROM /* Internal 16k byte ROM */
+ AM_RANGE(0x0fe00, 0x0ffff) AM_RAM /* Internal 512 byte RAM */
+ADDRESS_MAP_END
+
+
+
+/*****************************************************************************
+ Generic Input Port definitions
+*****************************************************************************/
+static INPUT_PORTS_START( toaplan1_2b )
+ PORT_START("P1")
+ TOAPLAN_JOY_UDLR_2_BUTTONS( 1 )
+
+ PORT_START("P2")
+ TOAPLAN_JOY_UDLR_2_BUTTONS( 2 )
+
+ PORT_START("SYSTEM")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_TILT )
+ TOAPLAN_TEST_SWITCH( 0x04, IP_ACTIVE_HIGH ) /* see notes */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("VBLANK")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0xfffe, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( toaplan1_3b )
+ PORT_INCLUDE( toaplan1_2b )
+
+ PORT_MODIFY("P1")
+ TOAPLAN_JOY_UDLR_3_BUTTONS( 1 )
+
+ PORT_MODIFY("P2")
+ TOAPLAN_JOY_UDLR_3_BUTTONS( 2 )
+INPUT_PORTS_END
+
+#define TOAPLAN1_PLAYER_INPUT( player, button3 ) \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) PORT_8WAY \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(player) PORT_8WAY \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(player) PORT_8WAY \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(player) PORT_8WAY \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, button3 ) PORT_PLAYER(player) \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+#define TOAPLAN1_PLAYER_INPUT_COCKTAIL( player, button3, options ) \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) options PORT_8WAY \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(player) options PORT_8WAY \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(player) options PORT_8WAY \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(player) options PORT_8WAY \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) options \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) options \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, button3 ) PORT_PLAYER(player) options \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+#define TOAPLAN1_SYSTEM_INPUTS \
+ PORT_START("SYSTEM") \
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) \
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_TILT ) \
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) \
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) \
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 ) \
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 ) \
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 ) \
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
+
+#define TOAPLAN1_VBLANK_INPUT \
+ PORT_START("VBLANK") \
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") \
+ PORT_BIT( 0xfffe, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+
+/*****************************************************************************
+ Game-specific Input Port definitions
+*****************************************************************************/
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( rallybik )
+ PORT_INCLUDE( toaplan1_2b )
+
+ /* in 0x40 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x180006.w (CPU0 shared RAM) -> 0x0804f2.w */
+ PORT_START("DSWA")
+ TOAPLAN_MACHINE_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(DSWB, 0x30, 0x20) /* see notes */
+
+ /* in 0x50 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x180008.w (CPU0 shared RAM) -> 0x0804f4.w */
+ PORT_START("DSWB")
+ TOAPLAN_DIFFICULTY
+ PORT_DIPUNUSED( 0x04, IP_ACTIVE_HIGH )
+ PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
+ PORT_DIPNAME( 0x30, 0x20, DEF_STR( Region ) ) /* bits 4 and 5 listed as unused in the Dip Switches screen */
+ PORT_DIPSETTING( 0x20, DEF_STR( Europe ) ) /* Taito Corp. Japan */
+ PORT_DIPSETTING( 0x10, DEF_STR( USA ) ) /* Taito America Corp. */
+ PORT_DIPSETTING( 0x30, "USA (Romstar license)" ) /* Taito America Corp. */
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) /* Taito Corporation */
+ PORT_DIPNAME( 0x40, 0x00, "Dip Switch Display" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) /* not on race 1 */
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ /* P1 : in 0x00 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x18000c.w (CPU0 shared RAM) */
+ /* P2 : in 0x10 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x18000e.w (CPU0 shared RAM) */
+ /* SYSTEM : in 0x20 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x18000a.w (CPU0 shared RAM) -> 0x0804f6.w */
+ /* VBLANK : 0x140000.w */
+INPUT_PORTS_END
+
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( truxton )
+ PORT_INCLUDE( toaplan1_2b )
+
+ /* in 0x40 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x180006.w (CPU0 shared RAM) -> 0x081b78.w */
+ PORT_START("DSWA")
+ TOAPLAN_MACHINE_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(TJUMP, 0x03, 0x02) /* see notes */
+
+ /* in 0x50 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x180008.w (CPU0 shared RAM) -> 0x081b7a.w */
+ PORT_START("DSWB")
+ TOAPLAN_DIFFICULTY
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x000930 */
+ PORT_DIPSETTING( 0x04, "50k 200k 150k+" )
+ PORT_DIPSETTING( 0x00, "70k 270k 200k+" )
+ PORT_DIPSETTING( 0x08, "100k Only" )
+ PORT_DIPSETTING( 0x0c, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Dip Switch Display" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ /* in 0x70 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x18000a.w (CPU0 shared RAM) -> 0x081b7c.w */
+ PORT_START("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x07, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) ) /* No notice Taito Corporation TOAPLAN_COINAGE_WORLD FOR EUROPE */
+// PORT_DIPSETTING( 0x03, DEF_STR( Europe ) ) /* No notice Taito Corporation TOAPLAN_COINAGE_JAPAN FOR EUROPE */
+// PORT_DIPSETTING( 0x06, DEF_STR( Europe ) ) /* No notice Taito America Corp. TOAPLAN_COINAGE_WORLD FOR EUROPE */
+// PORT_DIPSETTING( 0x07, DEF_STR( Europe ) ) /* No notice Taito America Corp. TOAPLAN_COINAGE_JAPAN FOR EUROPE */
+ PORT_DIPSETTING( 0x05, DEF_STR( USA ) ) /* U.S.A. ONLY Taito America Corp. TOAPLAN_COINAGE_JAPAN FOR U.S.A. */
+// PORT_DIPSETTING( 0x04, DEF_STR( USA ) ) /* U.S.A. ONLY Taito America Corp. TOAPLAN_COINAGE_JAPAN FOR JAPAN */
+ PORT_DIPSETTING( 0x01, "USA (Romstar license)" ) /* U.S.A. ONLY Taito America Corp. TOAPLAN_COINAGE_JAPAN FOR U.S.A. */
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) /* JAPAN ONLY Taito Corporation TOAPLAN_COINAGE_JAPAN FOR JAPAN */
+ PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* P1 : in 0x00 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x18000e.w (CPU0 shared RAM) -> 0x081b82.w */
+ /* P2 : in 0x10 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x180010.w (CPU0 shared RAM) -> 0x081b84.w */
+ /* SYSTEM : in 0x20 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x18000c.w (CPU0 shared RAM) -> 0x081b7e.w */
+ /* VBLANK : 0x140000.w */
+INPUT_PORTS_END
+
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( hellfire )
+ PORT_INCLUDE( toaplan1_2b )
+
+ /* in 0x00 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x0c0006.w (CPU0 shared RAM) -> 0x042410.w */
+ PORT_START("DSWA")
+ TOAPLAN_MACHINE_NO_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(TJUMP, 0x02, 0x02) /* see notes */
+
+ /* in 0x10 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x0c0008.w (CPU0 shared RAM) -> 0x042412.w */
+ PORT_START("DSWB")
+ TOAPLAN_DIFFICULTY
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x00390e ('hellfire') */
+ PORT_DIPSETTING( 0x00, "70k 270k 200k+" ) /* / 0x0030f0 ('hellfire1') */
+ PORT_DIPSETTING( 0x04, "100k 350k 250k+" ) /* / 0x003aac ('hellfire2a') */
+ PORT_DIPSETTING( 0x08, "100k Only" ) /* / 0x00329c ('hellfire1a') */
+ PORT_DIPSETTING( 0x0c, "200k Only" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Invulnerability" ) /* see notes */
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
+
+ /* in 0x20 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x0c000a.w (CPU0 shared RAM) -> 0x042414.w */
+ PORT_START("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x03, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+// PORT_DIPSETTING( 0x03, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) )
+ PORT_DIPUNUSED( 0x04, IP_ACTIVE_HIGH )
+ PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ /* P1 : in 0x40 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x0c000e.w (CPU0 shared RAM) -> 0x04241c.w */
+ /* P2 : in 0x50 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x0c0010.w (CPU0 shared RAM) -> 0x04241e.w */
+ /* SYSTEM : in 0x60 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x0c000c.w (CPU0 shared RAM) -> 0x042416.w */
+ /* VBLANK : 0x080000.w */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( hellfire1 )
+ PORT_INCLUDE( hellfire )
+
+ /* in 0x00 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x0c0006.w (CPU0 shared RAM) -> 0x04222a.w */
+ PORT_MODIFY("DSWA")
+ TOAPLAN_MACHINE_COCKTAIL
+
+ /* in 0x10 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x0c0008.w (CPU0 shared RAM) -> 0x04222c.w */
+ PORT_MODIFY("DSWB")
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ /* TJUMP : in 0x20 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x0c000a.w (CPU0 shared RAM) -> 0x04222e.w */
+
+ /* P1 : in 0x40 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x0c000e.w (CPU0 shared RAM) -> 0x042236.w */
+ /* P2 : in 0x50 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x0c0010.w (CPU0 shared RAM) -> 0x042238.w */
+ /* SYSTEM : in 0x60 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x0c000c.w (CPU0 shared RAM) -> 0x042230.w */
+ /* VBLANK : 0x080000.w */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( hellfire2a )
+ PORT_INCLUDE( hellfire )
+
+ /* DSWA : in 0x00 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x0c0006.w (CPU0 shared RAM) -> 0x042410.w */
+
+ /* in 0x10 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x0c0008.w (CPU0 shared RAM) -> 0x042412.w */
+ PORT_MODIFY("DSWB")
+ PORT_DIPNAME( 0x40, 0x00, "Dip Switch Display" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+
+ /* TJUMP : in 0x20 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x0c000a.w (CPU0 shared RAM) -> 0x042414.w */
+
+ /* P1 : in 0x40 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x0c000e.w (CPU0 shared RAM) -> 0x04241c.w */
+ /* P2 : in 0x50 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x0c0010.w (CPU0 shared RAM) -> 0x04241e.w */
+ /* SYSTEM : in 0x60 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x0c000c.w (CPU0 shared RAM) -> 0x042416.w */
+ /* VBLANK : 0x080000.w */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( hellfire1a )
+ PORT_INCLUDE( hellfire )
+
+ /* in 0x00 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x0c0006.w (CPU0 shared RAM) -> 0x04222a.w */
+ PORT_MODIFY("DSWA")
+ TOAPLAN_MACHINE_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(TJUMP, 0x03, 0x02) /* see notes */
+
+ /* in 0x10 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x0c0008.w (CPU0 shared RAM) -> 0x04222c.w */
+ PORT_MODIFY("DSWB")
+ PORT_DIPNAME( 0x40, 0x00, "Dip Switch Display" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ /* TJUMP : in 0x20 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x0c000a.w (CPU0 shared RAM) -> 0x04222e.w */
+
+ /* P1 : in 0x40 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x0c000e.w (CPU0 shared RAM) -> 0x042236.w */
+ /* P2 : in 0x50 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x0c0010.w (CPU0 shared RAM) -> 0x042238.w */
+ /* SYSTEM : in 0x60 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x0c000c.w (CPU0 shared RAM) -> 0x042230.w */
+ /* VBLANK : 0x080000.w */
+INPUT_PORTS_END
+
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( zerowing )
+ PORT_INCLUDE( toaplan1_2b )
+
+ /* in 0x20 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x440006.w (CPU0 shared RAM) -> 0x08180c.w */
+ PORT_START("DSWA")
+ TOAPLAN_MACHINE_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(TJUMP, 0x02, 0x02) /* see notes */
+
+ /* in 0x28 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x440008.w (CPU0 shared RAM) -> 0x08180e.w */
+ PORT_START("DSWB")
+ TOAPLAN_DIFFICULTY
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x00216c ('zerowing') or 0x002606 ('zerowing2') */
+ PORT_DIPSETTING( 0x00, "200k 700k 500k+" )
+ PORT_DIPSETTING( 0x04, "500k 1500k 1000k+" )
+ PORT_DIPSETTING( 0x08, "500k Only" )
+ PORT_DIPSETTING( 0x0c, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Invulnerability" ) /* see notes */
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ /* in 0x88 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x44000a.w (CPU0 shared RAM) -> 0x081810.w */
+ PORT_START("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Europe ) ) /* 3 letters initials - right */
+// PORT_DIPSETTING( 0x02, DEF_STR( Europe ) ) /* 6 letters initials - wrong */
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) )
+ PORT_DIPUNUSED( 0x04, IP_ACTIVE_HIGH )
+ PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* P1 : in 0x00 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x44000e.w (CPU0 shared RAM) -> 0x081818.w */
+ /* P2 : in 0x08 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x440010.w (CPU0 shared RAM) -> 0x08181a.w */
+ /* SYSTEM : in 0x80 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x44000c.w (CPU0 shared RAM) -> 0x081812.w */
+ /* VBLANK : 0x400000.w */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( zerowing2 )
+ PORT_INCLUDE( zerowing )
+
+ /* in 0x20 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x440006.w (CPU0 shared RAM) -> 0x081ade.w */
+ PORT_MODIFY("DSWA")
+ TOAPLAN_MACHINE_NO_COCKTAIL
+
+ /* in 0x28 (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x440008.w (CPU0 shared RAM) -> 0x081ae0.w */
+ PORT_MODIFY("DSWB")
+ PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
+
+ /* in 0x88 (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x44000a.w (CPU0 shared RAM) -> 0x081ae2.w */
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPUNUSED( 0x01, IP_ACTIVE_HIGH )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPUNUSED( 0x04, IP_ACTIVE_HIGH )
+ PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* P1 : in 0x00 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x44000e.w (CPU0 shared RAM) -> 0x081aea.w */
+ /* P2 : in 0x08 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x440010.w (CPU0 shared RAM) -> 0x081aec.w */
+ /* SYSTEM : in 0x80 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x44000c.w (CPU0 shared RAM) -> 0x081ae4.w */
+ /* VBLANK : 0x400000.w */
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( demonwld )
+ TOAPLAN1_VBLANK_INPUT
+
+ PORT_START("P1")
+ TOAPLAN1_PLAYER_INPUT( 1, IPT_BUTTON3 )
+
+ PORT_START("P2")
+ TOAPLAN1_PLAYER_INPUT( 2, IPT_BUTTON3 )
+
+ PORT_START("DSWA") /* DSW A */
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_SERVICE( 0x04, IP_ACTIVE_HIGH )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) )
+
+ PORT_START("DSWB") /* DSW B */
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x00, "30K, every 100K" )
+ PORT_DIPSETTING( 0x04, "50K and 100K" )
+ PORT_DIPSETTING( 0x08, "100K only" )
+ PORT_DIPSETTING( 0x0c, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "1" )
+ PORT_DIPSETTING( 0x20, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Invulnerability" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+ TOAPLAN1_SYSTEM_INPUTS
+
+ PORT_START("TJUMP") /* Territory Jumper Block */
+ PORT_DIPNAME( 0x01, 0x01, "Territory/Copyright" )
+ PORT_DIPSETTING( 0x01, "Toaplan" )
+ PORT_DIPSETTING( 0x00, "Japan/Taito Corp" )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( demonwld1 )
+ PORT_INCLUDE( demonwld )
+
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block */
+ PORT_DIPNAME( 0x03, 0x02, "Territory/Copyright" )
+ PORT_DIPSETTING( 0x02, "World/Taito Japan" )
+ PORT_DIPSETTING( 0x03, "US/Toaplan" )
+ PORT_DIPSETTING( 0x01, "US/Taito America" )
+ PORT_DIPSETTING( 0x00, "Japan/Taito Corp" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( fireshrk )
+ TOAPLAN1_VBLANK_INPUT
+
+ PORT_START("P1")
+ TOAPLAN1_PLAYER_INPUT( 1, IPT_UNKNOWN )
+
+ PORT_START("P2")
+ TOAPLAN1_PLAYER_INPUT_COCKTAIL( 2, IPT_UNKNOWN, PORT_COCKTAIL )
+
+ PORT_START("DSWA") /* DSW A */
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_SERVICE( 0x04, IP_ACTIVE_HIGH )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) )
+
+ PORT_START("DSWB") /* DSW B */
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x04, "50K, every 150K" )
+ PORT_DIPSETTING( 0x00, "70K, every 200K" )
+ PORT_DIPSETTING( 0x08, "100K" )
+ PORT_DIPSETTING( 0x0c, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Invulnerability" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ TOAPLAN1_SYSTEM_INPUTS
+
+ PORT_START("TJUMP") /* Territory Jumper Block */
+ PORT_DIPNAME( 0x06, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x00, "USA (Romstar)" )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( fireshrka ) /* No "Romstar" license */
+ PORT_INCLUDE( fireshrk )
+
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block */
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Europe ) )
+// PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+// PORT_DIPSETTING( 0x01, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( USA ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( samesame )
+ PORT_INCLUDE( fireshrk )
+
+ PORT_MODIFY("DSWA") /* DSW A */
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+/* settings listed in service mode, but not actually used ???
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
+ PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) )
+*/
+
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block */
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( samesame2 )
+ PORT_INCLUDE( samesame )
+
+ PORT_MODIFY("P2")
+ TOAPLAN1_PLAYER_INPUT( 2, IPT_UNKNOWN )
+
+ PORT_MODIFY("DSWA") /* DSW A */
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) /* No cocktail */
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block */
+/* settings listed in service mode, but not actually used
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Region ) )
+// PORT_DIPSETTING( 0x01, DEF_STR( Europe ) )
+// PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( USA ) )
+*/
+ PORT_DIPNAME( 0x01, 0x00, "Show Territory Notice" )
+ PORT_DIPSETTING( 0x01, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+// PORT_DIPNAME( 0x02, 0x00, "Show Territory Notice" ) /* Same as Bit 1 */
+// PORT_DIPSETTING( 0x02, DEF_STR( No ) )
+// PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_BIT( 0xf2, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Mask bit 2 aswell */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( outzone )
+ PORT_INCLUDE( toaplan1_3b )
+
+ /* in 0x08 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x140006.w (CPU0 shared RAM) -> 0x240b44.w */
+ PORT_START("DSWA")
+ TOAPLAN_MACHINE_NO_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(TJUMP, 0x0f, 0x02) /* see notes */
+
+ /* in 0x0c (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x140008.w (CPU0 shared RAM) -> 0x240b46.w */
+ PORT_START("DSWB")
+ TOAPLAN_DIFFICULTY
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x001cc8 ('outzone' 'outzoneh' 'outzonea') */
+ PORT_DIPSETTING( 0x00, "Every 300k" ) /* / 0x001c22 ('outzoneb') */
+ PORT_DIPSETTING( 0x04, "200k and 500k" ) /* / 0x001c2e ('outzonec') */
+ PORT_DIPSETTING( 0x08, "300k Only" )
+ PORT_DIPSETTING( 0x0c, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "1" )
+ PORT_DIPSETTING( 0x20, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Invulnerability" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
+
+ /* in 0x1c (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x14000a.w (CPU0 shared RAM) */
+ PORT_START("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x0f, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hong_Kong ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Korea ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( Taiwan ) )
+ PORT_DIPSETTING( 0x06, "Taiwan (Spacy Co., Ltd.)" )
+ PORT_DIPSETTING( 0x07, "USA (Romstar, Inc.)" )
+ PORT_DIPSETTING( 0x08, "Hong Kong & China (Honest Trading Co.)" )
+// PORT_DIPSETTING( 0x09, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0a, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0b, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0c, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0d, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0e, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0f, DEF_STR( Japan ) )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ /* P1 : in 0x14 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x14000e.w (CPU0 shared RAM) */
+ /* P2 : in 0x18 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x140010.w (CPU0 shared RAM) */
+ /* SYSTEM : in 0x10 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x14000c.w (CPU0 shared RAM) -> 0x240b48.w */
+ /* VBLANK : 0x300000.w */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( outzonea )
+ PORT_INCLUDE( outzone )
+
+ /* DSWA : in 0x08 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x140006.w (CPU0 shared RAM) -> 0x240b44.w */
+ /* DSWB : in 0x0c (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x140008.w (CPU0 shared RAM) -> 0x240b46.w */
+
+ /* in 0x1c (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x14000a.w (CPU0 shared RAM) */
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x0f, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hong_Kong ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Korea ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( Taiwan ) )
+ PORT_DIPSETTING( 0x06, "Taiwan (Spacy Co., Ltd.)" )
+ PORT_DIPSETTING( 0x07, "USA (Romstar, Inc.)" )
+ PORT_DIPSETTING( 0x08, "Hong Kong (Honest Trading Co.)" )
+// PORT_DIPSETTING( 0x09, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0a, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0b, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0c, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0d, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0e, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x0f, DEF_STR( Japan ) )
+
+ /* P1 : in 0x14 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x14000e.w (CPU0 shared RAM) */
+ /* P2 : in 0x18 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x140010.w (CPU0 shared RAM) */
+ /* SYSTEM : in 0x10 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x14000c.w (CPU0 shared RAM) -> 0x240b48.w */
+ /* VBLANK : 0x300000.w */
+INPUT_PORTS_END
+
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( outzonec )
+ PORT_INCLUDE( outzone )
+
+ /* DSWA : in 0x08 (CPU1) -> 0x8003 (CPU1 shared RAM) = 0x140006.w (CPU0 shared RAM) -> 0x240b44.w */
+ /* DSWB : in 0x0c (CPU1) -> 0x8004 (CPU1 shared RAM) = 0x140008.w (CPU0 shared RAM) -> 0x240b46.w */
+
+ /* in 0x1c (CPU1) -> 0x8005 (CPU1 shared RAM) = 0x14000a.w (CPU0 shared RAM) */
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x07, 0x06, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Japan ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hong_Kong ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Korea ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( Taiwan ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( World ) )
+// PORT_DIPSETTING( 0x07, DEF_STR( World ) )
+ PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
+
+ /* P1 : in 0x14 (CPU1) -> 0x8007 (CPU1 shared RAM) = 0x14000e.w (CPU0 shared RAM) */
+ /* P2 : in 0x18 (CPU1) -> 0x8008 (CPU1 shared RAM) = 0x140010.w (CPU0 shared RAM) */
+ /* SYSTEM : in 0x10 (CPU1) -> 0x8006 (CPU1 shared RAM) = 0x14000c.w (CPU0 shared RAM) -> 0x240b48.w */
+ /* VBLANK : 0x300000.w */
+INPUT_PORTS_END
+
+
+/* verified from M68000 - coinage based on "test mode" and handled by the MCU simulation */
+static INPUT_PORTS_START( vimana )
+ PORT_INCLUDE( toaplan1_2b )
+
+ /* 0x440007.b */
+ PORT_START("DSWA")
+ TOAPLAN_MACHINE_NO_COCKTAIL
+ TOAPLAN_COINAGE_DUAL(TJUMP, 0x0f, 0x02) /* see notes */
+
+ /* 0x44000f.b */
+ PORT_START("DSWB")
+ TOAPLAN_DIFFICULTY
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x000998 */
+ PORT_DIPSETTING( 0x00, "70k 270k 200k+" )
+ PORT_DIPSETTING( 0x04, "100k 350k 250k+" )
+ PORT_DIPSETTING( 0x08, "100k Only" )
+ PORT_DIPSETTING( 0x0c, "200k Only" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPNAME( 0x40, 0x00, "Invulnerability" ) /* see notes */
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+
+ /* 0x440011.b */
+ PORT_START("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x0f, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x07, "USA (Romstar license)" )
+// PORT_DIPSETTING( 0x00, "Japan (distributed by Tecmo)" )
+// PORT_DIPSETTING( 0x0f, "Japan (distributed by Tecmo)" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Korea ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hong_Kong ) )
+ PORT_DIPSETTING( 0x08, "Hong Kong (Honest Trading license)" )
+ PORT_DIPSETTING( 0x05, DEF_STR( Taiwan ) )
+ PORT_DIPSETTING( 0x06, "Taiwan (Spacy license)" )
+// PORT_DIPSETTING( 0x09, "???" )
+// PORT_DIPSETTING( 0x0a, "???" )
+// PORT_DIPSETTING( 0x0b, "???" )
+// PORT_DIPSETTING( 0x0c, "???" )
+// PORT_DIPSETTING( 0x0d, "???" )
+// PORT_DIPSETTING( 0x0e, "???" )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ /* P1 : 0x44000b.b */
+ PORT_MODIFY("P1")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fast Scrolling") PORT_CODE(KEYCODE_F1) /* see notes */
+
+ /* P2 : 0x44000d.b */
+ /* SYSTEM : 0x440009.b */
+ /* VBLANK : 0x400001.b */
+INPUT_PORTS_END
+
+/* verified from M68000 - coinage based on "test mode" and handled by the MCU simulation */
+static INPUT_PORTS_START( vimanan )
+ PORT_INCLUDE( vimana )
+
+ /* DSWA : 0x440007.b */
+ /* DSWB : 0x44000f.b */
+
+ /* 0x440011.b */
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x0f, 0x02, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x02, "Europe (Nova Apparate license)" )
+ PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+ PORT_DIPSETTING( 0x07, "USA (Romstar license)" )
+// PORT_DIPSETTING( 0x00, "Japan (distributed by Tecmo)" ) /* "ending" text in English */
+// PORT_DIPSETTING( 0x0f, "Japan (distributed by Tecmo)" ) /* "ending" text in English */
+ PORT_DIPSETTING( 0x04, DEF_STR( Korea ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hong_Kong ) )
+ PORT_DIPSETTING( 0x08, "Hong Kong (Honest Trading license)" )
+ PORT_DIPSETTING( 0x05, DEF_STR( Taiwan ) )
+ PORT_DIPSETTING( 0x06, "Taiwan (Spacy license)" )
+// PORT_DIPSETTING( 0x09, "???" )
+// PORT_DIPSETTING( 0x0a, "???" )
+// PORT_DIPSETTING( 0x0b, "???" )
+// PORT_DIPSETTING( 0x0c, "???" )
+// PORT_DIPSETTING( 0x0d, "???" )
+// PORT_DIPSETTING( 0x0e, "???" )
+
+ /* P1 : 0x44000b.b */
+ /* P2 : 0x44000d.b */
+ /* SYSTEM : 0x440009.b */
+ /* VBLANK : 0x400001.b */
+INPUT_PORTS_END
+
+/* verified from M68000 - coinage based on "test mode" and handled by the MCU simulation */
+static INPUT_PORTS_START( vimanaj )
+ PORT_INCLUDE( vimana )
+
+ /* DSWA : 0x440007.b */
+ /* DSWB : 0x44000f.b */
+
+ /* 0x440011.b */
+ PORT_MODIFY("TJUMP") /* Territory Jumper Block - see notes */
+ PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Region ) )
+// PORT_DIPSETTING( 0x02, DEF_STR( Europe ) )
+// PORT_DIPSETTING( 0x01, DEF_STR( USA ) )
+// PORT_DIPSETTING( 0x07, "USA (Romstar license)" )
+ PORT_DIPSETTING( 0x00, "Japan (distributed by Tecmo)" )
+// PORT_DIPSETTING( 0x0f, "Japan (distributed by Tecmo)" )
+// PORT_DIPSETTING( 0x04, "Korea" )
+// PORT_DIPSETTING( 0x03, "Hong Kong" )
+// PORT_DIPSETTING( 0x08, "Hong Kong (Honest Trading license)" )
+// PORT_DIPSETTING( 0x05, "Taiwan" )
+// PORT_DIPSETTING( 0x06, "Taiwan (Spacy license)" )
+// PORT_DIPSETTING( 0x09, "???" )
+// PORT_DIPSETTING( 0x0a, "???" )
+// PORT_DIPSETTING( 0x0b, "???" )
+// PORT_DIPSETTING( 0x0c, "???" )
+// PORT_DIPSETTING( 0x0d, "???" )
+// PORT_DIPSETTING( 0x0e, "???" )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ /* P1 : 0x44000b.b */
+ /* P2 : 0x44000d.b */
+ /* SYSTEM : 0x440009.b */
+ /* VBLANK : 0x400001.b */
+INPUT_PORTS_END
+
+
+static const gfx_layout tilelayout =
+{
+ 8,8, /* 8x8 */
+ RGN_FRAC(1,2), /* 16384/32768 tiles */
+ 4, /* 4 bits per pixel */
+ { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
+ 16*8 /* every tile takes 16 consecutive bytes */
+};
+
+
+static GFXDECODE_START( toaplan1 )
+ GFXDECODE_ENTRY( "gfx1", 0x00000, tilelayout, 0, 64 )
+ GFXDECODE_ENTRY( "gfx2", 0x00000, tilelayout, 64*16, 64 )
+GFXDECODE_END
+
+static GFXDECODE_START( rallybik )
+ GFXDECODE_ENTRY( "gfx1", 0x00000, tilelayout, 0, 64 )
+GFXDECODE_END
+
+
+#define PIXEL_CLOCK (XTAL_28MHz/4)
+
+// HTOTAL and VTOTAL taken from CRTC registers (toaplan1_bcu_control_w)
+// rallybik, demonwld and outzone program a larger VTOTAL than the other
+// games, giving them a lower frame rate
+
+#define HTOTAL ((224+1)*2)
+#define HBEND (0)
+#define HBSTART (320)
+
+#define VTOTAL ((134+1)*2)
+#define VTOTAL55 ((140+1)*2)
+#define VBEND (0)
+#define VBSTART (240)
+
+
+static MACHINE_CONFIG_START( rallybik, toaplan1_rallybik_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(rallybik_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
+ MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
+ MCFG_CPU_IO_MAP(rallybik_sound_io_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND, VBSTART)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_rallybik_state, screen_update_rallybik)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_rallybik_state, screen_eof_rallybik)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_TOAPLAN_SCU_ADD("scu", "palette", 31, 15)
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", rallybik)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_rallybik_state,rallybik)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( truxton, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(truxton_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
+ MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
+ MCFG_CPU_IO_MAP(truxton_sound_io_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( hellfire, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(hellfire_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
+ MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
+ MCFG_CPU_IO_MAP(hellfire_sound_io_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( zerowing, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(zerowing_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
+ MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
+ MCFG_CPU_IO_MAP(zerowing_sound_io_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND+16, VBSTART+16)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( demonwld, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(demonwld_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
+ MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
+ MCFG_CPU_IO_MAP(demonwld_sound_io_map)
+
+ MCFG_CPU_ADD("dsp", TMS32010, XTAL_28MHz/2)
+ MCFG_CPU_PROGRAM_MAP(DSP_program_map)
+ MCFG_CPU_IO_MAP(DSP_io_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,demonwld)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND+16, VBSTART+16)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( samesame, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(samesame_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z180, XTAL_28MHz/8) /* HD647180XOFS6 CPU */
+ MCFG_CPU_PROGRAM_MAP(hd647180_mem_map)
+ MCFG_DEVICE_DISABLE() /* Internal code is not dumped */
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_samesame)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( outzone, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(outzone_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
+ MCFG_CPU_PROGRAM_MAP(toaplan1_sound_map)
+ MCFG_CPU_IO_MAP(outzone_sound_io_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,zerowing)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL55, VBEND, VBSTART)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_START( vimana, toaplan1_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(vimana_main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan1_state, toaplan1_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z180, XTAL_28MHz/8) /* HD647180XOFS6 CPU */
+ MCFG_CPU_PROGRAM_MAP(hd647180_mem_map)
+ MCFG_DEVICE_DISABLE() /* Internal code is not dumped */
+
+ MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,vimana)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
+ MCFG_SCREEN_UPDATE_DRIVER(toaplan1_state, screen_update_toaplan1)
+ MCFG_SCREEN_VBLANK_DRIVER(toaplan1_state, screen_eof_toaplan1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan1)
+ MCFG_PALETTE_ADD("palette", (64*16)+(64*16))
+ MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
+
+ MCFG_VIDEO_START_OVERRIDE(toaplan1_state,toaplan1)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8) /* verified on pcb */
+ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( rallybik )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "b45-02.rom", 0x000000, 0x08000, CRC(383386d7) SHA1(fc420b6adc79a408a68f0661d0c62ed7dbe8b6d7) )
+ ROM_LOAD16_BYTE( "b45-01.rom", 0x000001, 0x08000, CRC(7602f6a7) SHA1(2939c261a4bc63586681080f5643916c85e81c7d) )
+ ROM_LOAD16_BYTE( "b45-04.rom", 0x040000, 0x20000, CRC(e9b005b1) SHA1(19b5acfd5fb2683a56a701400b11ee6f64a9bdf1) )
+ ROM_LOAD16_BYTE( "b45-03.rom", 0x040001, 0x20000, CRC(555344ce) SHA1(398963f488fe6f19c0b8518d80c946c242d0fc45) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "b45-05.rom", 0x0000, 0x4000, CRC(10814601) SHA1(bad7a834d8849752a7f3000bb5154ec0fa50d695) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "b45-09.bin", 0x00000, 0x20000, CRC(1dc7b010) SHA1(67e8633bd787ffcae0e7867e7e591c492c4f2d63) )
+ ROM_LOAD16_BYTE( "b45-08.bin", 0x00001, 0x20000, CRC(fab661ba) SHA1(acc43cd6d979b1c6a348727f315643d7b8f1496a) )
+ ROM_LOAD16_BYTE( "b45-07.bin", 0x40000, 0x20000, CRC(cd3748b4) SHA1(a20eb19a0f813112b4e5d9cd91db29de9b37af17) )
+ ROM_LOAD16_BYTE( "b45-06.bin", 0x40001, 0x20000, CRC(144b085c) SHA1(84b7412d58fe9c5e9915896db92e80a621571b74) )
+
+ ROM_REGION( 0x40000, "scu", 0 )
+ ROM_LOAD( "b45-11.rom", 0x00000, 0x10000, CRC(0d56e8bb) SHA1(c29cb53f846c73b7cf9936051fb0f9dd3805f53f) )
+ ROM_LOAD( "b45-10.rom", 0x10000, 0x10000, CRC(dbb7c57e) SHA1(268132965cd65b5e972ca9d0258c30b8a86f3703) )
+ ROM_LOAD( "b45-12.rom", 0x20000, 0x10000, CRC(cf5aae4e) SHA1(5832c52d2e9b86414d8ee2926fa190abe9e41da4) )
+ ROM_LOAD( "b45-13.rom", 0x30000, 0x10000, CRC(1683b07c) SHA1(54356893357cd1297f24f1d85b7289d80740262d) )
+
+ ROM_REGION( 0x240, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "b45-15.bpr", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */
+ ROM_LOAD( "b45-16.bpr", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */
+ ROM_LOAD( "b45-14.bpr", 0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) ) /* sprite control ?? */
+ ROM_LOAD( "b45-17.bpr", 0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ROM_END
+
+ROM_START( truxton )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "b65_11.bin", 0x000000, 0x20000, CRC(1a62379a) SHA1(b9470d4b70c38f2523b22636874d742abe4099eb) )
+ ROM_LOAD16_BYTE( "b65_10.bin", 0x000001, 0x20000, CRC(aff5195d) SHA1(a7f379dc35e3acf9e7a8ae8a47a9b5b4193f93a1) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "b65_09.bin", 0x0000, 0x4000, CRC(1bdd4ddc) SHA1(6bf7e3a7ca42f79082503ef471f30f271e2f0f99) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "b65_08.bin", 0x00000, 0x20000, CRC(d2315b37) SHA1(eb42a884df319728c830c067c2423043ed4536ee) )
+ ROM_LOAD16_BYTE( "b65_07.bin", 0x00001, 0x20000, CRC(fb83252a) SHA1(48a38584d223f56286137f7acdfaec86ee6588e7) )
+ ROM_LOAD16_BYTE( "b65_06.bin", 0x40000, 0x20000, CRC(36cedcbe) SHA1(f79d4b1e98b3c9091ae907fb671ad201d3698b42) )
+ ROM_LOAD16_BYTE( "b65_05.bin", 0x40001, 0x20000, CRC(81cd95f1) SHA1(526a437fbe033ac21054ee5c3bf1ba2fed354c7a) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "b65_04.bin", 0x00000, 0x20000, CRC(8c6ff461) SHA1(5199e31f4eb23bad01f7d1079f3618fe39d8a32e) )
+ ROM_LOAD16_BYTE( "b65_03.bin", 0x00001, 0x20000, CRC(58b1350b) SHA1(7eb2fe329579a6f651d3c1aed9155ac6ffefbc4b) )
+ ROM_LOAD16_BYTE( "b65_02.bin", 0x40000, 0x20000, CRC(1dd55161) SHA1(c537456ac56801dea0ac48fb1389228530d00a61) )
+ ROM_LOAD16_BYTE( "b65_01.bin", 0x40001, 0x20000, CRC(e974937f) SHA1(ab282472c04ce6d9ed368956c427403275bc9080) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "b65_12.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "b65_13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( hellfire )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "b90_14.0", 0x000000, 0x20000, CRC(101df9f5) SHA1(27e1430d4c96fe2c830143999a760470c8381ada) )
+ ROM_LOAD16_BYTE( "b90_15.1", 0x000001, 0x20000, CRC(e67fd452) SHA1(baec2a702238f000d0499705d79d7c7577fc2279) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "b90_03.2", 0x0000, 0x8000, CRC(4058fa67) SHA1(155c364273c270cd74955f447efc804bb4c9b560) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "b90_04.3", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
+ ROM_LOAD16_BYTE( "b90_05.4", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
+ ROM_LOAD16_BYTE( "b90_06.5", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
+ ROM_LOAD16_BYTE( "b90_07.6", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "b90_11.10", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
+ ROM_LOAD16_BYTE( "b90_10.9", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
+ ROM_LOAD16_BYTE( "b90_09.8", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
+ ROM_LOAD16_BYTE( "b90_08.7", 0x40001, 0x20000, CRC(3404a5e3) SHA1(f717b9e31c2a093dbb060b8ea54a8c3f52688d7a) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "13.3w", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* N82S123AN bprom - sprite attribute (flip/position) ?? */
+ ROM_LOAD( "12.6b", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* N82S123AN bprom - ??? */
+ROM_END
+
+ROM_START( hellfire1 )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "b90_01.10m", 0x000000, 0x20000, CRC(034966d3) SHA1(f987d8e7ebe6a546be621fe4d5a59de1284c4ebb) )
+ ROM_LOAD16_BYTE( "b90_02.9m", 0x000001, 0x20000, CRC(06dd24c7) SHA1(a990de7ffac6bd0dd219c7bf9f773ccb41395be6) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "b90_03.2", 0x0000, 0x8000, CRC(4058fa67) SHA1(155c364273c270cd74955f447efc804bb4c9b560) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "b90_04.3", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
+ ROM_LOAD16_BYTE( "b90_05.4", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
+ ROM_LOAD16_BYTE( "b90_06.5", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
+ ROM_LOAD16_BYTE( "b90_07.6", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "b90_11.10", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
+ ROM_LOAD16_BYTE( "b90_10.9", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
+ ROM_LOAD16_BYTE( "b90_09.8", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
+ ROM_LOAD16_BYTE( "b90_08.7", 0x40001, 0x20000, CRC(3404a5e3) SHA1(f717b9e31c2a093dbb060b8ea54a8c3f52688d7a) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "13.3w", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* N82S123AN bprom - sprite attribute (flip/position) ?? */
+ ROM_LOAD( "12.6b", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* N82S123AN bprom - ??? */
+ROM_END
+
+ROM_START( hellfire2a )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "b90_01.0", 0x000000, 0x20000, CRC(c94acf53) SHA1(5710861dbe976fe53b93d3428147d1ce7aaae18a) ) /* Same labels as hellfire1 but different data */
+ ROM_LOAD16_BYTE( "b90_02.1", 0x000001, 0x20000, CRC(d17f03c3) SHA1(ac41e6c29aa507872caeeaec6a3bc24c705a3702) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "b90_03.2", 0x0000, 0x8000, CRC(4058fa67) SHA1(155c364273c270cd74955f447efc804bb4c9b560) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "b90_04.3", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
+ ROM_LOAD16_BYTE( "b90_05.4", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
+ ROM_LOAD16_BYTE( "b90_06.5", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
+ ROM_LOAD16_BYTE( "b90_07.6", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "b90_11.10", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
+ ROM_LOAD16_BYTE( "b90_10.9", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
+ ROM_LOAD16_BYTE( "b90_09.8", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
+ ROM_LOAD16_BYTE( "b90_08.7", 0x40001, 0x20000, CRC(3404a5e3) SHA1(f717b9e31c2a093dbb060b8ea54a8c3f52688d7a) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "13.3w", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* N82S123AN bprom - sprite attribute (flip/position) ?? */
+ ROM_LOAD( "12.6b", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* N82S123AN bprom - ??? */
+ROM_END
+
+ROM_START( hellfire1a )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "b90_14x.0", 0x000000, 0x20000, CRC(a3141ea5) SHA1(9b456cb908e193198110a628d98567a3b8351591) ) /* Wrong labels ! This set is probably the oldest */
+ ROM_LOAD16_BYTE( "b90_15x.1", 0x000001, 0x20000, CRC(e864daf4) SHA1(382f02df8419310cef5d7fb68a9376eeac2f3685) ) /* and definitely is older than 'hellfire1' */
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "b90_03x.2", 0x0000, 0x8000, CRC(f58c368f) SHA1(2ee5396a4b70a3374f3a3bbd791b1d962f6a8a52) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "b90_04.3", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
+ ROM_LOAD16_BYTE( "b90_05.4", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
+ ROM_LOAD16_BYTE( "b90_06.5", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
+ ROM_LOAD16_BYTE( "b90_07.6", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "b90_11.10", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
+ ROM_LOAD16_BYTE( "b90_10.9", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
+ ROM_LOAD16_BYTE( "b90_09.8", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
+ ROM_LOAD16_BYTE( "b90_08.7", 0x40001, 0x20000, CRC(3404a5e3) SHA1(f717b9e31c2a093dbb060b8ea54a8c3f52688d7a) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "13.3w", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* N82S123AN bprom - sprite attribute (flip/position) ?? */
+ ROM_LOAD( "12.6b", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* N82S123AN bprom - ??? */
+ROM_END
+
+ROM_START( zerowing ) /* 2 player simultaneous version */
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o15-11ii.bin", 0x000000, 0x08000, CRC(e697ecb9) SHA1(444bf4c06844bd119cf152a35a5483e0f0dcecd4) )
+ ROM_LOAD16_BYTE( "o15-12ii.bin", 0x000001, 0x08000, CRC(b29ee3ad) SHA1(631695dfe5c2ee39effcfa4312ea6c14f7b7c302) )
+ ROM_LOAD16_BYTE( "o15-09.rom", 0x040000, 0x20000, CRC(13764e95) SHA1(61da49b73ba81edd951e96e9ce6673c1c3bd65f2) )
+ ROM_LOAD16_BYTE( "o15-10.rom", 0x040001, 0x20000, CRC(351ba71a) SHA1(937331549140506711b08252497cc0f2efa58268) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "o15-13.rom", 0x0000, 0x8000, CRC(e7b72383) SHA1(ea1f6f33a86d14d58bd396fd46081462f00177d5) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o15-05.rom", 0x00000, 0x20000, CRC(4e5dd246) SHA1(5366b4a6f3c900a4f57a6583b7399163a06f42d7) )
+ ROM_LOAD16_BYTE( "o15-06.rom", 0x00001, 0x20000, CRC(c8c6d428) SHA1(76ee5bcb8f10fe201fc5c32697beee3de9d8b751) )
+ ROM_LOAD16_BYTE( "o15-07.rom", 0x40000, 0x20000, CRC(efc40e99) SHA1(a04fad4197a7fb4787cd9bebf43e1d9b02b2f61b) )
+ ROM_LOAD16_BYTE( "o15-08.rom", 0x40001, 0x20000, CRC(1b019eab) SHA1(c9569ca85696825142acc5cde9ac829e82b1ca1b) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o15-03.rom", 0x00000, 0x20000, CRC(7f245fd3) SHA1(efbcb3663d4accc4f8128a8fee5475bc109bc17a) )
+ ROM_LOAD16_BYTE( "o15-04.rom", 0x00001, 0x20000, CRC(0b1a1289) SHA1(ce6c06342392d11952873e3b1d6aea8dc02a551c) )
+ ROM_LOAD16_BYTE( "o15-01.rom", 0x40000, 0x20000, CRC(70570e43) SHA1(acc9baec71b0930cb2f193677e0663efa5d5551d) )
+ ROM_LOAD16_BYTE( "o15-02.rom", 0x40001, 0x20000, CRC(724b487f) SHA1(06af31520866eea69aebbd5d428f80e882289a15) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp015_14.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp015_15.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( zerowing1 ) /* 1 player version */
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o15-11.rom", 0x000000, 0x08000, CRC(6ff2b9a0) SHA1(c9f2a631f185689dfc42a451d85fac23c2f4b64b) )
+ ROM_LOAD16_BYTE( "o15-12.rom", 0x000001, 0x08000, CRC(9773e60b) SHA1(b733e9d38a233d010cc5ea41e7e61695082c3a22) )
+ ROM_LOAD16_BYTE( "o15-09.rom", 0x040000, 0x20000, CRC(13764e95) SHA1(61da49b73ba81edd951e96e9ce6673c1c3bd65f2) )
+ ROM_LOAD16_BYTE( "o15-10.rom", 0x040001, 0x20000, CRC(351ba71a) SHA1(937331549140506711b08252497cc0f2efa58268) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "o15-13.rom", 0x0000, 0x8000, CRC(e7b72383) SHA1(ea1f6f33a86d14d58bd396fd46081462f00177d5) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o15-05.rom", 0x00000, 0x20000, CRC(4e5dd246) SHA1(5366b4a6f3c900a4f57a6583b7399163a06f42d7) )
+ ROM_LOAD16_BYTE( "o15-06.rom", 0x00001, 0x20000, CRC(c8c6d428) SHA1(76ee5bcb8f10fe201fc5c32697beee3de9d8b751) )
+ ROM_LOAD16_BYTE( "o15-07.rom", 0x40000, 0x20000, CRC(efc40e99) SHA1(a04fad4197a7fb4787cd9bebf43e1d9b02b2f61b) )
+ ROM_LOAD16_BYTE( "o15-08.rom", 0x40001, 0x20000, CRC(1b019eab) SHA1(c9569ca85696825142acc5cde9ac829e82b1ca1b) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o15-03.rom", 0x00000, 0x20000, CRC(7f245fd3) SHA1(efbcb3663d4accc4f8128a8fee5475bc109bc17a) )
+ ROM_LOAD16_BYTE( "o15-04.rom", 0x00001, 0x20000, CRC(0b1a1289) SHA1(ce6c06342392d11952873e3b1d6aea8dc02a551c) )
+ ROM_LOAD16_BYTE( "o15-01.rom", 0x40000, 0x20000, CRC(70570e43) SHA1(acc9baec71b0930cb2f193677e0663efa5d5551d) )
+ ROM_LOAD16_BYTE( "o15-02.rom", 0x40001, 0x20000, CRC(724b487f) SHA1(06af31520866eea69aebbd5d428f80e882289a15) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp015_14.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp015_15.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( zerowingw ) /* 2 player simultaneous version (Williams Electronics) */
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o15-11iiw.bin", 0x000000, 0x08000, CRC(38b0bb5b) SHA1(e5a4c0b6c279a55701c82bf9e285a806054f8d23) )
+ ROM_LOAD16_BYTE( "o15-12iiw.bin", 0x000001, 0x08000, CRC(74c91e6f) SHA1(8cf5d10a5f4efda0903a4c5d56599861ccc8f1c1) )
+ ROM_LOAD16_BYTE( "o15-09.rom", 0x040000, 0x20000, CRC(13764e95) SHA1(61da49b73ba81edd951e96e9ce6673c1c3bd65f2) )
+ ROM_LOAD16_BYTE( "o15-10.rom", 0x040001, 0x20000, CRC(351ba71a) SHA1(937331549140506711b08252497cc0f2efa58268) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "o15-13.rom", 0x0000, 0x8000, CRC(e7b72383) SHA1(ea1f6f33a86d14d58bd396fd46081462f00177d5) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o15-05.rom", 0x00000, 0x20000, CRC(4e5dd246) SHA1(5366b4a6f3c900a4f57a6583b7399163a06f42d7) )
+ ROM_LOAD16_BYTE( "o15-06.rom", 0x00001, 0x20000, CRC(c8c6d428) SHA1(76ee5bcb8f10fe201fc5c32697beee3de9d8b751) )
+ ROM_LOAD16_BYTE( "o15-07.rom", 0x40000, 0x20000, CRC(efc40e99) SHA1(a04fad4197a7fb4787cd9bebf43e1d9b02b2f61b) )
+ ROM_LOAD16_BYTE( "o15-08.rom", 0x40001, 0x20000, CRC(1b019eab) SHA1(c9569ca85696825142acc5cde9ac829e82b1ca1b) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o15-03.rom", 0x00000, 0x20000, CRC(7f245fd3) SHA1(efbcb3663d4accc4f8128a8fee5475bc109bc17a) )
+ ROM_LOAD16_BYTE( "o15-04.rom", 0x00001, 0x20000, CRC(0b1a1289) SHA1(ce6c06342392d11952873e3b1d6aea8dc02a551c) )
+ ROM_LOAD16_BYTE( "o15-01.rom", 0x40000, 0x20000, CRC(70570e43) SHA1(acc9baec71b0930cb2f193677e0663efa5d5551d) )
+ ROM_LOAD16_BYTE( "o15-02.rom", 0x40001, 0x20000, CRC(724b487f) SHA1(06af31520866eea69aebbd5d428f80e882289a15) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp015_14.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp015_15.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( demonwld )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o16-10.v2", 0x000000, 0x20000, CRC(ca8194f3) SHA1(176da6739b35ba38b40150fc62380108bcae5a24) )
+ ROM_LOAD16_BYTE( "o16-09.v2", 0x000001, 0x20000, CRC(7baea7ba) SHA1(ae2b40f9efb4440ff7edbcc4f80641655f7c4671) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom11.v2", 0x0000, 0x8000, CRC(dbe08c85) SHA1(536a242bfe916d15744b079261507af6f12b5b50) )
+
+ ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 MCU code */
+ ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
+ ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
+ ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
+ ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
+ ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
+ ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
+ ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
+ ROM_LOAD16_BYTE( "rom04", 0x40001, 0x20000, CRC(76fd3201) SHA1(7a12737bf90bd9760074132edeb22f3fd3e16b4f) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom12.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( demonwld1 )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o16-10.rom", 0x000000, 0x20000, CRC(036ee46c) SHA1(60868e5e08e0c9a538ae786de0de6b2531b30b11) )
+ ROM_LOAD16_BYTE( "o16-09.rom", 0x000001, 0x20000, CRC(bed746e3) SHA1(056668edb7df99bbd240e387af17cf252d1448f3) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom11", 0x0000, 0x8000, CRC(397eca1b) SHA1(84073ff6d1bc46ec6162d66ec5de305700938380) )
+
+ ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 MCU code */
+ ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
+ ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
+ ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
+ ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
+ ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
+ ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
+ ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
+ ROM_LOAD16_BYTE( "rom04", 0x40001, 0x20000, CRC(76fd3201) SHA1(7a12737bf90bd9760074132edeb22f3fd3e16b4f) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom12.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( demonwld2 )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o16-10-2.bin", 0x000000, 0x20000, CRC(84ee5218) SHA1(dc2b017ee630330163be320008d8a0d761cb0cfb) ) // aka o16_10ii
+ ROM_LOAD16_BYTE( "o16-09-2.bin", 0x000001, 0x20000, CRC(cf474cb2) SHA1(5c049082b8d7118e0d2e50c6ae07f9d3d0110498) ) // aka o16_09ii
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom11", 0x0000, 0x8000, CRC(397eca1b) SHA1(84073ff6d1bc46ec6162d66ec5de305700938380) )
+
+ ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 MCU code */
+ ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
+ ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
+ ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
+ ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
+ ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
+ ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
+ ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
+ ROM_LOAD16_BYTE( "rom04", 0x40001, 0x20000, CRC(76fd3201) SHA1(7a12737bf90bd9760074132edeb22f3fd3e16b4f) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom12.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( demonwld3 )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o16-10.bin", 0x000000, 0x20000, CRC(6f7468e0) SHA1(87ef7733fd0d00d0d375dbf30332cf0614480dc2) )
+ ROM_LOAD16_BYTE( "o16-09.bin", 0x000001, 0x20000, CRC(a572f5f7) SHA1(3d6a443cecd46734c7e1b761130909482c7a9914) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom11", 0x0000, 0x8000, CRC(397eca1b) SHA1(84073ff6d1bc46ec6162d66ec5de305700938380) )
+
+ ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 MCU code */
+ ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
+ ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
+ ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
+ ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
+ ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
+ ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
+ ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
+ ROM_LOAD16_BYTE( "rom04", 0x40001, 0x20000, CRC(76fd3201) SHA1(7a12737bf90bd9760074132edeb22f3fd3e16b4f) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom12.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( samesame )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o17_09.8j", 0x000000, 0x08000, CRC(3f69e437) SHA1(f2a40fd42cb5ecb2e514b72e7550aa479a9f9ad6) )
+ ROM_LOAD16_BYTE( "o17_10.8l", 0x000001, 0x08000, CRC(4e723e0a) SHA1(e06394d50addeda1045c02c646964afbc6005a82) )
+ ROM_LOAD16_BYTE( "o17_11.7j", 0x040000, 0x20000, CRC(be07d101) SHA1(1eda14ba24532b565d6ad57490b73ff312f98b53) )
+ ROM_LOAD16_BYTE( "o17_12.7l", 0x040001, 0x20000, CRC(ef698811) SHA1(4c729704eba0bf469599c79009327e4fa5dc540b) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.017", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
+ ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
+ ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
+ ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
+ ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
+ ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
+ ROM_LOAD16_BYTE( "o17_04.7d", 0x40001, 0x20000, CRC(fe0ecb13) SHA1(634a49262b9c092c25f11b14c6757fe94ea9eddc) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom14.25b", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom15.20c", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( samesame2 )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o17_09x.8j", 0x000000, 0x08000, CRC(3472e03e) SHA1(a0f12622a1963bfac2d5f357afbfb5d7db2cd8df) )
+ ROM_LOAD16_BYTE( "o17_10x.8l", 0x000001, 0x08000, CRC(a3ac49b5) SHA1(c5adf026b9129b64acee5a079e102377a8488220) )
+ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
+ ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.017", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
+ ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
+ ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
+ ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
+ ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
+ ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
+ ROM_LOAD16_BYTE( "o17_04.7d", 0x40001, 0x20000, CRC(fe0ecb13) SHA1(634a49262b9c092c25f11b14c6757fe94ea9eddc) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom14.25b", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom15.20c", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+/*
+Fire Shark
+Toaplan 1990
+
+PCB Layout
+----------
+
+TOAPLAN Co., Ltd.
+TP-O17
+|---------------------------------------------------------|
+|MB3730 YM3812 10MHz O17_01 |
+| YM3014 MN53007 O17_02 6264 |
+|VOL LM358 |---------------| O17_03 |
+| | 68000 | O17_04 6264 |
+| 647180 |---------------| |
+| O17_12 O17_11 6264 |
+| O17_10 O17_09 2018 2018 |
+|J 6264 6264 2018 2018 6264 |
+|A O17_07 O17_05 |
+|M O17_08 O17_06 6264 |
+|M |------| |
+|A DSW1 |------| |FOU-2 | |
+| |BCU-2 | 8464 | | |
+| DSW2 | | 8464 |------| |
+| |------| 8464 PROM15 |
+| D65024 8464 6116 |
+| 8464 6116 |
+| BCU 8464 6116 |
+| 6116 8464 PROM14 |
+| 6116 8464 28MHz |
+|---------------------------------------------------------|
+Notes:
+ 68000 - Motorola MC68000P10 CPU. Clock input 10.000MHz
+ 647180 - Hitachi HD647180XOFS6 micro-controller with 16k internal OTP EPROM and 512 bytes internal RAM. Clock input 10.000MHz on pin 75
+ YM3812 - Yamaha YM3812 FM operator type-L II (OPL II) LSI (DIP24). Clock input 3.500MHz [28/8]
+ YM3014 - Yamaha YM3014 Serial Input Floating D/A Converter (DIP8)
+ 2018 - Motorola MCM2018AN45 2kx8 SRAM (NDIP24)
+ 8464 - Fujitsu MB8464A-10L 8kx8 SRAM (NDIP28)
+ 6464 - Hyundai HY6264LP-10 8kx8 SRAM (DIP28)
+ 6116 - Hyundai HY6116AP-15 2kx8 SRAM (DIP24)
+ BCU-2 - Custom graphics IC (QFP160)
+ FOU-2 - Custom graphics IC (QFP136)
+ LM358 - National Semiconductor LM358 Dual Operational Amplifier (DIP8)
+ D65024 - NEC D65024GF035 uPD65000-series CMOS Gate Array (QFP100)
+ MN53007 - Panasonic MN53007 CMOS Gate Array {732 gates} (DIP42)
+ PROM14/15 - Philips/Signetics N82S123 Bipolar PROM (DIP16)
+ MB3730 - Fujitsu MB3730 14W BTL Audio Power Amplifier
+ DSW1/2 - 8-position DIP switch
+ BCU - Unpopulated position for PGA177 IC
+ HSYNC - 14.86496kHz
+ VSYNC - 57.61308Hz
+*/
+
+ROM_START( fireshrk )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "09.8j", 0x000000, 0x08000, CRC(f0c70e6f) SHA1(037690448786d61aa116b24b638430c577ea78e2) )
+ ROM_LOAD16_BYTE( "10.8l", 0x000001, 0x08000, CRC(9d253d77) SHA1(0414d1f475abb9ccfd7daa11c2f400a14f25db09) )
+ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
+ ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.017", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
+ ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
+ ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
+ ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
+ ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
+ ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
+ ROM_LOAD16_BYTE( "o17_04.7d", 0x40001, 0x20000, CRC(fe0ecb13) SHA1(634a49262b9c092c25f11b14c6757fe94ea9eddc) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom14.25b", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom15.20c", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( fireshrka )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o17_09ii.8j", 0x000000, 0x08000, CRC(b60541ee) SHA1(e4fb752073c99a83939ebc45307777b94519f01c) )
+ ROM_LOAD16_BYTE( "o17_10ii.8l", 0x000001, 0x08000, CRC(96f5045e) SHA1(16cf2f4d55570cf0489a426d6e841d2968f9423a) )
+ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
+ ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.017", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
+ ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
+ ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
+ ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
+ ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
+ ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
+ ROM_LOAD16_BYTE( "o17_04.7d", 0x40001, 0x20000, CRC(fe0ecb13) SHA1(634a49262b9c092c25f11b14c6757fe94ea9eddc) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom14.25b", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom15.20c", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( fireshrkd )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o17_09dyn.8j",0x000000, 0x10000, CRC(e25eee27) SHA1(1ff3f838123180a0b6672c9beee6c0f0092a0f94) )
+ ROM_LOAD16_BYTE( "o17_10dyn.8l",0x000001, 0x10000, CRC(c4c58cf6) SHA1(5867ecf66cd6c16cfcc54a581d3f4a8b666fd839) )
+ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
+ ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.017", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
+ ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
+ ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
+ ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
+ ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
+ ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
+ ROM_LOAD16_BYTE( "o17_04.7d", 0x40001, 0x20000, CRC(fe0ecb13) SHA1(634a49262b9c092c25f11b14c6757fe94ea9eddc) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom14.25b", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom15.20c", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( fireshrkdh )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o17_09dyh.8j",0x000000, 0x10000, CRC(7b4c14dd) SHA1(d40dcf223f16c0f507aeb282d1524dbf1349c536) )
+ ROM_LOAD16_BYTE( "o17_10dyh.8l",0x000001, 0x10000, CRC(a3f159f9) SHA1(afc9630ca38da730f7cf4954d1333954e8d75787) )
+ ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
+ ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.017", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
+ ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
+ ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
+ ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
+ ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
+ ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
+ ROM_LOAD16_BYTE( "o17_04.7d", 0x40001, 0x20000, CRC(fe0ecb13) SHA1(634a49262b9c092c25f11b14c6757fe94ea9eddc) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom14.25b", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom15.20c", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( outzone )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "prg2.bin", 0x000001, 0x20000, CRC(9704db16) SHA1(12b43a6961a7f63f29563eb77aaacb70d3c368dd) )
+ ROM_LOAD16_BYTE( "prg1.bin", 0x000000, 0x20000, CRC(127a38d7) SHA1(d7f1ed91ff7d4de9e8215aa3b5cb65693145e433) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom9.bin", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
+
+ ROM_REGION( 0x100000, "gfx1", 0 )
+ ROM_LOAD16_WORD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
+ ROM_LOAD16_WORD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x40001, 0x20000, CRC(50cbf1a8) SHA1(cfab1504746654b4a61912155e9aeca746c65321) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp018_10.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( outzoneh )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "tp018_7.bin", 0x000000, 0x20000, CRC(0c2ac02d) SHA1(78fda906ef7e0bb8e4ad44f34a8ac934b75d4bd8) )
+ ROM_LOAD16_BYTE( "tp018_8.bin", 0x000001, 0x20000, CRC(ca7e48aa) SHA1(c5073e6c124d74f16d01e67949965fdca929a886) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom9.bin", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
+
+ ROM_REGION( 0x100000, "gfx1", 0 )
+ ROM_LOAD16_WORD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
+ ROM_LOAD16_WORD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x40001, 0x20000, CRC(50cbf1a8) SHA1(cfab1504746654b4a61912155e9aeca746c65321) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp018_10.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( outzonea )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "18.bin", 0x000000, 0x20000, CRC(31a171bb) SHA1(4ee707e758ab21d2809b65daf0081f86bd9328d9) )
+ ROM_LOAD16_BYTE( "19.bin", 0x000001, 0x20000, CRC(804ecfd1) SHA1(7dead8064445c6d44ebd0889583deb5e17b1954a) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom9.bin", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
+
+ ROM_REGION( 0x100000, "gfx1", 0 )
+ ROM_LOAD16_WORD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
+ ROM_LOAD16_WORD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
+/* a pirate board exists using the same data in a different layout
+ ROM_LOAD16_BYTE( "04.bin", 0x000000, 0x10000, CRC(3d11eae0) )
+ ROM_LOAD16_BYTE( "08.bin", 0x000001, 0x10000, CRC(c7628891) )
+ ROM_LOAD16_BYTE( "13.bin", 0x080000, 0x10000, CRC(b23dd87e) )
+ ROM_LOAD16_BYTE( "09.bin", 0x080001, 0x10000, CRC(445651ba) )
+ ROM_LOAD16_BYTE( "03.bin", 0x020000, 0x10000, CRC(6b347646) )
+ ROM_LOAD16_BYTE( "07.bin", 0x020001, 0x10000, CRC(461b47f9) )
+ ROM_LOAD16_BYTE( "14.bin", 0x0a0000, 0x10000, CRC(b28ae37a) )
+ ROM_LOAD16_BYTE( "10.bin", 0x0a0001, 0x10000, CRC(6596a076) )
+ ROM_LOAD16_BYTE( "02.bin", 0x040000, 0x10000, CRC(11a781c3) )
+ ROM_LOAD16_BYTE( "06.bin", 0x040001, 0x10000, CRC(1055da17) )
+ ROM_LOAD16_BYTE( "15.bin", 0x0c0000, 0x10000, CRC(9c9e811b) )
+ ROM_LOAD16_BYTE( "11.bin", 0x0c0001, 0x10000, CRC(4c4d44dc) )
+ ROM_LOAD16_BYTE( "01.bin", 0x060000, 0x10000, CRC(e8c46aea) )
+ ROM_LOAD16_BYTE( "05.bin", 0x060001, 0x10000, CRC(f8a2fe01) )
+ ROM_LOAD16_BYTE( "16.bin", 0x0e0000, 0x10000, CRC(cffcb99b) )
+ ROM_LOAD16_BYTE( "12.bin", 0x0e0001, 0x10000, CRC(90d37ded) )
+*/
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x40001, 0x20000, CRC(50cbf1a8) SHA1(cfab1504746654b4a61912155e9aeca746c65321) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp018_10.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( outzoneb )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "tp07.bin", 0x000000, 0x20000, CRC(a85a1d48) SHA1(74f16ef5126f0ce3d94a66849ccd7c28338e3974) )
+ ROM_LOAD16_BYTE( "tp08.bin", 0x000001, 0x20000, CRC(d8cc44af) SHA1(da9c07e3670e5c7a2c1f9bc433e604a2a13b8a54) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "tp09.bin", 0x0000, 0x8000, CRC(dd56041f) SHA1(a481b8959b349761624166906175f8efcbebb7e7) )
+
+ ROM_REGION( 0x100000, "gfx1", 0 )
+ ROM_LOAD16_WORD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
+ ROM_LOAD16_WORD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x40001, 0x20000, CRC(50cbf1a8) SHA1(cfab1504746654b4a61912155e9aeca746c65321) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp018_10.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+/* is this a prototype? */
+ROM_START( outzonec ) /* From board serial number 2122 */
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "rom7.bin", 0x000000, 0x20000, CRC(936e25d8) SHA1(ffb7990ea1539d868a9ad2fb711b0febd90f098d) )
+ ROM_LOAD16_BYTE( "rom8.bin", 0x000001, 0x20000, CRC(d19b3ecf) SHA1(b406999b9f1e2104d958b42cc745bf79dbfe50b3) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom9.bin", 0x0000, 0x8000, BAD_DUMP CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) ) // see notes
+
+ ROM_REGION( 0x100000, "gfx1", 0 )
+ ROM_LOAD16_WORD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
+ ROM_LOAD16_WORD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x40001, 0x20000, CRC(50cbf1a8) SHA1(cfab1504746654b4a61912155e9aeca746c65321) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp018_10.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( vimana ) /* From board serial number 1547.04 (July '94) */
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "tp019-7a.bin", 0x000000, 0x20000, CRC(5a4bf73e) SHA1(9a43d822bc24b59278f294d0b3275595de997d16) )
+ ROM_LOAD16_BYTE( "tp019-8a.bin", 0x000001, 0x20000, CRC(03ba27e8) SHA1(edb5fe741d2a6a7fe5cde9a82317ea1e9447cf73) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.019", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "vim6.bin", 0x00000, 0x20000, CRC(2886878d) SHA1(f44933d87bbcd3bd58f46e0f0f89b05c409b713b) )
+ ROM_LOAD16_BYTE( "vim5.bin", 0x00001, 0x20000, CRC(61a63d7a) SHA1(5cdebc03110252cc43d31b6f87f9a23556892977) )
+ ROM_LOAD16_BYTE( "vim4.bin", 0x40000, 0x20000, CRC(b0515768) SHA1(9907b52b4d30ce5324270a12c40250068adafca8) )
+ ROM_LOAD16_BYTE( "vim3.bin", 0x40001, 0x20000, CRC(0b539131) SHA1(07f3e3b9b28c8218e36668c24d16dbb6e9a66889) )
+
+ ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_LOAD16_WORD( "vim1.bin", 0x00000, 0x80000, CRC(cdde26cd) SHA1(27893af4692ec7bcbaac9e790c0707c98df84e62) )
+ ROM_LOAD16_WORD( "vim2.bin", 0x80000, 0x80000, CRC(1dbfc118) SHA1(4fd039a3172f73ad910349b2d360e8ae77ccddb2) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp019-09.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp019-10.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( vimanan )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "tp019-07.rom", 0x000000, 0x20000, CRC(78888ff2) SHA1(7e1d248f806d585952eb35ceec6a7e63ae4e22f9) )
+ ROM_LOAD16_BYTE( "tp019-08.rom", 0x000001, 0x20000, CRC(6cd2dc3c) SHA1(029d974eb938c5e2fbe7575f0dda342b4b12b731) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.019", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "vim6.bin", 0x00000, 0x20000, CRC(2886878d) SHA1(f44933d87bbcd3bd58f46e0f0f89b05c409b713b) )
+ ROM_LOAD16_BYTE( "vim5.bin", 0x00001, 0x20000, CRC(61a63d7a) SHA1(5cdebc03110252cc43d31b6f87f9a23556892977) )
+ ROM_LOAD16_BYTE( "vim4.bin", 0x40000, 0x20000, CRC(b0515768) SHA1(9907b52b4d30ce5324270a12c40250068adafca8) )
+ ROM_LOAD16_BYTE( "vim3.bin", 0x40001, 0x20000, CRC(0b539131) SHA1(07f3e3b9b28c8218e36668c24d16dbb6e9a66889) )
+
+ ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_LOAD16_WORD( "vim1.bin", 0x00000, 0x80000, CRC(cdde26cd) SHA1(27893af4692ec7bcbaac9e790c0707c98df84e62) )
+ ROM_LOAD16_WORD( "vim2.bin", 0x80000, 0x80000, CRC(1dbfc118) SHA1(4fd039a3172f73ad910349b2d360e8ae77ccddb2) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp019-09.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp019-10.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( vimanaj )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "vim07.bin", 0x000000, 0x20000, CRC(1efaea84) SHA1(f9c5d2365d8948fa66dbe61d355919db15843a28) )
+ ROM_LOAD16_BYTE( "vim08.bin", 0x000001, 0x20000, CRC(e45b7def) SHA1(6b92a91d64581954da8ecdbeb5fed79bcc9c5217) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound HD647180 code */
+ /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
+ ROM_LOAD( "hd647180.019", 0x00000, 0x08000, NO_DUMP )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "vim6.bin", 0x00000, 0x20000, CRC(2886878d) SHA1(f44933d87bbcd3bd58f46e0f0f89b05c409b713b) )
+ ROM_LOAD16_BYTE( "vim5.bin", 0x00001, 0x20000, CRC(61a63d7a) SHA1(5cdebc03110252cc43d31b6f87f9a23556892977) )
+ ROM_LOAD16_BYTE( "vim4.bin", 0x40000, 0x20000, CRC(b0515768) SHA1(9907b52b4d30ce5324270a12c40250068adafca8) )
+ ROM_LOAD16_BYTE( "vim3.bin", 0x40001, 0x20000, CRC(0b539131) SHA1(07f3e3b9b28c8218e36668c24d16dbb6e9a66889) )
+
+ ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_LOAD16_WORD( "vim1.bin", 0x00000, 0x80000, CRC(cdde26cd) SHA1(27893af4692ec7bcbaac9e790c0707c98df84e62) )
+ ROM_LOAD16_WORD( "vim2.bin", 0x80000, 0x80000, CRC(1dbfc118) SHA1(4fd039a3172f73ad910349b2d360e8ae77ccddb2) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "tp019-09.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "tp019-10.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+
+DRIVER_INIT_MEMBER(toaplan1_state,toaplan1)
+{
+ toaplan1_driver_savestate();
+}
+
+DRIVER_INIT_MEMBER(toaplan1_state,demonwld)
+{
+ toaplan1_driver_savestate();
+ demonwld_driver_savestate();
+}
+
+DRIVER_INIT_MEMBER(toaplan1_state,vimana)
+{
+ toaplan1_driver_savestate();
+ vimana_driver_savestate();
+}
+
+
+
+GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_state, toaplan1, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 )
+GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, toaplan1, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 )
+GAME( 1989, hellfire, 0, hellfire, hellfire, toaplan1_state, toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (2P set)", 0 )
+GAME( 1989, hellfire1, hellfire, hellfire, hellfire1, toaplan1_state, toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (1P set)", 0 )
+GAME( 1989, hellfire2a, hellfire, hellfire, hellfire2a,toaplan1_state, toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (2P set, older)", 0 )
+GAME( 1989, hellfire1a, hellfire, hellfire, hellfire1a,toaplan1_state, toaplan1, ROT0, "Toaplan (Taito license)", "Hellfire (1P set, older)", 0 )
+GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state, toaplan1, ROT0, "Toaplan", "Zero Wing (2P set)", 0 )
+GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, toaplan1, ROT0, "Toaplan", "Zero Wing (1P set)", 0 )
+GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, toaplan1, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 )
+GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 )
+GAME( 1989, demonwld1, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 )
+GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 )
+GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 )
+GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_state, toaplan1, ROT270, "Toaplan", "Fire Shark", MACHINE_NO_SOUND )
+GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_state, toaplan1, ROT270, "Toaplan", "Fire Shark (earlier)", MACHINE_NO_SOUND )
+GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_state, toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", MACHINE_NO_SOUND )
+GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_state, toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", MACHINE_NO_SOUND )
+GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_state, toaplan1, ROT270, "Toaplan", "Same! Same! Same! (1P set)", MACHINE_NO_SOUND )
+GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_state, toaplan1, ROT270, "Toaplan", "Same! Same! Same! (2P set)", MACHINE_NO_SOUND )
+GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone", 0 )
+GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (harder)", 0 )
+GAME( 1990, outzonea, outzone, outzone, outzonea, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (old set)", 0 )
+GAME( 1990, outzoneb, outzone, outzone, outzonea, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (older set)", 0 )
+GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (oldest set)", MACHINE_IMPERFECT_SOUND ) // prototype?
+GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 1)", MACHINE_NO_SOUND )
+GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 2)", MACHINE_NO_SOUND )
+GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (Japan)", MACHINE_NO_SOUND )