summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Alex W. Jackson <alex.w.jackson@gmail.com>2013-07-21 18:41:45 +0000
committer Alex W. Jackson <alex.w.jackson@gmail.com>2013-07-21 18:41:45 +0000
commite0c9ae9e568e4d7d22a94800724b78003825aca3 (patch)
tree1397ccfd16d5287c1ab96515be099f46d3dfb0d3
parentcabeb9fa5f55f11b53e169c7dd63fa6c74ffde82 (diff)
toaplan1.c: [Alex Jackson]
- Reorganized outzone sets and improved descriptions: outzonec -> outzone "Out Zone" (new parent) outzone -> outzoneh "Out Zone (harder)" (former parent) outzonea -> outzonea "Out Zone (old set)" outzoned -> outzoneb "Out Zone (older set)" outzoneb -> outzonec "Out Zone (oldest set)" - Fixed dip switches and inputs (after verification of the M68000 and Z80 code) in outzone and clones - Tagged outzonec (formerly outzoneb) Z80 ROM as BAD_DUMP and the set itself as GAME_IMPERFECT_SOUND after discovering that this clone's M68000 and Z80 ROMs are almost certainly mismatched, causing wrong sound effects.
-rw-r--r--src/mame/drivers/toaplan1.c388
-rw-r--r--src/mame/mame.lst2
2 files changed, 259 insertions, 131 deletions
diff --git a/src/mame/drivers/toaplan1.c b/src/mame/drivers/toaplan1.c
index d23e1b5309c..2a0e3d3d10a 100644
--- a/src/mame/drivers/toaplan1.c
+++ b/src/mame/drivers/toaplan1.c
@@ -29,7 +29,10 @@ Supported games:
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
- outzonea TP-O18 Out Zone (From board serial number 2122)
+ 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)
@@ -40,16 +43,6 @@ Notes:
service input. When invulnerability is enabled, pressing the
service input makes the screen scroll faster.
- OutZone (set 2) has a bug in the 68K code. An Jump instruction at $3E6
- goes to to an invalid instruction at $13DA4. It should really jump to
- $13DAA. This bad jump is executed by flicking the 'Service DSW' while
- after the game has booted. The other Outzone set correctly goes to
- service mode, but this set just loses the plot.
-
- OutZone (set 2) uses different enemies in some stages and has extra
- bonuses compared to set 1. The music sequences are also in different
- orders between the sets. So which is the newest version ?
-
Demonwld (Toaplan copyright) is a newer version, and has a different game
level sequence compared to the Taito licensed version.
@@ -347,7 +340,161 @@ Stephh's and AWJ's notes (based on the games M68000 and Z80 code and some tests)
7) 'outzone' and "clones"
- TO DO !
+ - 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, video registers 0x300008 and 0x340000
+ are loaded with different values than usual (code at 0x013868 and 0x013904).
+ Unfortunately, whatever difference this is supposed to make to the display is
+ not currently known nor emulated by MAME :(
+ - 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
+ GAME_IMPERFECT_SOUND until the correct Z80 ROM is found and dumped.
8) 'vimana' and "clones"
@@ -820,7 +967,6 @@ static INPUT_PORTS_START( toaplan1_2b )
PORT_BIT( 0xfffe, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
-#ifdef UNREFERENCED_CODE
static INPUT_PORTS_START( toaplan1_3b )
PORT_INCLUDE( toaplan1_2b )
@@ -830,7 +976,6 @@ static INPUT_PORTS_START( toaplan1_3b )
PORT_MODIFY("P2")
TOAPLAN_JOY_UDLR_3_BUTTONS( 2 )
INPUT_PORTS_END
-#endif
#define TOAPLAN1_PLAYER_INPUT( player, button3, options ) \
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) options PORT_8WAY \
@@ -974,7 +1119,7 @@ static INPUT_PORTS_START( hellfire )
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_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 ) )
@@ -1118,7 +1263,7 @@ static INPUT_PORTS_START( zerowing2 )
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_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 ) )
@@ -1355,48 +1500,22 @@ static INPUT_PORTS_START( samesame2 )
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 )
- TOAPLAN1_VBLANK_INPUT
+ PORT_INCLUDE( toaplan1_3b )
- 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 ) )
+ /* 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 */
- 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, "Every 300K" )
- PORT_DIPSETTING( 0x04, "200K and 500K" )
- PORT_DIPSETTING( 0x08, "300K only" )
+ /* 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" )
@@ -1406,13 +1525,10 @@ static INPUT_PORTS_START( outzone )
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_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
- PORT_START("TJUMP") /* Territory Jumper Block */
+ /* 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 ) )
@@ -1420,9 +1536,9 @@ static INPUT_PORTS_START( outzone )
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 License)" )
- PORT_DIPSETTING( 0x07, "US (Romstar License)" )
- PORT_DIPSETTING( 0x08, "Hong Kong (Honest Trading License)" )
+ 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 ) )
@@ -1431,47 +1547,70 @@ static INPUT_PORTS_START( outzone )
// 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
-static INPUT_PORTS_START( outzoneb )
+/* verified from M68000 and Z80 code */
+static INPUT_PORTS_START( outzonea )
PORT_INCLUDE( outzone )
- PORT_MODIFY("TJUMP") /* Territory Jumper Block */
- PORT_DIPNAME( 0x07, 0x02, DEF_STR( Region ) )
+ /* 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, "No Warning Screen" )
- PORT_DIPSETTING( 0x07, "No Warning Screen" )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) // doesn't seem to matter on this set
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ 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 )
- PORT_MODIFY("TJUMP") /* Territory Jumper Block */
- PORT_DIPNAME( 0x0f, 0x02, DEF_STR( Region ) )
+ /* 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, "Taiwan (Spacy Co License)" )
- PORT_DIPSETTING( 0x07, "US (Romstar License)" )
- PORT_DIPSETTING( 0x08, "Hong Kong & China (Honest Trading License)" )
-// 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_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
@@ -2435,17 +2574,30 @@ ROM_START( fireshrkdh )
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) )
-/*
-Out Zone - Seems to be a later version, Differences:
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "rom9.bin", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
-. This version is a lot harder.
-. Attract mode differs, player 1 dies early in "Demonstration 2"
-. Special pick up is Super Ball instead of Shield in attract mode.
-. Test mode can be entered and exited without any crash.
-*/
+ ROM_REGION( 0x100000, "gfx1", 0 )
+ ROM_LOAD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
+ ROM_LOAD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
-ROM_START( outzone )
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
+ ROM_LOAD( "rom1.bin", 0x20000, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
+ ROM_LOAD( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
+ ROM_LOAD( "rom4.bin", 0x60000, 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) )
@@ -2509,38 +2661,13 @@ ROM_START( outzonea )
ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END
-/* is this a prototype? */
-ROM_START( outzoneb ) /* From board serial number 2122 */
+ROM_START( outzoneb )
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, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
-
- ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
- ROM_LOAD( "rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
-
- ROM_REGION( 0x80000, "gfx2", 0 )
- ROM_LOAD( "rom2.bin", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
- ROM_LOAD( "rom1.bin", 0x20000, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
- ROM_LOAD( "rom3.bin", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
- ROM_LOAD( "rom4.bin", 0x60000, 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
-
-/* from a bootleg board, but probably an alt original set with different licenses */
-ROM_START( outzonec )
- 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_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( "rom9.bin", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
+ ROM_LOAD( "tp09.bin", 0x0000, 0x8000, CRC(dd56041f) SHA1(a481b8959b349761624166906175f8efcbebb7e7) )
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_LOAD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
@@ -2557,13 +2684,14 @@ ROM_START( outzonec )
ROM_LOAD( "tp018_11.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END
-ROM_START( outzoned )
+/* is this a prototype? */
+ROM_START( outzonec ) /* From board serial number 2122 */
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_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( "tp09.bin", 0x0000, 0x8000, CRC(dd56041f) SHA1(a481b8959b349761624166906175f8efcbebb7e7) )
+ ROM_LOAD( "rom9.bin", 0x0000, 0x8000, BAD_DUMP CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) ) // see notes
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_LOAD( "rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
@@ -2689,11 +2817,11 @@ GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_state, toaplan1,
GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_state, toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", GAME_NO_SOUND )
GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_state, toaplan1, ROT270, "Toaplan", "Same! Same! Same! (1P set)", GAME_NO_SOUND )
GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_state, toaplan1, ROT270, "Toaplan", "Same! Same! Same! (2P set)", GAME_NO_SOUND )
-GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (set 1)", 0 ) // later fixed version
-GAME( 1990, outzonea, outzone, outzone, outzone, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (set 2)", 0 )
-GAME( 1990, outzoneb, outzone, outzone, outzoneb, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (set 3, prototype?)", 0 ) // early revision at least
-GAME( 1990, outzonec, outzone, outzone, outzonec, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (set 4)", 0 )
-GAME( 1990, outzoned, outzone, outzone, outzonec, toaplan1_state, toaplan1, ROT270, "Toaplan", "Out Zone (set 5)", 0 )
+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)", GAME_IMPERFECT_SOUND ) // prototype?
GAME( 1991, vimana, 0, vimana, vimana, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 1)", GAME_NO_SOUND )
GAME( 1991, vimanan, vimana, vimana, vimanan, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (World, set 2)", GAME_NO_SOUND )
GAME( 1991, vimanaj, vimana, vimana, vimanaj, toaplan1_state, vimana, ROT270, "Toaplan", "Vimana (Japan)", GAME_NO_SOUND )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index b4d33014bd9..a822ca55ebb 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -2549,10 +2549,10 @@ fireshrkdh // TP-O17 (c) 1990 Toaplan
samesame // TP-O17 (c) 1989 Toaplan
samesame2 // TP-O17 (c) 1989 Toaplan
outzone // TP-O18 (c) 1990 Toaplan
+outzoneh // TP-O18 (c) 1990 Toaplan
outzonea // TP-O18 (c) 1990 Toaplan
outzoneb // TP-O18 (c) 1990 Toaplan
outzonec // TP-O18 (c) 1990 Toaplan
-outzoned // TP-O18 (c) 1990 Toaplan
vimana // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
vimanaj // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
vimanan // TP-O19 (c) 1991 Toaplan (+ Nova Apparate GMBH & Co license)