summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/arkanoid.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/arkanoid.c')
-rw-r--r--src/mame/drivers/arkanoid.c1177
1 files changed, 1177 insertions, 0 deletions
diff --git a/src/mame/drivers/arkanoid.c b/src/mame/drivers/arkanoid.c
new file mode 100644
index 00000000000..11b46970e1e
--- /dev/null
+++ b/src/mame/drivers/arkanoid.c
@@ -0,0 +1,1177 @@
+/***************************************************************************
+
+ Arkanoid driver (Preliminary)
+
+
+ Japanese version support cocktail mode (DSW #7), the others don't.
+
+ Here are the versions we have:
+
+ arkanoid World version, probably an earlier revision
+ arknoidu USA version, probably a later revision; There has been code
+ inserted, NOT patched, so I don't think it's a bootleg
+ The 68705 code for this one was not available; I made it up from
+ the World version changing the level data pointer table.
+ arknoiuo USA version, probably an earlier revision
+ ROM a75-10.bin should be identical to the real World one.
+ (It only differs in the country byte from A75-11.ROM)
+ This version works fine with the real MCU ROM
+ arkatour Tournament version
+ The 68705 code for this one was not available; I made it up from
+ the World version changing the level data pointer table.
+ arknoidj Japanese version with level selector.
+ The 68705 code for this one was not available; I made it up from
+ the World version changing the level data pointer table.
+ arkbl2 Bootleg of the early Japanese version.
+ The only difference is that the warning text has been replaced
+ by "WAIT"
+ ROM E2.6F should be identical to the real Japanese one.
+ (It only differs in the country byte from A75-11.ROM)
+ This version works fine with the real MCU ROM
+ arkatayt Another bootleg of the early Japanese one, more heavily modified
+ arkblock Another bootleg of the early Japanese one, more heavily modified
+ arkbloc2 Another bootleg
+ arkbl3 Another bootleg of the early Japanese one, more heavily modified
+ paddle2 Another bootleg of the early Japanese one, more heavily modified
+ arkangc Game Corporation bootleg with level selector
+
+
+ Most if not all Arkanoid sets have a bug in their game code. It occurs on the
+ final level where the player has to dodge falling objects. The bug resides in
+ the collision detection routine which sometimes reads from unmapped addresses
+ above $F000. For these addresses it is vital to read zero values, or else the
+ player will die for no reason.
+
+Measured Clocks:
+ Z80 - 5997077Hz (6Mhz)
+M68705 - 2998533Hz (3Mhz)
+YM2149 - 2998531Hz (3Mhz)
+
+
+Stephh's notes (based on the games Z80 code and some tests) :
+
+0) Useful addresses and routines
+
+0a) "Game Corporation" bootlegs, Tayto bootlegs, 'arkmcubl', 'ark1ball'
+
+ - Basic routines :
+ * 0x2044 : BC += A;
+ * 0x204a : DE += A;
+ * 0x2050 : HL += A;
+ * 0x2056 : HL += A; DE = (HL);
+ * 0x21f1 : Display string :
+ Inputs : DE = string address in ROM
+ HL = adress where the string will be displayed
+ (most of the times in video RAM)
+ A = colour
+ String begins with the number of chars to display
+ (eg: 0x02 "OK" to display "OK")
+ * 0x210d : Display 1 char (called by previous routine)
+ * 0x264a : Display score :
+ Inputs : DE = score address
+ HL = adress where the score will be displayed
+ (most of the times in video RAM)
+ * 0x266f : Display 1 digit (called by previous routine)
+ * 0x67ae : Play sound (input : register A) - to be confirmed !
+
+ - Level issues :
+ * 0xed72 : Level (0x00-0x20)
+ * 0xed83 : Breakable bricks left (gold bricks are NOT counted)
+ * 0x55a0 : Display level background
+ * 0x55d9 : Display level bricks :
+ Inputs : IY = index for bricks counter
+ B = number of bricks to display
+ * 0x55f6 : Display 1 background "column"
+ * 0x5639 : Display 1 brick with its shadow
+ * 0xed6b : Hits in the head of last level (0x00-0x10)
+ This value is reset to 0x00 each time you lose a life.
+ * 0x8d15 : Check if head of last level is dead
+
+ - Lives issues :
+ * 0xed71 : Current player lives
+ * 0xed76 : Player 1 lives
+ * 0xed7b : Player 2 lives
+ * 0xef68 : When bit 0 set to 1, no more lives on score for player 1
+ * 0xef69 : When bit 0 set to 1, no more lives on score for player 2
+ * 0xef6a : Player 1 counter for extra lives on score
+ * 0xef6b : Player 2 counter for extra lives on score
+ * 0x22a0 : Draw lives at the bottom left of the screen
+ * 0x2785 : Check player score for extra life
+
+ - Score issues :
+ * 0xc4d7 : Player 1 score / 10 (3 bytes, BCD coded, MSB first)
+ * 0xc4db : Player 2 score / 10 (3 bytes, BCD coded, MSB first)
+ * 0xc4df : Highscore / 10 (3 bytes, BCD coded, MSB first)
+ * 0xef6c : Player 1 score / 1000 for next life (2 bytes, BCD coded, MSB first)
+ * 0xef6e : Player 2 score / 1000 for next life (2 bytes, BCD coded, MSB first)
+ * 0x2723 : Player score += DE; (BCD => 'daa' instructions)
+ * 0x274a : Check player score for highscore
+
+ - Speed issues :
+ * 0xef63 : Speed counter which is increased each time the ball touches
+ your paddle, any wall (up, left or right) or a brick;
+ it is reset when speed changes or when you lose a life.
+ * 0x094c : Speed table (16 bytes)
+ * 0xc462 : Speed (0x01-0x0e) :
+ Speed +1 when counter is above the value in the table
+ (check code at 0x0900)
+ Speed -2 when you get the slow pill ("S")
+ (check code at 0x5423)
+ Speed is sometimes increased when up wall is hit
+ (check code at 0x1442 and table at 0x1462)
+
+ - Pills issues :
+ * 0xc658 : Falling pill (0x80 = none - 0x81-0x87)
+ * 0x5474 : Pills routines table (7 * 2 bytes, LSB first) :
+ . 0x53ff : "L" pill (laser)
+ . 0x540d : "E" pill (enlarge)
+ . 0x5418 : "C" pill (glue)
+ . 0x5423 : "S" pill (slow)
+ . 0x5436 : "B" pill (warp door)
+ . 0x5446 : "D" pill (3 balls)
+ . 0x5451 : "P" pill (extra life)
+ * 0x53c8 : Check pill effect
+
+ - Miscellaneous addresses :
+ * 0xef66 : 0x00 in demo mode else 0x01
+ * 0xed6f : Bit 1 determines player : 0 = player 1 - 1 = player 2
+ * 0xc4ce : Warp door status : 0x00 = closed - 0x01 = opened
+ * 0xc469 : Balls in play : 0x00 = 1 ball - 0x02 = 2 or 3 balls
+
+ - Miscellaneous routines :
+ * 0xa234 : Enter initials
+ * 0xa343 : Check if player has entered "SEX" as initials;
+ if so, replace them with "H !" (no side effect)
+
+
+1) Bootlegs with MCU
+
+1a) 'arkmcubl'
+
+ - Region = 0x76 (Japan).
+ - The bootleg is based on a Japenese early version we don't have.
+ - The MCU is dumped, but the game doesn't run with it.
+ However, there is no problem if I use the one from the World early version.
+ Until I know what to do with it, I use the MCU from the World early version
+ and "save" the existing one in REGION_USER1. Let me know if it's good.
+ - "(c) Taito Corporation 1986".
+ - Displays the "Arkanoid" title.
+ - "HARDWARE TEST" message is written, tests are performed, countdown 11 to 0.
+ - "NOTICE" screen replaces by "WAIT" without any more text.
+ However, the text is still in the ROM at 0x7b81 with changes at the begining :
+ * "NOTICE" -> "WAIT "
+ * 0xbe "THIS GAME IS" -> 0x01 " " 0x7b "IS" 0xde "GAME" 0x6d "IS"
+ IMO these changes are made to bypass the checksums
+ - You can't select your starting level
+ - Known bugs : NONE !
+
+1b) 'ark1ball'
+
+ - Note from the dumper (f205v, 2005.09.29) : "It's a bootleg of "Arkanoid (Japan)",
+ with notice screen eliminated (it only shows a black screen with a red WAIT)
+ and a fix (no dips selection) 1 ball x game and NO starting level selection".
+ However, there is still code in the game which tests the Dip Switches !
+ - Region = 0x76 (Japan).
+ - The bootleg is based on a Japenese early version we don't have.
+ In fact, it is completely based on 'arkmcubl' :
+
+ Z:\MAME\roms>romcmp ark1ball.zip arkmcubl.zip -d
+ 3 and 2 files
+ e1.6d a-1.7d IDENTICAL
+ e2.6f 2palline.7f 99.957275%
+ 68705p3.6i NO MATCH
+
+ Z:\MAME\data>fc /B e2.6f 2palline.7f
+ Comparing files e2.6f and 2PALLINE.7F
+ 000013BE: 20 60
+ 00001A28: 05 02
+ 00001A29: 03 01
+ 00001C80: 20 60
+ 00001C9C: 20 60
+ 00001ED9: 53 36
+ 00001EDA: 53 35
+ 00001EE0: 53 33
+ 00001EE7: 54 34
+ 00001EE9: 52 42
+ 00001EF7: 52 42
+ 00001EF9: 66 46
+
+ - The MCU is not dumped, and the game doesn't run with the one from 'arkmcubl'.
+ However, there is no problem if I use the one from the World early version.
+ Until I know what to do with it, I use the MCU from the World early version.
+ - This version is supposed to be a harder version :
+ * less lives (1 or 2 instead of 3 or 5)
+ * 60K for 1st bonus life instead of 20K
+ - Known bugs :
+ * Names on highscores table are wrong
+ (ingame bug to bypass the checksums)
+
+2) "Game Corporation" bootlegs and assimilated ones.
+
+ - Region = 0x76 (Japan).
+ - All bootlegs are based on a (bootleg) version we don't have.
+ - Team credits have been replaced by bootleggers code.
+ - Start of levels table at 0x7bd5 (32 * 2 bytes - MSB first)
+
+2a) 'arkangc'
+
+ - "(c) Game Corporation 1986".
+ - Displays the "Arkanoid" title but routine to display "BLOCK" with bricks exists.
+ - No hardware test and no "NOTICE" screen.
+ - All reads from 0xf002 are patched.
+ - No reads from 0xd008.
+ - "Continue" Dip Switch has been replaced by sort of "Debug" Dip Switch :
+ * affects ball speed at start of level (0x06 or 0x08)
+ * affects level 2 (same as normal version or same as level 30)
+ - You can select your starting level (between 1 and 30)
+ but they aren't displayed like in the original Japanese set we have ('arknoidj').
+ - Level 30 differs from original Japanese version
+ - There seems to be code to edit levels (check code at 0x8082), but the routines
+ don't seem to be called anymore.
+ - Known bugs :
+ * The paddle isn't centered when starting a new life and / or level;
+ it doesn't "backup" the paddle position when a life is lost as well
+ (I can't tell at the moment if it's an ingame bug or not)
+ So the paddle can sometimes appear in the left wall !
+ * You are told be to able to select your starting level from level 1 to level 32
+ (ingame bug - check code at 0x3425)
+
+2a) 'arkangc2'
+
+ - "(c) Game Corporation 1986".
+ - Displays the "Arkanoid" title but routine to display "BLOCK" with bricks exists.
+ - No hardware test and no "NOTICE" screen.
+ - No reads from 0xf002.
+ - Reads bit 1 from 0xd008.
+ - "Continue" Dip Switch has been replaced by sort of "Debug" Dip Switch :
+ * affects ball speed at start of level (0x04 or 0x06)
+ * affects level 2 (same as normal version or same as level 30)
+ - You can select your starting level (between 1 and 30)
+ but they aren't displayed like in the original Japanese set we have ('arknoidj').
+ No "What round do you want to start from ?" message though.
+ - Level 30 differs from original Japanese version (it also differs from 'arkangc')
+ - The routine to handle the paddle is completely different as in 'arkangc'
+ and any other bootlegs (check code at 0x96b0)
+ - There seems to be code to edit levels (check code at 0x8082), but the routines
+ don't seem to be called anymore.
+ - Known bugs :
+ * The paddle isn't centered when starting a new life and / or level;
+ it doesn't "backup" the paddle position when a life is lost as well
+ (I can't tell at the moment if it's an ingame bug or not)
+ So the paddle can sometimes appear in the left wall !
+ * You are told be to able to select your starting level from level 1 to level 32
+ (ingame bug - check code at 0x3425)
+ * The "test mode" display is completely corrupted
+ (ingame bug - check unused code at 0x2f00 instead of standard text)
+ But you can still press the buttons and test the paddle and the Dip Switches.
+
+2c) 'arkblock'
+
+ - Same as 'arkangc', the only difference is that it displays "BLOCK" with bricks
+ instead of displaying the "Arkanoid" title :
+
+ Z:\MAME\dasm>diff arkangc.asm arkbloc2.asm
+ 8421,8422c8421,8424
+ < 32EF: 21 80 03 ld hl,$0380
+ < 32F2: CD D1 20 call $20D1
+ ---
+ > 32EF: F3 di
+ > 32F0: CD 90 7C call $7C90
+ > 32F3: C9 ret
+ > 32F4: 14 inc d
+
+2d) 'arkbloc2'
+
+ - "(c) Game Corporation 1986".
+ - Displays "BLOCK" with bricks.
+ - No hardware test and no "NOTICE" screen.
+ - All reads from 0xf002 are patched.
+ - Reads bit 5 from 0xd008.
+ - You can select your starting level (between 1 and 30) but they aren't displayed
+ like in the original Japanese set we have ('arknoidj').
+ - "Continue" Dip Switch has been replaced by sort of "Debug" Dip Switch :
+ * affects ball speed at start of level (0x06 or 0x08)
+ * affects level 2 (same as normal version or same as level 30)
+ - You can select your starting level (between 1 and 30)
+ but they aren't displayed like in the original Japanese set we have ('arknoidj').
+ - Level 30 differs from original Japanese version (same as the one from 'arkangc2')
+ - Known bugs :
+ * You can go from one side of the screen to the other through the walls
+ (I can't tell at the moment if it's an ingame bug or not)
+ * You are told be to able to select your starting level from level 1 to level 32
+ (ingame bug - check code at 0x3425)
+
+2e) 'arkgcbl'
+
+ - "1986 ARKANOID 1986".
+ - Displays the "Arkanoid" title but routine to display "BLOCK" with bricks exists.
+ - No hardware test and no "NOTICE" screen.
+ - Most reads from 0xf002 are patched. I need to fix the remaining ones (0x8a and 0xff).
+ - Reads bits 1 and 5 from 0xd008.
+ - "Continue" Dip Switch has been replaced by "Round Select" Dip Switch
+ ("debug" functions from 'arkangc' have been patched).
+ - Different "Bonus Lives" Dip Switch :
+ * "60K 100K 60K+" or "60K" when you start a new game
+ * "20K 60K 60K+" or "20K" when you continue
+ - Different "Lives" Dip Switch (check table at 0x9a28)
+ - Specific coinage (always 2C_1C)
+ - If Dip Switch is set, you can select your starting level (between 1 and 30)
+ but they aren't displayed like in the original Japanese set we have ('arknoidj').
+ - Same level 30 as original Japanese version
+ - Known bugs :
+ * You can go from one side of the screen to the other through the walls
+ (I can't tell at the moment if it's an ingame bug or not)
+ * You are told be to able to select your starting level from level 1 to level 32
+ (ingame bug - check code at 0x3425)
+ * Sound in "Demo Mode" if 1 coin is inserted (ingame bug - check code at 0x0283)
+ * Red square on upper middle left "led" when it is supposed to be yellow (ingame bug)
+
+2f) 'paddle2'
+
+ - Different title, year, and inside texts but routine to display "BLOCK" with bricks exists.
+ - No hardware test and no "NOTICE" screen.
+ - I need to fix ALL reads from 0xf002.
+ - Reads bits 0 to 3 and 5 from 0xd008.
+ - "Continue" Dip Switch has been replaced by "Round Select" Dip Switch
+ ("debug" functions from 'arkangc' have been patched).
+ - No more "Service Mode" Dip Switch (even if code is still there for it).
+ This Dip Switch now selects how spinners are handled :
+ * bit 2 = 0 => read from 0xd018 only
+ * bit 2 = 1 => read from 0xd018 + read from 0xd008
+ I set its default to 1 as parts of the game still branch to 0x96b0.
+ - Different "Bonus Lives" Dip Switch :
+ * "60K 100K 60K+" or "60K" when you start a new game
+ * "20K 60K 60K+" or "20K" when you continue
+ - Different "Lives" Dip Switch (check table at 0x9a28)
+ - If Dip Switch is set, you can select your starting level (between 1 and 30)
+ but they aren't displayed like in the original Japanese set we have ('arknoidj').
+ - Levels are based on the ones from "Arkanoid II".
+ - Known bugs :
+ * You can go from one side of the screen to the other through the walls
+ (I can't tell at the moment if it's an ingame bug or not)
+ * You can't correctly enter your initials at the end of the game
+ (ingame bug ? check code at 0xa23e and difference at 0xa273)
+ * On intro and last screen, colour around main ship is yellow instead of red
+ (ingame bug due to numerous patches)
+
+3) "Tayto" bootlegs and assimilated ones.
+
+ - Region = 0x76 (Japan).
+ - All bootlegs are based on a Japenese early version we don't have.
+ - Start of levels table at 0xbd75 (32 * 2 bytes - LSB first)
+
+3a) 'arkatayt'
+
+ - "(c) Tayto Corporation 1986" but the Taito original logo is displayed.
+ - Displays the "Arkanoid" title.
+ - "HARDWARE TEST" message is written, tests are performed, but no countdown.
+ - "NOTICE" screen replaces by "WAIT" without any more text.
+ However, the text is still in the ROM at 0x7b81 with changes at the begining :
+ * "NOTICE" -> "WAIT "
+ * 0xbe "THIS" -> 0x01 " HIS"
+ IMO these changes are made to bypass the checksums
+ - You can't select your starting level
+ - Known bugs :
+ * level 16 is corrupted with extra bricks
+ (ingame bug due to extra code from 0x5042 to 0x5086)
+ * level 25 is shifted 8 "columns" to the right
+ (ingame bug due to bad level offset at 0xbda5 : 0xe5 instead of 0xed)
+
+3b) 'arktayt2'
+
+ - This version is supposed to be a harder version of 'arkatayt' :
+ * less lives (2 or 3 instead of 3 or 5)
+ * 60K for 1st bonus life instead of 20K
+ Same as 'arkatayt' otherwise
+ - Known bugs :
+ * level 16 is corrupted with extra bricks
+ (ingame bug due to extra code from 0x5042 to 0x5086)
+ * level 25 is shifted 8 "columns" to the right
+ (ingame bug due to bad level offset at 0xbda5 : 0xe5 instead of 0xed)
+ * Names on highscores table are wrong
+ (ingame bug to bypass the checksums)
+
+
+TO DO (2006.09.12) :
+
+ - Check the following Taito sets (adresses, routines and Dip Switches) :
+ * 'arkanoid' = 'arknoiuo'
+ * 'arknoidj'
+ * 'arknoidu'
+ * 'arkatour'
+ - Add more notes about main addresses and routines in the Z80
+ - Try to understand the problem with the MCU in the following sets :
+ * 'arkmcubl'
+ * 'ark1ball'
+
+
+Stephh's log (2006.09.05) :
+
+ - Interverted 'arkblock' and 'arkbloc2' sets for better comparaison
+ - Renamed sets :
+ * 'arkbl2' -> 'arkmcubl'
+ * 'arkbl3' -> 'arkgcbl'
+ - Changed some games descriptions
+ - Removed flags from the following sets :
+ * 'arkbloc2' (old 'arkblock')
+ * 'arkgcbl' (old 'arkbl3')
+ * 'paddle2'
+ This way, even if emulation isn't perfect, people can try them and report bugs.
+
+
+Stephh's log (2006.09.12) :
+
+ - Renamed sets :
+ * 'arkatayt' -> 'arktayt2'
+ - Changed some games descriptions
+ - Added sets :
+ * 'ark1ball'
+ * 'arkangc2'
+ * 'arkatayt'
+ - Removed flags from the following sets :
+ * 'arkmcubl'
+ This way, even if emulation isn't perfect, people can try them and report bugs.
+
+***************************************************************************
+
+Stephh's notes on 'tetrsark' (based on the game Z80 code and some tests) :
+
+ - No reads from 0xd00c, 0xd010 nor 0xd018.
+ - "Cabinet" Dip Switch :
+ * when set to "Upright" :
+ . each player can join and play on its half screen while
+ the other is already playing
+ . the screen is never flipped
+ * when set to "Cocktail" :
+ . only one player can play : the other player has to wait until
+ current player is "GAME OVER" to press the Start button
+ . screen is flipped when player 2 is playing and
+ it remains flipped until player 1 starts a game
+ (so "demo mode" can be upside down)
+ - Credits : even if display is limited to 9, the value still increases;
+ so if you insert too many coins, it can be reset to 0 !
+ - Routines :
+ * 0x56e3 : Play sound (input : register A) - to be confirmed !
+ - Adresses :
+ * 0xc52b : credits
+ * 0xc541 : ~(IN5) - test for coins "buttons" (code at 0x0232)
+ * 0xc516 : ~(IN5)
+ * 0xc517 : ~(IN4)
+ - Known bugs :
+ * Coins "buttons" don't work - we need to use fake BUTTON2 for each player
+
+***************************************************************************/
+
+#include "driver.h"
+#include "arkanoid.h"
+#include "sound/ay8910.h"
+#include "cpu/m6805/m6805.h"
+
+int arkanoid_bootleg_id;
+
+
+/***************************************************************************/
+
+/* Memory Maps */
+
+static ADDRESS_MAP_START( arkanoid_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM
+ AM_RANGE(0xc000, 0xc7ff) AM_RAM
+ AM_RANGE(0xd000, 0xd000) AM_WRITE(AY8910_control_port_0_w)
+ AM_RANGE(0xd001, 0xd001) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
+ AM_RANGE(0xd008, 0xd008) AM_WRITE(arkanoid_d008_w) /* gfx bank, flip screen etc. */
+ AM_RANGE(0xd00c, 0xd00c) AM_READ(arkanoid_68705_input_0_r) /* mainly an input port, with 2 bits from the 68705 */
+ AM_RANGE(0xd010, 0xd010) AM_READWRITE(input_port_1_r, watchdog_reset_w)
+ AM_RANGE(0xd018, 0xd018) AM_READWRITE(arkanoid_Z80_mcu_r, arkanoid_Z80_mcu_w) /* input from the 68705 */
+ AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_WRITE(arkanoid_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0xe800, 0xe83f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xe840, 0xefff) AM_RAM
+ AM_RANGE(0xf000, 0xffff) AM_READNOP /* fixes instant death in final level */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( bootleg_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM
+ AM_RANGE(0xc000, 0xc7ff) AM_RAM
+ AM_RANGE(0xd000, 0xd000) AM_WRITE(AY8910_control_port_0_w)
+ AM_RANGE(0xd001, 0xd001) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
+ AM_RANGE(0xd008, 0xd008) AM_WRITE(arkanoid_d008_w) /* gfx bank, flip screen etc. */
+ AM_RANGE(0xd00c, 0xd00c) AM_READ(input_port_0_r)
+ AM_RANGE(0xd010, 0xd010) AM_READWRITE(input_port_1_r, watchdog_reset_w)
+ AM_RANGE(0xd018, 0xd018) AM_READ(arkanoid_input_2_r) AM_WRITENOP
+ AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_WRITE(arkanoid_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0xe800, 0xe83f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
+ AM_RANGE(0xe840, 0xefff) AM_RAM
+ AM_RANGE(0xf000, 0xffff) AM_READNOP /* fixes instant death in final level */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(arkanoid_68705_portA_r, arkanoid_68705_portA_w)
+ AM_RANGE(0x0001, 0x0001) AM_READ(arkanoid_input_2_r)
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(arkanoid_68705_portC_r, arkanoid_68705_portC_w)
+ AM_RANGE(0x0004, 0x0004) AM_WRITE(arkanoid_68705_ddrA_w)
+ AM_RANGE(0x0006, 0x0006) AM_WRITE(arkanoid_68705_ddrC_w)
+ AM_RANGE(0x0010, 0x007f) AM_RAM
+ AM_RANGE(0x0080, 0x07ff) AM_ROM
+ADDRESS_MAP_END
+
+
+/***************************************************************************/
+
+
+/* Input Ports */
+
+#define ARKNOI_IN0\
+ PORT_START_TAG("IN0")\
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )\
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )\
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )\
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )\
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )\
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )\
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) /* input from the 68705, some bootlegs need it to be 1 */\
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* input from the 68705 */
+
+#define ARKNOI_IN1\
+ PORT_START_TAG("IN1")\
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )\
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL\
+ PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+#define ARKNOI_SPINNERS\
+ PORT_START_TAG("IN2") /* Spinner Player 1 */\
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15)\
+ PORT_START_TAG("IN3") /* Spinner Player 2 */\
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_COCKTAIL
+
+static INPUT_PORTS_START( arkanoid )
+ ARKNOI_IN0
+ ARKNOI_IN1
+ ARKNOI_SPINNERS
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x10, "20K 60K 60K+" )
+ PORT_DIPSETTING( 0x00, "20K" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) ) /* Table at 0x9a28 */
+ PORT_DIPSETTING( 0x20, "3" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) ) /* Table at 0x0328 */
+ PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) )
+INPUT_PORTS_END
+
+/* Different coinage and additionnal "Cabinet" Dip Switch */
+static INPUT_PORTS_START( arknoidj )
+ ARKNOI_IN0
+ ARKNOI_IN1
+ ARKNOI_SPINNERS
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x10, "20K 60K 60K+" )
+ PORT_DIPSETTING( 0x00, "20K" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) ) /* Table at 0x9a28 */
+ PORT_DIPSETTING( 0x20, "3" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coinage ) ) /* table at 0x0320 */
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ark1ball )
+ PORT_INCLUDE(arknoidj)
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) /* "ld a,$60" at 0x93bd and "ld a,$60" at 0x9c7f and 0x9c9b */
+ PORT_DIPSETTING( 0x10, "60K 100K 60K+" )
+ PORT_DIPSETTING( 0x00, "60K" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) ) /* Table at 0x9a28 */
+ PORT_DIPSETTING( 0x20, "1" )
+ PORT_DIPSETTING( 0x00, "2" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( arkangc )
+ PORT_INCLUDE(arknoidj)
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Ball Speed" ) /* Speed at 0xc462 (code at 0x18aa) - Also affects level 2 (code at 0x7b82) */
+ PORT_DIPSETTING( 0x01, DEF_STR( Normal ) ) /* 0xc462 = 0x06 - Normal level 2 */
+ PORT_DIPSETTING( 0x00, "Faster" ) /* 0xc462 = 0x08 - Level 2 same as level 30 */
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( arkangc2 )
+ PORT_INCLUDE(arknoidj)
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Ball Speed" ) /* Speed at 0xc462 (code at 0x18aa) - Also affects level 2 (code at 0x7b82) */
+ PORT_DIPSETTING( 0x01, "Slower" ) /* 0xc462 = 0x04 - Normal level 2 */
+ PORT_DIPSETTING( 0x00, DEF_STR ( Normal ) ) /* 0xc462 = 0x06 - Level 2 same as level 30 */
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( arkgcbl )
+ PORT_INCLUDE(arknoidj)
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x01, 0x00, "Round Select" ) /* Check code at 0x7bc2 - Speed at 0xc462 (code at 0x18aa) */
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) /* 0xc462 = 0x06 */
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* 0xc462 = 0x06 */
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) /* "ld a,$60" at 0x93bd and "ld a,$20" at 0x9c7f and 0x9c9b */
+ PORT_DIPSETTING( 0x10, "60K 100K 60K+" ) /* But "20K 60K 60K+" when continue */
+ PORT_DIPSETTING( 0x00, "60K" ) /* But "20K" when continue */
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x20, "3" )
+ PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) /* Always 2C_1C - check code at 0x7d5e */
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( paddle2 )
+ PORT_INCLUDE(arknoidj)
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x01, 0x00, "Round Select" ) /* Check code at 0x7bc2 - Speed at 0xc462 (code at 0x18aa) */
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) /* 0xc462 = 0x06 */
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* 0xc462 = 0x06 */
+ PORT_DIPNAME( 0x04, 0x04, "Controls ?" ) /* Check code at 0x96a1 and read notes */
+ PORT_DIPSETTING( 0x04, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Alternate ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) /* "ld a,$60" at 0x93bd and "ld a,$20" at 0x9c7f and 0x9c9b */
+ PORT_DIPSETTING( 0x10, "60K 100K 60K+" ) /* But "20K 60K 60K+" when continue */
+ PORT_DIPSETTING( 0x00, "60K" ) /* But "20K" when continue */
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) ) /* Table at 0x9a28 */
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x20, "3" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( arktayt2 )
+ PORT_INCLUDE(arknoidj)
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) /* "ld a,$60" at 0x93bd and "ld a,$60" at 0x9c7f and 0x9c9b */
+ PORT_DIPSETTING( 0x10, "60K 100K 60K+" )
+ PORT_DIPSETTING( 0x00, "60K" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Lives ) ) /* Table at 0x9a28 */
+ PORT_DIPSETTING( 0x20, "2" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coinage ) ) /* Table at 0x0320 */
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( tetrsark )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN3")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // or up? it rotates the piece.
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) /* Also affects numbers of players - read notes */
+ PORT_DIPSETTING( 0x10, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) ) /* Table at 0x0207 */
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
+
+ PORT_START_TAG("IN5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // or up? it rotates the piece.
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+// PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // WTF? it does't work
+// PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) // WTF? it does't work
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+INPUT_PORTS_END
+
+
+/***************************************************************************/
+
+/* Graphics Layouts */
+
+static const gfx_layout charlayout =
+{
+ 8,8, /* 8*8 characters */
+ 4096, /* 4096 characters */
+ 3, /* 3 bits per pixel */
+ { 2*4096*8*8, 4096*8*8, 0 }, /* the two bitplanes are separated */
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8 /* every char takes 8 consecutive bytes */
+};
+
+/* Graphics Decode Information */
+
+static GFXDECODE_START( arkanoid )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 64 )
+ // sprites use the same characters above, but are 16x8
+GFXDECODE_END
+
+/* Sound Interfaces */
+
+static struct AY8910interface ay8910_interface =
+{
+ input_port_5_r,
+ input_port_4_r
+};
+
+/* Machine Drivers */
+
+static MACHINE_DRIVER_START( arkanoid )
+ // basic machine hardware
+ MDRV_CPU_ADD_TAG("main", Z80, 6000000) /* 6 Mhz */
+ MDRV_CPU_PROGRAM_MAP(arkanoid_map, 0)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold, 1)
+
+ MDRV_CPU_ADD_TAG("mcu", M68705, 3000000/M68705_CLOCK_DIVIDER) /* 3 Mhz */
+ MDRV_CPU_PROGRAM_MAP(mcu_map, 0)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_INTERLEAVE(100) // 100 CPU slices per second to synchronize between the MCU and the main CPU
+
+ MDRV_MACHINE_START(arkanoid)
+ MDRV_MACHINE_RESET(arkanoid)
+
+ // video hardware
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(32*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
+ MDRV_GFXDECODE(arkanoid)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_PALETTE_INIT(RRRR_GGGG_BBBB)
+ MDRV_VIDEO_START(arkanoid)
+ MDRV_VIDEO_UPDATE(arkanoid)
+
+ // sound hardware
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(AY8910, 1500000)
+ MDRV_SOUND_CONFIG(ay8910_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( bootleg )
+ MDRV_IMPORT_FROM(arkanoid)
+
+ // basic machine hardware
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(bootleg_map, 0)
+
+ MDRV_CPU_REMOVE("mcu")
+MACHINE_DRIVER_END
+
+
+/***************************************************************************/
+
+/* ROMs */
+
+ROM_START( arkanoid )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "a75-01-1.rom", 0x0000, 0x8000, CRC(5bcda3b0) SHA1(52cadd38b5f8e8856f007a9c602d6b508f30be65) )
+ ROM_LOAD( "a75-11.rom", 0x8000, 0x8000, CRC(eafd7191) SHA1(d2f8843b716718b1de209e97a874e8ce600f3f87) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "arkanoid.uc", 0x0000, 0x0800, CRC(515d77b6) SHA1(a302937683d11f663abd56a2fd7c174374e4d7fb) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arknoidu )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "a75-19.bin", 0x0000, 0x8000, CRC(d3ad37d7) SHA1(a172a1ef5bb83ee2d8ed2842ef8968af19ad411e) )
+ ROM_LOAD( "a75-18.bin", 0x8000, 0x8000, CRC(cdc08301) SHA1(05f54353cc8333af14fa985a2764960e20e8161a) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "arknoidu.uc", 0x0000, 0x0800, BAD_DUMP CRC(de518e47) SHA1(b8eddd1c566505fb69e3d1207c7a9720dfb9f503) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arknoiuo )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "a75-01-1.rom", 0x0000, 0x8000, CRC(5bcda3b0) SHA1(52cadd38b5f8e8856f007a9c602d6b508f30be65) )
+ ROM_LOAD( "a75-10.rom", 0x8000, 0x8000, CRC(a1769e15) SHA1(fbb45731246a098b29eb08de5d63074b496aaaba) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "arkanoid.uc", 0x0000, 0x0800, CRC(515d77b6) SHA1(a302937683d11f663abd56a2fd7c174374e4d7fb) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkatour )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "t_ark1.bin", 0x0000, 0x8000, CRC(e3b8faf5) SHA1(4c09478fa41881fa89ee6afb676aeb780f17ac2e) )
+ ROM_LOAD( "t_ark2.bin", 0x8000, 0x8000, CRC(326aca4d) SHA1(5a194b7a0361236d471b24905dc6434372f81252) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "arkatour.uc", 0x0000, 0x0800, BAD_DUMP CRC(d3249559) SHA1(b1542764450016614e9e03cedd6a2f1e59961789) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "t_ark3.bin", 0x00000, 0x8000, CRC(5ddea3cf) SHA1(58f16515898b7cc2697bf7663a60d9ca0db6da95) )
+ ROM_LOAD( "t_ark4.bin", 0x08000, 0x8000, CRC(5fcf2e85) SHA1(f721f0afb0550cc64bff26681856a7576398d9b5) )
+ ROM_LOAD( "t_ark5.bin", 0x10000, 0x8000, CRC(7b76b192) SHA1(a68aa08717646a6c322cf3455df07f50df9e9f33) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arknoidj )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "a75-21.rom", 0x0000, 0x8000, CRC(bf0455fc) SHA1(250522b84b9f491c3f4efc391bf6aa6124361369) )
+ ROM_LOAD( "a75-22.rom", 0x8000, 0x8000, CRC(3a2688d3) SHA1(9633a661352def3d85f95ca830f6d761b0b5450e) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "arknoidj.uc", 0x0000, 0x0800, BAD_DUMP CRC(0a4abef6) SHA1(fdce0b7a2eab7fd4f1f4fc3b93120b1ebc16078e) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkmcubl )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "e1.6d", 0x0000, 0x8000, CRC(dd4f2b72) SHA1(399a8636030a702dafc1da926f115df6f045bef1) )
+ ROM_LOAD( "e2.6f", 0x8000, 0x8000, CRC(bbc33ceb) SHA1(e9b6fef98d0d20e77c7a1c25eff8e9a8c668a258) )
+
+ /* MCU from the World early version ('arkanoid'), so the game is playable */
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "arkmcubl.uc", 0x0000, 0x0800, BAD_DUMP CRC(515d77b6) SHA1(a302937683d11f663abd56a2fd7c174374e4d7fb) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+
+ /* Until we know what this MCU is supposed to do, we put it here */
+ ROM_REGION( 0x0800, REGION_USER1, 0 )
+ ROM_LOAD( "68705p3.6i", 0x0000, 0x0800, CRC(389a8cfb) SHA1(9530c051b61b5bdec7018c6fdc1ea91288a406bd) )
+ROM_END
+
+ROM_START( ark1ball )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "a-1.7d", 0x0000, 0x8000, CRC(dd4f2b72) SHA1(399a8636030a702dafc1da926f115df6f045bef1) )
+ ROM_LOAD( "2palline.7f", 0x8000, 0x8000, CRC(ed6b62ab) SHA1(4d4991b422756bd304fc5ef236aac1422fe1f999) )
+
+ /* MCU from the World early version ('arkanoid'), so the game is playable */
+ ROM_REGION( 0x0800, REGION_CPU2, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "ark1ball.uc", 0x0000, 0x0800, BAD_DUMP CRC(515d77b6) SHA1(a302937683d11f663abd56a2fd7c174374e4d7fb) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a-3.3a", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a-4.3d", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a-5.3f", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkangc )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "arkgc.1", 0x0000, 0x8000, CRC(c54232e6) SHA1(beb759cee68009a06824b755d2aa26d7d436b5b0) )
+ ROM_LOAD( "arkgc.2", 0x8000, 0x8000, CRC(9f0d4754) SHA1(731c9224616a338084edd6944c754d68eabba7f2) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkangc2 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "1.81", 0x0000, 0x8000, CRC(bd6eb996) SHA1(a048ff01156166595dca0b6bee46344f7db548a8) )
+ ROM_LOAD( "2.82", 0x8000, 0x8000, CRC(29dbe452) SHA1(b99cb98549bddf1e673e2e715c80664001581f9f) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkblock )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "ark-6.bin", 0x0000, 0x8000, CRC(0be015de) SHA1(f4209085b59d2c96a62ac9657c7bf097da55362b) )
+ ROM_LOAD( "arkgc.2", 0x8000, 0x8000, CRC(9f0d4754) SHA1(731c9224616a338084edd6944c754d68eabba7f2) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkbloc2 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "block01.bin", 0x0000, 0x8000, CRC(5be667e1) SHA1(fbc5c97d836c404a2e6c007c3836e36b52ae75a1) )
+ ROM_LOAD( "block02.bin", 0x8000, 0x8000, CRC(4f883ef1) SHA1(cb090a57fc75f17a3e2ba637f0e3ec93c1d02cea) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkgcbl )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "arkanunk.1", 0x0000, 0x8000, CRC(b0f73900) SHA1(2c9a36cc1d2a3f33ec81d63c1c325554b818d2d3) )
+ ROM_LOAD( "arkanunk.2", 0x8000, 0x8000, CRC(9827f297) SHA1(697874e73e045eb5a7bf333d7310934b239c0adf) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( paddle2 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "paddle2.16", 0x0000, 0x8000, CRC(a286333c) SHA1(0b2c9cb0df236f327413d0c541453e1ba979ea38) )
+ ROM_LOAD( "paddle2.17", 0x8000, 0x8000, CRC(04c2acb5) SHA1(7ce8ba31224f705b2b6ed0200404ef5f8f688001) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "a75-03.rom", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "a75-04.rom", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "a75-05.rom", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arkatayt )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "ic81-v.3f", 0x0000, 0x8000, CRC(154e2c6f) SHA1(dce3ae1ca83b5071ebec96f3ae18b96abe828ce5) )
+ ROM_LOAD( "ic82-w.5f", 0x8000, 0x8000, CRC(4fa8cefa) SHA1(fb825834da9c8638e6a328784922b5dc23f16564) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "1-ic33.2c", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "2-ic34.3c", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "3-ic35.5c", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "ic73.11e", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "ic74.12e", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "ic75.13e", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+ROM_START( arktayt2 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "ic81.3f", 0x0000, 0x8000, CRC(6e0a2b6f) SHA1(5227d7a944cb1e815f60ec87a67f7462870ff9fe) )
+ ROM_LOAD( "ic82.5f", 0x8000, 0x8000, CRC(5a97dd56) SHA1(b71c7b5ced2b0eebbcc5996dd21a1bb1c2da4819) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "1-ic33.2c", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
+ ROM_LOAD( "2-ic34.3c", 0x08000, 0x8000, CRC(71fae199) SHA1(5d253c46ccf4cd2976a5fb8b8713f0f345443d06) )
+ ROM_LOAD( "3-ic35.5c", 0x10000, 0x8000, CRC(c76374e2) SHA1(7520dd48de20db60a2038f134dcaa454988e7874) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "ic73.11e", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "ic74.12e", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "ic75.13e", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+/* the other Dr. Korea game (Hexa, hexa.c) also appears to be derived from Arkanoid hardware */
+
+ROM_START( tetrsark )
+ ROM_REGION( 0x18000, REGION_CPU1, 0 )
+ ROM_LOAD( "ic17.1", 0x00000, 0x8000, CRC(1a505eda) SHA1(92f171a12cf0c326d29c244514718df04b998426) )
+ ROM_LOAD( "ic16.2", 0x08000, 0x8000, CRC(157bc4df) SHA1(b2c704148e7e3ca61ab51308ee0d66ea1088bff3) )
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ic64.3", 0x00000, 0x8000, CRC(c3e9b290) SHA1(6e99520606c654e531dbeb9a598cfbb443c24dff) )
+ ROM_LOAD( "ic63.4", 0x08000, 0x8000, CRC(de9a368f) SHA1(ffbb2479200648da3f3e7ab7cebcdb604f6dfb3d) )
+ ROM_LOAD( "ic62.5", 0x10000, 0x8000, CRC(c8e80a00) SHA1(4bee4c36ee768ae68ebc64e639fdc43f61c74f92) )
+
+ ROM_REGION( 0x0600, REGION_PROMS, 0 )
+ ROM_LOAD( "a75-07.bpr", 0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) ) /* red component */
+ ROM_LOAD( "a75-08.bpr", 0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) ) /* green component */
+ ROM_LOAD( "a75-09.bpr", 0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) ) /* blue component */
+ROM_END
+
+
+/* Driver Initialization */
+
+static void arkanoid_bootleg_init( void )
+{
+ memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xf002, 0xf002, 0, 0, arkanoid_bootleg_f002_r );
+ memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd018, 0xd018, 0, 0, arkanoid_bootleg_d018_w );
+ memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd008, 0xd008, 0, 0, arkanoid_bootleg_d008_r );
+}
+
+static DRIVER_INIT( arkangc )
+{
+ arkanoid_bootleg_id = ARKANGC;
+ arkanoid_bootleg_init();
+}
+
+static DRIVER_INIT( arkangc2 )
+{
+ arkanoid_bootleg_id = ARKANGC2;
+ arkanoid_bootleg_init();
+}
+
+static DRIVER_INIT( arkblock )
+{
+ arkanoid_bootleg_id = ARKBLOCK;
+ arkanoid_bootleg_init();
+}
+
+static DRIVER_INIT( arkbloc2 )
+{
+ arkanoid_bootleg_id = ARKBLOC2;
+ arkanoid_bootleg_init();
+}
+
+static DRIVER_INIT( arkgcbl )
+{
+ arkanoid_bootleg_id = ARKGCBL;
+ arkanoid_bootleg_init();
+}
+
+static DRIVER_INIT( paddle2 )
+{
+ arkanoid_bootleg_id = PADDLE2;
+ arkanoid_bootleg_init();
+}
+
+
+static DRIVER_INIT( tetrsark )
+{
+ UINT8 *ROM = memory_region(REGION_CPU1);
+ int x;
+
+ for (x=0;x<0x8000;x++)
+ {
+ ROM[x]=ROM[x]^0x94;
+ }
+}
+
+
+/* Game Drivers */
+
+GAME( 1986, arkanoid, 0, arkanoid, arkanoid, 0, ROT90, "Taito Corporation Japan", "Arkanoid (World)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arknoidu, arkanoid, arkanoid, arkanoid, 0, ROT90, "Taito America Corporation (Romstar license)", "Arkanoid (US)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arknoiuo, arkanoid, arkanoid, arkanoid, 0, ROT90, "Taito America Corporation (Romstar license)", "Arkanoid (US, older)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arknoidj, arkanoid, arkanoid, arknoidj, 0, ROT90, "Taito Corporation", "Arkanoid (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkmcubl, arkanoid, arkanoid, arknoidj, 0, ROT90, "bootleg", "Arkanoid (bootleg with MCU)", GAME_SUPPORTS_SAVE )
+GAME( 1986, ark1ball, arkanoid, arkanoid, ark1ball, 0, ROT90, "bootleg", "Arkanoid (bootleg with MCU, harder)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkangc, arkanoid, bootleg, arkangc, arkangc, ROT90, "bootleg", "Arkanoid (Game Corporation bootleg, set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkangc2, arkanoid, bootleg, arkangc2, arkangc2, ROT90, "bootleg", "Arkanoid (Game Corporation bootleg, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkblock, arkanoid, bootleg, arkangc, arkblock, ROT90, "bootleg", "Block (Game Corporation bootleg, set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkbloc2, arkanoid, bootleg, arkangc, arkbloc2, ROT90, "bootleg", "Block (Game Corporation bootleg, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkgcbl, arkanoid, bootleg, arkgcbl, arkgcbl, ROT90, "bootleg", "Arkanoid (bootleg on Block hardware)", GAME_SUPPORTS_SAVE )
+GAME( 1988, paddle2, arkanoid, bootleg, paddle2, paddle2, ROT90, "bootleg", "Paddle 2 (bootleg on Block hardware)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arkatayt, arkanoid, bootleg, arknoidj, 0, ROT90, "bootleg", "Arkanoid (Tayto bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1986, arktayt2, arkanoid, bootleg, arktayt2, 0, ROT90, "bootleg", "Arkanoid (Tayto bootleg, harder)", GAME_SUPPORTS_SAVE )
+GAME( 1987, arkatour, arkanoid, arkanoid, arkanoid, 0, ROT90, "Taito America Corporation (Romstar license)", "Tournament Arkanoid (US)", GAME_SUPPORTS_SAVE )
+GAME( 19??, tetrsark, 0, bootleg, tetrsark, tetrsark, ROT0, "D.R. Korea", "Tetris (D.R. Korea)", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS )
+