diff options
Diffstat (limited to 'src/mame/drivers/seta.c')
-rw-r--r-- | src/mame/drivers/seta.c | 9093 |
1 files changed, 9093 insertions, 0 deletions
diff --git a/src/mame/drivers/seta.c b/src/mame/drivers/seta.c new file mode 100644 index 00000000000..2d84e5f216f --- /dev/null +++ b/src/mame/drivers/seta.c @@ -0,0 +1,9093 @@ +/*************************************************************************** + + -= Seta Hardware =- + + driver by Luca Elia (l.elia@tin.it) + + +CPU : 68000 + [65C02] (only in the earlier games) +Custom : X1-001A X1-002A Sprites + X1-001 + X1-002 + X1-003 + X1-004 + X1-005 X0-005 + X1-006 X0-006 + X1-007 + X1-010 Sound: 16 Bit PCM + X1-011 [x2] X1-012 [x2] Tilemaps + X1-014 Sprites? + +------------------------------------------------------------------------------- +Ordered by Board Year + Game Licensed To +------------------------------------------------------------------------------- +P0-029-A (M6100287A) 88 Thundercade / Twin Formation (1) Taito +? (M6100326A) 88 Twin Eagle Taito +? 89 DownTown Taito / RomStar +? (M6100430A) 89 U.S. Classic(2) Taito / RomStar +? 88 Caliber 50 Taito / RomStar +? 89 Arbalester Taito / RomStar +P1-036-A + P0-045-A + +P1-049-A 89 Meta Fox Taito / RomStar +P0-053-1 89 Castle of Dragon/Dragon Unit Taito / RomStar / Athena +P0-053-A 91 Strike Gunner S.T.G Athena / Tecmo +P0-053-A 92 Quiz Kokology Tecmo +P0-055-B 89 Wit's Athena +P0-055-D 90 Thunder & Lightning Romstar / Visco +Promat PCB 94 Wiggie Waggie(5) -- +P0-063-A 91 Rezon Allumer +P0-068-B (M6100723A) 92 Block Carnival Visco +P0-072-2 (prototype) 92 Blandia (prototype) Allumer +P0-077-A (BP922) 92 Ultraman Club Banpresto +PO-078-A 92 Blandia Allumer +P0-079-A 92 Zing Zing Zip Allumer + Tecmo +P0-079-A 94 Eight Forces Tecmo +PO-080-A (BP923) 92 SD Gundam Neo Battling (3) Banpresto +? 93 Athena no Hatena? Athena +? 93 J.J.Squawkers Athena / Able +? (93111A) 93 War Of Aero Yang Cheng +P0-081-A 93 Mobile Suit Gundam Banpresto +PO-083-A (BP931) 93 Ultra Toukon Densetsu Banpresto + Tsuburaya Prod. +PO-092-A 93 Daioh Athena +PO-096-A (BP934KA) 93 Kamen Rider Banpresto +P0-097-A 93 Oishii Puzzle .. Sunsoft + Atlus +bootleg 9? Triple Fun (4) bootleg (Comad?) +P0-100-A 93 Quiz Kokology 2 Tecmo +P0-101-1 94 Pro Mahjong Kiwame Athena +PO-102-A 93 Mad Shark Allumer +P0-114-A (SKB-001) 94 Krazy Bowl American Sammy +P0-117-A (DH-01) 95 Extreme Downhill Sammy Japan +P0-117-A? 95 Sokonuke Taisen Game Sammy Industries +P0-120-A (BP954KA) 95 Gundhara Banpresto +PO-122-A (SZR-001) 95 Zombie Raid American Sammy +? 96 Crazy Fight Subsino + +------------------------------------------------------------------------------- +(1) YM2203 + YM3812 instead of X1-010 +(2) wrong colors +(3) Same board as "Ultraman Club" despite the different PCB number +(4) this is a bootleg of Oishii Puzzle, in english, is there an official + version? the sound system has been replaced with an OKI M6295 + hardware is definitely bootleg. standard simple layout board with no + custom chips and no manufacturer on the pcb. +(5) The game code is based on Thunder and Lightning but the PCB is custom + there are a few gfx emulation bugs (flipping of some border tiles and + sprites not leaving the screen correctly) its possible the custom hw + doesn't behave *exactly* the same as the original seta hw + +Notes: +- The NEC D4701 used by Caliber 50 is a mouse interface IC (uPD4701c). + Of course it's used to control the spinner. DownTown probably has it as well. + +TODO: +- I think the best way to correctly align tilemaps and sprites and account for + both flipping and different visible areas is to have a table with per game + vertical and horizontal offsets for sprites, tilemaps and possibly the "floating + tilemaps" (made of sprites) for both the flipped and normal screen cases. + Current issues: metafox test grid not aligned when screen flipped, madshark & utoukond + ("floating tilemaps" sprites when flipped) + krzybowl not aligned vertically when screen flipped + +- bad sound in sokonuke? +- in msgunda1, colors for the score display screw up after the second animation + in attract mode. The end of the animation also has garbled sprites. + Note that the animation is not present in msgundam. +- Some games: battery backed portion of RAM (e.g. downtown, kiwame, zombraid) +- the zombraid crosshair hack can go if the nvram regions are figured out. +- Some games: programmable timer that generates IRQ. See e.g. gundhara: + lev 4 is triggerd by writes at d00000-6 and drives the sound. + See also msgundam. + +- tndrcade: lots of flickering sprites +- drgnunit sprite/bg unaligned when screen flipped (check I/O test in service mode) +- extdwnhl has some wrong colored tiles in one of the attract mode images and in + later tracks. +- oisipuzl doesn't support screen flip? tilemap flipping is also kludged in the video driver. +- eightfrc has alignment problems both flipped and not +- flip screen and mirror support not working correctly in zombraid +- gundhara visible area might be smaller (zombraid uses the same MachineDriver, and + the current area is right for it) +- crazyfgt: emulate protection & tickets, fix graphics glitches, find correct clocks, + level 2 interrupt should probably be triggered by the 3812 but sound tends to die that way. + +***************************************************************************/ + +/*************************************************************************** + + Thundercade / Twin Formation + +CPU: HD68000PS8 +SND: YM3812, YM2203C +OSC: 16MHz + +This PCB is loaded with custom SETA chips as follows +X1-001 (also has written YM3906) +X1-002 (also has written YM3909) +X1-003 +X1-004 +X1-006 + +Rom code is UAO, M/B code is M6100287A (the TAITO logo is written also) + +P0-029-A + + UA0-4 UA0-3 4364 UA0-2 UA0-1 4364 X1-001 16MHz X1-002 + 68000-8 + 4364 4364 UA0-9 UA0-8 UA0-7 UA0-6 + UA0-13 UA0-12 UA0-11 UA0-10 + X0-006 + UA10-5 2016 YM3812 YM2203 SW1 + SW2 X1-006 + X1-004 + X1-003 + +***************************************************************************/ + +/*************************************************************************** + + Twin Eagle + +M6100326A Taito (Seta) + +ua2-4 68000 +ua2-3 +ua2-6 +ua2-5 +ua2-8 +ua2-10 +ua2-7 ua2-1 +ua2-9 +ua2-12 +ua2-11 ua2-2 + +***************************************************************************/ + +/*************************************************************************** + + U.S. Classic + +M6100430A (Taito 1989) + + u7 119 u6 118 u5 117 u4 116 + 68000-8 +u13 120 000 +u19 121 001 +u21 122 002 +u29 123 003 +u33 124 +u40 125 +u44 126 +u51 127 +u58 128 +u60 129 65c02 +u68 130 +u75 131 u61 004 + + u83 132 + +***************************************************************************/ +/*************************************************************************** + + Caliber 50 + +CPU: TMP 68000N-8, 65C02 +Other: NEC D4701 + +UH-001-006 SW2 SW1 +UH-001-007 +UH-001-008 8464 68000-8 +UH-001-009 X1-002A X1-001A 8464 Uh-002-001=T01 +UH-001-010 8464 51832 +UH-001-011 8464 51832 + UH-001-002 +UH-001-012 X1-012 UH-001-003 +UH-001-013 UH-002-004-T02 + X1-011 5116-10 + BAT + 16MHz + X1-010 65C02 X1-006 + UH-001-005 X1-007 + 4701 X1-004 + +***************************************************************************/ +/*************************************************************************** + + Meta Fox + +(Seta 1990) + +P0-045A + +P1-006-163 8464 68000-8 +P1-007-164 X1-002A X1-001A 8464 +P1-008-165 8464 +P1-009-166 8464 256K-12 + 256K-12 + + X1-012 + X1-011 + + + 2063 X1-010 X1-006 X0-006 + X1-007 + X1-004 X1-004 + +---------------------- +P1-036-A + +UP-001-010 +UP-001-011 +UP-001-012 +UP-001-013 + + +UP-001-014 +UP-001-015 + +----------------------- +P1-049-A + + UP-001-001 + UP-001-002 + P1-003-161 + P1-004-162 + + + UP-001-005 + x + +***************************************************************************/ + + +/*************************************************************************** + + Dragon Unit + [Prototype of "Castle Of Dragon"] + +PCB: P0-053-1 +CPU: 68000-8 +Sound: X1-010 +OSC: 16.0000MHz + +Chips: X1-001A, X1-002A, X1-004, X1-006, X1-007, X1-010, X1-011, X1-012 + +***************************************************************************/ +/*************************************************************************** + + Wit's + +(c)1989 Athena (distributed by Visco) +P0-055B (board is made by Seta) + +CPU : TMP68000N-8 +Sound: X1-010 +OSC : 16.000MHz + +ROMs: +UN001001.U1 - Main program (27256) +UN001002.U4 - Main program (27256) + +UN001003.10A - Samples (28pin mask) +UN001004.12A / + +UN001005.2L - Graphics (28pin mask) +UN001006.4L | +UN001007.5L | +UN001008.7L / + +Custom chips: X1-001A X1-002A + X1-004 (x2) + X1-006 + X1-007 + X1-010 + +***************************************************************************/ +/*************************************************************************** + + Thunder & Lightning + +Location Device File ID Checksum +----------------------------------------------- +U1 1A 27C256 M4 C18C [ MAIN PROG ] [ EVEN ] +U4 3A 27C256 M5 12E1 [ MAIN PROG ] [ ODD ] +U29 10A 23C4001 R27 37F2 [ HIGH ] +U39 12A 23C4001 R28 0070 [ LOW ] +U6 2K 23C1000 T14 1F7D [ C40 ] +U9 4K 23C1000 T15 7A15 [ C30 ] +U14 5K 23C1000 T16 BFFD [ C20 ] +U20 7K 23C1000 T17 7AE7 [ C10 ] + +PCB: PO055D + +CPU: 68000 8MHz + +Custom: X1-001A X1-002A + X1-004 + X1-006 + X1-007 + X1-010 + +***************************************************************************/ + + + +/*************************************************************************** + + Athena no Hatena? + +CPU : 68000-16 +Sound: X1-010 +OSC : 16.0000MHz + +ROMs: +fs001001.evn - Main programs (27c4001) +fs001002.odd / + +fs001004.pcm - Samples (8M mask - read as 27c800) +fs001003.gfx - Graphics (16M mask - read as 27c160) + +Chips: X1-001A X1-002A + X1-004 + X1-006 + X1-007 + X1-010 + +***************************************************************************/ + +/*************************************************************************** + + Blandia + +Blandia by Allumer + +This set is coming from an original Blandia PCB ref : PO-078A + +As usually, it use a lot of customs allumer chips ! + +***************************************************************************/ +/*************************************************************************** + + Blandia (prototype) + +PCB: P0-072-2 +CPU: 68000-16 +Sound: X1-010 +OSC: 16.0000MHz + +Chips: X1-001A X1-002A + X1-004 + X1-007 + X1-010 + X1-011 x2 X1-012 x2 + +***************************************************************************/ + +/*************************************************************************** + + Block Carnival / Thunder & Lightning 2 + +P0-068B, M6100723A + +CPU : MC68000B8 +Sound: X1-010 +OSC : 16.000MHz + +ROMs: +u1.a1 - Main programs (27c010) +u4.a3 / + +bl-chr-0.j3 - Graphics (4M mask) +bl-chr-1.l3 / + +bl-snd-0.a13 - Sound (4M mask) + +Custom chips: X1-001A X1-002A + X1-004 + X1-006 + X1-007 + X1-009 + X1-010 + +Other: +Lithium battery x1 + +***************************************************************************/ + + + + +/*************************************************************************** + + Daioh + +DAIOH +Alumer 1993, Sammy license +PO-092A + + +FG-001-003 +FG-001-004 X1-002A X1-001A FG-001-001 + FG-001-002 +FG-001-005 X1-11 X1-12 +FG-001-006 X1-11 X1-12 + 68000-16 +FG-001-007 + + X1-10 16MHz + + X1-007 X1-004 + +***************************************************************************/ + + +/*************************************************************************** + + Eight Forces + +PO-079A (Same board as ZingZingZip) + +CPU : MC68000B16 +Sound: X1-010 +OSC : 16.000MHz + +ROMs: +uy2-u4.u3 - Main program (even)(27c2001) +uy2-u3.u4 - Main program (odd) (27c2001) + +u63.bin - Sprites (HN62434, read as 27c4200) +u64.bin / + +u69.bin - Samples (HN62318, read as 27c8001) +u70.bin / + +u66.bin - Layer 1 (HN62418, read as 27c800) +u68.bin - Layer 2 (HN62418, read as 27c800) + +PALs (not dumped): +uy-012.206 (PAL16L8A) +uy-013.14 (PAL16L8A) +uy-014.35 (PAL16L8A) +uy-015.36 (PALCE16V8) +uy-016.76 (PAL16L8A) +uy-017.116 (PAL16L8A) + +Custom: X1-001A X1-002A + X1-004 + X1-007 + X1-010 + X1-011 (x2) X1-012 (x2) + +***************************************************************************/ + +/*************************************************************************** + + Extreme Downhill + +(c)1995 Sammy +DH-01 +PO-117A (board is made by Seta/Allumer) + +CPU : MC68HC000B16 +Sound: X1-010 +OSC: 16.0000MHz (X1), 14.3180MHz (X2) + +ROMs: +fw001002.201 - Main program (even) (Macronics 27c4000) +fw001001.200 - Main program (odd) (Macronics 27c4000) + +fw001005.205 - (32pin mask, read as 27c8001) +fw001007.026 / + +fw001003.202 - (42pin mask, read as 27c160) +fw001004.206 | +fw001006.152 / + +PALs (16L8ACN, not dumped): +FW-001 +FW-002 +FW-003 +FW-005 + +Custom chips: X1-001A X1-002A + X1-004 + X1-007 + X1-010 + X1-011 (x2) X1-012 (x2) + +***************************************************************************/ + + +/*************************************************************************** + + GundHara + +(C) 1995 Banpresto +Seta/Allumer Hardware + +PCB: BP954KA +PCB: PO-120A +CPU: TMP68HC000N16 (68000, 64 pin DIP) +SND: ? +OSC: 16.000MHz +RAM: 6264 x 8, 62256 x 4 +DIPS: 2 x 8 position +Other Chips: PALs x 6 (not dumped) + NEC 71054C + X1-004 + X1-007 + X1-010 + X1-011 x2 X1-012 x2 + X1-001A X1-002A + +On PCB near JAMMA connector is a small push button to reset the PCB. + +ROMS: +BPGH-001.102 27C040 +BPGH-002.103 27C4000 +BPGH-003.U3 27C4000 +BPGH-004.U4 23C4000 +BPGH-005.200 23C16000 +BPGH-006.201 23C16000 +BPGH-007.U63 23C16000 +BPGH-008.U64 23C16000 +BPGH-009.U65 27C4000 +BPGH-010.U66 TC538200 +BPGH-011.U67 TC538000 +BPGH-012.U68 TC5316200 +BPGH-013.U70 TC538000 + +***************************************************************************/ + +/*************************************************************************** + +Zombie Raid +Sammy, 1996 + +This is a gun shooting game using Seta/Allumer hardware. + +PCB Layout +---------- + +SZR-001 +PO-122A +------------------------------------------------------------------ + FY001012.12L* FY001009.U67 FY001007.U65 + FY001011.13L* FY001010.U68 FY001008.U66 FY001006.U200 + X1-010 6264 + + CONN1 X1-011(x2) X1-002A + X1-012(x2) X1-001A + + 3V_BATT + 4464 + +X1-007 6264(x2) 6264(x2) 6264(x2) 6264(x2) + + 16.000MHz HM9253101(x2) + +X1-004 DSW2 D71054C + DSW1 TMP68HC000N-16 FY001004.U4 FY001001.U102 + FY001003.U3 FY001002.U103 +------------------------------------------------------------------ + +Notes: +* = These ROMs located on a small daughterboard. Main PCB locations used as filename extension. +CONN1 = 8 pin header for gun connection + +***************************************************************************/ + + +/*************************************************************************** + + J.J. Squawkers + +68HC000N -16N + +2) Alumer X1-012 +2) Alumer X1-011 +2) Alumer X1-014 + +X1-010 +X1-007 +X1-004 +16.000MHz + +NEC 71054C ----??? + +***************************************************************************/ + +/*************************************************************************** + + Kamen Rider +Kamen Riderclub Battleracer +Banpresto, 1993 + +Runs on Seta/Allumer hardware + +PCB No: BP934KA PO-096A +CPU : MC68HC000B16 +OSC : 16.000MHz +RAM : LH5160D-10L (x9), CXK58257AP-10L (x2) +DIPSW : 8 position (x2) +CUSTOM: X1-010 + X1-007 + X1-004 + X1-011 (x2) + X1-012 (x2) + X1-002A + X1-001A +OTHER : NEC71054C, some PALs + +ROMs : + FJ001007.152 27c4096 near X1-011 & X1-010 (sound program?) + FJ001008.26 8M Mask connected to X1-010, near FJ001007 + FJ001003.25 27c4096 main program for 68k + FJ001006.22 16M Mask gfx + FJ001005.21 16M Mask gfx + +***************************************************************************/ + +/*************************************************************************** + + Krazy Bowl + +PCB: SKB-001 + PO-114A + +FV FV 2465 +001 001 2465 X1-005 +004 003 X1-002A X1-001A + 58257 FV + 001 + 002 (even) + 58257 + 14.318MHz FV + 001 +FV 001 005 001 (odd) +FV 001 006 + 2465 68HC000B16 + NEC4701 NEC4701 + +X1-010 X1-006 + X1-007 X1-004 + +***************************************************************************/ + + +/*************************************************************************** + + + Mad Shark + +Allumer, 1993 +This game is a vertical shoot'em-up and runs on fairly standard Allumer hardware. + +PCB Layout +---------- + +PO-102A +---------------------------------------------------- +| X1-010 FQ001007 FQ001006 FQ001005 FQ001004 | +| LH5160 | +| X1-011 X1-011 X1-002A | +| | +|J X1-012 X1-012 X1-001A | +|A X1-007 | +|M LH5160 LH5160 LH5160 LH5160 | +|M | +|A LH5160 LH5160 LH5160 LH5160 | +| FQ001002 | +|* MC68HC000B16 | +| X1-004 | +| FQ001001 | +| LH52250 | +| DSW2(8) DSW1(8) 16MHz LH52250 D71054 | +---------------------------------------------------- + +Notes: + *: 4 jumper pads for region selection (hardwired) + +***************************************************************************/ + +/*************************************************************************** + + Mobile Suit Gundam + +Banpresto 1993 +P0-081A + SW2 SW1 + +FA-001-008 FA-001-001 +FA-001-007 X1-002A X1-001A FA-002-002 + 5160 + 5160 + 71054 +FA-001-006 5160 62256 +FA-001-005 X1-011 X1-012 5160 62256 + +FA-001-004 X1-011 X1-012 5160 +5160 5160 + + 68000-16 + + 16MHz + X1-010 + X1-007 X1-004 X1-005 + +***************************************************************************/ + +/*************************************************************************** + + Oishii Puzzle Ha Irimasenka + +PCB : PO-097A +CPU : 68000 +Sound: X1-010 +OSC : 14.31818MHz + +All ROMs are 23c4000 + +Custom chips: X1-001A X1-002A + X1-004 + X1-007 + X1-010 + X1-011 (x2) X1-012 (x2) + +***************************************************************************/ + +/*************************************************************************** + + Triple Fun + +Triple Fun +??, 19?? + + +CPU : TMP68HC000P-16 (68000) +SOUND : OKI M6295 +DIPSW : 8 position (x2) +XTAL : 16.000 MHz (8MHz written on PCB, located near OKI chip) + 14.31818MHz (near 68000) +RAM : 62256 (x2), 6264 (x8), 2018 (x14) +PROMs : None +PALs : PALCE16V8H (x13) +OTHER : TPC1020AFN-084C (84 pin PLCC) + +ROMs : + +04.bin + 05.bin Main Program +01.bin Sound Program +02.bin + 03.bin OKI Samples +06.bin to 11.bin GFX + + + +***************************************************************************/ + +/*************************************************************************** + + Pro Mahjong Kiwame + +PCB : PO-101-1 (the board is made by Allumer/Seta) +CPU : TMP68301AF-16 (68000 core) +Sound: X1-010 +OSC : 20.0000MHz + +ROMs: +fp001001.bin - Main program (27c2001, even) +fp001002.bin - Main program (27c2001, odd) +fp001003.bin - Graphics (23c4000) +fp001005.bin - Samples (27c4000, high) +fp001006.bin - Samples (27c4000, low) + +Chips: X1-001A + X1-002A + X1-004 + X1-006 + X1-007 + X1-010 + +- To initialize high scores, power-on holding start button in service mode + +***************************************************************************/ + + +/*************************************************************************** + + Quiz Kokology + +(c)1992 Tecmo + +PO-053A + +CPU : MC68000B8 +Sound: X1-010 +OSC : 16.000MHz + +Custom chips: X1-001A X1-002A + X1-004 + X1-006 X1-007 + X1-010 + X1-011 X1-012 + +***************************************************************************/ + + +/*************************************************************************** + + Quiz Koko-logy 2 + +(c)1992 Tecmo + +P0-100A + +CPU : MC68HC000B16 +Sound: X1-010 +OSC : 16.000MHz + +FN001001.106 - Main program (27C4096) +FN001003.107 / (40pin 2M mask) + +FN001004.100 - OBJ chr. (42pin mask) +FN001005.104 - BG chr. (42pin mask) +FN001006.105 - Samples (32pin mask) + +Custom chips: X1-001A X1-002A + X1-004 + X1-006 + X1-007 + X1-010 + X1-011 X1-012 + +***************************************************************************/ + + +/*************************************************************************** + + Rezon (Japan) + +PCB : PO-063A +CPU : TOSHIBA TMP68HC000N-16 +Sound : X1-010 +OSC : 16.000MHz +Other : Allumer + X1-001A X1-002A + X1-004 + X1-007 + X1-011 x 2 X1-012 x 2 + +***************************************************************************/ + + +/*************************************************************************** + + SD Gundam Neo Battling + +Banpresto, 1992 +This game runs on Seta/Allumer hardware + +PCB Layout +---------- + +PO-080A +BP923 +|---------------------------------------------- +|DSW1 DSW2 LH5168 62256 | +| LH5168 62256 | +|LH5168 | +| | +| BP923004 BP923001 | +|BP923005 BP923003 X1-002A X1-001A BP923002 | +| 16MHz | +| TMP68HC000N-16 | +|X1-010 PAL | +| PAL X1-006 | +| | +| | +| X1-004 X1-007 | +| | +| | +| | +| | +| J A M M A | +----------------------------------------------- + +Notes: + 68k clock: 16.000MHz + VSync: 58Hz + HSync: 15.22kHz + + +***************************************************************************/ + + +/*************************************************************************** + + Sokonuke Taisen Game (Japan) + +(c)1995 Sammy + +CPU: 68HC000 +Sound: All PCM ? +OSC: 16MHz + +***************************************************************************/ + + +/*************************************************************************** + + Strike Gunner + +(c)1991 Athena (distributed by Tecmo) + +PO-053A + +CPU : TMP68000N-8 +Sound: X1-010 +OSC : 16.000MHz + +Custom chips: X1-001A X1-002A + X1-004 + X1-006 X1-007 + X1-010 + X1-011 X1-012 + +***************************************************************************/ + +/*************************************************************************** + + Ultraman Club + +Banpresto, 1992 +Board looks similar to Castle of Dragon PCB. + +PCB No: PO-077A (Seta Number) + BP922 (Banpresto Number) + +CPU: MC68HC000B16 +OSC: 16.000MHz +DIP SW x 2 (8 position) + +RAM: Sharp LH5160D-10L x 3, Hitachi S256KLP-12 x 2 +PALs (2 x PAL16L8, not dumped) +SETA Chips: X1-010 + X1-004 + X1-007 + X1-006 + X1-002A + X1-001A + +Controls are 8 way Joystick and 2 buttons. + +ROMs: + +UW001006.U48 27C010 \ Main Program +UW001007.U49 27C010 / + +BP-U-001.U1 4M mask (40 pin, 512k x 8), read as MX27C4100 \ GFX +BP-U-002.U2 4M mask (40 pin, 512k x 8), read as MX27C4100 / + +BP-U-003.U13 8M mask (32 pin, 1M x 8), read as MX27C8000 Sound + + +***************************************************************************/ + +/*************************************************************************** +Ultra Toukon Densetsu +Banpresto, 1993 + +This game runs on fairly standard Allumer hardware. + +PCB Layout +---------- + +PO-083A +BP931 +---------------------------------------------------- +| X1-010 93UTA08 93UTA06 93UTA04 93UTA02 | +| 93UTA07 93UTA05 93UTA03 93UTA01 | +| YM3438 LH5116 | +| LH5116 X1-011 X1-011 X1-002A | +| Z80 93UTA009 | +|J X1-012 X1-012 X1-001A | +|A X1-007 | +|M LH5116 LH5160 LH5160 LH5160 | +|M | +|A LH5116 LH5160 LH5160 LH5160 | +| | +|* 16MHz | +| X1-004 62256 | +| 62256 | +| DSW1(8) 93UTA011 93UTA010 | +| DSW2(8) 68HC000N-16 | +---------------------------------------------------- + +Notes: + *: 4 jumper pads for region selection (hardwired) + Z80 clock = 4.000MHz + VSync: 60Hz + HSync: 15.21kHz + + +1.048.576 93uta03.63 +1.048.576 93uta04.64 +1.048.576 93uta05.66 +1.048.576 93uta06.67 +1.048.576 93uta07.68 +1.048.576 93uta08.69 + +***************************************************************************/ + +/*************************************************************************** + + War of Aero + Project M E I O U + +93111A YANG CHENG + +CPU : TOSHIBA TMP68HC000N-16 +Sound : Allumer X1-010 +OSC : 16.000000MHz +Other : Allumer + X1-001A X1-002A + X1-004 + X1-007 + X1-011 x 2 + X1-012 x 2 + NEC + C324C + D71054C + +***************************************************************************/ + + + +/*************************************************************************** + + Zing Zing Zip + +P0-079A + +UY-001-005 X1-002A X1-001A 5168-10 256k-12 +UY-001-006 5168-10 UY-001-001 +UY-001-007 UY-001-002 +UY-001-008 X1-011 X1-012 58257-12 + 5168-10 +UY-001-010 X1-011 X1-012 5168-10 +UY-001-017 +UY-001-018 + 5168-10 +X1-010 5168-10 68000-16 + + + 8464-80 + 8464-80 16MHz + + + X1-007 X1-004 + +*************************************************************************** + + +Pairs Love +Allumer, 199x + +PCB Layout +---------- + +PO-068B +|-----------------------------------------| +| X1-007 X1-006 UT2-001-005| +| | +| 4050 UT2-001-004| +| | +| | +| X1-002A | +| | +|J | +|A X1-004 | +|M X1-001A | +|M DSW1 | +|A | +| DSW2 6264 | +| 6264 | +| X1-009 | +| 62256 | +| | +| 68000 | +| UT2-001-003 62256 UT2-001-002 | +| 6264 | +| X1-010 16MHz UT2-001-001 | +|-----------------------------------------| +Notes: + 68000 clock: 8.000MHz + VSync: 60Hz + + +*************************************************************************** + +Rezon (Taito License) +Allumer / Taito, 1992 + +This game runs on fairly standard Allumer hardware. + +PCB Layout +---------- + +P0-063A (Allumer code printed on the PCB) +M6100627A REZON (Taito sticker) +|-----------------------------------------------------------| +| VOL 3404 6264 US001009 US001007 US001005 | +| MB3730 US001008 US001006 | +| | +| | +| | +| PAL4 X1-010 X1-011 X1-011 | +| | +| | +|J | +|A X1-012 X1-012 | +|M | +|M X1-007 | +|A | +| 6116 6116 PAL2 PAL3 | +| | +| 62256 62256 | +| 16MHZ 62256 62256 6264 6264 | +| DSW2(8) | +| X1-004 PAL1 | +| DSW1(8) |------------|US001004 REZON_1_P | +| | 68000 | US001003 REZON_0_P | +| RESET_SW |------------| 62256 62256| +|-----------------------------------------------------------| +Notes: + 68000 clock - 16.000MHz + X1-010 clocks - pin1 16.000MHz, pin2 8.000MHz, pin79 4.000MHz, pin80 2.000MHz + VSync - 57.5Hz + PAL1 - PAL16L8 labelled 'US-010' + PAL2 - PAL16L8 labelled 'US-011' + PAL3 - PAL16L8 labelled 'US-012' + PAL4 - PAL16L8 labelled 'US-013' + 62256 - 32K x8 SRAM + 6264 - 8K x8 SRAM + 6116 - 2K x8 SRAM + + Custom IC's - + X1-001A (SDIP64) \ Sprite Generators + X1-002A (SDIP64) / + X1-004 (SDIP52) Input Related Functions (connected to joystick/input controls) + X1-007 (SDIP42) Video DAC? (connected to RGB output) + X1-010 (QFP80) Sound Chip, 16Bit PCM + X1-011 (x2, QFP100)\ Tilemap Generators + X1-012 (x2, QFP100)/ + + ROMs - + Filename Type Use + --------------------------------------------------- + REZON_0_P.U3 27C1000 (DIP32) \ + REZON_1_P.U4 27C1000 (DIP32) | 68000 Program + US001003.U102 27C1000 (DIP32) | + US001004.U103 27C1000 (DIP32) / + + US001005.U63 4M MaskROM (DIP42) \ Sprites + US001006.U64 4M MaskROM (DIP42) / + + US001007.U66 4M MaskROM (DIP42) \ Tiles + US001008.U68 4M MaskROM (DIP42) / + + US001009.U70 4M MaskROM (DIP32) PCM Samples + +***************************************************************************/ + +/*************************************************************************** + +Crazy Fight + +x1-11 +x1-11 +x1-12 +x1-12 +x1-001a +x1-002a +x1-007 +Lattlice PLSI 1032 FPGA +oki 6295 +ym3812 +68000 + +***************************************************************************/ + + +#include "driver.h" +#include "seta.h" +#include "sound/2203intf.h" +#include "sound/2612intf.h" +#include "sound/3812intf.h" +#include "sound/okim6295.h" +#include "sound/x1_010.h" + +/* Variables and functions only used here */ + +static UINT8 *sharedram; + + +#if __uPD71054_TIMER + +#define USED_TIMER_NUM 1 +/*------------------------------ + timer(uPD71054) struct +------------------------------*/ +static struct st_chip { + emu_timer *timer[3]; // Timer + UINT16 max[3]; // Max counter + UINT16 write_select; // Max counter write select + UINT8 reg[4]; // +} uPD71054; + +/*------------------------------ + uppdate timer +------------------------------*/ +static void uPD71054_update_timer( int no ) +{ + UINT16 max = uPD71054.max[no]&0xffff; + + if( max != 0 ) { + attotime period = attotime_mul(ATTOTIME_IN_HZ(Machine->drv->cpu[0].clock), 16 * max); + timer_adjust( uPD71054.timer[no], period, no, attotime_zero ); + } else { + timer_adjust( uPD71054.timer[no], attotime_never, no, attotime_never); + logerror( "CPU #0 PC %06X: uPD71054 error, timer %d duration is 0\n", + activecpu_get_pc(), no ); + } +} + + + +/*------------------------------ + callback +------------------------------*/ +static TIMER_CALLBACK( uPD71054_timer_callback ) +{ + cpunum_set_input_line( 0, 4, HOLD_LINE ); + uPD71054_update_timer( param ); +} + + + +/*------------------------------ + initialize +------------------------------*/ +static void uPD71054_timer_init( void ) +{ + int no; + + uPD71054.write_select = 0; + + for( no = 0; no < USED_TIMER_NUM; no++ ) { + uPD71054.max[no] = 0xffff; + } + for( no = 0; no < USED_TIMER_NUM; no++ ) { + uPD71054.timer[no] = timer_alloc( uPD71054_timer_callback ); + } +} + + + +/*------------------------------ + timer write handler +------------------------------*/ +static WRITE16_HANDLER( timer_regs_w ) +{ + data &= 0xff; + + uPD71054.reg[offset] = data; + + switch( offset ) { + case 0x0000: + case 0x0001: + case 0x0002: + if( uPD71054.write_select == 0 ) { + uPD71054.max[offset] = (uPD71054.max[offset]&0xff00)+data; + if( ((uPD71054.reg[3]>>4)&3) == 3 ) { + uPD71054.write_select = 1; + } + } else { + uPD71054.max[offset] = (uPD71054.max[offset]&0x00ff)+(data<<8); + } + if( uPD71054.max[offset] != 0 ) { + uPD71054_update_timer( offset ); + } + break; + case 0x0003: + switch( (data>>4)&3 ) { + case 2: uPD71054.write_select = 1; break; + case 1: + case 3: uPD71054.write_select = 0; break; + } + break; + } +} +#endif // __uPD71054_TIMER + + + + +/*************************************************************************** + + + Sound + + +***************************************************************************/ + +static struct x1_010_interface seta_sound_intf = +{ + 0x0000, /* address */ +}; +static struct x1_010_interface seta_sound_intf2 = +{ + 0x1000, /* address */ +}; + +static void utoukond_ym3438_interrupt(int linestate) +{ + cpunum_set_input_line(1, INPUT_LINE_NMI, linestate); +} + +static struct YM3438interface utoukond_ym3438_intf = +{ + utoukond_ym3438_interrupt // IRQ handler +}; + +/*************************************************************************** + + + Common Routines + + +***************************************************************************/ + +/* + + Mirror RAM + +*/ +static UINT16 *mirror_ram; + +static READ16_HANDLER( mirror_ram_r ) +{ + return mirror_ram[offset]; +} + +static WRITE16_HANDLER( mirror_ram_w ) +{ + COMBINE_DATA(&mirror_ram[offset]); +// logerror("PC %06X - Mirror RAM Written: %04X <- %04X\n", activecpu_get_pc(), offset*2, data); +} + + + +/* + + Shared RAM: + + The 65c02 sees a linear array of bytes that is mapped, for the 68000, + to a linear array of words whose low order bytes hold the data + +*/ + +static READ16_HANDLER( sharedram_68000_r ) +{ + return ((UINT16) sharedram[offset]) & 0xff; +} + +static WRITE16_HANDLER( sharedram_68000_w ) +{ + if (ACCESSING_LSB) sharedram[offset] = data & 0xff; +} + + + + +/* + + Sub CPU Control + +*/ + +static WRITE16_HANDLER( sub_ctrl_w ) +{ + static int old_data = 0; + + switch(offset) + { + case 0/2: // bit 0: reset sub cpu? + if (ACCESSING_LSB) + { + if ( !(old_data&1) && (data&1) ) + cpunum_set_input_line(1, INPUT_LINE_RESET, PULSE_LINE); + old_data = data; + } + break; + + case 2/2: // ? + break; + + case 4/2: // not sure + if (ACCESSING_LSB) soundlatch_w(0, data & 0xff); + break; + + case 6/2: // not sure + if (ACCESSING_LSB) soundlatch2_w(0, data & 0xff); + break; + } + +} + + +/* DSW reading for 16 bit CPUs */ +static READ16_HANDLER( seta_dsw_r ) +{ + UINT16 dsw = readinputport(3); + if (offset == 0) return (dsw >> 8) & 0xff; + else return (dsw >> 0) & 0xff; +} + + +/* DSW reading for 8 bit CPUs */ + +static READ8_HANDLER( dsw1_r ) +{ + return (readinputport(3) >> 8) & 0xff; +} + +static READ8_HANDLER( dsw2_r ) +{ + return (readinputport(3) >> 0) & 0xff; +} + + +/* + + Sprites Buffering + +*/ +static VIDEO_EOF( seta_buffer_sprites ) +{ + int ctrl2 = spriteram16[ 0x602/2 ]; + if (~ctrl2 & 0x20) + { + if (ctrl2 & 0x40) + memcpy(&spriteram16_2[0x0000/2],&spriteram16_2[0x2000/2],0x2000/2); + else + memcpy(&spriteram16_2[0x2000/2],&spriteram16_2[0x0000/2],0x2000/2); + } +} + + +/*************************************************************************** + + + Main CPU + +(for debugging it is useful to be able to peek at some memory regions that + the game writes to but never reads from. I marked this regions with an empty + comment to distinguish them, since there's always the possibility that some + games actually read from this kind of regions, expecting some hardware + register's value there, instead of the data they wrote) + +***************************************************************************/ + + +/*************************************************************************** + Thundercade +***************************************************************************/ + +/* Mirror RAM seems necessary since the e00000-e03fff area is not cleared + on startup. Level 2 int uses $e0000a as a counter that controls when + to write a value to the sub cpu, and when to read the result back. + If the check fails "error x0-006" is displayed. Hence if the counter + is not cleared at startup the game could check for the result before + writing to sharedram! */ + + +static ADDRESS_MAP_START( tndrcade_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x380000, 0x3803ff) AM_READ(MRA16_RAM ) // Palette +/**/AM_RANGE(0x400000, 0x400001) AM_READ(MRA16_RAM ) // ? $4000 +/**/AM_RANGE(0x600000, 0x600607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xa00000, 0xa00fff) AM_READ(sharedram_68000_r ) // Shared RAM + AM_RANGE(0xc00000, 0xc03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xe00000, 0xe03fff) AM_READ(MRA16_RAM ) // RAM (Mirrored?) + AM_RANGE(0xffc000, 0xffffff) AM_READ(mirror_ram_r ) // RAM (Mirrored?) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tndrcade_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // ? 0 + AM_RANGE(0x280000, 0x280001) AM_WRITE(MWA16_NOP ) // ? 0 / 1 (sub cpu related?) + AM_RANGE(0x300000, 0x300001) AM_WRITE(MWA16_NOP ) // ? 0 / 1 + AM_RANGE(0x380000, 0x3803ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x400000, 0x400001) AM_WRITE(MWA16_RAM ) // ? $4000 + AM_RANGE(0x600000, 0x600607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0x800000, 0x800007) AM_WRITE(sub_ctrl_w ) // Sub CPU Control? + AM_RANGE(0xa00000, 0xa00fff) AM_WRITE(sharedram_68000_w ) // Shared RAM + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(MWA16_RAM) AM_BASE(&mirror_ram ) // RAM (Mirrored?) + AM_RANGE(0xffc000, 0xffffff) AM_WRITE(mirror_ram_w ) // RAM (Mirrored?) +ADDRESS_MAP_END + + +/*************************************************************************** + Twin Eagle, DownTown, Arbalester, Meta Fox + (with slight variations, and Meta Fox protection hooked in) +***************************************************************************/ + +static ADDRESS_MAP_START( downtown_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x09ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x103fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0x200000, 0x200001) AM_READ(MRA16_NOP ) // watchdog? (twineagl) + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x900000, 0x901fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0x902000, 0x903fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0xb00000, 0xb00fff) AM_READ(sharedram_68000_r ) // Shared RAM + AM_RANGE(0xd00000, 0xd003ff) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xf00000, 0xffffff) AM_READ(MRA16_RAM ) // RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( downtown_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x09ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x103fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // watchdog? + AM_RANGE(0x300000, 0x300001) AM_WRITE(MWA16_NOP ) // IRQ enable/acknowledge? + AM_RANGE(0x400000, 0x400007) AM_WRITE(twineagl_tilebank_w ) // special tile banking to animate water in twineagl + AM_RANGE(0x500000, 0x500001) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x800000, 0x800005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM Ctrl + AM_RANGE(0x900000, 0x903fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM + AM_RANGE(0xa00000, 0xa00007) AM_WRITE(sub_ctrl_w ) // Sub CPU Control? + AM_RANGE(0xb00000, 0xb00fff) AM_WRITE(sharedram_68000_w ) // Shared RAM + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(MWA16_RAM ) // ? $4000 + AM_RANGE(0xd00000, 0xd00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xf00000, 0xffffff) AM_WRITE(MWA16_RAM ) // RAM +ADDRESS_MAP_END + + +/*************************************************************************** + Caliber 50 +***************************************************************************/ + +static READ16_HANDLER ( calibr50_ip_r ) +{ + int dir1 = readinputportbytag("IN4") & 0xfff; // analog port + int dir2 = readinputportbytag("IN5") & 0xfff; // analog port + + switch (offset) + { + case 0x00/2: return readinputportbytag("IN0"); // p1 + case 0x02/2: return readinputportbytag("IN1"); // p2 + + case 0x08/2: return readinputport(2); // Coins + + case 0x10/2: return (dir1&0xff); // lower 8 bits of p1 rotation + case 0x12/2: return (dir1>>8); // upper 4 bits of p1 rotation + case 0x14/2: return (dir2&0xff); // lower 8 bits of p2 rotation + case 0x16/2: return (dir2>>8); // upper 4 bits of p2 rotation + case 0x18/2: return 0xffff; // ? (value's read but not used) + default: + logerror("PC %06X - Read input %02X !\n", activecpu_get_pc(), offset*2); + return 0; + } +} + +static WRITE16_HANDLER( calibr50_soundlatch_w ) +{ + if (ACCESSING_LSB) + { + soundlatch_word_w(0,data,mem_mask); + cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); + cpu_spinuntil_time(ATTOTIME_IN_USEC(50)); // Allow the other cpu to reply + } +} + +static ADDRESS_MAP_START( calibr50_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x09ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0xff0000, 0xffffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x100000, 0x100007) AM_READ(MRA16_NOP ) // ? (same as a00010-a00017?) + AM_RANGE(0x200000, 0x200fff) AM_READ(MRA16_RAM ) // NVRAM + AM_RANGE(0x300000, 0x300001) AM_READ(MRA16_NOP ) // ? (value's read but not used) + AM_RANGE(0x400000, 0x400001) AM_READ(watchdog_reset16_r ) // Watchdog + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x900000, 0x901fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0x902000, 0x903fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0x904000, 0x904fff) AM_READ(MRA16_RAM ) // + AM_RANGE(0xa00000, 0xa00019) AM_READ(calibr50_ip_r ) // Input Ports +/**/AM_RANGE(0xd00000, 0xd00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xb00000, 0xb00001) AM_READ(soundlatch2_word_r ) // From Sub CPU +/**/AM_RANGE(0xc00000, 0xc00001) AM_READ(MRA16_RAM ) // ? $4000 +ADDRESS_MAP_END + +static ADDRESS_MAP_START( calibr50_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x09ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0xff0000, 0xffffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x200000, 0x200fff) AM_WRITE(MWA16_RAM ) // NVRAM + AM_RANGE(0x300000, 0x300001) AM_WRITE(MWA16_NOP ) // ? (random value) + AM_RANGE(0x500000, 0x500001) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x800000, 0x800005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM Ctrl + AM_RANGE(0x900000, 0x903fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM + AM_RANGE(0x904000, 0x904fff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0xd00000, 0xd00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xb00000, 0xb00001) AM_WRITE(calibr50_soundlatch_w ) // To Sub CPU + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(MWA16_RAM ) // ? $4000 +ADDRESS_MAP_END + + +/*************************************************************************** + U.S. Classic +***************************************************************************/ + +static READ16_HANDLER( usclssic_dsw_r ) +{ + switch (offset) + { + case 0/2: return (readinputport(3) >> 8) & 0xf; + case 2/2: return (readinputport(3) >> 12) & 0xf; + case 4/2: return (readinputport(3) >> 0) & 0xf; + case 6/2: return (readinputport(3) >> 4) & 0xf; + } + return 0; +} + +static READ16_HANDLER( usclssic_trackball_x_r ) +{ + switch (offset) + { + case 0/2: return (readinputport(0) >> 0) & 0xff; + case 2/2: return (readinputport(0) >> 8) & 0xff; + } + return 0; +} + +static READ16_HANDLER( usclssic_trackball_y_r ) +{ + switch (offset) + { + case 0/2: return (readinputport(1) >> 0) & 0xff; + case 2/2: return (readinputport(1) >> 8) & 0xff; + } + return 0; +} + + +static WRITE16_HANDLER( usclssic_lockout_w ) +{ + static int old_tiles_offset = 0; + + if (ACCESSING_LSB) + { + seta_tiles_offset = (data & 0x10) ? 0x4000: 0; + if (old_tiles_offset != seta_tiles_offset) tilemap_mark_all_tiles_dirty(ALL_TILEMAPS); + old_tiles_offset = seta_tiles_offset; + + seta_coin_lockout_w(data); + } +} + +/* palette can probably be handled in a better way (better colortable / palette init..) */ + +INLINE void usc_changecolor_xRRRRRGGGGGBBBBB(pen_t color,int data) +{ + if (color>=0x100) palette_set_color_rgb(Machine,color-0x100,pal5bit(data >> 10),pal5bit(data >> 5),pal5bit(data >> 0)); + else palette_set_color_rgb(Machine,color+0x200,pal5bit(data >> 10),pal5bit(data >> 5),pal5bit(data >> 0)); +} + +static WRITE16_HANDLER( usclssic_paletteram16_xRRRRRGGGGGBBBBB_word_w ) +{ + COMBINE_DATA(&paletteram16[offset]); + usc_changecolor_xRRRRRGGGGGBBBBB(offset,paletteram16[offset]); +} + + +static ADDRESS_MAP_START( usclssic_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0xff0000, 0xffffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x800000, 0x800607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0x900000, 0x900001) AM_READ(MRA16_RAM ) // ? + AM_RANGE(0xa00000, 0xa00005) AM_READ(MRA16_RAM ) // VRAM Ctrl +/**/AM_RANGE(0xb00000, 0xb003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xb40000, 0xb40003) AM_READ(usclssic_trackball_x_r ) // TrackBall X + AM_RANGE(0xb40004, 0xb40007) AM_READ(usclssic_trackball_y_r ) // TrackBall Y + Buttons + AM_RANGE(0xb40010, 0xb40011) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0xb40018, 0xb4001f) AM_READ(usclssic_dsw_r ) // 2 DSWs + AM_RANGE(0xb80000, 0xb80001) AM_READ(MRA16_NOP ) // watchdog (value is discarded)? + AM_RANGE(0xc00000, 0xc03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd01fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0xd02000, 0xd03fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0xd04000, 0xd04fff) AM_READ(MRA16_RAM ) // + AM_RANGE(0xe00000, 0xe00fff) AM_READ(MRA16_RAM ) // NVRAM? (odd bytes) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( usclssic_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0xff0000, 0xffffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x800000, 0x800607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0x900000, 0x900001) AM_WRITE(MWA16_RAM ) // ? $4000 + AM_RANGE(0xa00000, 0xa00005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM Ctrl + AM_RANGE(0xb00000, 0xb003ff) AM_WRITE(usclssic_paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xb40000, 0xb40001) AM_WRITE(usclssic_lockout_w ) // Coin Lockout + Tiles Banking + AM_RANGE(0xb40010, 0xb40011) AM_WRITE(calibr50_soundlatch_w ) // To Sub CPU + AM_RANGE(0xb40018, 0xb40019) AM_WRITE(watchdog_reset16_w ) // Watchdog + AM_RANGE(0xb4000a, 0xb4000b) AM_WRITE(MWA16_NOP ) // ? (value's not important. In lev2&6) + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd03fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM + AM_RANGE(0xd04000, 0xd04fff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0xe00000, 0xe00fff) AM_WRITE(MWA16_RAM ) // NVRAM? (odd bytes) +ADDRESS_MAP_END + + + +/*************************************************************************** + Athena no Hatena? +***************************************************************************/ + +static ADDRESS_MAP_START( atehate_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x900000, 0x9fffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x100000, 0x103fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xb00000, 0xb00001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0xb00002, 0xb00003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0xb00004, 0xb00005) AM_READ(input_port_2_word_r ) // Coins +/**/AM_RANGE(0xc00000, 0xc00001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xe00000, 0xe03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +ADDRESS_MAP_END + +static ADDRESS_MAP_START( atehate_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x900000, 0x9fffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x100000, 0x103fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // ? watchdog ? + AM_RANGE(0x300000, 0x300001) AM_WRITE(MWA16_NOP ) // ? 0 (irq ack lev 2?) + AM_RANGE(0x500000, 0x500001) AM_WRITE(MWA16_NOP ) // ? (end of lev 1: bit 4 goes 1,0,1) + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr +ADDRESS_MAP_END + +/*************************************************************************** + Blandia +***************************************************************************/ + +static ADDRESS_MAP_START( blandia_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM (up to 2MB) + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM (main ram for zingzip, wrofaero writes to 20f000-20ffff) + AM_RANGE(0x210000, 0x21ffff) AM_READ(MRA16_RAM ) // RAM (gundhara) + AM_RANGE(0x300000, 0x30ffff) AM_READ(MRA16_RAM ) // RAM (wrofaero only?) + AM_RANGE(0x500000, 0x500005) AM_READ(MRA16_RAM ) // (gundhara) + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // (rezon,jjsquawk) + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_READ(MRA16_RAM ) // +/**/AM_RANGE(0x800000, 0x800607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0x880000, 0x880001) AM_READ(MRA16_RAM ) // ? 0xc000 + AM_RANGE(0x900000, 0x903fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +/**/AM_RANGE(0xa00000, 0xa00005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl +/**/AM_RANGE(0xa80000, 0xa80005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0xb04000, 0xb0ffff) AM_READ(MRA16_RAM ) // (jjsquawk) + AM_RANGE(0xb80000, 0xb83fff) AM_READ(MRA16_RAM ) // VRAM 2&3 + AM_RANGE(0xb84000, 0xb8ffff) AM_READ(MRA16_RAM ) // (jjsquawk) + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( blandia_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM (up to 2MB) + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x210000, 0x21ffff) AM_WRITE(MWA16_RAM ) // RAM (gundhara) + AM_RANGE(0x300000, 0x30ffff) AM_WRITE(MWA16_RAM ) // RAM (wrofaero only?) + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(MWA16_RAM ) // (rezon,jjsquawk) + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x800000, 0x800607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0x880000, 0x880001) AM_WRITE(MWA16_RAM ) // ? 0xc000 + AM_RANGE(0x900000, 0x903fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xa00000, 0xa00005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0xa80000, 0xa80005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0xb04000, 0xb0ffff) AM_WRITE(MWA16_RAM ) // (jjsquawk) + AM_RANGE(0xb80000, 0xb83fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0xb84000, 0xb8ffff) AM_WRITE(MWA16_RAM ) // (jjsquawk) + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0xd00000, 0xd00007) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(MWA16_NOP ) // ? VBlank IRQ Ack + AM_RANGE(0xf00000, 0xf00001) AM_WRITE(MWA16_NOP ) // ? Sound IRQ Ack +ADDRESS_MAP_END + + +/*************************************************************************** + Blandia (proto), Gundhara, J.J.Squawkers, Rezon, War of Aero, Zing Zing Zip + (with slight variations) +***************************************************************************/ + +static ADDRESS_MAP_START( blandiap_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM (up to 2MB) + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM (main ram for zingzip, wrofaero writes to 20f000-20ffff) + AM_RANGE(0x210000, 0x21ffff) AM_READ(MRA16_RAM ) // RAM (gundhara) + AM_RANGE(0x300000, 0x30ffff) AM_READ(MRA16_RAM ) // RAM (wrofaero only?) + AM_RANGE(0x500000, 0x500005) AM_READ(MRA16_RAM ) // (gundhara) + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // (rezon,jjsquawk) + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0x804000, 0x80ffff) AM_READ(MRA16_RAM ) // (jjsquawk) + AM_RANGE(0x880000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 2&3 + AM_RANGE(0x884000, 0x88ffff) AM_READ(MRA16_RAM ) // (jjsquawk) +/**/AM_RANGE(0x900000, 0x900005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl +/**/AM_RANGE(0x980000, 0x980005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl +/**/AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( blandiap_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM (up to 2MB) + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x210000, 0x21ffff) AM_WRITE(MWA16_RAM ) // RAM (gundhara) + AM_RANGE(0x300000, 0x30ffff) AM_WRITE(MWA16_RAM ) // RAM (wrofaero only?) + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(MWA16_RAM ) // (rezon,jjsquawk) + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x804000, 0x80ffff) AM_WRITE(MWA16_RAM ) // (jjsquawk) + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x884000, 0x88ffff) AM_WRITE(MWA16_RAM ) // (jjsquawk) + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0xd00000, 0xd00007) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(MWA16_NOP ) // ? VBlank IRQ Ack + AM_RANGE(0xf00000, 0xf00001) AM_WRITE(MWA16_NOP ) // ? Sound IRQ Ack +ADDRESS_MAP_END + + +/*************************************************************************** + Blandia, Gundhara, J.J.Squawkers, Rezon, War of Aero, Zing Zing Zip + and Zombie Raid (with slight variations) +***************************************************************************/ + +static int gun_input_bit = 0, gun_input_src = 0; + +static READ16_HANDLER( zombraid_gun_r ) // Serial interface +{ + int data = readinputport(4 + gun_input_src); // Input Ports 5-8 + return (data >> gun_input_bit) & 1; +} + +// Bit 0 is clock, 1 is data, 2 is reset +static WRITE16_HANDLER( zombraid_gun_w ) +{ + static int bit_count = 0, old_clock = 0; + + if(data&4) { bit_count = 0; return; } // Reset + + if((data&1) == old_clock) return; // No change + + if(old_clock == 0) // Rising edge + { + switch (bit_count) + { + case 0: + case 1: // Starting sequence 2,3,2,3. Other inputs? + break; + case 2: // First bit of source + gun_input_src = (gun_input_src&2) | (data>>1); + break; + case 3: // Second bit of source + gun_input_src = (gun_input_src&1) | (data&2); + break; + default: + gun_input_bit = bit_count - 4; + gun_input_bit = 8 - gun_input_bit; // Reverse order + break; + } + bit_count++; + } + + old_clock = data & 1; +} + +static ADDRESS_MAP_START( wrofaero_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM (up to 2MB) + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM (main ram for zingzip, wrofaero writes to 20f000-20ffff) + AM_RANGE(0x210000, 0x21ffff) AM_READ(MRA16_RAM ) // RAM (gundhara) + AM_RANGE(0x300000, 0x30ffff) AM_READ(MRA16_RAM ) // RAM (wrofaero only?) + AM_RANGE(0x500000, 0x500005) AM_READ(MRA16_RAM ) // (gundhara) + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // (rezon,jjsquawk) + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0x804000, 0x80ffff) AM_READ(MRA16_RAM ) // (jjsquawk) + AM_RANGE(0x880000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 2&3 + AM_RANGE(0x884000, 0x88ffff) AM_READ(MRA16_RAM ) // (jjsquawk) +/**/AM_RANGE(0x900000, 0x900005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl +/**/AM_RANGE(0x980000, 0x980005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl +/**/AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( wrofaero_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM (up to 2MB) + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM) AM_BASE(&seta_workram ) // RAM (pointer for zombraid crosshair hack) + AM_RANGE(0x210000, 0x21ffff) AM_WRITE(MWA16_RAM ) // RAM (gundhara) + AM_RANGE(0x300000, 0x30ffff) AM_WRITE(MWA16_RAM ) // RAM (wrofaero only?) + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(MWA16_RAM ) // (rezon,jjsquawk) + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x804000, 0x80ffff) AM_WRITE(MWA16_RAM ) // (jjsquawk) + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x884000, 0x88ffff) AM_WRITE(MWA16_RAM ) // (jjsquawk) + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound +#if __uPD71054_TIMER + AM_RANGE(0xd00000, 0xd00007) AM_WRITE(timer_regs_w ) // ? +#else + AM_RANGE(0xd00000, 0xd00007) AM_WRITE(MWA16_NOP ) // ? +#endif + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(MWA16_NOP ) // ? VBlank IRQ Ack + AM_RANGE(0xf00000, 0xf00001) AM_WRITE(MWA16_NOP ) // ? Sound IRQ Ack +ADDRESS_MAP_END + + + +/*************************************************************************** + Block Carnival +***************************************************************************/ + +/* similar to krzybowl */ +static ADDRESS_MAP_START( blockcar_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0xf00000, 0xf03fff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0xf04000, 0xf041ff) AM_READ(MRA16_RAM ) // Backup RAM? + AM_RANGE(0xf05000, 0xf050ff) AM_READ(MRA16_RAM ) // Backup RAM? + AM_RANGE(0x300000, 0x300003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x500000, 0x500001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x500004, 0x500005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0xa00000, 0xa03fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0xb00000, 0xb003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +/**/AM_RANGE(0xd00000, 0xd00001) AM_READ(MRA16_RAM ) // ? 0x4000 +/**/AM_RANGE(0xe00000, 0xe00607) AM_READ(MRA16_RAM ) // Sprites Y +ADDRESS_MAP_END + +static ADDRESS_MAP_START( blockcar_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0xf00000, 0xf03fff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0xf04000, 0xf041ff) AM_WRITE(MWA16_RAM ) // Backup RAM? + AM_RANGE(0xf05000, 0xf050ff) AM_WRITE(MWA16_RAM ) // Backup RAM? + AM_RANGE(0x100000, 0x100001) AM_WRITE(MWA16_NOP ) // ? 1 (start of interrupts, main loop: watchdog?) + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // ? 0/1 (IRQ acknowledge?) + AM_RANGE(0x400000, 0x400001) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Sound Enable (bit 4?) + AM_RANGE(0xa00000, 0xa03fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0xb00000, 0xb003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd00001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xe00000, 0xe00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y +ADDRESS_MAP_END + + + +/*************************************************************************** + Daioh +***************************************************************************/ + +static ADDRESS_MAP_START( daioh_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x10ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x500006, 0x500007) AM_READ(input_port_4_word_r ) // Buttons 4,5,6 + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_READ(MRA16_RAM ) + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0x804000, 0x80ffff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x880000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 2&3 + AM_RANGE(0x884000, 0x88ffff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x900000, 0x900005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xb04000, 0xb13fff) AM_READ(MRA16_RAM ) // + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( daioh_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x10ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(MWA16_RAM ) + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x701000, 0x70ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x804000, 0x80ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x884000, 0x88ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xb04000, 0xb13fff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(MWA16_NOP ) // +ADDRESS_MAP_END + + +/*************************************************************************** + Dragon Unit, Quiz Kokology, Quiz Kokology 2, Strike Gunner +***************************************************************************/ + +static ADDRESS_MAP_START( drgnunit_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x080000, 0x0bffff) AM_READ(MRA16_RAM ) // ROM (qzkklgy2) + AM_RANGE(0xf00000, 0xf0ffff) AM_READ(MRA16_RAM ) // RAM (qzkklogy) + AM_RANGE(0xffc000, 0xffffff) AM_READ(MRA16_RAM ) // RAM (drgnunit,stg) + AM_RANGE(0x100000, 0x103fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x900000, 0x901fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0x902000, 0x903fff) AM_READ(MRA16_RAM ) // VRAM + AM_RANGE(0xb00000, 0xb00001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0xb00002, 0xb00003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0xb00004, 0xb00005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0xb00006, 0xb00007) AM_READ(MRA16_NOP ) // unused (qzkklogy) +/**/AM_RANGE(0xc00000, 0xc00001) AM_READ(MRA16_RAM ) // ? $4000 +/**/AM_RANGE(0xd00000, 0xd00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +ADDRESS_MAP_END + +static ADDRESS_MAP_START( drgnunit_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x080000, 0x0bffff) AM_WRITE(MWA16_RAM ) // ROM (qzkklgy2) + AM_RANGE(0xf00000, 0xf0ffff) AM_WRITE(MWA16_RAM ) // RAM (qzkklogy) + AM_RANGE(0xffc000, 0xffffff) AM_WRITE(MWA16_RAM ) // RAM (drgnunit,stg) + AM_RANGE(0x100000, 0x103fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // Watchdog + AM_RANGE(0x300000, 0x300001) AM_WRITE(MWA16_NOP ) // ? IRQ Ack + AM_RANGE(0x500000, 0x500001) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x800000, 0x800005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM Ctrl + AM_RANGE(0x900000, 0x903fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM + AM_RANGE(0x904000, 0x90ffff) AM_WRITE(MWA16_NOP ) // unused (qzkklogy) + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(MWA16_RAM ) // ? $4000 + AM_RANGE(0xd00000, 0xd00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr +ADDRESS_MAP_END + + +/*************************************************************************** + Extreme Downhill / Sokonuke +***************************************************************************/ + +static ADDRESS_MAP_START( extdwnhl_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x210000, 0x21ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x220000, 0x23ffff) AM_READ(MRA16_RAM ) // RAM (sokonuke) + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x400008, 0x40000b) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x40000c, 0x40000d) AM_READ(watchdog_reset16_r ) // Watchdog (extdwnhl, MUST RETURN $FFFF) + AM_RANGE(0x500004, 0x500007) AM_READ(MRA16_NOP ) // IRQ Ack (extdwnhl) + AM_RANGE(0x600400, 0x600fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x601000, 0x610bff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0x804000, 0x80ffff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x880000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 2&3 + AM_RANGE(0x884000, 0x88ffff) AM_READ(MRA16_RAM ) // +/**/AM_RANGE(0x900000, 0x900005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl +/**/AM_RANGE(0x980000, 0x980005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl +/**/AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xb04000, 0xb13fff) AM_READ(MRA16_RAM ) // + AM_RANGE(0xe00000, 0xe03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( extdwnhl_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x210000, 0x21ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x220000, 0x23ffff) AM_WRITE(MWA16_RAM ) // RAM (sokonuke) + AM_RANGE(0x40000c, 0x40000d) AM_WRITE(watchdog_reset16_w ) // Watchdog (sokonuke) + AM_RANGE(0x500000, 0x500003) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x500004, 0x500007) AM_WRITE(MWA16_NOP ) // IRQ Ack (sokonuke) + AM_RANGE(0x600400, 0x600fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x601000, 0x610bff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x804000, 0x80ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x884000, 0x88ffff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xb04000, 0xb13fff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(seta_sound_word_w ) // Sound +ADDRESS_MAP_END + +/*************************************************************************** + (Kamen) Masked Riders Club Battle Race / Mad Shark +***************************************************************************/ + +static ADDRESS_MAP_START( kamenrid_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // ROM + AM_RANGE(0x500000, 0x500001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x500004, 0x500007) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x500008, 0x500009) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x50000c, 0x50000d) AM_READ(watchdog_reset16_r ) // xx Watchdog? + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x701000, 0x703fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x800000, 0x801fff) AM_READ(MRA16_RAM ) // VRAM 0 + AM_RANGE(0x802000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 1 + AM_RANGE(0x804000, 0x807fff) AM_READ(MRA16_RAM ) // tested + AM_RANGE(0x880000, 0x881fff) AM_READ(MRA16_RAM ) // VRAM 2 + AM_RANGE(0x882000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 3 + AM_RANGE(0x884000, 0x887fff) AM_READ(MRA16_RAM ) // tested + AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xb04000, 0xb07fff) AM_READ(MRA16_RAM ) // tested + AM_RANGE(0xd00000, 0xd03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( kamenrid_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // ROM + AM_RANGE(0x50000c, 0x50000d) AM_WRITE(watchdog_reset16_w ) // Watchdog (sokonuke) + AM_RANGE(0x600000, 0x600005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // ? Coin Lockout + Video Registers + AM_RANGE(0x600006, 0x600007) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(MWA16_RAM ) // Palette RAM (tested) + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x701000, 0x703fff) AM_WRITE(MWA16_RAM ) // Palette + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x804000, 0x807fff) AM_WRITE(MWA16_RAM ) // tested + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x884000, 0x887fff) AM_WRITE(MWA16_RAM ) // tested + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? $4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xb04000, 0xb07fff) AM_WRITE(MWA16_RAM) // tested +#if __uPD71054_TIMER + AM_RANGE(0xc00000, 0xc00007) AM_WRITE(timer_regs_w ) // ? +#else + AM_RANGE(0xc00000, 0xc00007) AM_WRITE(MWA16_NOP ) // ? +#endif + AM_RANGE(0xd00000, 0xd03fff) AM_WRITE(seta_sound_word_w ) // Sound +ADDRESS_MAP_END + +/* almast identical to kamenrid */ +static ADDRESS_MAP_START( madshark_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // ROM + AM_RANGE(0x500000, 0x500001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x500004, 0x500005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x500008, 0x50000b) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x800000, 0x801fff) AM_READ(MRA16_RAM ) // VRAM 0 + AM_RANGE(0x802000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 1 + AM_RANGE(0x880000, 0x881fff) AM_READ(MRA16_RAM ) // VRAM 2 + AM_RANGE(0x882000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 3 + AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( madshark_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // ROM + AM_RANGE(0x50000c, 0x50000d) AM_WRITE(watchdog_reset16_w ) // Watchdog + AM_RANGE(0x600000, 0x600005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // ? Coin Lockout + Video Registers + AM_RANGE(0x600006, 0x600007) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? $4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr +#if __uPD71054_TIMER + AM_RANGE(0xc00000, 0xc00007) AM_WRITE(timer_regs_w ) // ? +#else + AM_RANGE(0xc00000, 0xc00007) AM_WRITE(MWA16_NOP ) // ? +#endif + AM_RANGE(0xd00000, 0xd03fff) AM_WRITE(seta_sound_word_w ) // Sound +ADDRESS_MAP_END + + + +/*************************************************************************** + Krazy Bowl +***************************************************************************/ + +static READ16_HANDLER( krzybowl_input_r ) +{ + // analog ports + int dir1x = readinputport(4) & 0xfff; + int dir1y = readinputport(5) & 0xfff; + int dir2x = readinputport(6) & 0xfff; + int dir2y = readinputport(7) & 0xfff; + + switch (offset) + { + case 0x0/2: return dir1x & 0xff; + case 0x2/2: return dir1x >> 8; + case 0x4/2: return dir1y & 0xff; + case 0x6/2: return dir1y >> 8; + case 0x8/2: return dir2x & 0xff; + case 0xa/2: return dir2x >> 8; + case 0xc/2: return dir2y & 0xff; + case 0xe/2: return dir2y >> 8; + default: + logerror("PC %06X - Read input %02X !\n", activecpu_get_pc(), offset*2); + return 0; + } +} + +static ADDRESS_MAP_START( krzybowl_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0xf00000, 0xf0ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x100000, 0x100001) AM_READ(MRA16_NOP ) // ? + AM_RANGE(0x200000, 0x200001) AM_READ(MRA16_NOP ) // ? + AM_RANGE(0x300000, 0x300003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x500000, 0x500001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x500004, 0x500005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x60000f) AM_READ(krzybowl_input_r ) // P1 + AM_RANGE(0x8000f0, 0x8000f1) AM_READ(MRA16_RAM ) // NVRAM + AM_RANGE(0x800100, 0x8001ff) AM_READ(MRA16_RAM ) // NVRAM + AM_RANGE(0xa00000, 0xa03fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0xb00000, 0xb003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +/**/AM_RANGE(0xd00000, 0xd00001) AM_READ(MRA16_RAM ) // ? 0x4000 +/**/AM_RANGE(0xe00000, 0xe00607) AM_READ(MRA16_RAM ) // Sprites Y +ADDRESS_MAP_END + +static ADDRESS_MAP_START( krzybowl_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0xf00000, 0xf0ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x400000, 0x400001) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x8000f0, 0x8000f1) AM_WRITE(MWA16_RAM ) // NVRAM + AM_RANGE(0x800100, 0x8001ff) AM_WRITE(MWA16_RAM ) // NVRAM + AM_RANGE(0xa00000, 0xa03fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0xb00000, 0xb003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd00001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xe00000, 0xe00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y +ADDRESS_MAP_END + + +/*************************************************************************** + Mobile Suit Gundam +***************************************************************************/ + +static WRITE16_HANDLER( msgundam_vregs_w ) +{ + // swap $500002 with $500004 + switch( offset ) + { + case 1: offset = 2; break; + case 2: offset = 1; break; + } + seta_vregs_w(offset,data,mem_mask); +} + +/* Mirror RAM is necessary or startup, to clear Work RAM after the test */ + +static ADDRESS_MAP_START( msgundam_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x1fffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x800000, 0x800607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0x900000, 0x903fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xa00000, 0xa03fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0xa80000, 0xa83fff) AM_READ(MRA16_RAM ) // VRAM 2&3 + AM_RANGE(0xb00000, 0xb00005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl + AM_RANGE(0xb80000, 0xb80005) AM_READ(MRA16_RAM ) // VRAM 1&2 Ctrl + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( msgundam_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x1fffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM) AM_BASE(&mirror_ram ) // RAM + AM_RANGE(0x210000, 0x21ffff) AM_WRITE(mirror_ram_w ) // Mirrored RAM + AM_RANGE(0x220000, 0x22ffff) AM_WRITE(mirror_ram_w ) + AM_RANGE(0x230000, 0x23ffff) AM_WRITE(mirror_ram_w ) + AM_RANGE(0x240000, 0x24ffff) AM_WRITE(mirror_ram_w ) + AM_RANGE(0x400000, 0x400001) AM_WRITE(MWA16_NOP ) // Lev 2 IRQ Ack + AM_RANGE(0x400004, 0x400005) AM_WRITE(MWA16_NOP ) // Lev 4 IRQ Ack + AM_RANGE(0x500000, 0x500005) AM_WRITE(msgundam_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x800000, 0x800607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0x880000, 0x880001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0x900000, 0x903fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xa00000, 0xa03fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0xa80000, 0xa83fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0xb00000, 0xb00005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0xb80000, 0xb80005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound +#if __uPD71054_TIMER + AM_RANGE(0xd00000, 0xd00007) AM_WRITE(timer_regs_w ) // ? +#else + AM_RANGE(0xd00000, 0xd00007) AM_WRITE(MWA16_NOP ) // ? +#endif +ADDRESS_MAP_END + + + + +/*************************************************************************** + Oishii Puzzle +***************************************************************************/ + +/* similar to wrofaero */ + +static ADDRESS_MAP_START( oisipuzl_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x17ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x300000, 0x300003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x700000, 0x703fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0x880000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 2&3 +/**/AM_RANGE(0x900000, 0x900005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl +/**/AM_RANGE(0x980000, 0x980005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl +/**/AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xc00400, 0xc00fff) AM_READ(MRA16_RAM ) // Palette +ADDRESS_MAP_END + +static ADDRESS_MAP_START( oisipuzl_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x17ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x400000, 0x400001) AM_WRITE(MWA16_NOP ) // ? IRQ Ack + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x700000, 0x703fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xc00400, 0xc00fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette +ADDRESS_MAP_END + +/*************************************************************************** + Triple Fun +***************************************************************************/ + +/* the same as oisipuzl with the sound system replaced */ + +static ADDRESS_MAP_START( triplfun_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x17ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x300000, 0x300003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x500006, 0x500007) AM_READ(OKIM6295_status_0_lsb_r) // tfun sound + AM_RANGE(0x700000, 0x703fff) AM_READ(MRA16_RAM ) // old sound + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 0&1 + AM_RANGE(0x880000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 2&3 +/**/AM_RANGE(0x900000, 0x900005) AM_READ(MRA16_RAM ) // VRAM 0&1 Ctrl +/**/AM_RANGE(0x980000, 0x980005) AM_READ(MRA16_RAM ) // VRAM 2&3 Ctrl +/**/AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xc00400, 0xc00fff) AM_READ(MRA16_RAM ) // Palette +ADDRESS_MAP_END + +static ADDRESS_MAP_START( triplfun_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x17ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x400000, 0x400001) AM_WRITE(MWA16_NOP ) // ? IRQ Ack + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0x500006, 0x500007) AM_WRITE(OKIM6295_data_0_lsb_w) // tfun sound + AM_RANGE(0x700000, 0x703fff) AM_WRITE(MWA16_RAM ) // old sound + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xc00400, 0xc00fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette +ADDRESS_MAP_END + +/*************************************************************************** + Pro Mahjong Kiwame +***************************************************************************/ + +static UINT16 *kiwame_nvram; + +static READ16_HANDLER( kiwame_nvram_r ) +{ + return kiwame_nvram[offset] & 0xff; +} + +static WRITE16_HANDLER( kiwame_nvram_w ) +{ + if (ACCESSING_LSB) COMBINE_DATA( &kiwame_nvram[offset] ); +} + +static READ16_HANDLER( kiwame_input_r ) +{ + int row_select = kiwame_nvram_r( 0x10a/2,0 ) & 0x1f; + int i; + + for(i = 0; i < 5; i++) + if (row_select & (1<<i)) break; + + i = 4 + (i % 5); + + switch( offset ) + { + case 0x00/2: return readinputport( i ); + case 0x02/2: return 0xffff; + case 0x04/2: return readinputport( 2 ); +// case 0x06/2: + case 0x08/2: return 0xffff; + + default: + logerror("PC %06X - Read input %02X !\n", activecpu_get_pc(), offset*2); + return 0x0000; + } +} + +static ADDRESS_MAP_START( kiwame_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0xfffc00, 0xffffff) AM_READ(kiwame_nvram_r ) // NVRAM + Regs ? + AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +/**/AM_RANGE(0x900000, 0x900001) AM_READ(MRA16_RAM ) // ? 0x4000 +/**/AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xb00000, 0xb003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0xd00000, 0xd00009) AM_READ(kiwame_input_r ) + AM_RANGE(0xe00000, 0xe00003) AM_READ(seta_dsw_r ) // DSW +ADDRESS_MAP_END + +static ADDRESS_MAP_START( kiwame_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(kiwame_nvram_w) AM_BASE(&kiwame_nvram ) // NVRAM + Regs ? + AM_RANGE(0x800000, 0x803fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0x900000, 0x900001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xb00000, 0xb003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound +ADDRESS_MAP_END + + +/*************************************************************************** + Thunder & Lightning / Wit's +***************************************************************************/ + +static READ16_HANDLER( thunderl_protection_r ) +{ +// logerror("PC %06X - Protection Read\n", activecpu_get_pc()); + return 0x00dd; +} +static WRITE16_HANDLER( thunderl_protection_w ) +{ +// logerror("PC %06X - Protection Written: %04X <- %04X\n", activecpu_get_pc(), offset*2, data); +} + +/* Similar to downtown etc. */ + +static ADDRESS_MAP_START( thunderl_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x00ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0xffc000, 0xffffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x100000, 0x103fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700000, 0x7003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xb00000, 0xb00001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0xb00002, 0xb00003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0xb00004, 0xb00005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0xb0000c, 0xb0000d) AM_READ(thunderl_protection_r ) // Protection (not in wits) + AM_RANGE(0xb00008, 0xb00009) AM_READ(input_port_4_word_r ) // P3 (wits) + AM_RANGE(0xb0000a, 0xb0000b) AM_READ(input_port_5_word_r ) // P4 (wits) +/**/AM_RANGE(0xc00000, 0xc00001) AM_READ(MRA16_RAM ) // ? 0x4000 +/**/AM_RANGE(0xd00000, 0xd00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xe04000, 0xe07fff) AM_READ(MRA16_RAM ) // (wits) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( thunderl_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x00ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0xffc000, 0xffffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x100000, 0x103fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x300000, 0x300001) AM_WRITE(MWA16_NOP ) // ? + AM_RANGE(0x400000, 0x40ffff) AM_WRITE(thunderl_protection_w ) // Protection (not in wits) + AM_RANGE(0x500000, 0x500001) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + AM_RANGE(0x700000, 0x7003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xd00000, 0xd00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xe00000, 0xe03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xe04000, 0xe07fff) AM_WRITE(MWA16_RAM ) // (wits) +ADDRESS_MAP_END + +/*************************************************************************** + Wiggie Waggie +***************************************************************************/ + +static int wiggie_soundlatch; + +static READ8_HANDLER( wiggie_soundlatch_r ) +{ + return wiggie_soundlatch; +} + +static WRITE16_HANDLER( wiggie_soundlatch_w ) +{ + wiggie_soundlatch = data >> 8; + cpunum_set_input_line(1,0, HOLD_LINE); +} + + +static ADDRESS_MAP_START( wiggie_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM) + AM_RANGE(0x8000, 0x87ff) AM_READ(MRA8_RAM) + AM_RANGE(0x9800, 0x9800) AM_READ(OKIM6295_status_0_r) + AM_RANGE(0xa000, 0xa000) AM_READ(wiggie_soundlatch_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( wiggie_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x8000, 0x87ff) AM_WRITE(MWA8_RAM) + AM_RANGE(0x9800, 0x9800) AM_WRITE(OKIM6295_data_0_w) +ADDRESS_MAP_END + +/*************************************************************************** + Ultraman Club / SD Gundam Neo Battling +***************************************************************************/ + +static ADDRESS_MAP_START( umanclub_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x300000, 0x3003ff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x300400, 0x300fff) AM_READ(MRA16_RAM ) // + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y +/**/AM_RANGE(0xa80000, 0xa80001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc03fff) AM_READ(seta_sound_word_r ) // Sound +ADDRESS_MAP_END + +static ADDRESS_MAP_START( umanclub_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x300000, 0x3003ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x300400, 0x300fff) AM_WRITE(MWA16_RAM ) // + AM_RANGE(0x400000, 0x400001) AM_WRITE(MWA16_NOP ) // ? (end of lev 2) + AM_RANGE(0x400004, 0x400005) AM_WRITE(MWA16_NOP ) // ? (end of lev 2) + AM_RANGE(0x500000, 0x500001) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Video Registers + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(seta_sound_word_w ) // Sound +ADDRESS_MAP_END + +/*************************************************************************** + Ultra Toukond Densetsu +***************************************************************************/ + +static WRITE16_HANDLER( utoukond_soundlatch_w ) +{ + if (ACCESSING_LSB) + { + cpunum_set_input_line(1,0,HOLD_LINE); + soundlatch_w(0,data & 0xff); + } +} + +static ADDRESS_MAP_START( utoukond_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM ) // ROM + AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x400004, 0x400005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x700400, 0x700fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0x800000, 0x801fff) AM_READ(MRA16_RAM ) // VRAM 0 + AM_RANGE(0x802000, 0x803fff) AM_READ(MRA16_RAM ) // VRAM 1 + AM_RANGE(0x880000, 0x881fff) AM_READ(MRA16_RAM ) // VRAM 2 + AM_RANGE(0x882000, 0x883fff) AM_READ(MRA16_RAM ) // VRAM 3 + AM_RANGE(0xa00000, 0xa00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xb00000, 0xb03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr +ADDRESS_MAP_END + +static ADDRESS_MAP_START( utoukond_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM ) // ROM + AM_RANGE(0x500000, 0x500005) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // ? Coin Lockout + Video Registers + AM_RANGE(0x700400, 0x700fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0 ) // VRAM 0 + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2 ) // VRAM 2 + AM_RANGE(0x900000, 0x900005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_0 ) // VRAM 0&1 Ctrl + AM_RANGE(0x980000, 0x980005) AM_WRITE(MWA16_RAM) AM_BASE(&seta_vctrl_2 ) // VRAM 2&3 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(utoukond_soundlatch_w ) // To Sound CPU (cause an IRQ) + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(MWA16_NOP ) // ? ack +ADDRESS_MAP_END + +/*************************************************************************** + + + Sub / Sound CPU + + +***************************************************************************/ + +static WRITE8_HANDLER( sub_bankswitch_w ) +{ + UINT8 *rom = memory_region(REGION_CPU2); + int bank = data >> 4; + + memory_set_bankptr(1, &rom[bank * 0x4000 + 0xc000]); +} + +static WRITE8_HANDLER( sub_bankswitch_lockout_w ) +{ + sub_bankswitch_w(offset,data); + seta_coin_lockout_w(data); +} + + +/*************************************************************************** + Thundercade +***************************************************************************/ + +static READ8_HANDLER( ff_r ) {return 0xff;} + +static ADDRESS_MAP_START( tndrcade_sub_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_READ(MRA8_RAM ) // RAM + AM_RANGE(0x0800, 0x0800) AM_READ(ff_r ) // ? (bits 0/1/2/3: 1 -> do test 0-ff/100-1e0/5001-57ff/banked rom) +// AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_r ) // +// AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_r ) // + AM_RANGE(0x1000, 0x1000) AM_READ(input_port_0_r ) // P1 + AM_RANGE(0x1001, 0x1001) AM_READ(input_port_1_r ) // P2 + AM_RANGE(0x1002, 0x1002) AM_READ(input_port_2_r ) // Coins + AM_RANGE(0x2001, 0x2001) AM_READ(YM2203_read_port_0_r ) + AM_RANGE(0x5000, 0x57ff) AM_READ(MRA8_RAM ) // Shared RAM + AM_RANGE(0x6000, 0x7fff) AM_READ(MRA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1 ) // Banked ROM + AM_RANGE(0xc000, 0xffff) AM_READ(MRA8_ROM ) // ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tndrcade_sub_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_WRITE(MWA8_RAM ) // RAM + AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w ) // ROM Bank + Coin Lockout + AM_RANGE(0x2000, 0x2000) AM_WRITE(YM2203_control_port_0_w ) + AM_RANGE(0x2001, 0x2001) AM_WRITE(YM2203_write_port_0_w ) + AM_RANGE(0x3000, 0x3000) AM_WRITE(YM3812_control_port_0_w ) + AM_RANGE(0x3001, 0x3001) AM_WRITE(YM3812_write_port_0_w ) + AM_RANGE(0x5000, 0x57ff) AM_WRITE(MWA8_RAM) AM_BASE(&sharedram ) // Shared RAM + AM_RANGE(0x6000, 0xffff) AM_WRITE(MWA8_ROM ) // ROM +ADDRESS_MAP_END + +/*************************************************************************** + Twin Eagle +***************************************************************************/ + +static ADDRESS_MAP_START( twineagl_sub_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_READ(MRA8_RAM ) // RAM + AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_r ) // + AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_r ) // + AM_RANGE(0x1000, 0x1000) AM_READ(input_port_0_r ) // P1 + AM_RANGE(0x1001, 0x1001) AM_READ(input_port_1_r ) // P2 + AM_RANGE(0x1002, 0x1002) AM_READ(input_port_2_r ) // Coins + AM_RANGE(0x5000, 0x57ff) AM_READ(MRA8_RAM ) // Shared RAM + AM_RANGE(0x7000, 0x7fff) AM_READ(MRA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1 ) // Banked ROM + AM_RANGE(0xc000, 0xffff) AM_READ(MRA8_ROM ) // ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( twineagl_sub_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_WRITE(MWA8_RAM ) // RAM + AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w ) // ROM Bank + Coin Lockout + AM_RANGE(0x5000, 0x57ff) AM_WRITE(MWA8_RAM) AM_BASE(&sharedram ) // Shared RAM + AM_RANGE(0x7000, 0x7fff) AM_WRITE(MWA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_WRITE(MWA8_ROM ) // ROM + AM_RANGE(0xc000, 0xffff) AM_WRITE(MWA8_ROM ) // ROM +ADDRESS_MAP_END + +/*************************************************************************** + DownTown +***************************************************************************/ + +static READ8_HANDLER( downtown_ip_r ) +{ + int dir1 = readinputport(4); // analog port + int dir2 = readinputport(5); // analog port + + dir1 = (~ (0x800 >> ((dir1 * 12)/0x100)) ) & 0xfff; + dir2 = (~ (0x800 >> ((dir2 * 12)/0x100)) ) & 0xfff; + + switch (offset) + { + case 0: return (readinputport(2) & 0xf0) + (dir1>>8); // upper 4 bits of p1 rotation + coins + case 1: return (dir1&0xff); // lower 8 bits of p1 rotation + case 2: return readinputport(0); // p1 + case 3: return 0xff; // ? + case 4: return (dir2>>8); // upper 4 bits of p2 rotation + ? + case 5: return (dir2&0xff); // lower 8 bits of p2 rotation + case 6: return readinputport(1); // p2 + case 7: return 0xff; // ? + } + + return 0; +} + +static ADDRESS_MAP_START( downtown_sub_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_READ(MRA8_RAM ) // RAM + AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_r ) // + AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_r ) // + AM_RANGE(0x1000, 0x1007) AM_READ(downtown_ip_r ) // Input Ports + AM_RANGE(0x5000, 0x57ff) AM_READ(MRA8_RAM ) // Shared RAM + AM_RANGE(0x7000, 0x7fff) AM_READ(MRA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1 ) // Banked ROM + AM_RANGE(0xc000, 0xffff) AM_READ(MRA8_ROM ) // ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( downtown_sub_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_WRITE(MWA8_RAM ) // RAM + AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w ) // ROM Bank + Coin Lockout + AM_RANGE(0x5000, 0x57ff) AM_WRITE(MWA8_RAM) AM_BASE(&sharedram ) // Shared RAM + AM_RANGE(0x7000, 0xffff) AM_WRITE(MWA8_ROM ) // ROM +ADDRESS_MAP_END + +/*************************************************************************** + Caliber 50 / U.S. Classic +***************************************************************************/ + +static WRITE8_HANDLER( calibr50_soundlatch2_w ) +{ + soundlatch2_w(0,data); + cpu_spinuntil_time(ATTOTIME_IN_USEC(50)); // Allow the other cpu to reply +} + +static ADDRESS_MAP_START( calibr50_sub_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_READ(seta_sound_r ) // Sound + AM_RANGE(0x4000, 0x4000) AM_READ(soundlatch_r ) // From Main CPU + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1 ) // Banked ROM + AM_RANGE(0xc000, 0xffff) AM_READ(MRA8_ROM ) // ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( calibr50_sub_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_WRITE(seta_sound_w ) // Sound + AM_RANGE(0x4000, 0x4000) AM_WRITE(sub_bankswitch_w ) // Bankswitching + AM_RANGE(0x8000, 0xbfff) AM_WRITE(MWA8_ROM ) // Banked ROM + AM_RANGE(0xc000, 0xc000) AM_WRITE(calibr50_soundlatch2_w ) // To Main CPU + AM_RANGE(0xc000, 0xffff) AM_WRITE(MWA8_ROM ) // ROM +ADDRESS_MAP_END + +/*************************************************************************** + Meta Fox +***************************************************************************/ + +static ADDRESS_MAP_START( metafox_sub_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_READ(MRA8_RAM ) // RAM + AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_r ) // + AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_r ) // + AM_RANGE(0x1000, 0x1000) AM_READ(input_port_2_r ) // Coins + AM_RANGE(0x1002, 0x1002) AM_READ(input_port_0_r ) // P1 +// AM_RANGE(0x1004, 0x1004) AM_READ(MRA8_NOP ) // ? + AM_RANGE(0x1006, 0x1006) AM_READ(input_port_1_r ) // P2 + AM_RANGE(0x5000, 0x57ff) AM_READ(MRA8_RAM ) // Shared RAM + AM_RANGE(0x7000, 0x7fff) AM_READ(MRA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1 ) // Banked ROM + AM_RANGE(0xc000, 0xffff) AM_READ(MRA8_ROM ) // ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( metafox_sub_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_WRITE(MWA8_RAM ) // RAM + AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w ) // ROM Bank + Coin Lockout + AM_RANGE(0x5000, 0x57ff) AM_WRITE(MWA8_RAM) AM_BASE(&sharedram ) // Shared RAM + AM_RANGE(0x7000, 0x7fff) AM_WRITE(MWA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_WRITE(MWA8_ROM ) // ROM + AM_RANGE(0xc000, 0xffff) AM_WRITE(MWA8_ROM ) // ROM +ADDRESS_MAP_END + + +/*************************************************************************** + Ultra Toukon Densetsu +***************************************************************************/ + +static ADDRESS_MAP_START( utoukond_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xdfff) AM_READ(MRA8_ROM) + AM_RANGE(0xe000, 0xefff) AM_READ(MRA8_RAM) + AM_RANGE(0xf000, 0xffff) AM_READ(seta_sound_r) +ADDRESS_MAP_END +static ADDRESS_MAP_START( utoukond_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xdfff) AM_WRITE(MWA8_ROM) + AM_RANGE(0xe000, 0xefff) AM_WRITE(MWA8_RAM) + AM_RANGE(0xf000, 0xffff) AM_WRITE(seta_sound_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( utoukond_sound_readport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_READ(YM3438_status_port_0_A_r) + AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_r) +ADDRESS_MAP_END +static ADDRESS_MAP_START( utoukond_sound_writeport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_WRITE(YM3438_control_port_0_A_w) + AM_RANGE(0x01, 0x01) AM_WRITE(YM3438_data_port_0_A_w) + AM_RANGE(0x02, 0x02) AM_WRITE(YM3438_control_port_0_B_w) + AM_RANGE(0x03, 0x03) AM_WRITE(YM3438_data_port_0_B_w) + AM_RANGE(0x80, 0x80) AM_WRITE(MWA8_NOP) //? +ADDRESS_MAP_END + +/* it has a series of tests on startup, if they don't pass it causes an address error */ +static UINT16 pairslove_protram[0x200]; +static UINT16 pairslove_protram_old[0x200]; + +static READ16_HANDLER( pairlove_prot_r ) +{ + int retdata; + retdata = pairslove_protram[offset]; + //mame_printf_debug("pairs love protection? read %06x %04x %04x\n",activecpu_get_pc(), offset,retdata); + pairslove_protram[offset]=pairslove_protram_old[offset]; + return retdata; +} + +static WRITE16_HANDLER( pairlove_prot_w ) +{ +// mame_printf_debug("pairs love protection? write %06x %04x %04x\n",activecpu_get_pc(), offset,data); + pairslove_protram_old[offset]=pairslove_protram[offset]; + pairslove_protram[offset]=data; +} + +/*************************************************************************** + Pairs Love +***************************************************************************/ + +static ADDRESS_MAP_START( pairlove_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x300000, 0x300003) AM_READ(seta_dsw_r ) // DSW + AM_RANGE(0x500000, 0x500001) AM_READ(input_port_0_word_r ) // P1 + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_1_word_r ) // P2 + AM_RANGE(0x500004, 0x500005) AM_READ(input_port_2_word_r ) // Coins + AM_RANGE(0x900000, 0x9001ff) AM_READ(pairlove_prot_r) + AM_RANGE(0xa00000, 0xa03fff) AM_READ(seta_sound_word_r ) // Sound + AM_RANGE(0xb00000, 0xb00fff) AM_READ(MRA16_RAM ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_READ(MRA16_RAM ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd00001) AM_READ(MRA16_RAM ) // ? 0x4000 + AM_RANGE(0xe00000, 0xe00607) AM_READ(MRA16_RAM ) // Sprites Y + AM_RANGE(0xf00000, 0xf0ffff) AM_READ(MRA16_RAM ) // RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( pairlove_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x100001) AM_WRITE(MWA16_NOP ) // ? 1 (start of interrupts, main loop: watchdog?) + AM_RANGE(0x200000, 0x200001) AM_WRITE(MWA16_NOP ) // ? 0/1 (IRQ acknowledge?) + AM_RANGE(0x400000, 0x400001) AM_WRITE(seta_vregs_w) AM_BASE(&seta_vregs ) // Coin Lockout + Sound Enable (bit 4?) + AM_RANGE(0x900000, 0x9001ff) AM_WRITE(pairlove_prot_w) + AM_RANGE(0xa00000, 0xa03fff) AM_WRITE(seta_sound_word_w ) // Sound + AM_RANGE(0xb00000, 0xb00fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2 ) // Sprites Code + X + Attr + AM_RANGE(0xd00000, 0xd00001) AM_WRITE(MWA16_RAM ) // ? 0x4000 + AM_RANGE(0xe00000, 0xe00607) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16 ) // Sprites Y + AM_RANGE(0xf00000, 0xf0ffff) AM_WRITE(MWA16_RAM ) // RAM +ADDRESS_MAP_END + + +/*************************************************************************** + Crazy Fight +***************************************************************************/ + +static WRITE16_HANDLER( YM3812_control_port_0_lsb_w ) { if (ACCESSING_LSB) YM3812_control_port_0_w(0, data & 0xff); } +static WRITE16_HANDLER( YM3812_write_port_0_lsb_w ) { if (ACCESSING_LSB) YM3812_write_port_0_w(0, data & 0xff); } + +static ADDRESS_MAP_START( crazyfgt_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_ROM + AM_RANGE(0x400000, 0x40ffff) AM_RAM + AM_RANGE(0x610000, 0x610001) AM_READ(input_port_0_word_r ) + AM_RANGE(0x610002, 0x610003) AM_READ(input_port_1_word_r ) + AM_RANGE(0x610004, 0x610005) AM_READ(input_port_2_word_r ) + AM_RANGE(0x610006, 0x610007) AM_WRITENOP + AM_RANGE(0x620000, 0x620003) AM_WRITENOP // protection + AM_RANGE(0x630000, 0x630003) AM_READ(seta_dsw_r) + AM_RANGE(0x640400, 0x640fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x650000, 0x650001) AM_WRITE(YM3812_control_port_0_lsb_w) + AM_RANGE(0x650002, 0x650003) AM_WRITE(YM3812_write_port_0_lsb_w) + AM_RANGE(0x658000, 0x658001) AM_WRITE(OKIM6295_data_0_lsb_w) + AM_RANGE(0x670000, 0x670001) AM_READNOP // watchdog? + AM_RANGE(0x800000, 0x803fff) AM_WRITE(seta_vram_2_w) AM_BASE(&seta_vram_2) // VRAM 2 + AM_RANGE(0x880000, 0x883fff) AM_WRITE(seta_vram_0_w) AM_BASE(&seta_vram_0) // VRAM 0 + AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE(&seta_vctrl_2) // VRAM 2&3 Ctrl + AM_RANGE(0x980000, 0x980005) AM_RAM AM_BASE(&seta_vctrl_0) // VRAM 0&1 Ctrl + AM_RANGE(0xa00000, 0xa00607) AM_RAM AM_BASE(&spriteram16) // Sprites Y + AM_RANGE(0xa80000, 0xa80001) AM_WRITENOP // ? 0x4000 + AM_RANGE(0xb00000, 0xb03fff) AM_RAM AM_BASE(&spriteram16_2) // Sprites Code + X + Attr +ADDRESS_MAP_END + + +/*************************************************************************** + + + Input Ports + + +***************************************************************************/ + +#define JOY_TYPE1_1BUTTON(_n_) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START##_n_ ) + +#define JOY_TYPE1_2BUTTONS(_n_) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START##_n_ ) + +#define JOY_TYPE1_3BUTTONS(_n_) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START##_n_ ) + + + +#define JOY_TYPE2_1BUTTON(_n_) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START##_n_ ) + +#define JOY_TYPE2_2BUTTONS(_n_) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START##_n_ ) + +#define JOY_TYPE2_3BUTTONS(_n_) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(_n_) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START##_n_ ) + + +#define JOY_ROTATION(_n_, _left_, _right_ ) \ + PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_PLAYER(_n_) PORT_SENSITIVITY(15) PORT_KEYDELTA(15) PORT_CODE_DEC(KEYCODE_##_left_) PORT_CODE_INC(KEYCODE_##_right_) + + + +/*************************************************************************** + Arbalester +***************************************************************************/ + +static INPUT_PORTS_START( arbalest ) + PORT_START_TAG("IN0") // Player 1 + JOY_TYPE2_2BUTTONS(1) + + PORT_START_TAG("IN1") // Player 2 + JOY_TYPE2_2BUTTONS(2) + + PORT_START_TAG("IN2") // Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + + PORT_START_TAG("IN3") // 2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x4001, 0x0000, "Licensed To" ) + PORT_DIPSETTING( 0x0000, "Taito" ) +// PORT_DIPSETTING( 0x4000, "Taito" ) + PORT_DIPSETTING( 0x4001, "Romstar" ) + PORT_DIPSETTING( 0x0001, "Jordan" ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0004, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Harder ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x0c00, "Never" ) + PORT_DIPSETTING( 0x0800, "300k Only" ) + PORT_DIPSETTING( 0x0400, "600k Only" ) + PORT_DIPSETTING( 0x0000, "300k & 600k" ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x1000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x2000, "5" ) +// 0x4000 License (see first dsw) + PORT_DIPNAME( 0x8000, 0x8000, "Coinage Type" ) // not supported + PORT_DIPSETTING( 0x8000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) +INPUT_PORTS_END + + +/*************************************************************************** + Athena no Hatena? +***************************************************************************/ + +static INPUT_PORTS_START( atehate ) + PORT_START_TAG("IN0") // Player 1 + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") // Player 2 + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START_TAG("IN2") // Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 4 Bits Called "Cut DSW" + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") // 2 DSWs - $e00001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Unknown 2-7" ) // manual: unused + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0200, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x1000, "4" ) + PORT_DIPSETTING( 0x2000, "5" ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( None ) ) + PORT_DIPSETTING( 0x0000, "20K Only" ) + PORT_DIPSETTING( 0x8000, "20K, Every 30K" ) + PORT_DIPSETTING( 0x4000, "30K, Every 40K" ) +INPUT_PORTS_END + + +/*************************************************************************** + Blandia +***************************************************************************/ + +static INPUT_PORTS_START( blandia ) + PORT_START_TAG("IN0") //Player 1 - $400000.w + JOY_TYPE1_3BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") //Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, "Coinage Type" ) // not supported + PORT_DIPSETTING( 0x0002, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0x0014, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x00e0, 0x00e0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 2C_4C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0080, "3 Coins/7 Credit" ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_6C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "1" ) + PORT_DIPSETTING( 0x0300, "2" ) + PORT_DIPSETTING( 0x0100, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x1000, 0x1000, "2 Player Game" ) + PORT_DIPSETTING( 0x1000, "2 Credits" ) + PORT_DIPSETTING( 0x0000, "1 Credit" ) + PORT_DIPNAME( 0x2000, 0x2000, "Continue" ) + PORT_DIPSETTING( 0x2000, "1 Credit" ) + PORT_DIPSETTING( 0x0000, "1 Coin" ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x8000, IP_ACTIVE_LOW ) +INPUT_PORTS_END + + + +/*************************************************************************** + Block Carnival +***************************************************************************/ + +static INPUT_PORTS_START( blockcar ) + PORT_START_TAG("IN0") //Player 1 - $500001.b + JOY_TYPE1_2BUTTONS(1) // button2 = speed up + + PORT_START_TAG("IN1") //Player 2 - $500003.b + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + DSW - $500005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_DIPNAME( 0x0010, 0x0000, "Title" ) + PORT_DIPSETTING( 0x0010, "Thunder & Lightning 2" ) + PORT_DIPSETTING( 0x0000, "Block Carnival" ) + + PORT_START_TAG("IN3") //2 DSWs - $300003 & 1.b + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x000c, "20K, Every 50K" ) + PORT_DIPSETTING( 0x0004, "20K, Every 70K" ) + PORT_DIPSETTING( 0x0008, "30K, Every 60K" ) + PORT_DIPSETTING( 0x0000, "30K, Every 90K" ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0030, "2" ) + PORT_DIPSETTING( 0x0020, "3" ) + PORT_DIPSETTING( 0x0010, "4" ) + PORT_DIPNAME( 0x0040, 0x0040, "Unknown 2-6" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, "Unknown 1-0" ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, "Unknown 1-3" ) // service mode, according to a file in the archive + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_2C ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Caliber 50 +***************************************************************************/ + +static INPUT_PORTS_START( calibr50 ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE2_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE2_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x4001, 0x4000, "Licensed To" ) + PORT_DIPSETTING( 0x0001, "Romstar" ) + PORT_DIPSETTING( 0x4001, "Taito America" ) + PORT_DIPSETTING( 0x4000, "Taito" ) + PORT_DIPSETTING( 0x0000, "None (Japan)" ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0004, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + + PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Easiest ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) ) + PORT_DIPNAME( 0x0400, 0x0400, "Score Digits" ) + PORT_DIPSETTING( 0x0400, "7" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0800, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x1000, 0x1000, "Display Score" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, "Erase Backup Ram" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + // 0x4000 Country / License (see first dsw) + PORT_DIPNAME( 0x8000, 0x8000, "Unknown 2-7" ) /* manual: "Don't Touch" */ + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START_TAG("IN4") // Rotation Player 1 + JOY_ROTATION(1, Z, X) + + PORT_START_TAG("IN5") // Rotation Player 2 + JOY_ROTATION(2, N, M) +INPUT_PORTS_END + +/*************************************************************************** + Daioh +***************************************************************************/ + +static INPUT_PORTS_START( daioh ) + PORT_START_TAG("IN0") + JOY_TYPE1_3BUTTONS(1) + + PORT_START_TAG("IN1") + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + /* These are NOT Dip Switches but jumpers */ + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) // JP9 + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) // JP8 + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) // JP7 + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Country" ) // JP6 + PORT_DIPSETTING( 0x0080, "USA (6 buttons)" ) + PORT_DIPSETTING( 0x0000, "Japan (2 buttons)" ) + + PORT_START_TAG("IN3") + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C )) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Auto Shot" ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0200, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x1000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x2000, "5" ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x8000, "300k and every 800k" ) + PORT_DIPSETTING( 0xc000, "500k and every 1000k" ) + PORT_DIPSETTING( 0x4000, "800k and 2000k only" ) + PORT_DIPSETTING( 0x0000, "1000k Only" ) + + PORT_START_TAG("IN4") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + +/*************************************************************************** + Dragon Unit +***************************************************************************/ + +static INPUT_PORTS_START( drgnunit ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_3BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_DIPNAME( 0x0010, 0x0010, "Coinage Type" ) // not supported + PORT_DIPSETTING( 0x0010, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPNAME( 0x0020, 0x0020, "Title" ) + PORT_DIPSETTING( 0x0020, "Dragon Unit" ) + PORT_DIPSETTING( 0x0000, "Castle of Dragon" ) + PORT_DIPNAME( 0x00c0, 0x00c0, "(C) / License" ) + PORT_DIPSETTING( 0x00c0, "Athena (Japan)" ) + PORT_DIPSETTING( 0x0080, "Athena / Taito (Japan)" ) + PORT_DIPSETTING( 0x0040, "Seta USA / Taito America" ) + PORT_DIPSETTING( 0x0000, "Seta USA / Romstar" ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0002, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x0008, "150K, Every 300K" ) + PORT_DIPSETTING( 0x000c, "200K, Every 400K" ) + PORT_DIPSETTING( 0x0004, "300K, Every 500K" ) + PORT_DIPSETTING( 0x0000, "400K Only" ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0010, "2" ) + PORT_DIPSETTING( 0x0030, "3" ) + PORT_DIPSETTING( 0x0020, "5" ) + PORT_DIPNAME( 0x0040, 0x0040, "Unknown 1-6" ) /* Labeled "Don't Touch" in manual */ + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Unknown 1-7*" ) /* Labeled "Don't Touch" in manual */ + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, "Unknown 2-0" ) /* Labeled "Don't Touch" in manual */ + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0400, "1 of 4 Scenes" ) + PORT_DIPSETTING( 0x0000, "1 of 8 Scenes" ) + PORT_SERVICE( 0x0800, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_2C ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + DownTown +***************************************************************************/ + +static INPUT_PORTS_START( downtown ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE2_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE2_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0000, "Sales" ) /* Manual for USA version says "Always Off" */ + PORT_DIPSETTING( 0x0001, "Japan Only" ) + PORT_DIPSETTING( 0x0000, DEF_STR( World ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0004, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) +// other coinage +#if 0 + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) +#endif + + PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x0c00, "Never" ) + PORT_DIPSETTING( 0x0800, "50K Only" ) + PORT_DIPSETTING( 0x0400, "100K Only" ) + PORT_DIPSETTING( 0x0000, "50K, Every 150K" ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x1000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPSETTING( 0x2000, "5" ) + PORT_DIPNAME( 0x4000, 0x0000, "World License" ) /* Manual for USA version says "Unused" */ + PORT_DIPSETTING( 0x4000, "Romstar" ) + PORT_DIPSETTING( 0x0000, "Taito" ) + PORT_DIPNAME( 0x8000, 0x8000, "Coinage Type" ) /* Manual for USA version says "Unused", but currently not implemented */ + PORT_DIPSETTING( 0x8000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + + PORT_START_TAG("IN4") //Rotation Player 1 + JOY_ROTATION(1, Z, X) + + PORT_START_TAG("IN5") //Rotation Player 2 + JOY_ROTATION(2, N, M) +INPUT_PORTS_END + + + +/*************************************************************************** + Eight Force +***************************************************************************/ + +static INPUT_PORTS_START( eightfrc ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Shared Credits" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Credits To Start" ) + PORT_DIPSETTING( 0x0080, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + + PORT_SERVICE( 0x0100, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x6000, 0x6000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x4000, "2" ) + PORT_DIPSETTING( 0x6000, "3" ) + PORT_DIPSETTING( 0x2000, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Language ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( English ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Japanese ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Extreme Downhill +***************************************************************************/ + +static INPUT_PORTS_START( extdwnhl ) + PORT_START_TAG("IN0") //Player 1 + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") //Player 2 + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) // "test" + /* These are NOT Dip Switches but jumpers */ + PORT_DIPNAME( 0x0030, 0x0030, "Country" ) + PORT_DIPSETTING( 0x0030, DEF_STR( World ) ) +// PORT_DIPSETTING( 0x0020, DEF_STR( World ) ) // duplicated settings + PORT_DIPSETTING( 0x0010, DEF_STR( USA ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START_TAG("IN3") //2 DSWs - $400009 & b.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Controls ) ) + PORT_DIPSETTING( 0x0040, "2" ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x2800, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Cheap Continue" ) + PORT_DIPSETTING( 0x4000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x8000, 0x8000, "Game Mode" ) + PORT_DIPSETTING( 0x8000, "Finals Only" ) + PORT_DIPSETTING( 0x0000, "Semi-Finals & Finals" ) +INPUT_PORTS_END + + + +/*************************************************************************** + Gundhara +***************************************************************************/ + +static INPUT_PORTS_START( gundhara ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_3BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Language ) ) /* Yes, the shows it takes both switches */ + PORT_DIPSETTING( 0x00c0, DEF_STR( Japanese ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( English ) ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0800, "1" ) + PORT_DIPSETTING( 0x0c00, "2" ) + PORT_DIPSETTING( 0x0400, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x3000, "200K" ) + PORT_DIPSETTING( 0x2000, "200K, Every 200K" ) + PORT_DIPSETTING( 0x1000, "400K" ) + PORT_DIPSETTING( 0x0000, DEF_STR( None ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_SERVICE( 0x8000, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +/*************************************************************************** + Zombie Raid +***************************************************************************/ + +static INPUT_PORTS_START( zombraid ) + PORT_START_TAG("IN0") //Player 1 + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Trigger") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Reload") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") //Player 2 + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Trigger") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Reload") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, "Mirror" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x2800, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x4000, 0x4000, "2 Coins to Start, 1 to Continue" ) + PORT_DIPSETTING( 0x4000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + /* Gun on screen left=0xc0, right=0x40, top=0x48, bottom=0xa8 */ + PORT_START_TAG("IN5") /* Player 1 Gun X ($f00003) */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, -256.0/(256 - 0x40 - 0x40), -127.0/256, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1) + PORT_START_TAG("IN6") /* Player 1 Gun Y ($f00003) */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 256.0/(256 - 0x48 - 0x58), -193.0/256, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1) + + PORT_START_TAG("IN7") /* Player 2 Gun X ($f00003) */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, -256.0/(256 - 0x40 - 0x40), -127.0/256, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2) + PORT_START_TAG("IN0") /* Player 2 Gun Y ($f00003) */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 256.0/(256 - 0x48 - 0x58), -193.0/256, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2) +INPUT_PORTS_END + + +/*************************************************************************** + J.J.Squawkers +***************************************************************************/ + +static INPUT_PORTS_START( jjsquawk ) + PORT_START_TAG("IN0") //Player 1 - $400000.w + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Unknown 2-7" ) // ?? screen related + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0200, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x3000, 0x3000, "Energy" ) + PORT_DIPSETTING( 0x2000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x1000, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x8000, "20K, Every 100K" ) + PORT_DIPSETTING( 0xc000, "50K, Every 200K" ) + PORT_DIPSETTING( 0x4000, "70K, 200K Only" ) + PORT_DIPSETTING( 0x0000, "100K Only" ) +INPUT_PORTS_END + +/*************************************************************************** + (Kamen) Masked Riders Club Battle Race +***************************************************************************/ + +static INPUT_PORTS_START( kamenrid ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) // BUTTON3 in "test mode" only + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) // BUTTON3 in "test mode" only + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + /* These are NOT Dip Switches but jumpers */ + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Country" ) + PORT_DIPSETTING( 0x0080, DEF_STR( USA ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) ) + + PORT_START // IN3 - 2 DSWs - $500005 & 7.b + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) // masked at 0x001682 + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) // masked at 0x001682 + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // (displays debug infos) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) // masked at 0x001682 + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // (unknown effect at 0x00606a, 0x0060de, 0x00650a) + PORT_DIPNAME( 0x0040, 0x0040, "Intro Music" ) // check code at 0x001792 + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0f00, 0x0f00, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0x0d00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0b00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0f00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0900, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0e00, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0a00, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + +/*************************************************************************** + Krazy Bowl +***************************************************************************/ + +#define KRZYBOWL_TRACKBALL(_dir_, _n_ ) \ + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_##_dir_ ) PORT_PLAYER(_n_) PORT_SENSITIVITY(70) PORT_KEYDELTA(30) PORT_REVERSE + +static INPUT_PORTS_START( krzybowl ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_3BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0010, 0x0010, "Frames" ) + PORT_DIPSETTING( 0x0010, "10" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Controls ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Trackball ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Joystick ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x2800, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Force Coinage" ) + PORT_DIPSETTING( 0x4000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_1C ) ) + PORT_DIPNAME( 0x8000, 0x8000, "Unknown 2-7" ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START_TAG("IN4") //Rotation X Player 1 + KRZYBOWL_TRACKBALL(X,1) + + PORT_START_TAG("IN5") //Rotation Y Player 1 + KRZYBOWL_TRACKBALL(Y,1) + + PORT_START_TAG("IN6") //Rotation X Player 2 + KRZYBOWL_TRACKBALL(X,2) PORT_REVERSE + + PORT_START_TAG("IN7") //Rotation Y Player 2 + KRZYBOWL_TRACKBALL(Y,2) +INPUT_PORTS_END + + +/*************************************************************************** + Mad Shark +***************************************************************************/ + +static INPUT_PORTS_START( madshark ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + /* These are NOT Dip Switches but jumpers */ + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Country" ) + PORT_DIPSETTING( 0x0080, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( World ) ) + + PORT_START_TAG("IN3") //2 DSWs + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x0018, "1000k" ) + PORT_DIPSETTING( 0x0008, "1000k 2000k" ) + PORT_DIPSETTING( 0x0010, "1500k 3000k" ) + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "2" ) + PORT_DIPSETTING( 0x0300, "3" ) + PORT_DIPSETTING( 0x0100, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x1c00, 0x1c00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x1c00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x1400, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_4C ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Meta Fox +***************************************************************************/ + +static INPUT_PORTS_START( metafox ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE2_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE2_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + + PORT_START_TAG("IN3") //$600001 & 3.b + PORT_DIPNAME( 0x4001, 0x4001, "Licensed To" ) + PORT_DIPSETTING( 0x0001, "Jordan" ) + PORT_DIPSETTING( 0x4001, "Romstar" ) + PORT_DIPSETTING( 0x4000, "Taito" ) + PORT_DIPSETTING( 0x0000, "Taito America" ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0004, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + + PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( None ) ) + PORT_DIPSETTING( 0x0008, "60K Only" ) + PORT_DIPSETTING( 0x0000, "60k & 90k" ) + PORT_DIPSETTING( 0x0004, "90K Only" ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x1000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x2000, "5" ) +// PORT_DIPNAME( 0x4000, 0x4000, "License" ) + PORT_DIPNAME( 0x8000, 0x8000, "Coinage Type" ) // not supported + PORT_DIPSETTING( 0x8000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) +INPUT_PORTS_END + + + +/*************************************************************************** + Mobile Suit Gundam +***************************************************************************/ + + +static INPUT_PORTS_START( msgundam ) + PORT_START_TAG("IN0") //Player 1 - $400000.w + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Language ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( English ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Japanese ) ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Unknown 2-6" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_DIPNAME( 0x0600, 0x0600, DEF_STR( Difficulty ) ) // unverified, from the manual + PORT_DIPSETTING( 0x0400, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0800, 0x0800, "Unknown 1-3" ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, "Memory Check" ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Unknown 1-6" ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x8000, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +static INPUT_PORTS_START( msgunda1 ) + PORT_START_TAG("IN0") //Player 1 - $400000.w + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_2BUTTONS(2) + + PORT_START // IN2 - Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + /* this set seems to be a japan set, english mode doesn't work correctly */ + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Language ) ) +// PORT_DIPSETTING( 0x0080, DEF_STR( English ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Japanese ) ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Unknown 2-6" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_DIPNAME( 0x0600, 0x0600, DEF_STR( Difficulty ) ) // unverified, from the manual + PORT_DIPSETTING( 0x0400, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0800, 0x0800, "Unknown 1-3" ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, "Memory Check" ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Unknown 1-6" ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x8000, IP_ACTIVE_LOW ) +INPUT_PORTS_END + + +/*************************************************************************** + Oishii Puzzle +***************************************************************************/ + +static INPUT_PORTS_START( oisipuzl ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) /* Manual States dips 4-7 are unused */ + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x2800, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unused ) ) /* Manual States this dip is unused */ + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Pro Mahjong Kiwame +***************************************************************************/ + +static INPUT_PORTS_START( kiwame ) + PORT_START_TAG("IN0") //Unused + PORT_START_TAG("IN1") //Unused + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(5) + + PORT_START_TAG("IN3") //2 DSWs - $e00001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Player's TSUMO" ) + PORT_DIPSETTING( 0x0080, "Manual" ) + PORT_DIPSETTING( 0x0000, "Auto" ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0200, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x1c00, 0x1c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x1c00, DEF_STR( None ) ) + PORT_DIPSETTING( 0x1800, "Prelim 1" ) + PORT_DIPSETTING( 0x1400, "Prelim 2" ) + PORT_DIPSETTING( 0x1000, "Final 1" ) + PORT_DIPSETTING( 0x0c00, "Final 2" ) + PORT_DIPSETTING( 0x0800, "Final 3" ) + PORT_DIPSETTING( 0x0400, "Qrt Final" ) + PORT_DIPSETTING( 0x0000, "SemiFinal" ) + PORT_DIPNAME( 0xe000, 0xe000, "Points Gap" ) + PORT_DIPSETTING( 0xe000, DEF_STR( None ) ) + PORT_DIPSETTING( 0xc000, "+6000" ) + PORT_DIPSETTING( 0xa000, "+4000" ) + PORT_DIPSETTING( 0x8000, "+2000" ) + PORT_DIPSETTING( 0x6000, "-2000" ) + PORT_DIPSETTING( 0x4000, "-4000" ) + PORT_DIPSETTING( 0x2000, "-6000" ) + PORT_DIPSETTING( 0x0000, "-8000" ) + +/* + row 0 1 2 3 4 +bit 0 a b c d lc + 1 e f g h + 2 i j k l + 3 m n ch po ff + 4 ka re ro + 5 st bt +*/ + + PORT_START_TAG("IN4") + PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT (0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT (0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT (0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN5") + PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT (0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN6") + PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT (0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN7") + PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT (0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN8") + PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT (0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + + +/*************************************************************************** + Quiz Kokology +***************************************************************************/ + +static INPUT_PORTS_START( qzkklogy ) + PORT_START_TAG("IN0") //Player 1 - $b00001.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Pause (Cheat)")// pause (cheat) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") //Player 2 - $b00003.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(2) PORT_NAME("P2 Pause (Cheat)")// pause (cheat) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START_TAG("IN2") //Coins - $b00005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0003, "Unknown 1-0&1*" ) /* Manual States dips 1-5 are unused */ + PORT_DIPSETTING( 0x0000, "0" ) + PORT_DIPSETTING( 0x0001, "1" ) + PORT_DIPSETTING( 0x0002, "2" ) + PORT_DIPSETTING( 0x0003, "3" ) + PORT_DIPNAME( 0x0004, 0x0004, "Highlight Right Answer (Cheat)") + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Unknown 1-3" ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, "Unknown 1-4" ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0020, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unused ) ) /* Manual States this dip is unused */ + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x8000, "2" ) + PORT_DIPSETTING( 0xc000, "3" ) + PORT_DIPSETTING( 0x4000, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) +INPUT_PORTS_END + + + +/*************************************************************************** + Quiz Kokology 2 +***************************************************************************/ + +static INPUT_PORTS_START( qzkklgy2 ) + PORT_START_TAG("IN0") //Player 1 - $b00001.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") //Player 2 - $b00003.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START_TAG("IN2") //Coins - $b00005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0003, "Unknown 1-0&1*" ) /* Manual States dips 1-5 are unused */ + PORT_DIPSETTING( 0x0000, "0" ) + PORT_DIPSETTING( 0x0001, "1" ) + PORT_DIPSETTING( 0x0002, "2" ) + PORT_DIPSETTING( 0x0003, "3" ) + PORT_DIPNAME( 0x0004, 0x0004, "Highlight Right Answer (Cheat)") + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Unknown 1-3" ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, "Unknown 1-4" ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0020, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x8000, "2" ) + PORT_DIPSETTING( 0xc000, "3" ) + PORT_DIPSETTING( 0x4000, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) +INPUT_PORTS_END + + +/*************************************************************************** + Rezon +***************************************************************************/ + +static INPUT_PORTS_START( rezon ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_3BUTTONS(1) // 1 used?? + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_3BUTTONS(2) // 1 used ?? + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no taito logo + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0000, "Upright 1 Controller" ) + PORT_DIPSETTING( 0x0018, "Upright 2 Controllers" ) + PORT_DIPSETTING( 0x0008, DEF_STR( Cocktail ) ) +// PORT_DIPSETTING( 0x0010, "10" ) /* Unused / Not Defined */ + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "2" ) + PORT_DIPSETTING( 0x0300, "3" ) + PORT_DIPSETTING( 0x0100, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( rezont ) + + PORT_INCLUDE( rezon ) + + PORT_MODIFY("IN2") + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // gives the taito logo +INPUT_PORTS_END + +/*************************************************************************** + SD Gundam Neo Battling +***************************************************************************/ + +/* + When the "Stage Select" dip switch is on and button1 is pressed during boot, + pressing P1's button3 freezes the game (pressing P2's button3 resumes it). +*/ +static INPUT_PORTS_START( neobattl ) + PORT_START_TAG("IN0") // Player 1 - $400000.w + JOY_TYPE1_1BUTTON(1) // bump to 3 buttons for freezing to work + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_1BUTTON(2) // bump to 3 buttons for freezing to work + + PORT_START_TAG("IN2") //Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) // used + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Stage Select (Cheat)") + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) // unused? + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) // unused? + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) // unused? + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "1" ) + PORT_DIPSETTING( 0x0300, "2" ) + PORT_DIPSETTING( 0x0100, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Sokonuke +***************************************************************************/ + +static INPUT_PORTS_START( sokonuke ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_1BUTTON(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_1BUTTON(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $400009 & b.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, "Unknown 1-5*" ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) // unused? + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x2800, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Cheap Continue" ) + PORT_DIPSETTING( 0x4000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) // unused? + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Strike Gunner +***************************************************************************/ + +static INPUT_PORTS_START( stg ) + PORT_START_TAG("IN0") //Player 1 - $b00001.b + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 - $b00003.b + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins - $b00005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) +// PORT_DIPNAME( 0x00f0, 0x00f0, "Title" ) + /* This is the index in a table with pointers to the + title logo, but the table is filled with just 1 value */ + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) // 0 + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) // 4 + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) // 8 + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) // b + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0010, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x0030, "3" ) + PORT_DIPSETTING( 0x0020, "5" ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Thunder & Lightning +***************************************************************************/ + +static INPUT_PORTS_START( thunderl ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) // button2 = speed up + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + DSW + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_DIPNAME( 0x0010, 0x0000, "Force 1 Life" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x00e0, 0x00e0, "Copyright" ) + PORT_DIPSETTING( 0x0080, "Romstar" ) + PORT_DIPSETTING( 0x00c0, "Seta (Romstar License)" ) + PORT_DIPSETTING( 0x00e0, "Seta (Visco License)" ) + PORT_DIPSETTING( 0x00a0, "Visco" ) + PORT_DIPSETTING( 0x0060, DEF_STR( None ) ) +// PORT_DIPSETTING( 0x0040, DEF_STR( None ) ) +// PORT_DIPSETTING( 0x0020, DEF_STR( None ) ) +// PORT_DIPSETTING( 0x0000, DEF_STR( None ) ) + + PORT_START_TAG("IN3") //2 DSWs - $600003 & 1.b + PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x000d, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 4C_2C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0009, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_4C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 3C_3C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 2C_2C ) ) + PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 2C_4C ) ) + PORT_DIPSETTING( 0x000b, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x00d0, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 4C_2C ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0090, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_4C ) ) + PORT_DIPSETTING( 0x0050, DEF_STR( 3C_3C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 2C_2C ) ) + PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 2C_4C ) ) + PORT_DIPSETTING( 0x00b0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0070, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_4C ) ) + + PORT_SERVICE( 0x0100, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) // WEIRD! + PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Controls ) ) + PORT_DIPSETTING( 0x0800, "2" ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x2000, "3" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Thundercade (US) +***************************************************************************/ + +static INPUT_PORTS_START( tndrcade ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x000c, "50K Only" ) + PORT_DIPSETTING( 0x0004, "50K, Every 150K" ) + PORT_DIPSETTING( 0x0000, "70K, Every 200K" ) + PORT_DIPSETTING( 0x0008, "100K Only" ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0010, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x0030, "3" ) + PORT_DIPSETTING( 0x0020, "5" ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Licensed To" ) // + coin mode (not supported) + PORT_DIPSETTING( 0x0080, "Taito America Corp." ) + PORT_DIPSETTING( 0x0000, "Taito Corp. Japan" ) + + PORT_DIPNAME( 0x0100, 0x0100, "Title" ) + PORT_DIPSETTING( 0x0100, "Thundercade" ) + PORT_DIPSETTING( 0x0000, "Twin Formation" ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_2C ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Thundercade (Japan) +***************************************************************************/ + +static INPUT_PORTS_START( tndrcadj ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x000c, "50K Only" ) + PORT_DIPSETTING( 0x0004, "50K, Every 150K" ) + PORT_DIPSETTING( 0x0000, "70K, Every 200K" ) + PORT_DIPSETTING( 0x0008, "100K Only" ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0010, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x0030, "3" ) + PORT_DIPSETTING( 0x0020, "5" ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_DIPNAME( 0x0100, 0x0100, "Invulnerability (Cheat)") + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_2C ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Twin Eagle +***************************************************************************/ + +static INPUT_PORTS_START( twineagl ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x4001, 0x4001, "Copyright" ) // Always "Seta" if sim. players = 1 + PORT_DIPSETTING( 0x4001, "Seta (Taito license)" ) + PORT_DIPSETTING( 0x0001, "Taito" ) + PORT_DIPSETTING( 0x4000, "Taito America" ) + PORT_DIPSETTING( 0x0000, "Taito America (Romstar license)" ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0004, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Cabinet ) ) // Only if simultaneous players = 1 + PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x0c00, "Never" ) + PORT_DIPSETTING( 0x0800, "500K Only" ) + PORT_DIPSETTING( 0x0400, "1000K Only" ) + PORT_DIPSETTING( 0x0000, "500K, Every 1500K" ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x1000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x3000, "3" ) + PORT_DIPSETTING( 0x2000, "5" ) + PORT_DIPNAME( 0x8000, 0x8000, "Coinage Type" ) // not supported + PORT_DIPSETTING( 0x8000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) +INPUT_PORTS_END + + + +/*************************************************************************** + Ultraman Club +***************************************************************************/ + +static INPUT_PORTS_START( umanclub ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, "Unknown 2-2*" ) //? + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Stage Select (Cheat)") + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, "Unknown 2-4" ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, "Unknown 2-5" ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Unknown 2-6" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "1" ) + PORT_DIPSETTING( 0x0300, "2" ) + PORT_DIPSETTING( 0x0100, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Ultra Toukon Densetsu +***************************************************************************/ + +static INPUT_PORTS_START( utoukond ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_3BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + /* These are NOT Dip Switches but jumpers */ + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START_TAG("IN3") //2 DSWs + PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0050, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0x0070, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0x00d0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x00b0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0090, DEF_STR( 1C_7C ) ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0200, "2" ) + PORT_DIPSETTING( 0x0300, "3" ) + PORT_DIPSETTING( 0x0100, "4" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x4000, "100k" ) + PORT_DIPSETTING( 0x0000, "150k" ) + PORT_SERVICE( 0x8000, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +/*************************************************************************** + U.S. Classic +***************************************************************************/ + +#define TRACKBALL(_dir_) \ + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_##_dir_ ) PORT_SENSITIVITY(70) PORT_KEYDELTA(30) PORT_RESET + +static INPUT_PORTS_START( usclssic ) + PORT_START_TAG("IN0") + TRACKBALL(X) + PORT_BIT ( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT ( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT ( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT ( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") + TRACKBALL(Y) + PORT_BIT ( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT ( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT ( 0x4000, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT ( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) // tested (sound related?) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SERVICE1 ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_TILT ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, "Credits For 9-Hole" ) + PORT_DIPSETTING( 0x0001, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPNAME( 0x0002, 0x0002, "Game Type" ) + PORT_DIPSETTING( 0x0002, "Domestic" ) + PORT_DIPSETTING( 0x0000, "Foreign" ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0004, "1" ) + PORT_DIPSETTING( 0x0008, "2" ) + PORT_DIPSETTING( 0x000c, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x3800, 0x3800, "Flight Distance" ) + PORT_DIPSETTING( 0x3800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x3000, "-30 Yards" ) + PORT_DIPSETTING( 0x2800, "+10 Yards" ) + PORT_DIPSETTING( 0x2000, "+20 Yards" ) + PORT_DIPSETTING( 0x1800, "+30 Yards" ) + PORT_DIPSETTING( 0x1000, "+40 Yards" ) + PORT_DIPSETTING( 0x0800, "+50 Yards" ) + PORT_DIPSETTING( 0x0000, "+60 Yards" ) + PORT_DIPNAME( 0xc000, 0xc000, "Licensed To" ) + PORT_DIPSETTING( 0xc000, "Romstar" ) + PORT_DIPSETTING( 0x8000, "None (Japan)" ) + PORT_DIPSETTING( 0x4000, "Taito" ) + PORT_DIPSETTING( 0x0000, "Taito America" ) +INPUT_PORTS_END + + + +/*************************************************************************** + War of Aero +***************************************************************************/ + +static INPUT_PORTS_START( wrofaero ) + PORT_START_TAG("IN0") //Player 1 - $400000.w + JOY_TYPE1_3BUTTONS(1) // 3rd button selects the weapon + // when the dsw for cheating is on + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_3BUTTONS(2) + + PORT_START_TAG("IN2") //Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, "Unknown 1-2*" ) // tested + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Stage & Weapon Select (Cheat)") // P2 Start Is Freeze Screen... + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) /* Manual states dips 3-7 are "Unused" */ + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "2" ) + PORT_DIPSETTING( 0x0300, "3" ) + PORT_DIPSETTING( 0x0100, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Wit's +***************************************************************************/ + +static INPUT_PORTS_START( wits ) + PORT_START_TAG("IN0") //Player 1 + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + DSW + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_DIPNAME( 0x0010, 0x0010, "Unknown 3-4*" ) // Jumpers, I guess + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, "Unknown 3-5*" ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00c0, 0x0040, "License" ) + PORT_DIPSETTING( 0x00c0, "Romstar" ) + PORT_DIPSETTING( 0x0080, "Seta U.S.A" ) + PORT_DIPSETTING( 0x0040, "Visco (Japan Only)" ) + PORT_DIPSETTING( 0x0000, "Athena (Japan Only)" ) + + PORT_START_TAG("IN3") //2 DSWs - $600003 & 1.b + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x0008, "150k, 350k" ) + PORT_DIPSETTING( 0x000c, "200k, 500k" ) + PORT_DIPSETTING( 0x0004, "300k, 600k" ) + PORT_DIPSETTING( 0x0000, "400k" ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0010, "2" ) + PORT_DIPSETTING( 0x0030, "3" ) + PORT_DIPSETTING( 0x0020, "5" ) + PORT_DIPNAME( 0x0040, 0x0040, "Play Mode" ) + PORT_DIPSETTING( 0x0040, "2 Players" ) + PORT_DIPSETTING( 0x0000, "4 Players" ) + PORT_DIPNAME( 0x0080, 0x0080, "CPU Player During Multi-Player Game" ) + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Yes ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0400, "Every 3rd Loop" ) + PORT_DIPSETTING( 0x0000, "Every 7th Loop" ) + PORT_SERVICE( 0x0800, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) + + PORT_START_TAG("IN4") //Player 3 + JOY_TYPE1_2BUTTONS(3) + + PORT_START_TAG("IN5") //Player 4 + JOY_TYPE1_2BUTTONS(4) +INPUT_PORTS_END + + +/*************************************************************************** + Zing Zing Zip +***************************************************************************/ + +static INPUT_PORTS_START( zingzip ) + PORT_START_TAG("IN0") //Player 1 - $400000.w + JOY_TYPE1_2BUTTONS(1) + + PORT_START_TAG("IN1") //Player 2 - $400002.w + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins - $400004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no coin 2 + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") //2 DSWs - $600001 & 3.b + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0200, "2" ) + PORT_DIPSETTING( 0x0300, "3" ) + PORT_DIPSETTING( 0x0100, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) +INPUT_PORTS_END + +/************************************* + Pairs Love +*************************************/ + +static INPUT_PORTS_START( pairlove ) + PORT_START_TAG("IN0") //Player 1 - $500001.b + JOY_TYPE1_2BUTTONS(1) // button2 = speed up + + PORT_START_TAG("IN1") //Player 2 - $500003.b + JOY_TYPE1_2BUTTONS(2) + + PORT_START_TAG("IN2") //Coins + DSW - $500005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) + + PORT_START_TAG("DSW") // 2 DIP switches + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0xb000, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xd000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 8C_3C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 5C_3C ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x9000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x7000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x5000, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Crazy Fight +***************************************************************************/ + +static INPUT_PORTS_START( crazyfgt ) + PORT_START_TAG("IN0") //Coins - $610000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) // protection + + PORT_START_TAG("IN1") //? - $610002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") //Player - $610004.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("top-center") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("bottom-center") PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("top-left") PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("bottom-left") PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("top-right") PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("bottom-right") PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE1 ) // ticket + + PORT_START_TAG("IN3") //2 DSWs - $630001 & 3.b + PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x00c0, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00c0, "5" ) + PORT_DIPSETTING( 0x0080, "10" ) + PORT_DIPSETTING( 0x0040, "15" ) + PORT_DIPSETTING( 0x0000, "20" ) + + PORT_SERVICE( 0x0100, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, "Difficulty?" ) + PORT_DIPSETTING( 0x0c00, "0" ) + PORT_DIPSETTING( 0x0800, "1" ) + PORT_DIPSETTING( 0x0400, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPNAME( 0x3000, 0x3000, "Energy" ) + PORT_DIPSETTING( 0x1000, "24" ) + PORT_DIPSETTING( 0x2000, "32" ) + PORT_DIPSETTING( 0x3000, "48" ) + PORT_DIPSETTING( 0x0000, "100" ) + PORT_DIPNAME( 0xc000, 0xc000, "Bonus?" ) + PORT_DIPSETTING( 0xc000, "0" ) + PORT_DIPSETTING( 0x8000, "1" ) + PORT_DIPSETTING( 0x4000, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) +INPUT_PORTS_END + + +/*************************************************************************** + + + Graphics Layouts + +Sprites and layers use 16x16 tile, made of four 8x8 tiles. They can be 4 +or 6 planes deep and are stored in a wealth of formats. + +***************************************************************************/ + + /* First the 4 bit tiles */ + + +/* The bitplanes are packed togheter */ +static const gfx_layout layout_packed = +{ + 16,16, + RGN_FRAC(1,1), + 4, + {2*4,3*4,0*4,1*4}, + {256+128,256+129,256+130,256+131, 256+0,256+1,256+2,256+3, + 128,129,130,131, 0,1,2,3}, + {0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16, + 32*16,33*16,34*16,35*16,36*16,37*16,38*16,39*16}, + 16*16*4 +}; + + +/* The bitplanes are separated */ +static const gfx_layout layout_planes = +{ + 16,16, + RGN_FRAC(1,4), + 4, + { RGN_FRAC(0,4),RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) }, + { STEP8(0,1), STEP8(8*8,1) }, + { STEP8(0,8), STEP8(8*8*2,8) }, + 16*16 +}; + + +/* The bitplanes are separated (but there are 2 per rom) */ +static const gfx_layout layout_planes_2roms = +{ + 16,16, + RGN_FRAC(1,2), + 4, + {RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0}, + {0,1,2,3,4,5,6,7, 128,129,130,131,132,133,134,135}, + {0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16, + 16*16,17*16,18*16,19*16,20*16,21*16,22*16,23*16 }, + 16*16*2 +}; + + +/* The bitplanes are separated (but there are 2 per rom). + Each 8x8 tile is additionally split in 2 vertical halves four bits wide, + stored one after the other */ +static const gfx_layout layout_planes_2roms_split = +{ + 16,16, + RGN_FRAC(1,2), + 4, + {0,4, RGN_FRAC(1,2)+0,RGN_FRAC(1,2)+4}, + {128+64,128+65,128+66,128+67, 128+0,128+1,128+2,128+3, + 8*8+0,8*8+1,8*8+2,8*8+3, 0,1,2,3}, + {0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8, + 32*8,33*8,34*8,35*8,36*8,37*8,38*8,39*8}, + 16*16*2 +}; + + + + + /* Then the 6 bit tiles */ + + +/* The bitplanes are packed together: 3 roms with 2 bits in each */ +static const gfx_layout layout_packed_6bits_3roms = +{ + 16,16, + RGN_FRAC(1,3), + 6, + {RGN_FRAC(0,3)+0,RGN_FRAC(0,3)+4, RGN_FRAC(1,3)+0,RGN_FRAC(1,3)+4, RGN_FRAC(2,3)+0,RGN_FRAC(2,3)+4}, + {128+64,128+65,128+66,128+67, 128+0,128+1,128+2,128+3, + 64,65,66,67, 0,1,2,3}, + {0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8, + 32*8,33*8,34*8,35*8,36*8,37*8,38*8,39*8}, + 16*16*2 +}; + + +/* The bitplanes are packed togheter: 4 bits in one rom, 2 bits in another. + Since there isn't simmetry between the two roms, we load the latter with + ROM_LOAD16_BYTE. This way we can think of it as a 4 planes rom, with the + upper 2 planes unused. */ + +static const gfx_layout layout_packed_6bits_2roms = +{ + 16,16, + RGN_FRAC(1,2), + 6, + {RGN_FRAC(1,2)+0*4, RGN_FRAC(1,2)+1*4, 2*4,3*4,0*4,1*4}, + {256+128,256+129,256+130,256+131, 256+0,256+1,256+2,256+3, + 128,129,130,131, 0,1,2,3}, + {0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16, + 32*16,33*16,34*16,35*16,36*16,37*16,38*16,39*16}, + 16*16*4 +}; + + + +/*************************************************************************** + Blandia +***************************************************************************/ + +static GFXDECODE_START( blandia ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed_6bits_3roms, 16*32+64*32, 32 ) // [1] Layer 1 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_packed_6bits_3roms, 16*32, 32 ) // [2] Layer 2 +GFXDECODE_END + +/*************************************************************************** + DownTown +***************************************************************************/ + +static GFXDECODE_START( downtown ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 512*0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_planes_2roms_split, 512*0, 32 ) // [1] Layer 1 +GFXDECODE_END + +/*************************************************************************** + J.J.Squawkers +***************************************************************************/ + +static GFXDECODE_START( jjsquawk ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed_6bits_2roms, 512 + 64*32*0, 32 ) // [1] Layer 1 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_packed_6bits_2roms, 512 + 64*32*1, 32 ) // [2] Layer 2 +GFXDECODE_END + +/*************************************************************************** + Mobile Suit Gundam +***************************************************************************/ + +static GFXDECODE_START( msgundam ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 512*0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed, 512*2, 32 ) // [1] Layer 1 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_packed, 512*1, 32 ) // [2] Layer 2 +GFXDECODE_END + +/*************************************************************************** + Quiz Kokology 2 +***************************************************************************/ + +static GFXDECODE_START( qzkklgy2 ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 512*0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed, 512*0, 32 ) // [1] Layer 1 +GFXDECODE_END + +/*************************************************************************** + Thundercade +***************************************************************************/ + +static GFXDECODE_START( tndrcade ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 512*0, 32 ) // [0] Sprites +GFXDECODE_END + +/*************************************************************************** + Wiggie Waggle +****************************************************************************/ + +static const gfx_layout wiggie_layout = +{ + 16,16, + RGN_FRAC(1,4), + 4, + { RGN_FRAC(0,4),RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) }, + { 0,1,2,3,4,5,6,7, + 64,65,66,67,68,69,70,71 }, + { 0*8, 16*8, 4*8, 20*8, + 2*8, 18*8, 6*8, 22*8, + 1*8, 17*8, 5*8, 21*8, + 3*8, 19*8, 7*8, 23*8 }, + 16*16 +}; + + +static GFXDECODE_START( wiggie ) + GFXDECODE_ENTRY( REGION_GFX1, 0, wiggie_layout, 0x0, 32 ) /* bg tiles */ +GFXDECODE_END + + +/*************************************************************************** + U.S. Classic +***************************************************************************/ + +static GFXDECODE_START( usclssic ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed_6bits_3roms, 512, 32 ) // [1] Layer 1 +GFXDECODE_END + + +/*************************************************************************** + Zing Zing Zip +***************************************************************************/ + +static GFXDECODE_START( zingzip ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes_2roms, 512*0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed_6bits_2roms, 512*2, 32 ) // [1] Layer 1 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_packed, 512*1, 32 ) // [2] Layer 2 +GFXDECODE_END + + +/*************************************************************************** + Crazy Fight +***************************************************************************/ + +static GFXDECODE_START( crazyfgt ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_planes, 0, 32 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_packed_6bits_3roms, 16*32+64*32, 32 ) // [1] Layer 1 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_packed_6bits_3roms, 16*32, 32 ) // [2] Layer 2 +GFXDECODE_END + + + +/*************************************************************************** + + Machine drivers + +***************************************************************************/ + +#define SETA_INTERRUPTS_NUM 2 + +static INTERRUPT_GEN( seta_interrupt_1_and_2 ) +{ + switch (cpu_getiloops()) + { + case 0: cpunum_set_input_line(0, 1, HOLD_LINE); break; + case 1: cpunum_set_input_line(0, 2, HOLD_LINE); break; + } +} + +static INTERRUPT_GEN( seta_interrupt_2_and_4 ) +{ + switch (cpu_getiloops()) + { + case 0: cpunum_set_input_line(0, 2, HOLD_LINE); break; + case 1: cpunum_set_input_line(0, 4, HOLD_LINE); break; + } +} + + +#define SETA_SUB_INTERRUPTS_NUM 2 + +static INTERRUPT_GEN( seta_sub_interrupt ) +{ + switch (cpu_getiloops()) + { + case 0: cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); break; + case 1: cpunum_set_input_line(1, 0, HOLD_LINE); break; + } +} + + +/*************************************************************************** + Thundercade +***************************************************************************/ + +static struct YM2203interface tndrcade_ym2203_interface = +{ + dsw1_r, /* input A: DSW 1 */ + dsw2_r /* input B: DSW 2 */ +}; + + +#define TNDRCADE_SUB_INTERRUPTS_NUM 32 /* 16 IRQ, 1 NMI */ +static INTERRUPT_GEN( tndrcade_sub_interrupt ) +{ + if (cpu_getiloops() & 1) + cpunum_set_input_line(1, 0, HOLD_LINE); + else if (cpu_getiloops() == 0) + cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); +} + +static MACHINE_DRIVER_START( tndrcade ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000/2) + MDRV_CPU_PROGRAM_MAP(tndrcade_readmem,tndrcade_writemem) + MDRV_CPU_VBLANK_INT(irq2_line_hold,1) + + MDRV_CPU_ADD(M65C02, 2000000) /* ?? */ + MDRV_CPU_PROGRAM_MAP(tndrcade_sub_readmem,tndrcade_sub_writemem) + MDRV_CPU_VBLANK_INT(tndrcade_sub_interrupt,TNDRCADE_SUB_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YM2203, 2000000) + MDRV_SOUND_CONFIG(tndrcade_ym2203_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.35) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.35) + + MDRV_SOUND_ADD(YM3812, 4000000) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + Twin Eagle +***************************************************************************/ + +/* Just like metafox, but: + the sub cpu reads the ip at different locations, + the visible area seems different. */ + +/* twineagl lev 3 = lev 2 + lev 1 ! */ + +static MACHINE_DRIVER_START( twineagl ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000/2) + MDRV_CPU_PROGRAM_MAP(downtown_readmem,downtown_writemem) + MDRV_CPU_VBLANK_INT(irq3_line_hold,1) + + MDRV_CPU_ADD(M65C02, 1000000) /* ?? */ + MDRV_CPU_PROGRAM_MAP(twineagl_sub_readmem,twineagl_sub_writemem) + MDRV_CPU_VBLANK_INT(seta_sub_interrupt,SETA_SUB_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(downtown) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(twineagl_1_layer) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + DownTown +***************************************************************************/ + +/* downtown lev 3 = lev 2 + lev 1 ! */ + +static MACHINE_DRIVER_START( downtown ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000/2) + MDRV_CPU_PROGRAM_MAP(downtown_readmem,downtown_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_CPU_ADD(M65C02, 1000000) /* ?? */ + MDRV_CPU_PROGRAM_MAP(downtown_sub_readmem,downtown_sub_writemem) + MDRV_CPU_VBLANK_INT(seta_sub_interrupt,SETA_SUB_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(downtown) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(seta_1_layer) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 8000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + U.S. Classic +***************************************************************************/ + + +/* usclssic lev 6 = lev 2+4 ! + Test mode shows a 16ms and 4ms counters. I wonder if every game has + 5 ints per frame +*/ + +#define calibr50_INTERRUPTS_NUM (4+1) +static INTERRUPT_GEN( calibr50_interrupt ) +{ + switch (cpu_getiloops()) + { + case 0: + case 1: + case 2: + case 3: cpunum_set_input_line(0, 4, HOLD_LINE); break; + case 4: cpunum_set_input_line(0, 2, HOLD_LINE); break; + } +} + + +static MACHINE_DRIVER_START( usclssic ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000/2) + MDRV_CPU_PROGRAM_MAP(usclssic_readmem,usclssic_writemem) + MDRV_CPU_VBLANK_INT(calibr50_interrupt,calibr50_INTERRUPTS_NUM) + + MDRV_CPU_ADD(M65C02, 1000000) /* ?? */ + MDRV_CPU_PROGRAM_MAP(calibr50_sub_readmem,calibr50_sub_writemem) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) /* NMI caused by main cpu when writing to the sound latch */ + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(usclssic) + MDRV_PALETTE_LENGTH(16*32+0x200) + MDRV_COLORTABLE_LENGTH(16*32 + 64*32) /* sprites, layer */ + + MDRV_PALETTE_INIT(usclssic) /* layer is 6 planes deep */ + MDRV_VIDEO_START(seta_1_layer) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf2) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Caliber 50 +***************************************************************************/ + +/* calibr50 lev 6 = lev 2 + lev 4 ! + lev 3 = lev 2 + lev 1 ! + Test mode shows a 16ms and 4ms counters. I wonder if every game has + 5 ints per frame */ + +static MACHINE_DRIVER_START( calibr50 ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000/2) + MDRV_CPU_PROGRAM_MAP(calibr50_readmem,calibr50_writemem) + MDRV_CPU_VBLANK_INT(calibr50_interrupt,calibr50_INTERRUPTS_NUM) + + MDRV_CPU_ADD(M65C02, 2000000) /* ?? */ + MDRV_CPU_PROGRAM_MAP(calibr50_sub_readmem,calibr50_sub_writemem) + MDRV_CPU_VBLANK_INT(irq0_line_hold,4) /* IRQ: 4/frame + NMI: when the 68k writes the sound latch */ + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(downtown) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(seta_1_layer) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf2) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Meta Fox +***************************************************************************/ + +/* metafox lev 3 = lev 2 + lev 1 ! */ + +static MACHINE_DRIVER_START( metafox ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000/2) + MDRV_CPU_PROGRAM_MAP(downtown_readmem,downtown_writemem) + MDRV_CPU_VBLANK_INT(irq3_line_hold,1) + + MDRV_CPU_ADD(M65C02, 1000000) /* ?? */ + MDRV_CPU_PROGRAM_MAP(metafox_sub_readmem,metafox_sub_writemem) + MDRV_CPU_VBLANK_INT(seta_sub_interrupt,SETA_SUB_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(downtown) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(seta_1_layer) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + + + + +/*************************************************************************** + Athena no Hatena? +***************************************************************************/ + +static MACHINE_DRIVER_START( atehate ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(atehate_readmem,atehate_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Blandia +***************************************************************************/ + +/* + Similar to wrofaero, but the layers are 6 planes deep (and + the pens are strangely mapped to palette entries) + the + samples are bankswitched +*/ + +static MACHINE_DRIVER_START( blandia ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(blandia_readmem,blandia_writemem) + + MDRV_CPU_VBLANK_INT(seta_interrupt_2_and_4,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(blandia) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+64*32+64*32) /* sprites, layer1, layer2 */ + + MDRV_PALETTE_INIT(blandia) /* layers 1&2 are 6 planes deep */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_EOF(seta_buffer_sprites) /* Blandia uses sprite buffering */ + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( blandiap ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(blandiap_readmem,blandiap_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_2_and_4,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(blandia) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+64*32+64*32) /* sprites, layer1, layer2 */ + + MDRV_PALETTE_INIT(blandia) /* layers 1&2 are 6 planes deep */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_EOF(seta_buffer_sprites) /* Blandia uses sprite buffering */ + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Block Carnival +***************************************************************************/ + +static MACHINE_DRIVER_START( blockcar ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) + MDRV_CPU_PROGRAM_MAP(blockcar_readmem,blockcar_writemem) + MDRV_CPU_VBLANK_INT(irq3_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Daioh +***************************************************************************/ + +static MACHINE_DRIVER_START( daioh ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(daioh_readmem,daioh_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer1, layer2 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/*************************************************************************** + Dragon Unit, Quiz Kokology, Strike Gunner +***************************************************************************/ + +/* + drgnunit,qzkklogy,stg: + lev 1 == lev 3 (writes to $500000, bit 4 -> 1 then 0) + lev 2 drives the game +*/ + +static MACHINE_DRIVER_START( drgnunit ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) + MDRV_CPU_PROGRAM_MAP(drgnunit_readmem,drgnunit_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(downtown) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(seta_1_layer) + MDRV_VIDEO_EOF(seta_buffer_sprites) /* qzkklogy uses sprite buffering */ + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/* Same as qzkklogy, but with a 16MHz CPU and different + layout for the layer's tiles */ + +static MACHINE_DRIVER_START( qzkklgy2 ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(drgnunit_readmem,drgnunit_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(qzkklgy2) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(seta_1_layer) + MDRV_VIDEO_EOF(seta_buffer_sprites) /* qzkklogy uses sprite buffering */ + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Eight Force +***************************************************************************/ + +static MACHINE_DRIVER_START( eightfrc ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(wrofaero_readmem,wrofaero_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer1, layer2 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Extreme Downhill / Sokonuke +***************************************************************************/ + +/* + extdwnhl: + lev 1 == lev 3 (writes to $500000, bit 4 -> 1 then 0) + lev 2 drives the game +*/ +static MACHINE_DRIVER_START( extdwnhl ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(extdwnhl_readmem,extdwnhl_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(zingzip) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+16*32+64*32) /* sprites, layer2, layer1 */ + + MDRV_PALETTE_INIT(zingzip) /* layer 1 gfx is 6 planes deep */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Gundhara +***************************************************************************/ +#if __uPD71054_TIMER +static INTERRUPT_GEN( wrofaero_interrupt ) +{ + cpunum_set_input_line( 0, 2, HOLD_LINE ); +} + +static MACHINE_RESET( wrofaero ) { uPD71054_timer_init(); } +#endif // __uPD71054_TIMER + + + +/* + lev 1: sample end? (needed in zombraid otherwise music stops) + gundhara's debug code calls it "BUT_IPL" and does nothing + lev 2: VBlank + lev 4: Sound (generated by a timer mapped at $d00000-6 ?) +*/ +static MACHINE_DRIVER_START( gundhara ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(wrofaero_readmem,wrofaero_writemem) +#if __uPD71054_TIMER +// MDRV_CPU_VBLANK_INT( wrofaero_interrupt, 1 ) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) +#else + MDRV_CPU_VBLANK_INT(seta_interrupt_2_and_4,SETA_INTERRUPTS_NUM) +#endif // __uPD71054_TIMER + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + +#if __uPD71054_TIMER + MDRV_MACHINE_RESET( wrofaero ) +#endif // __uPD71054_TIMER + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(jjsquawk) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+64*32+64*32) /* sprites, layer2, layer1 */ + + MDRV_PALETTE_INIT(gundhara) /* layers are 6 planes deep (but have only 4 palettes) */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + J.J.Squawkers +***************************************************************************/ + +/* + lev 1 == lev 3 (writes to $500000, bit 4 -> 1 then 0) + lev 2 drives the game +*/ +static MACHINE_DRIVER_START( jjsquawk ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(wrofaero_readmem,wrofaero_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(jjsquawk) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+64*32+64*32) /* sprites, layer2, layer1 */ + + MDRV_PALETTE_INIT(jjsquawk) /* layers are 6 planes deep */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/*************************************************************************** + (Kamen) Masked Riders Club Battle Race +***************************************************************************/ + +/* kamenrid: lev 2 by vblank, lev 4 by timer */ +static MACHINE_DRIVER_START( kamenrid ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(kamenrid_readmem,kamenrid_writemem) + MDRV_CPU_VBLANK_INT( wrofaero_interrupt, 1 ) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + +#if __uPD71054_TIMER + MDRV_MACHINE_RESET( wrofaero ) +#endif // __uPD71054_TIMER + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer2, layer1 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Krazy Bowl +***************************************************************************/ + +static MACHINE_DRIVER_START( krzybowl ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(krzybowl_readmem,krzybowl_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(1*8, 39*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Mad Shark +***************************************************************************/ + +/* madshark: lev 2 by vblank, lev 4 by timer */ +static MACHINE_DRIVER_START( madshark ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(madshark_readmem,madshark_writemem) + MDRV_CPU_VBLANK_INT( wrofaero_interrupt, 1 ) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + +#if __uPD71054_TIMER + MDRV_MACHINE_RESET( wrofaero ) +#endif // __uPD71054_TIMER + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1) + + MDRV_GFXDECODE(jjsquawk) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+64*32+64*32) /* sprites, layer2, layer1 */ + + MDRV_PALETTE_INIT(jjsquawk) /* layers are 6 planes deep */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/*************************************************************************** + Mobile Suit Gundam +***************************************************************************/ + +/* msgundam lev 2 == lev 6 ! */ + +static MACHINE_DRIVER_START( msgundam ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(msgundam_readmem,msgundam_writemem) +#if __uPD71054_TIMER + MDRV_CPU_VBLANK_INT( wrofaero_interrupt, 1 ) +#else + MDRV_CPU_VBLANK_INT(seta_interrupt_2_and_4,SETA_INTERRUPTS_NUM) +#endif // __uPD71054_TIMER + + MDRV_SCREEN_REFRESH_RATE(56.66) /* between 56 and 57 to match a real PCB's game speed */ + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + +#if __uPD71054_TIMER + MDRV_MACHINE_RESET( wrofaero ) +#endif // __uPD71054_TIMER + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer2, layer1 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_EOF(seta_buffer_sprites) /* msgundam uses sprite buffering */ + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + Oishii Puzzle +***************************************************************************/ + +static MACHINE_DRIVER_START( oisipuzl ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(oisipuzl_readmem,oisipuzl_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer2, layer1 */ + + MDRV_VIDEO_START(oisipuzl_2_layers) // flip is inverted for the tilemaps + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/*************************************************************************** + Triple Fun +***************************************************************************/ + +/* same as oisipuzl but with different interrupts and sound */ + +static MACHINE_DRIVER_START( triplfun ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(triplfun_readmem,triplfun_writemem) + MDRV_CPU_VBLANK_INT(irq3_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer2, layer1 */ + + MDRV_VIDEO_START(oisipuzl_2_layers) // flip is inverted for the tilemaps + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(OKIM6295, 792000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0) +MACHINE_DRIVER_END + +/*************************************************************************** + Pro Mahjong Kiwame +***************************************************************************/ + +static MACHINE_DRIVER_START( kiwame ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(kiwame_readmem,kiwame_writemem) + MDRV_CPU_VBLANK_INT(irq1_line_hold,1)/* lev 1-7 are the same. WARNING: + the interrupt table is written to. */ + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 56*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + Rezon +***************************************************************************/ + +/* pretty much like wrofaero, but ints are 1&2, not 2&4 */ + +static MACHINE_DRIVER_START( rezon ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(wrofaero_readmem,wrofaero_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer1, layer2 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + Thunder & Lightning / Wit's +***************************************************************************/ + +/* thunderl lev 2 = lev 3 - other levels lead to an error */ + +static MACHINE_DRIVER_START( thunderl ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) + MDRV_CPU_PROGRAM_MAP(thunderl_readmem,thunderl_writemem) + MDRV_CPU_VBLANK_INT(irq2_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( wiggie ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) + MDRV_CPU_PROGRAM_MAP(thunderl_readmem,thunderl_writemem) + MDRV_CPU_VBLANK_INT(irq2_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(wiggie_sound_readmem,wiggie_sound_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(wiggie) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 1000000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( wits ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) + MDRV_CPU_PROGRAM_MAP(thunderl_readmem,thunderl_writemem) + MDRV_CPU_VBLANK_INT(irq2_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + Ultraman Club / SD Gundam Neo Battling +***************************************************************************/ + +static MACHINE_DRIVER_START( umanclub ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(umanclub_readmem,umanclub_writemem) + MDRV_CPU_VBLANK_INT(irq3_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(512) + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Ultra Toukond Densetsu +***************************************************************************/ + +static MACHINE_DRIVER_START( utoukond ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(utoukond_readmem,utoukond_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_CPU_ADD(Z80, 4000000) + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(utoukond_sound_readmem,utoukond_sound_writemem) + MDRV_CPU_IO_MAP(utoukond_sound_readport,utoukond_sound_writeport) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8, 30*8-1) + + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer2, layer1 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) + + MDRV_SOUND_ADD(YM3438, 6000000) + MDRV_SOUND_CONFIG(utoukond_ym3438_intf) + MDRV_SOUND_ROUTE(0, "left", 0.30) + MDRV_SOUND_ROUTE(1, "right", 0.30) +MACHINE_DRIVER_END + + +/*************************************************************************** + War of Aero +***************************************************************************/ + +static MACHINE_DRIVER_START( wrofaero ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(wrofaero_readmem,wrofaero_writemem) +#if __uPD71054_TIMER + MDRV_CPU_VBLANK_INT( wrofaero_interrupt, 1 ) +#else + MDRV_CPU_VBLANK_INT(seta_interrupt_2_and_4,SETA_INTERRUPTS_NUM) +#endif // __uPD71054_TIMER + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + +#if __uPD71054_TIMER + MDRV_MACHINE_RESET( wrofaero ) +#endif // __uPD71054_TIMER + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(msgundam) + MDRV_PALETTE_LENGTH(512 * 3) /* sprites, layer1, layer2 */ + + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + + + +/*************************************************************************** + Zing Zing Zip +***************************************************************************/ + +/* zingzip lev 3 = lev 2 + lev 1 ! + SR = 2100 -> lev1 is ignored so we must supply int 3, since the routine + at int 1 is necessary: it plays the background music. +*/ + +static MACHINE_DRIVER_START( zingzip ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(wrofaero_readmem,wrofaero_writemem) + MDRV_CPU_VBLANK_INT(irq3_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(zingzip) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+16*32+64*32) /* sprites, layer2, layer1 */ + + MDRV_PALETTE_INIT(zingzip) /* layer 1 gfx is 6 planes deep */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/*************************************************************************** + Pairs Love +***************************************************************************/ + +static MACHINE_DRIVER_START( pairlove ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) + MDRV_CPU_PROGRAM_MAP(pairlove_readmem,pairlove_writemem) + MDRV_CPU_VBLANK_INT(seta_interrupt_1_and_2,SETA_INTERRUPTS_NUM) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tndrcade) + MDRV_PALETTE_LENGTH(2048) /* sprites only */ + + MDRV_VIDEO_START(seta_no_layers) + MDRV_VIDEO_UPDATE(seta_no_layers) /* just draw the sprites */ + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(X1_010, 16000000) + MDRV_SOUND_CONFIG(seta_sound_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + Crazy Fight +***************************************************************************/ + +static INTERRUPT_GEN( crazyfgt_interrupt ) +{ + switch (cpu_getiloops()) + { + case 0: cpunum_set_input_line(0, 1, HOLD_LINE); break; + default: cpunum_set_input_line(0, 2, HOLD_LINE); break; // should this be triggered by the 3812? + } +} + +static MACHINE_DRIVER_START( crazyfgt ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(crazyfgt_map,0) + MDRV_CPU_VBLANK_INT(crazyfgt_interrupt,1+5) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 2*8-4, 30*8-1-4) + MDRV_GFXDECODE(crazyfgt) + MDRV_PALETTE_LENGTH(16*32+16*32+16*32) + MDRV_COLORTABLE_LENGTH(16*32+64*32+64*32) /* sprites, layer1, layer2 */ + + MDRV_PALETTE_INIT(gundhara) /* layers are 6 planes deep (but have only 4 palettes) */ + MDRV_VIDEO_START(seta_2_layers) + MDRV_VIDEO_UPDATE(seta) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM3812, 4000000) // clock? + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_ADD(OKIM6295, 1000000) // clock? + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + + ROMs Loading + +***************************************************************************/ + +ROM_START( tndrcade ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ua0-4.1l", 0x000000, 0x020000, CRC(73bd63eb) SHA1(5d410d2a77f1c3c4c37a9fe1e56019335891fe67) ) + ROM_LOAD16_BYTE( "ua0-2.1h", 0x000001, 0x020000, CRC(e96194b1) SHA1(c5084d06a2e4f7ba3112be1ccc314f7d712bb45e) ) + ROM_LOAD16_BYTE( "ua0-3.1k", 0x040000, 0x020000, CRC(0a7b1c41) SHA1(ede14ac08d7e63972c21fd2d0717276e73153f18) ) + ROM_LOAD16_BYTE( "ua0-1.1g", 0x040001, 0x020000, CRC(fa906626) SHA1(a1d28328afa8dda98dd20f3f5a19c0dbf2ebaf36) ) + + ROM_REGION( 0x02c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "ua10-5.8m", 0x004000, 0x020000, CRC(8eff6122) SHA1(1adc1643018e612df85643014b78525106478889) ) // $1fffd=2 (country code) + ROM_RELOAD( 0x00c000, 0x020000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "ua0-10", 0x000000, 0x040000, CRC(aa7b6757) SHA1(9157cc930760c846cce95e18bf38e7ea241f7a8e) ) + ROM_LOAD( "ua0-11", 0x040000, 0x040000, CRC(11eaf931) SHA1(ba1dfc4b0f87b1bbdc6c2e36deaecda2b4655d57) ) + ROM_LOAD( "ua0-12", 0x080000, 0x040000, CRC(00b5381c) SHA1(6fc3138dd0e2b3f99872b1f0d177094df5bed39d) ) + ROM_LOAD( "ua0-13", 0x0c0000, 0x040000, CRC(8f9a0ed3) SHA1(61315312fdb2fe090cd8e99a1ce3ecba46b466e9) ) + ROM_LOAD( "ua0-6", 0x100000, 0x040000, CRC(14ecc7bb) SHA1(920983f5086462f8f06dc9cf7bebffeeb7187977) ) + ROM_LOAD( "ua0-7", 0x140000, 0x040000, CRC(ff1a4e68) SHA1(d732df7d139995814969a603c9c4e9f8b068b1a3) ) + ROM_LOAD( "ua0-8", 0x180000, 0x040000, CRC(936e1884) SHA1(9ad495b88e124d08a7141611ed1897b6e2abd412) ) + ROM_LOAD( "ua0-9", 0x1c0000, 0x040000, CRC(e812371c) SHA1(b0e1e0c143da743bf9f7b48d657594e76f4970ed) ) +ROM_END + +ROM_START( tndrcadj ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ua0-4.1l", 0x000000, 0x020000, CRC(73bd63eb) SHA1(5d410d2a77f1c3c4c37a9fe1e56019335891fe67) ) + ROM_LOAD16_BYTE( "ua0-2.1h", 0x000001, 0x020000, CRC(e96194b1) SHA1(c5084d06a2e4f7ba3112be1ccc314f7d712bb45e) ) + ROM_LOAD16_BYTE( "ua0-3.1k", 0x040000, 0x020000, CRC(0a7b1c41) SHA1(ede14ac08d7e63972c21fd2d0717276e73153f18) ) + ROM_LOAD16_BYTE( "ua0-1.1g", 0x040001, 0x020000, CRC(fa906626) SHA1(a1d28328afa8dda98dd20f3f5a19c0dbf2ebaf36) ) + + ROM_REGION( 0x02c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "thcade5.bin", 0x004000, 0x020000, CRC(8cb9df7b) SHA1(5b504657f4cc1ea265913ff670aed108ceddba46) ) // $1fffd=1 (country code jp) + ROM_RELOAD( 0x00c000, 0x020000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "ua0-10", 0x000000, 0x040000, CRC(aa7b6757) SHA1(9157cc930760c846cce95e18bf38e7ea241f7a8e) ) + ROM_LOAD( "ua0-11", 0x040000, 0x040000, CRC(11eaf931) SHA1(ba1dfc4b0f87b1bbdc6c2e36deaecda2b4655d57) ) + ROM_LOAD( "ua0-12", 0x080000, 0x040000, CRC(00b5381c) SHA1(6fc3138dd0e2b3f99872b1f0d177094df5bed39d) ) + ROM_LOAD( "ua0-13", 0x0c0000, 0x040000, CRC(8f9a0ed3) SHA1(61315312fdb2fe090cd8e99a1ce3ecba46b466e9) ) + ROM_LOAD( "ua0-6", 0x100000, 0x040000, CRC(14ecc7bb) SHA1(920983f5086462f8f06dc9cf7bebffeeb7187977) ) + ROM_LOAD( "ua0-7", 0x140000, 0x040000, CRC(ff1a4e68) SHA1(d732df7d139995814969a603c9c4e9f8b068b1a3) ) + ROM_LOAD( "ua0-8", 0x180000, 0x040000, CRC(936e1884) SHA1(9ad495b88e124d08a7141611ed1897b6e2abd412) ) + ROM_LOAD( "ua0-9", 0x1c0000, 0x040000, CRC(e812371c) SHA1(b0e1e0c143da743bf9f7b48d657594e76f4970ed) ) +ROM_END + +ROM_START( twineagl ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_WORD( "ua2-1", 0x000000, 0x080000, CRC(5c3fe531) SHA1(e484dad25cda906fb1b0606fb10ae50056c64e6a) ) + + ROM_REGION( 0x010000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "ua2-2", 0x006000, 0x002000, CRC(783ca84e) SHA1(21e19f74812de50e98b755dd1f68c187dd1e7e81) ) + ROM_RELOAD( 0x008000, 0x002000 ) + ROM_RELOAD( 0x00a000, 0x002000 ) + ROM_RELOAD( 0x00c000, 0x002000 ) + ROM_RELOAD( 0x00e000, 0x002000 ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "ua2-4", 0x000000, 0x040000, CRC(8b7532d6) SHA1(ec42d21bc44f004282f822b3da36b5442eabd87a) ) + ROM_LOAD16_BYTE( "ua2-3", 0x000001, 0x040000, CRC(1124417a) SHA1(c908f51b943188946486c639a0cb9712114b5437) ) + ROM_LOAD16_BYTE( "ua2-6", 0x080000, 0x040000, CRC(99d8dbba) SHA1(ac2a3c5cad23e0207eba52935c72e23203c8e0af) ) + ROM_LOAD16_BYTE( "ua2-5", 0x080001, 0x040000, CRC(6e450d28) SHA1(d0050afcc3f425ac70768271c9d2d55ab7fba622) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ua2-8", 0x000000, 0x080000, CRC(7d3a8d73) SHA1(d6a0bea124d7d228818f8ea8c804ad2ba8cead4b) ) + ROM_LOAD( "ua2-10", 0x080000, 0x080000, CRC(5bbe1f56) SHA1(309bc43884816dafeb0f47e71ff5272d4d7cac54) ) + ROM_LOAD( "ua2-7", 0x100000, 0x080000, CRC(fce56907) SHA1(5d0d2d6dfdbadb21f1d61d84b8992ec0e527e18d) ) + ROM_LOAD( "ua2-9", 0x180000, 0x080000, CRC(a451eae9) SHA1(c236c92d9ecf56f8d8f4a5ee493e3791be0d3db4) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ua2-11", 0x000000, 0x080000, CRC(624e6057) SHA1(0e8e4d4b6bc5febf5ca83eea92e3ed06f16e7df0) ) + ROM_LOAD( "ua2-12", 0x080000, 0x080000, CRC(3068ff64) SHA1(7c06a48a99ebb9e7f3709f25bd0caa4c9d7a2688) ) +ROM_END + +ROM_START( downtown ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ud2001.000", 0x000000, 0x040000, CRC(f1965260) SHA1(c0560342238d75f9b81ae9f3408cacfbcd331529) ) + ROM_LOAD16_BYTE( "ud2001.003", 0x000001, 0x040000, CRC(e7d5fa5f) SHA1(48612514598711aa73bf75243c842f0aca72f3d0) ) + ROM_LOAD16_BYTE( "ud2001.002", 0x080000, 0x010000, CRC(a300e3ac) SHA1(958cb121787444cdc6938fc5aad1e92238e39c13) ) + ROM_LOAD16_BYTE( "ud2001.001", 0x080001, 0x010000, CRC(d2918094) SHA1(c135939ad12e3cf0688db148c49f99e757ad7b0d) ) + + ROM_REGION( 0x04c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "ud2002.004", 0x004000, 0x040000, CRC(bbd538b1) SHA1(de4c43bfc4004a14f9f66b5e8ff192b00c45c003) ) + ROM_RELOAD( 0x00c000, 0x040000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "ud2005.t01", 0x000000, 0x080000, CRC(77e6d249) SHA1(cdf67211cd447858293188511e826640fe24078b) ) + ROM_LOAD16_BYTE( "ud2006.t02", 0x000001, 0x080000, CRC(6e381bf2) SHA1(ba46e019d2991dec539444ef7376fe0e9a6a8b75) ) + ROM_LOAD16_BYTE( "ud2007.t03", 0x100000, 0x080000, CRC(737b4971) SHA1(2a034011b0ac03d532a89b544f4eec497ac7ee80) ) + ROM_LOAD16_BYTE( "ud2008.t04", 0x100001, 0x080000, CRC(99b9d757) SHA1(c3a763993305110ec2a0b231d75fbef4c385d21b) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ud2009.t05", 0x000000, 0x080000, CRC(aee6c581) SHA1(5b2150a308ca12eea8148d0bbff663b3baf0c831) ) + ROM_LOAD( "ud2010.t06", 0x080000, 0x080000, CRC(3d399d54) SHA1(7d9036e73fbf0e9c3b976336e3e4786b17b2f4fc) ) + + ROM_REGION( 0x080000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ud2011.t07", 0x000000, 0x080000, CRC(9c9ff69f) SHA1(3840b654f4f709bc4c03dfe4ee79369d5c70dd62) ) +ROM_END + +ROM_START( downtow2 ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ud2001.000", 0x000000, 0x040000, CRC(f1965260) SHA1(c0560342238d75f9b81ae9f3408cacfbcd331529) ) + ROM_LOAD16_BYTE( "ud2001.003", 0x000001, 0x040000, CRC(e7d5fa5f) SHA1(48612514598711aa73bf75243c842f0aca72f3d0) ) + ROM_LOAD16_BYTE( "ud2000.002", 0x080000, 0x010000, CRC(ca976b24) SHA1(3b2e362f414b0103dd02c9af6a5d480ec2cf9ca3) ) + ROM_LOAD16_BYTE( "ud2000.001", 0x080001, 0x010000, CRC(1708aebd) SHA1(337a9e8d5da5b13a7ea4ee728de6b82fe92e16c5) ) + + ROM_REGION( 0x04c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "ud2002.004", 0x004000, 0x040000, CRC(bbd538b1) SHA1(de4c43bfc4004a14f9f66b5e8ff192b00c45c003) ) + ROM_RELOAD( 0x00c000, 0x040000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "ud2005.t01", 0x000000, 0x080000, CRC(77e6d249) SHA1(cdf67211cd447858293188511e826640fe24078b) ) + ROM_LOAD16_BYTE( "ud2006.t02", 0x000001, 0x080000, CRC(6e381bf2) SHA1(ba46e019d2991dec539444ef7376fe0e9a6a8b75) ) + ROM_LOAD16_BYTE( "ud2007.t03", 0x100000, 0x080000, CRC(737b4971) SHA1(2a034011b0ac03d532a89b544f4eec497ac7ee80) ) + ROM_LOAD16_BYTE( "ud2008.t04", 0x100001, 0x080000, CRC(99b9d757) SHA1(c3a763993305110ec2a0b231d75fbef4c385d21b) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ud2009.t05", 0x000000, 0x080000, CRC(aee6c581) SHA1(5b2150a308ca12eea8148d0bbff663b3baf0c831) ) + ROM_LOAD( "ud2010.t06", 0x080000, 0x080000, CRC(3d399d54) SHA1(7d9036e73fbf0e9c3b976336e3e4786b17b2f4fc) ) + + ROM_REGION( 0x080000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ud2011.t07", 0x000000, 0x080000, CRC(9c9ff69f) SHA1(3840b654f4f709bc4c03dfe4ee79369d5c70dd62) ) +ROM_END + +ROM_START( downtowp ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ud2001.000", 0x000000, 0x040000, CRC(f1965260) SHA1(c0560342238d75f9b81ae9f3408cacfbcd331529) ) + ROM_LOAD16_BYTE( "ud2001.003", 0x000001, 0x040000, CRC(e7d5fa5f) SHA1(48612514598711aa73bf75243c842f0aca72f3d0) ) + ROM_LOAD16_BYTE( "ud2_061e.bin", 0x080000, 0x010000, CRC(251d6552) SHA1(0f78bf142db826e956f670ba81102804e88fa2ed) ) + ROM_LOAD16_BYTE( "ud2_061o.bin", 0x080001, 0x010000, CRC(6394a7c0) SHA1(9f5099b32b3c3e100441f6c0ccbe88c19b01a9e5) ) + + ROM_REGION( 0x04c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "ud2002.004", 0x004000, 0x040000, CRC(bbd538b1) SHA1(de4c43bfc4004a14f9f66b5e8ff192b00c45c003) ) + ROM_RELOAD( 0x00c000, 0x040000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "ud2005.t01", 0x000000, 0x080000, CRC(77e6d249) SHA1(cdf67211cd447858293188511e826640fe24078b) ) + ROM_LOAD16_BYTE( "ud2006.t02", 0x000001, 0x080000, CRC(6e381bf2) SHA1(ba46e019d2991dec539444ef7376fe0e9a6a8b75) ) + ROM_LOAD16_BYTE( "ud2007.t03", 0x100000, 0x080000, CRC(737b4971) SHA1(2a034011b0ac03d532a89b544f4eec497ac7ee80) ) + ROM_LOAD16_BYTE( "ud2008.t04", 0x100001, 0x080000, CRC(99b9d757) SHA1(c3a763993305110ec2a0b231d75fbef4c385d21b) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ud2009.t05", 0x000000, 0x080000, CRC(aee6c581) SHA1(5b2150a308ca12eea8148d0bbff663b3baf0c831) ) + ROM_LOAD( "ud2010.t06", 0x080000, 0x080000, CRC(3d399d54) SHA1(7d9036e73fbf0e9c3b976336e3e4786b17b2f4fc) ) + + ROM_REGION( 0x080000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ud2011.t07", 0x000000, 0x080000, CRC(9c9ff69f) SHA1(3840b654f4f709bc4c03dfe4ee79369d5c70dd62) ) +ROM_END + +ROM_START( usclssic ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ue2001.u20", 0x000000, 0x020000, CRC(18b41421) SHA1(74e96071d46eda152aaa82cf87d09203f225b504) ) + ROM_LOAD16_BYTE( "ue2000.u14", 0x000001, 0x020000, CRC(69454bc2) SHA1(19a3b6ca65770353401544c50e04d895e391612c) ) + ROM_LOAD16_BYTE( "ue2002.u22", 0x040000, 0x020000, CRC(a7bbe248) SHA1(8f7ffeffb8b6ef0e1ab5e7fbba31a1b97bbd7f8c) ) + ROM_LOAD16_BYTE( "ue2003.u30", 0x040001, 0x020000, CRC(29601906) SHA1(9cdf2d80a72317a4eb7a335aaaae381822da24b1) ) + + ROM_REGION( 0x04c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "ue002u61.004", 0x004000, 0x040000, CRC(476e9f60) SHA1(940c09eb472652a88d5d34130270ff55a5f5ba27) ) + ROM_RELOAD( 0x00c000, 0x040000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "ue001009.119", 0x000000, 0x080000, CRC(dc065204) SHA1(0478b8126cd3ce3dee64cb7de2b30b509636eb1a) ) + ROM_LOAD16_BYTE( "ue001008.118", 0x000001, 0x080000, CRC(5947d9b5) SHA1(de3a63c55b558451bbbe98bf8d71561ba32c5e60) ) + ROM_LOAD16_BYTE( "ue001007.117", 0x100000, 0x080000, CRC(b48a885c) SHA1(8c0d458d6967c2ff4bdcf37aaa8025341fe90bbc) ) + ROM_LOAD16_BYTE( "ue001006.116", 0x100001, 0x080000, CRC(a6ab6ef4) SHA1(9f54f116d1d8e54d64ba541195baa66c5ca960bd) ) + + ROM_REGION( 0x600000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ue001010.120", 0x000000, 0x080000, CRC(dd683031) SHA1(06ed38a243666c1acaf8eb3fdba51d18fc2a70bc) ) // planes 01 + ROM_LOAD( "ue001011.121", 0x080000, 0x080000, CRC(0e27bc49) SHA1(f9ec4f4c15c86f608607a5ec916f5182a8e265fa) ) + ROM_LOAD( "ue001012.122", 0x100000, 0x080000, CRC(961dfcdc) SHA1(9de95692860abd4206db22ad7ade9f02f0c03506) ) + ROM_LOAD( "ue001013.123", 0x180000, 0x080000, CRC(03e9eb79) SHA1(e7cabfd73b73c7df8d79c113db5eca110bf2f05e) ) + + ROM_LOAD( "ue001014.124", 0x200000, 0x080000, CRC(9576ace7) SHA1(a5350934533241daf63c561a88d952bb6976b81b) ) // planes 23 + ROM_LOAD( "ue001015.125", 0x280000, 0x080000, CRC(631d6eb1) SHA1(df342c20e2b3c29eab3c72440c11be60d14d3557) ) + ROM_LOAD( "ue001016.126", 0x300000, 0x080000, CRC(f44a8686) SHA1(649f6f95cc67fa2f4551af19a2b607c811318820) ) + ROM_LOAD( "ue001017.127", 0x380000, 0x080000, CRC(7f568258) SHA1(ac36e87386f9d5c68c66a9469e1b30ee66c4cb7f) ) + + ROM_LOAD( "ue001018.128", 0x400000, 0x080000, CRC(4bd98f23) SHA1(be6483253a5ea1efe7c7f6b4432fe819b906894c) ) // planes 45 + ROM_LOAD( "ue001019.129", 0x480000, 0x080000, CRC(6d9f5a33) SHA1(8d300adf2b3299df78e274c4c7f2ee2d8e1e2575) ) + ROM_LOAD( "ue001020.130", 0x500000, 0x080000, CRC(bc07403f) SHA1(f994b6d1dee23f5dabdb328f955f4380a8ca9d52) ) + ROM_LOAD( "ue001021.131", 0x580000, 0x080000, CRC(98c03efd) SHA1(761c51d5573e6f35c48b8b9ee5d88cbde02e92a7) ) + + ROM_REGION( 0x400, REGION_PROMS, 0 ) /* Extra Colours (not used yet) */ + ROM_LOAD16_BYTE( "ue1-022.prm", 0x000, 0x200, CRC(1a23129e) SHA1(110eb54ab83ecb8375164a5c96f522b2737c379c) ) + ROM_LOAD16_BYTE( "ue1-023.prm", 0x001, 0x200, CRC(a13192a4) SHA1(86e312e0f7400b7fa08fbe8fced1eb95a32502ca) ) + + ROM_REGION( 0x080000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ue001005.132", 0x000000, 0x080000, CRC(c5fea37c) SHA1(af4f09dd36af06e50262f607ff14eedc33beffd2) ) +ROM_END + +ROM_START( calibr50 ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "uh002001.u45", 0x000000, 0x040000, CRC(eb92e7ed) SHA1(2aee8a7bce549ef7d7b35d1c248ebbdbc906e38d) ) + ROM_LOAD16_BYTE( "uh002004.u41", 0x000001, 0x040000, CRC(5a0ed31e) SHA1(d6ee7654354ac9f1dc7add1ef9f68a147b6f2953) ) + ROM_LOAD16_BYTE( "uh001003.9a", 0x080000, 0x010000, CRC(0d30d09f) SHA1(8a48511b628e85b72fda0968d813f4faebd0c418) ) + ROM_LOAD16_BYTE( "uh001002.7a", 0x080001, 0x010000, CRC(7aecc3f9) SHA1(2454d9c758fa623d4d81a9230871b67d31d16cef) ) + + ROM_REGION( 0x04c000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "uh001005.u61", 0x004000, 0x040000, CRC(4a54c085) SHA1(f53ff257ce3d95f945a6befcfb61f1b570f0eafe) ) + ROM_RELOAD( 0x00c000, 0x040000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "uh001006.ux2", 0x000000, 0x080000, CRC(fff52f91) SHA1(fd7807e9a8dd5a88df1fcd13746b44a33adbc0fa) ) + ROM_LOAD16_BYTE( "uh001007.ux1", 0x000001, 0x080000, CRC(b6c19f71) SHA1(eb8bbaeaf4af07e178100ff16b228b537aa36272) ) + ROM_LOAD16_BYTE( "uh001008.ux6", 0x100000, 0x080000, CRC(7aae07ef) SHA1(1db666db20efce1efe5b5769b8e3c78bbf508466) ) + ROM_LOAD16_BYTE( "uh001009.ux0", 0x100001, 0x080000, CRC(f85da2c5) SHA1(d090e49b3a897729c7fb05f9386939448fe1d3d9) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "uh001010.u3x", 0x000000, 0x080000, CRC(f986577a) SHA1(8f6c2fca271fed21a1c04e93c3f50dc41348ae30) ) + ROM_LOAD( "uh001011.u50", 0x080000, 0x080000, CRC(08620052) SHA1(e2ab49dbabc139e6b276401340085ccab1ae3892) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uh001013.u60", 0x000000, 0x080000, CRC(09ec0df6) SHA1(57c68d05074ea4a1e133be2ce6e25c594f04a712) ) + ROM_LOAD( "uh001012.u46", 0x080000, 0x080000, CRC(bb996547) SHA1(0c8f570ef4454b10a023e0c463001c22a8cf99cd) ) +ROM_END + +ROM_START( arbalest ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "uk001.03", 0x000000, 0x040000, CRC(ee878a2c) SHA1(f7d5817015382ce6af317c02746b473ec798bb4f) ) + ROM_LOAD16_BYTE( "uk001.04", 0x000001, 0x040000, CRC(902bb4e3) SHA1(e37a361a7c03aee2d6ac8c96c2dd6c1e411b46fb) ) + + ROM_REGION( 0x010000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "uk001.05", 0x006000, 0x002000, CRC(0339fc53) SHA1(9078f70a319132ef12c59b85e6306d5549a858f1) ) + ROM_RELOAD( 0x008000, 0x002000 ) + ROM_RELOAD( 0x00a000, 0x002000 ) + ROM_RELOAD( 0x00c000, 0x002000 ) + ROM_RELOAD( 0x00e000, 0x002000 ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "uk001.06", 0x000000, 0x040000, CRC(11c75746) SHA1(7faf9a26534397d21211d5ef25ca53c4eb286474) ) + ROM_LOAD16_BYTE( "uk001.07", 0x000001, 0x040000, CRC(01b166c7) SHA1(d1b5b73a55025a264a22dd950ea79ba8172c4bed) ) + ROM_LOAD16_BYTE( "uk001.08", 0x080000, 0x040000, CRC(78d60ba3) SHA1(c4fa546e4ca637d67ecc1b085b91c753606ccdb3) ) + ROM_LOAD16_BYTE( "uk001.09", 0x080001, 0x040000, CRC(b4748ae0) SHA1(a71e671754ed5bba737f0b5f7be510a23d5e925c) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "uk001.10", 0x000000, 0x080000, CRC(c1e2f823) SHA1(892473351e7b590c59c578047a67fc235bd31e02) ) + ROM_LOAD( "uk001.11", 0x080000, 0x080000, CRC(09dfe56a) SHA1(077627627d3cb8f79ffdd83e46157bd3c473c4a1) ) + ROM_LOAD( "uk001.12", 0x100000, 0x080000, CRC(818a4085) SHA1(fd8b5658fc7f5fa6d3daebb4be17aeabd60c9028) ) + ROM_LOAD( "uk001.13", 0x180000, 0x080000, CRC(771fa164) SHA1(a91214318808f991846a828f0e309c0ff430245e) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uk001.15", 0x000000, 0x080000, CRC(ce9df5dd) SHA1(91d879b774b5b367adb5bd511fda827bc0bae0a9) ) + ROM_LOAD( "uk001.14", 0x080000, 0x080000, CRC(016b844a) SHA1(1fe091233746ced358292014393896af730f5940) ) +ROM_END + +ROM_START( metafox ) + ROM_REGION( 0x0a0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "p1003161", 0x000000, 0x040000, CRC(4fd6e6a1) SHA1(11a830d76ef737bcfac73d0958425fe4329f0dcd) ) + ROM_LOAD16_BYTE( "p1004162", 0x000001, 0x040000, CRC(b6356c9a) SHA1(182a1ea9f0643b05b14ad2a2cd820f5ca2086c4c) ) + ROM_LOAD16_BYTE( "up001002", 0x080000, 0x010000, CRC(ce91c987) SHA1(63546fa1342371a7080ac3cf59b41a01ac313c8c) ) + ROM_LOAD16_BYTE( "up001001", 0x080001, 0x010000, CRC(0db7a505) SHA1(d593da2f7d8b54724cae017cbabc3c0909893da1) ) + + ROM_REGION( 0x010000, REGION_CPU2, 0 ) /* 65c02 Code */ + ROM_LOAD( "up001005", 0x006000, 0x002000, CRC(2ac5e3e3) SHA1(b794554cd25bdd48a21a0a2861daf8369e798ce8) ) + ROM_RELOAD( 0x008000, 0x002000 ) + ROM_RELOAD( 0x00a000, 0x002000 ) + ROM_RELOAD( 0x00c000, 0x002000 ) + ROM_RELOAD( 0x00e000, 0x002000 ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "p1006163", 0x000000, 0x040000, CRC(80f69c7c) SHA1(df323e801ebec6316ba17fe0371f7c87fad19295) ) + ROM_LOAD16_BYTE( "p1007164", 0x000001, 0x040000, CRC(d137e1a3) SHA1(0e0234f1d0adb7db6d0508263e3b0b31fe7071b9) ) + ROM_LOAD16_BYTE( "p1008165", 0x080000, 0x040000, CRC(57494f2b) SHA1(28d620254e81d7e63dfed07b29b252b975a81248) ) + ROM_LOAD16_BYTE( "p1009166", 0x080001, 0x040000, CRC(8344afd2) SHA1(7348b423405ad00b9240d152b119cf5341754815) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "up001010", 0x000000, 0x080000, CRC(bfbab472) SHA1(d3e7b20d14de48134c4fbe3da31feb928c1c655b) ) + ROM_LOAD( "up001011", 0x080000, 0x080000, CRC(26cea381) SHA1(b4bfd2a13ef6051376fe3ed57e2331a072970f86) ) + ROM_LOAD( "up001012", 0x100000, 0x080000, CRC(fed2c5f9) SHA1(81f0f19a500b665c937f5431000ebde7abd97c30) ) + ROM_LOAD( "up001013", 0x180000, 0x080000, CRC(adabf9ea) SHA1(db28e4e565e567a97a6b05a4803a55a403e24a0e) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "up001015", 0x000000, 0x080000, CRC(2e20e39f) SHA1(6f8bd4a76ed5c2150015698e7a98044d060157be) ) + ROM_LOAD( "up001014", 0x080000, 0x080000, CRC(fca6315e) SHA1(cef2385ec43f8b7a2d655b42c18ef44e46ff7364) ) +ROM_END + + +ROM_START( drgnunit ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "prg-e.bin", 0x000000, 0x020000, CRC(728447df) SHA1(8bdc52a4cc5f36794a47f963545bdaa26c9acd6b) ) + ROM_LOAD16_BYTE( "prg-o.bin", 0x000001, 0x020000, CRC(b2f58ecf) SHA1(5198e75b22bab630b458797988f2e443c601351f) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "obj-2.bin", 0x000000, 0x020000, CRC(d7f6ab5a) SHA1(a32f1705e833c339bd0c426a395cc706da96dad7) ) + ROM_LOAD16_BYTE( "obj-1.bin", 0x000001, 0x020000, CRC(53a95b13) SHA1(b7c7994441aafcea49662dc0fbebd6db836723f5) ) + ROM_LOAD16_BYTE( "obj-6.bin", 0x040000, 0x020000, CRC(80b801f7) SHA1(5b5635903137e50bc982d05b73c2648bbf182e71) ) + ROM_LOAD16_BYTE( "obj-5.bin", 0x040001, 0x020000, CRC(6b87bc20) SHA1(9a0e3e18339d6c12e63960fb940a56c16dcb87cf) ) + ROM_LOAD16_BYTE( "obj-4.bin", 0x080000, 0x020000, CRC(60d17771) SHA1(0874c10a2527293715db95bd7c83886d94f810cf) ) + ROM_LOAD16_BYTE( "obj-3.bin", 0x080001, 0x020000, CRC(0bccd4d5) SHA1(7139ef793efe7c6477f78b50207227b1be223755) ) + ROM_LOAD16_BYTE( "obj-8.bin", 0x0c0000, 0x020000, CRC(826c1543) SHA1(f669f255b4596da5648592b5993b02671e404102) ) + ROM_LOAD16_BYTE( "obj-7.bin", 0x0c0001, 0x020000, CRC(cbaa7f6a) SHA1(060f0651b8ca07d239ef1b7c63943cdd433e1ae9) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "scr-1o.bin", 0x000000, 0x020000, CRC(671525db) SHA1(e230e99754c9f40af7da2054bd5ea09823e0b1b7) ) + ROM_LOAD( "scr-2o.bin", 0x020000, 0x020000, CRC(2a3f2ed8) SHA1(9d188100437a10eb3d3097f28e28e3cb2dc1b21d) ) + ROM_LOAD( "scr-3o.bin", 0x040000, 0x020000, CRC(4d33a92d) SHA1(8b09768abb460446405224565eb6652d2dc1c571) ) + ROM_LOAD( "scr-4o.bin", 0x060000, 0x020000, CRC(79a0aa61) SHA1(9905d90afb759b1d983856d7bef17c139d4f0e4f) ) + ROM_LOAD( "scr-1e.bin", 0x080000, 0x020000, CRC(dc9cd8c9) SHA1(04450a5cfde5d6b69fdd745cd930309863e1aadd) ) + ROM_LOAD( "scr-2e.bin", 0x0a0000, 0x020000, CRC(b6126b41) SHA1(13275f05868d93af95ebb162d229b69ddd660438) ) + ROM_LOAD( "scr-3e.bin", 0x0c0000, 0x020000, CRC(1592b8c2) SHA1(d337de280c5ea3704dec9baa04c45e1c837924a9) ) + ROM_LOAD( "scr-4e.bin", 0x0e0000, 0x020000, CRC(8201681c) SHA1(7784a68828d728107b0228bb3568129c543cbf40) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "snd-1.bin", 0x000000, 0x020000, CRC(8f47bd0d) SHA1(c55e22ac4294931cfb72ac88a2128891d9f8ee93) ) + ROM_LOAD( "snd-2.bin", 0x020000, 0x020000, CRC(65c40ef5) SHA1(726b46144e2216d17b0828abad2f5e7c2305c174) ) + ROM_LOAD( "snd-3.bin", 0x040000, 0x020000, CRC(71fbd54e) SHA1(bdaf7ecf1c79c6c8fc82d959186ca2f3304729c8) ) + ROM_LOAD( "snd-4.bin", 0x060000, 0x020000, CRC(ac50133f) SHA1(d56a9569bd72c7bc13d09dcea9789cdc7252ffb4) ) + ROM_LOAD( "snd-5.bin", 0x080000, 0x020000, CRC(70652f2c) SHA1(04ff016a087a230efe4644eb76f68886aae26978) ) + ROM_LOAD( "snd-6.bin", 0x0a0000, 0x020000, CRC(10a1039d) SHA1(a1160fe600d39ae6fdbf247f634c2e094b3a675f) ) + ROM_LOAD( "snd-7.bin", 0x0c0000, 0x020000, CRC(decbc8b0) SHA1(9d315d1119fbc2bf889efdb174ebc5e26ecad859) ) + ROM_LOAD( "snd-8.bin", 0x0e0000, 0x020000, CRC(3ac51bee) SHA1(cb2ee501895b848d434991152dea293685f8ed22) ) +ROM_END + +ROM_START( wits ) + ROM_REGION( 0x010000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "un001001.u1", 0x000000, 0x008000, CRC(416c567e) SHA1(f0898ce4457efc272e0fec3447c9d4598684219e) ) + ROM_LOAD16_BYTE( "un001002.u4", 0x000001, 0x008000, CRC(497a3fa6) SHA1(cf035efddc2a90013e83dcb81687ba1896ba6055) ) + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "un001008.7l", 0x000000, 0x020000, CRC(1d5d0b2b) SHA1(12cf1be316012e8ee910edfd1b892b7ce1383535) ) + ROM_LOAD16_BYTE( "un001007.5l", 0x000001, 0x020000, CRC(9e1e6d51) SHA1(9a87f0f18ac0b3d267fe8655d01750d693745c1f) ) + ROM_LOAD16_BYTE( "un001006.4l", 0x040000, 0x020000, CRC(98a980d4) SHA1(ab2c1ed83bccffabfacc8a185d1fbc3e8aaf210d) ) + ROM_LOAD16_BYTE( "un001005.2l", 0x040001, 0x020000, CRC(6f2ce3c0) SHA1(8086b44c7025bc0bffff75cc6c6c7846cc56e8d0) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "un001004.12a", 0x000000, 0x020000, CRC(a15ff938) SHA1(fdfdf73e85d89a39cfc5b3c3048a64178200f942) ) + ROM_LOAD( "un001003.10a", 0x020000, 0x020000, CRC(3f4b9e55) SHA1(3cecf89ae6a056622affcddec9e10be08761e56d) ) +ROM_END + +ROM_START( thunderl ) + ROM_REGION( 0x010000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "m4", 0x000000, 0x008000, CRC(1e6b9462) SHA1(f7f93479117e97d4e38632fef83c10345587f77f) ) + ROM_LOAD16_BYTE( "m5", 0x000001, 0x008000, CRC(7e82793e) SHA1(3e487f465d64af8c1c4852567b2fd9190363570c) ) + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "t17", 0x000000, 0x020000, CRC(599a632a) SHA1(29da423dfe1f971cbb205767cf902d199d968d85) ) + ROM_LOAD16_BYTE( "t16", 0x000001, 0x020000, CRC(3aeef91c) SHA1(a5dc8c22a7bcc1199bdd09c7d0f1f8a378e757c5) ) + ROM_LOAD16_BYTE( "t15", 0x040000, 0x020000, CRC(b97a7b56) SHA1(c08d3586d489947af21f3493356e3a88d79746e8) ) + ROM_LOAD16_BYTE( "t14", 0x040001, 0x020000, CRC(79c707be) SHA1(f67fa40c8f6ab0fbce44997fdfbf699fea1f0df6) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "r28", 0x000000, 0x080000, CRC(a043615d) SHA1(e483fa9fd8e922578a9d7b6ced0750643089ca78) ) + ROM_LOAD( "r27", 0x080000, 0x080000, CRC(cb8425a3) SHA1(655afa295fbe99acc79c4004f03ed832560cff5b) ) +ROM_END + +/* Wiggie does NOT run on a seta board, but is a hack / bootleg of Thunder & Lightning (just like + Promat's Perestroika Girls is a hack / bootleg of Taito's Super Qix */ + +ROM_START( wiggie ) + ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "wiggie.f19", 0x00000, 0x10000, CRC(24b58f16) SHA1(96ef92ab79258da9322dd7e706bf05ac5143f7b7) ) + ROM_LOAD16_BYTE( "wiggie.f21", 0x00001, 0x10000, CRC(83ba6edb) SHA1(fa74fb39599ed877317db73d02d14df5b475fc35) ) + + ROM_REGION( 0x40000, REGION_CPU2, 0 ) /* sound cpu code */ + ROM_LOAD( "wiggie.a5", 0x00000, 0x10000, CRC(8078d77b) SHA1(4e6855d396a1bace2810b13b7dd08ccf5de89bd8) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "wiggie.d1", 0x00000, 0x40000, CRC(27fbe12a) SHA1(73f476a03b321ed1ae89104f5b32d77153fabb82)) + + ROM_REGION( 0x80000, REGION_GFX1, 0 ) + ROM_LOAD( "wiggie.k16", 0x00000, 0x20000, CRC(4fb40b8a) SHA1(120c9fd677071485a9f8accc2385117baf542b9c) ) + ROM_LOAD( "wiggie.k18", 0x20000, 0x20000, CRC(ebc418e9) SHA1(a9af9bebce56608b0533d7d147191ebdceaca4e4) ) + ROM_LOAD( "wiggie.k19", 0x40000, 0x20000, CRC(c073501b) SHA1(4b4cd0fed5efe12bcd10f98a71becc212e7e753a) ) + ROM_LOAD( "wiggie.k21", 0x60000, 0x20000, CRC(22f6fa39) SHA1(d3e86e156434153335c5d2ce71417f35097f5ab7) ) +ROM_END + +ROM_START( rezon ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "us001001.u3", 0x000000, 0x020000, CRC(ab923052) SHA1(26761c228b63c300f635787e63e1276b6e3083f0) ) + ROM_LOAD16_BYTE( "us001002.u4", 0x000001, 0x020000, CRC(3dafa0d5) SHA1(80cdff86b99d364acbbf1322c73b2f26b1a93167) ) + /* empty gap */ + ROM_LOAD16_BYTE( "us001004.103", 0x100000, 0x020000, CRC(54871c7c) SHA1(2f807b15760b1e712fa69eee6f33cc8a36ee1c02) ) // 1xxxxxxxxxxxxxxxx = 0x00 + ROM_LOAD16_BYTE( "us001003.102", 0x100001, 0x020000, CRC(1ac3d272) SHA1(0f19bc9c19e355dad5b463b0fa33127523bf141b) ) // 1xxxxxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "us001006.u64", 0x000000, 0x080000, CRC(a4916e96) SHA1(bfb63b72273e4fbf0843b3201bb4fddaf54909a7) ) + ROM_LOAD( "us001005.u63", 0x080000, 0x080000, CRC(e6251ebc) SHA1(f02a4c8373e33fc57e18e39f1b5ecff3f6d9ca9e) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "us001007.u66", 0x000000, 0x080000, CRC(3760b935) SHA1(f5fe69f7e93c90a5b6c1dff236402b962821e33f) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "us001008.u68", 0x000000, 0x080000, CRC(0ab73910) SHA1(78e2c0570c5c6f5e1cdb2fbeae73376923127024) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD16_WORD_SWAP( "us001009.u70", 0x000000, 0x100000, CRC(0d7d2e2b) SHA1(cfba19314ecb0a49ed9ff8df32cd6a3fe37ff526) ) +ROM_END + +/* note the ONLY byte that changes is the year, 1992 instead of 1991. The actual license is controlled by a jumper but + since Taito released the game in 1992 this is the Taito version and we hardcode the jumper in the input ports */ + +ROM_START( rezont ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "us001001.u3", 0x000000, 0x020000, CRC(ab923052) SHA1(26761c228b63c300f635787e63e1276b6e3083f0) ) + ROM_LOAD16_BYTE( "rezon_1_p.u4", 0x000001, 0x020000, CRC(9ed32f8c) SHA1(68b926de4cb5f2632ab78b2cdf7409411fadbb1d) ) + /* empty gap */ + ROM_LOAD16_BYTE( "us001004.103", 0x100000, 0x020000, CRC(54871c7c) SHA1(2f807b15760b1e712fa69eee6f33cc8a36ee1c02) ) // 1xxxxxxxxxxxxxxxx = 0x00 + ROM_LOAD16_BYTE( "us001003.102", 0x100001, 0x020000, CRC(1ac3d272) SHA1(0f19bc9c19e355dad5b463b0fa33127523bf141b) ) // 1xxxxxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "us001006.u64", 0x000000, 0x080000, CRC(a4916e96) SHA1(bfb63b72273e4fbf0843b3201bb4fddaf54909a7) ) + ROM_LOAD( "us001005.u63", 0x080000, 0x080000, CRC(e6251ebc) SHA1(f02a4c8373e33fc57e18e39f1b5ecff3f6d9ca9e) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "us001007.u66", 0x000000, 0x080000, CRC(3760b935) SHA1(f5fe69f7e93c90a5b6c1dff236402b962821e33f) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "us001008.u68", 0x000000, 0x080000, CRC(0ab73910) SHA1(78e2c0570c5c6f5e1cdb2fbeae73376923127024) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD16_WORD_SWAP( "us001009.u70", 0x000000, 0x100000, CRC(0d7d2e2b) SHA1(cfba19314ecb0a49ed9ff8df32cd6a3fe37ff526) ) +ROM_END + +ROM_START( stg ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "att01003.u27", 0x000000, 0x020000, CRC(7a640a93) SHA1(28c54eca9502d06ca55c2db91bfe7d149af006ed) ) + ROM_LOAD16_BYTE( "att01001.u9", 0x000001, 0x020000, CRC(4fa88ad3) SHA1(55e0e689758511cdf514a633ffe3d7729e281b52) ) + ROM_LOAD16_BYTE( "att01004.u33", 0x040000, 0x020000, CRC(bbd45ca1) SHA1(badb11faf5779e8444dd95eb08a94fbf9f73cc2c) ) // 1xxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_BYTE( "att01002.u17", 0x040001, 0x020000, CRC(2f8fd80c) SHA1(b8e16adc84b918b5eee05d032a7841e8d726eeeb) ) // 1xxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "att01006.u32", 0x000000, 0x080000, CRC(6ad78ea2) SHA1(eb8fc9833fb1c7041f5e0a3b37c8de9156a034b6) ) + ROM_LOAD( "att01005.u26", 0x080000, 0x080000, CRC(a347ff00) SHA1(8455c5e7dfa25646b1782ab3bcf62fca91ca03ad) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "att01008.u39", 0x000000, 0x080000, CRC(20c47457) SHA1(53ddf8c076aa35fb87edc739bc9e9612a5a1526b) ) // FIRST AND SECOND HALF IDENTICAL + ROM_LOAD( "att01007.u42", 0x080000, 0x080000, CRC(ac975544) SHA1(5cdd2c7aada7179d4bdaf8578134c0ef672a2704) ) // FIRST AND SECOND HALF IDENTICAL + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "att01009.u47", 0x000000, 0x080000, CRC(4276b58d) SHA1(a2e77dc3295791520c6cb25dea4e910b5a7bc137) ) + ROM_LOAD( "att01010.u55", 0x080000, 0x080000, CRC(fffb2f53) SHA1(0aacb24437e9a6874850313163922d834da27611) ) +ROM_END + +ROM_START( blandia ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ux001001.003", 0x000000, 0x040000, CRC(2376a1f3) SHA1(705a3c5cc1137d14ffded6c949bf9aa650133eb7) ) + ROM_LOAD16_BYTE( "ux001002.004", 0x000001, 0x040000, CRC(b915e172) SHA1(e43e50a664dc1286ece42a5ff8629b2da7fb49b4) ) + ROM_LOAD16_WORD_SWAP( "ux001003.202", 0x100000, 0x100000, CRC(98052c63) SHA1(b523596de29038b3ec9f1b6e1f7374a6a8709d42) ) + + ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "ux001005.200", 0x300000, 0x100000, CRC(bea0c4a5) SHA1(a690c17fb7cbdab533c1dfad13abbad9359b9631) ) + ROM_LOAD( "ux001007.201", 0x100000, 0x100000, CRC(4440fdd1) SHA1(7bfee90f81a2c867bd487abcf5905393ad400902) ) + ROM_LOAD( "ux001006.063", 0x200000, 0x100000, CRC(abc01cf7) SHA1(c3f26e75eeb68073d2825be8df82cc6afcfbfb26) ) + ROM_LOAD( "ux001008.064", 0x000000, 0x100000, CRC(413647b6) SHA1(594e010ca6f49ec82cc6d44fe23ac3427c4c3dbd) ) + + ROM_REGION( 0x0c0000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ux001009.065", 0x000000, 0x080000, CRC(bc6f6aea) SHA1(673efa0c70587b5650ccf0a3c4bc316f53d52ba6) ) + ROM_LOAD( "ux001010.066", 0x040000, 0x080000, CRC(bd7f7614) SHA1(dc865ff0f327f460956915b2018aaac815e8fce5) ) + + ROM_REGION( 0x0c0000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "ux001011.067", 0x000000, 0x080000, CRC(5efe0397) SHA1(a294a2dae9a10e93912543a8614a7f960a011f27) ) + ROM_LOAD( "ux001012.068", 0x040000, 0x080000, CRC(f29959f6) SHA1(edccea3d0bf972a07edd6339e18792d089033bff) ) + + /* The c0000-fffff region is bankswitched */ + ROM_REGION( 0x240000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ux001013.069", 0x000000, 0x0c0000, CRC(5cd273cd) SHA1(602e1f10454e2b1c941f2e6983872bb9ca77a542) ) + // skip c0000-fffff (banked region) + ROM_CONTINUE( 0x100000, 0x040000 ) + ROM_LOAD( "ux001014.070", 0x140000, 0x080000, CRC(86b49b4e) SHA1(045b352950d848907af4c22b817d154b2cfff382) ) +ROM_END + +ROM_START( blandiap ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "prg-even.bin", 0x000000, 0x040000, CRC(7ecd30e8) SHA1(25e555a45bbb154170189b065206f7536a5dec1b) ) + ROM_LOAD16_BYTE( "prg-odd.bin", 0x000001, 0x040000, CRC(42b86c15) SHA1(9a4adcc16c35f84826a6effed5ebe439483ab856) ) + ROM_LOAD16_BYTE( "tbl0.bin", 0x100000, 0x080000, CRC(69b79eb8) SHA1(f7b33c99744d8b7f6e2991b4d2b35719eebd0b43) ) + ROM_LOAD16_BYTE( "tbl1.bin", 0x100001, 0x080000, CRC(cf2fd350) SHA1(4d0fb720af544f746eeaaad499be00e0d1c6f129) ) + + ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "o-1.bin", 0x000000, 0x080000, CRC(4c67b7f0) SHA1(ad6bd4b880f0f63a803c097795a4b70f24c94848) ) + ROM_LOAD16_BYTE( "o-0.bin", 0x000001, 0x080000, CRC(5e7b8555) SHA1(040599db77041765f582aa99d6f616a7a2c4dd5c) ) + ROM_LOAD16_BYTE( "o-5.bin", 0x100000, 0x080000, CRC(40bee78b) SHA1(1ec0b1854c26ba300a3a54077332a9af55677dca) ) + ROM_LOAD16_BYTE( "o-4.bin", 0x100001, 0x080000, CRC(7c634784) SHA1(047287c630336001d2b1e21f7273ccc3d5278e3c) ) + ROM_LOAD16_BYTE( "o-3.bin", 0x200000, 0x080000, CRC(387fc7c4) SHA1(4e5bd3985f16aa7295110a9902adc8e1453c03ab) ) + ROM_LOAD16_BYTE( "o-2.bin", 0x200001, 0x080000, CRC(c669bb49) SHA1(db5051ea8b08672b6079004060e20fb250560d9f) ) + ROM_LOAD16_BYTE( "o-7.bin", 0x300000, 0x080000, CRC(fc77b04a) SHA1(b3c7b2cb9407cac261890e0355cbb87ac8e2e93c) ) + ROM_LOAD16_BYTE( "o-6.bin", 0x300001, 0x080000, CRC(92882943) SHA1(460f3ae37d6f88d3a6068e2fb8d0d330be7c786f) ) + + ROM_REGION( 0x0c0000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "v1-2.bin", 0x000000, 0x020000, CRC(d524735e) SHA1(4d17e7896b6c6451effe8a19bf7a4919db0cc06d) ) + ROM_LOAD( "v1-5.bin", 0x020000, 0x020000, CRC(eb440cdb) SHA1(180ed9d616c66b7fae1a3d1156028c8476e45bde) ) + ROM_LOAD( "v1-1.bin", 0x040000, 0x020000, CRC(09bdf75f) SHA1(33bda046092d5bc3d8e8ffec25c745a2fda16a5c) ) + ROM_LOAD( "v1-4.bin", 0x060000, 0x020000, CRC(803911e5) SHA1(a93cac42eda69698b393a1a49e3615ee60868838) ) + ROM_LOAD( "v1-0.bin", 0x080000, 0x020000, CRC(73617548) SHA1(9c04d0179cb93e9fb78cc8af1006ef3edfcde707) ) + ROM_LOAD( "v1-3.bin", 0x0a0000, 0x020000, CRC(7f18e4fb) SHA1(0e51e3f88b90c07a1352bcd42e6438c947d4856e) ) + + ROM_REGION( 0x0c0000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "v2-2.bin", 0x000000, 0x020000, CRC(c4f15638) SHA1(6be0f3e90ab23189caadfd99b3e4ded74749ebbc) ) // identical to v2-1 + ROM_LOAD( "v2-5.bin", 0x020000, 0x020000, CRC(c2e57622) SHA1(994a4774d68f2d562d985951b06216d59f38afe9) ) + ROM_LOAD( "v2-1.bin", 0x040000, 0x020000, CRC(c4f15638) SHA1(6be0f3e90ab23189caadfd99b3e4ded74749ebbc) ) + ROM_LOAD( "v2-4.bin", 0x060000, 0x020000, CRC(16ec2130) SHA1(187f548563577ca36cced9ae184d27e6fcdd7e6a) ) + ROM_LOAD( "v2-0.bin", 0x080000, 0x020000, CRC(5b05eba9) SHA1(665001cdb3c9977f8f4c7ce551549f7fc640c6a9) ) + ROM_LOAD( "v2-3.bin", 0x0a0000, 0x020000, CRC(80ad0c3b) SHA1(00fcbcf7805784d7298b92136e7f256d65029c44) ) + + /* The c0000-fffff region is bankswitched */ + ROM_REGION( 0x240000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "s-0.bin", 0x000000, 0x020000, CRC(a5fde408) SHA1(89efcd37ef6c5b313169d74a962a7c074a09b12a) ) + ROM_CONTINUE( 0x140000, 0x020000 ) + ROM_LOAD( "s-1.bin", 0x020000, 0x020000, CRC(3083f9c4) SHA1(f5d2297c3d680eb1f128fa42a3a7f61badb9853a) ) + ROM_CONTINUE( 0x160000, 0x020000 ) + ROM_LOAD( "s-2.bin", 0x040000, 0x020000, CRC(a591c9ef) SHA1(83e665e342c42fd3582c83becfacc27a3a3e5a54) ) + ROM_CONTINUE( 0x180000, 0x020000 ) + ROM_LOAD( "s-3.bin", 0x060000, 0x020000, CRC(68826c9d) SHA1(a860b7b2140a5a506bf25110c08c6ea59db25743) ) + ROM_CONTINUE( 0x1a0000, 0x020000 ) + ROM_LOAD( "s-4.bin", 0x080000, 0x020000, CRC(1c7dc8c2) SHA1(006459a23de83fe48e11bdd6ebe23ef6a18a87e8) ) + ROM_CONTINUE( 0x1c0000, 0x020000 ) + ROM_LOAD( "s-5.bin", 0x0a0000, 0x020000, CRC(4bb0146a) SHA1(1e3c1739ea3c85296573426e55f25dce11f0ed2b) ) + ROM_CONTINUE( 0x1e0000, 0x020000 ) + ROM_LOAD( "s-6.bin", 0x100000, 0x020000, CRC(9f8f34ee) SHA1(60abb70ae87595ebae23df68d62f3b0ed4a2e768) ) // skip c0000-fffff (banked region) + ROM_CONTINUE( 0x200000, 0x020000 ) // this half is 0 + ROM_LOAD( "s-7.bin", 0x120000, 0x020000, CRC(e077dd39) SHA1(a6f0881a026161710adc132bcf7cb95c4c8f2528) ) + ROM_CONTINUE( 0x220000, 0x020000 ) // this half is 0 +ROM_END + +ROM_START( blockcar ) + ROM_REGION( 0x040000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "u1.a1", 0x000000, 0x020000, CRC(4313fb00) SHA1(f5b9e212436282284fa344e1c4200bc38ca3c50a) ) + ROM_LOAD16_BYTE( "u4.a3", 0x000001, 0x020000, CRC(2237196d) SHA1(5a9d972fac94e62f026c36bca0c2f5fe8e0e1a1d) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "bl-chr-0.j3", 0x000000, 0x080000, CRC(a33300ca) SHA1(b0a7ccb77c3e8e33c12b83e254924f30209a4c2c) ) + ROM_LOAD( "bl-chr-1.l3", 0x080000, 0x080000, CRC(563de808) SHA1(40b2f9f4a4cb1a019f6419572ee21d66dda7d4af) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "bl-snd-0.a13", 0x000000, 0x080000, CRC(a92dabaf) SHA1(610c1dc0467753dfddaa4b27bc40cb118b0bc7a3) ) + ROM_RELOAD( 0x080000, 0x080000 ) +ROM_END + +ROM_START( qzkklogy ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "3.u27", 0x000000, 0x020000, CRC(b8c27cde) SHA1(4c36076801b6c915888b925c1e37d772bab1bb02) ) + ROM_LOAD16_BYTE( "1.u9", 0x000001, 0x020000, CRC(ce01cd54) SHA1(ef91aecdf7b5586a6870ff237372d65f85cd4cd3) ) + ROM_LOAD16_BYTE( "4.u33", 0x040000, 0x020000, CRC(4f5c554c) SHA1(0a10cefdf2dd876e6cb78023c3c15af24ba3c39a) ) + ROM_LOAD16_BYTE( "2.u17", 0x040001, 0x020000, CRC(65fa1b8d) SHA1(81fd7785f138a189de978fd30dbfca36687cda17) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "t2709u32.u32", 0x000000, 0x080000, CRC(900f196c) SHA1(b60741c3242ce56cb61ea68093b571489db0c6fa) ) // FIRST AND SECOND HALF IDENTICAL + ROM_LOAD( "t2709u26.u26", 0x080000, 0x080000, CRC(416ac849) SHA1(3bd5dd13a8f2693e8f160a4ecfff3b7610644f5f) ) // FIRST AND SECOND HALF IDENTICAL + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "t2709u42.u39", 0x000000, 0x080000, CRC(194d5704) SHA1(ab2833f7427d0608850c158b813bc49935ac7d6d) ) + ROM_LOAD( "t2709u39.u42", 0x080000, 0x080000, CRC(6f95a76d) SHA1(925f5880fb5153c1215d1f5ee1eff5b53a84abea) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "t2709u47.u47", 0x000000, 0x080000, CRC(0ebdad40) SHA1(6558eeaac76d98d91b0be6faa78f531f1e3b9f84) ) + ROM_LOAD( "t2709u55.u55", 0x080000, 0x080000, CRC(43960c68) SHA1(9a1901b65f989aa57ab8736ef0be3bac492c081c) ) +ROM_END + +ROM_START( umanclub ) + ROM_REGION( 0x040000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "uw001006.u48", 0x000000, 0x020000, CRC(3dae1e9d) SHA1(91a738c299d134d198bad648383be87345f4f475) ) + ROM_LOAD16_BYTE( "uw001007.u49", 0x000001, 0x020000, CRC(5c21e702) SHA1(c69e9dd7dfac82f116885610f90878f865e629b3) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "bp-u-002.u2", 0x000000, 0x080000, CRC(936cbaaa) SHA1(f7932ee310eb792b2776ae8a9d29e1a492761b11) ) + ROM_LOAD( "bp-u-001.u1", 0x080000, 0x080000, CRC(87813c48) SHA1(7ec9b08fe0490d277c531e2b6394862df4d5678d) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uw003.u13", 0x000000, 0x100000, CRC(e2f718eb) SHA1(fd085b68f76c8778816a1b7d47783b9dc20bff12) ) +ROM_END + +ROM_START( zingzip ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "uy001001.3", 0x000000, 0x040000, CRC(1a1687ec) SHA1(c840752dd87d8c1c30e6b31452173148e20538b1) ) + ROM_LOAD16_BYTE( "uy001002.4", 0x000001, 0x040000, CRC(62e3b0c4) SHA1(51a27fbf68a142dd132157bed1dc22acda3fa044) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "uy001006.64", 0x000000, 0x080000, CRC(46e4a7d8) SHA1(2c829e52d9aead351702335bf06aa0f337528306) ) + ROM_LOAD( "uy001005.63", 0x080000, 0x080000, CRC(4aac128e) SHA1(3ac64c84a40f86e29e33a218babcd21cae6dbfdb) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "uy001008.66", 0x000000, 0x100000, CRC(1dff7c4b) SHA1(94f581f4aae1ef417dce6e62a611a523205e8c27) ) // FIRST AND SECOND HALF IDENTICAL + ROM_LOAD16_BYTE( "uy001007.65", 0x100000, 0x080000, CRC(ec5b3ab9) SHA1(e82fb050ae4e2486e43418fcb5fa726d92c5cd21) ) + + ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "uy001010.68", 0x000000, 0x100000, CRC(bdbcdf03) SHA1(857f541697f76086ac6c761a3505678a3d3499df) ) // FIRST AND SECOND HALF IDENTICAL + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uy001011.70", 0x000000, 0x100000, CRC(bd845f55) SHA1(345b79cfcd8c924d6ba365814286e518438f10bc) ) // uy001017 + uy001018 +ROM_END + +ROM_START( atehate ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fs001001.evn", 0x000000, 0x080000, CRC(4af1f273) SHA1(79b28fe768aa634c31ee4e7687e62ebe78cf4014) ) + ROM_LOAD16_BYTE( "fs001002.odd", 0x000001, 0x080000, CRC(c7ca7a85) SHA1(1221f57d4aa3d2cb6662bc059978eafd65c1858f) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fs001003.gfx", 0x000000, 0x200000, CRC(8b17e431) SHA1(643fc62d5bad9941630ab621ecb3c69ded9d4536) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fs001004.pcm", 0x000000, 0x100000, CRC(f9344ce5) SHA1(cffbc235f3a8e9a5004e671d924affd321ec9eed) ) +ROM_END + +ROM_START( daioh ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fg1-001", 0x000000, 0x080000, CRC(104ae74a) SHA1(928c467e3ff98285a4828a927d851fcdf296849b) ) + ROM_LOAD16_BYTE( "fg1-002", 0x000001, 0x080000, CRC(e39a4e67) SHA1(c3f47e9d407f32dbfaf209d29b4446e4de8829a2) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fg1-004", 0x000000, 0x100000, CRC(9ab0533e) SHA1(b260ceb2b3e140971419329bee07a020171794f7) ) + ROM_LOAD( "fg1-003", 0x100000, 0x100000, CRC(1c9d51e2) SHA1(1d6236ab28d11676386834fd6e405fd40198e924) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "fg1-005", 0x000000, 0x200000, CRC(c25159b9) SHA1(4c9da3233223508389c3c0f277a00aedfc860da4) ) + + ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "fg1-006", 0x000000, 0x200000, CRC(2052c39a) SHA1(83a444a76e68aa711b0e25a5aa963ca876a6357e) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fg1-007", 0x000000, 0x100000, CRC(4a2fe9e0) SHA1(e55b6f301f842ff5d3c7a0041856695ac1d8a78f) ) +ROM_END + +ROM_START( msgundam ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_WORD_SWAP( "fa003002.u25", 0x000000, 0x080000, CRC(1cc72d4c) SHA1(5043d693b5a8116a077d5b6997b658cb287e2aa7) ) + ROM_LOAD16_WORD_SWAP( "fa001001.u20", 0x100000, 0x100000, CRC(fca139d0) SHA1(b56282c69f7ec64c697a48e42d59a2565401c032) ) + + ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fa001008.u21", 0x000000, 0x200000, CRC(e7accf48) SHA1(dca9d53bc9cf0ecb661358d5a3f388c4ce9388e7) ) + ROM_LOAD( "fa001007.u22", 0x200000, 0x200000, CRC(793198a6) SHA1(45f53870e74b14126680d18dd58dbbe01a6ef509) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "fa001006.u23", 0x000000, 0x100000, CRC(3b60365c) SHA1(bdf5a0b1b45eb75dbbb6725d1e5303716321aeb9) ) + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "fa001005.u24", 0x000000, 0x080000, CRC(8cd7ff86) SHA1(ce7eb90776e21239f8f52e822c636143506c6f9b) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fa001004.u26", 0x000000, 0x100000, CRC(b965f07c) SHA1(ff7827cc80655465ffbb732d55ba81f21f51a5ca) ) +ROM_END + +ROM_START( msgunda1 ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_WORD_SWAP( "fa002002.u25", 0x000000, 0x080000, CRC(dee3b083) SHA1(e2ad626aa0109906846dd9e9053ffc83b7bf4d2e) ) + ROM_LOAD16_WORD_SWAP( "fa001001.u20", 0x100000, 0x100000, CRC(fca139d0) SHA1(b56282c69f7ec64c697a48e42d59a2565401c032) ) + + ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fa001008.u21", 0x000000, 0x200000, CRC(e7accf48) SHA1(dca9d53bc9cf0ecb661358d5a3f388c4ce9388e7) ) + ROM_LOAD( "fa001007.u22", 0x200000, 0x200000, CRC(793198a6) SHA1(45f53870e74b14126680d18dd58dbbe01a6ef509) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "fa001006.u23", 0x000000, 0x100000, CRC(3b60365c) SHA1(bdf5a0b1b45eb75dbbb6725d1e5303716321aeb9) ) + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "fa001005.u24", 0x000000, 0x080000, CRC(8cd7ff86) SHA1(ce7eb90776e21239f8f52e822c636143506c6f9b) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fa001004.u26", 0x000000, 0x100000, CRC(b965f07c) SHA1(ff7827cc80655465ffbb732d55ba81f21f51a5ca) ) +ROM_END + +ROM_START( oisipuzl ) + ROM_REGION( 0x180000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_WORD_SWAP( "ss1u200.v10", 0x000000, 0x080000, CRC(f5e53baf) SHA1(057e8b35bc6f65634685b5d0cf38e12f2e62d72c) ) + /* Gap of 0x80000 bytes */ + ROM_LOAD16_WORD_SWAP( "ss1u201.v10", 0x100000, 0x080000, CRC(7a7ff5ae) SHA1(9e4da7ecc4d833c3ba4ddc6e5870fad53b9b2d2b) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* Sprites */ + ROM_LOAD( "ss1u306.v10", 0x000000, 0x080000, CRC(ce43a754) SHA1(3991042678badafee716b084c1768a794f144b1e) ) + ROM_LOAD( "ss1u307.v10", 0x080000, 0x080000, CRC(2170b7ec) SHA1(c9f3d12646d4e877bc2b656f977e21d927f241f6) ) + ROM_LOAD( "ss1u304.v10", 0x100000, 0x080000, CRC(546ab541) SHA1(aa96a79e3b0ba71f5e0fbb15e190d219630c2ba3) ) + ROM_LOAD( "ss1u305.v10", 0x180000, 0x080000, CRC(2a33e08b) SHA1(780cfe44a4d57b254bd0cfae8727dc77358027a8) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "ss1u23.v10", 0x000000, 0x080000, CRC(9fa60901) SHA1(3d42e4174ad566b6eeb488c7a4c51db9c1fef7af) ) + ROM_LOAD( "ss1u24.v10", 0x080000, 0x080000, CRC(c10eb4b3) SHA1(70a82a750b1d9c849cd92d4f73769bbf5962c771) ) + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "ss1u25.v10", 0x000000, 0x080000, CRC(56840728) SHA1(db61539fd84f0de35ee2077238ba3646c4960cc6) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ss1u26.v10", 0x000000, 0x080000, CRC(d452336b) SHA1(d3bf3cb383c40911758a60546f121c48087868e3) ) + ROM_LOAD( "ss1u27.v10", 0x080000, 0x080000, CRC(17fe921d) SHA1(7fc176b8eefad4f2b8532bfe62e7852d2be185ca) ) +ROM_END + +ROM_START( triplfun ) + ROM_REGION( 0x180000, REGION_CPU1, 0 ) + /* the program fails its self-check but thats probably because + its a bootleg, it does the same on the real board */ + ROM_LOAD16_BYTE( "05.bin", 0x000000, 0x40000, CRC(06eb3821) SHA1(51c67c87b5c28e693dfffd32d25cdb6d2a9448cf) ) + ROM_CONTINUE(0x100000,0x40000) + ROM_LOAD16_BYTE( "04.bin", 0x000001, 0x40000, CRC(37a5c46e) SHA1(80b49b422a7db64d9ba5896da2b01a4588a6cf62) ) + ROM_CONTINUE(0x100001,0x40000) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "08.bin", 0x000001, 0x80000, CRC(63a8f10f) SHA1(0a045d559b9edc9f335e6ec2d214d70c4959ec50) ) + ROM_LOAD16_BYTE( "09.bin", 0x000000, 0x80000, CRC(98cc8ca5) SHA1(1bd9d2d860e02ee4fea3d9592172690cb9d3acf2) ) + ROM_LOAD16_BYTE( "10.bin", 0x100001, 0x80000, CRC(20b0f282) SHA1(c98de63c1ad9dfe9b24f55966ccc5392c5ae82ba) ) + ROM_LOAD16_BYTE( "11.bin", 0x100000, 0x80000, CRC(276ef724) SHA1(e0c642dfd19542234abb0de68a66f8c36d9cb827) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "02.bin", 0x000000, 0x80000, CRC(4c0d1068) SHA1(cb77309474938765fd0582ab132f19fb5e21fca3) ) + ROM_LOAD16_BYTE( "03.bin", 0x000001, 0x80000, CRC(dba94e18) SHA1(3f54d874287e4ab96b2791503235488164d90cb1) ) + + ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "06.bin", 0x000000, 0x40000, CRC(8944bb72) SHA1(37cd0e2c8e99fb23ea70dc183a8aa0670c5f6b65) ) + ROM_LOAD16_BYTE( "07.bin", 0x000001, 0x40000, CRC(934a5d91) SHA1(aa19d2699b5ebdd99d59004005b0ce0c5140d192) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) + ROM_LOAD( "01.bin", 0x000000, 0x40000, CRC(c186a930) SHA1(e17e1a620e380f0737b80c7f160ad643979b2799) ) +ROM_END + +ROM_START( qzkklgy2 ) + ROM_REGION( 0x0c0000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_WORD_SWAP( "fn001001.106", 0x000000, 0x080000, CRC(7bf8eb17) SHA1(f2d1666e22f564d59b37ca00c8db34ca822fd142) ) + ROM_LOAD16_WORD_SWAP( "fn001003.107", 0x080000, 0x040000, CRC(ee6ef111) SHA1(6d9efac46ba01fff8784034801cba10e38b2c923) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fn001004.100", 0x000000, 0x100000, CRC(5ba139a2) SHA1(24fe19a7e5d2cd53bf3b1c71bf05020067f5e956) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "fn001005.104", 0x000000, 0x200000, CRC(95726a63) SHA1(e53ffc2815c4858bbfb5ff452c581bccb41854c9) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fn001006.105", 0x000000, 0x100000, CRC(83f201e6) SHA1(536e74788ad0e07451300a1ad3b127bc9d2d9063) ) +ROM_END + +ROM_START( wrofaero ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "u3.bin", 0x000000, 0x040000, CRC(9b896a97) SHA1(f4e768911705e6def5dc4a43cfc4146c48c80caf) ) + ROM_LOAD16_BYTE( "u4.bin", 0x000001, 0x040000, CRC(dda84846) SHA1(50142692e13190900bc752908b105b65c48ea911) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(f06ccd78) SHA1(1701bdac2c826327441cfe0039b4cadf8f3a4803) ) + ROM_LOAD( "u63.bin", 0x080000, 0x080000, CRC(2a602a1b) SHA1(b04fa743200d62bc25a6aa34efae53209f185f79) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "u66.bin", 0x000000, 0x080000, CRC(c9fc6a0c) SHA1(85ac0726221e3fedd80bd9b426d61471eb20ce46) ) + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "u68.bin", 0x000000, 0x080000, CRC(25c0c483) SHA1(2e705e7f0c66c3bc73e78ffb526606ab8be61d99) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "u69.bin", 0x000000, 0x080000, CRC(957ecd41) SHA1(3b37ba44b8b8f0f0de41c8c26c3dfdb391ba572c) ) + ROM_LOAD( "u70.bin", 0x080000, 0x080000, CRC(8d756fdf) SHA1(d66712a6aa19252f2c915ac66fc27df031fa9512) ) +ROM_END + +ROM_START( jjsquawk ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "jj-rom1.040", 0x000000, 0x040000, CRC(7b9af960) SHA1(1718d54b0c12ae148de44f9ccccf90c0182f7b4f) ) + ROM_CONTINUE ( 0x100000, 0x040000 ) + ROM_LOAD16_BYTE( "jj-rom2.040", 0x000001, 0x040000, CRC(47dd71a3) SHA1(e219d984a1cac484ce1e570b7849562a88e0903e) ) + ROM_CONTINUE ( 0x100001, 0x040000 ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "jj-rom9", 0x000000, 0x080000, CRC(27441cd3) SHA1(5867fc30c158e07f2d36ecab97b1d304383e6f35) ) + ROM_LOAD( "jj-rom10", 0x080000, 0x080000, CRC(ca2b42c4) SHA1(9b99b6618fe44a6c29a255e89dab72a0a56214df) ) + ROM_LOAD( "jj-rom7", 0x100000, 0x080000, CRC(62c45658) SHA1(82b1ea138e8f4b4ade7e44b31843aa2023c9dd71) ) + ROM_LOAD( "jj-rom8", 0x180000, 0x080000, CRC(2690c57b) SHA1(b880ded7715dffe12c4fea7ad7cb9c5133b73250) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD ( "jj-rom11", 0x000000, 0x080000, CRC(98b9f4b4) SHA1(de96708aebb428ddc413c3649caaec80c0c155bd) ) + ROM_LOAD ( "jj-rom12", 0x080000, 0x080000, CRC(d4aa916c) SHA1(d619d20c33f16ab06b529fc1717ad9b703acbabf) ) + ROM_LOAD16_BYTE( "jj-rom3.040", 0x100000, 0x080000, CRC(a5a35caf) SHA1(da4bdb7f0b319f8ff972a552d0134a73e5ac1b87) ) + + ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD ( "jj-rom14", 0x000000, 0x080000, CRC(274bbb48) SHA1(b8db632a9bbb7232d0b1debd67b3b453fd4989e6) ) + ROM_LOAD ( "jj-rom13", 0x080000, 0x080000, CRC(51e29871) SHA1(9d33283bd9a3f57602a55cfc9fafa49edd0be8c5) ) + ROM_LOAD16_BYTE( "jj-rom4.040", 0x100000, 0x080000, CRC(a235488e) SHA1(a45d02a4451defbef7fbdab15671955fab8ed76b) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "jj-rom5.040", 0x000000, 0x080000, CRC(d99f2879) SHA1(66e83a6bc9093d19c72bd8ef1ec0523cfe218250) ) + ROM_LOAD( "jj-rom6.040", 0x080000, 0x080000, CRC(9df1e478) SHA1(f41b55821187b417ad09e4a1f439c01a107d2674) ) +ROM_END + +ROM_START( kamenrid ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_WORD_SWAP( "fj001003.25", 0x000000, 0x080000, CRC(9b65d1b9) SHA1(a9183f817dbd1721cbb1a9049ca2bfc6acdf9f4a) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fj001005.21", 0x000000, 0x100000, CRC(5d031333) SHA1(7b603e7e79c9439b526687021c0be4a5965b4c11) ) + ROM_LOAD( "fj001006.22", 0x100000, 0x100000, CRC(cf28eb78) SHA1(b1b34e0e50b5d54ff3cff908c579031a326890a2) ) + + ROM_REGION( 0x80000, REGION_USER1, ROMREGION_DISPOSE ) /* Layers 1+2 */ + ROM_LOAD( "fj001007.152", 0x000000, 0x080000, CRC(d9ffe80b) SHA1(c1f919b53cd1b9874a5e5dc5640891e1b227cfc6) ) + + ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_COPY( REGION_USER1, 0x000000, 0x000000, 0x040000 ) + + ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_COPY( REGION_USER1, 0x040000, 0x000000, 0x040000 ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fj001008.26", 0x000000, 0x100000, CRC(45e2b329) SHA1(8526afae1aa9178570c906eb96438f174d174f4d) ) +ROM_END + +ROM_START( eightfrc ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "uy2-u4.u3", 0x000000, 0x040000, CRC(f1f249c5) SHA1(5277b7a15934e60e0ca305c318fb02d0ffb99d42) ) + ROM_LOAD16_BYTE( "uy2-u3.u4", 0x000001, 0x040000, CRC(6f2d8618) SHA1(ea243e6064b76bc5d6e831362ac9611a48ac94a7) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(f561ff2e) SHA1(1ed78c90bf876f24c2859a73a71764189cebddbe) ) + ROM_LOAD( "u63.bin", 0x080000, 0x080000, CRC(4c3f8366) SHA1(b25a27a67ae828d8fcf2c8d9d373ebdaacce9c4e) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "u66.bin", 0x000000, 0x100000, CRC(6fad2b7f) SHA1(469d185dc942bd4b54babf1d528e0e420f31d88b) ) + + ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(c17aad22) SHA1(eabbae2142cad3eef6a94d542ea03221c8228e94) ) + + ROM_REGION( 0x240000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "u70.bin", 0x000000, 0x0c0000, CRC(dfdb67a3) SHA1(0fed6fb498dcfc1276facd0ecd2dfde45ff671f2) ) + // skip c0000-fffff (banked region) + ROM_CONTINUE( 0x100000, 0x040000 ) + ROM_LOAD( "u69.bin", 0x140000, 0x100000, CRC(82ec08f1) SHA1(f17300d3cf990ef5c11056fd922f8cae0b2c918f) ) +ROM_END + +ROM_START( kiwame ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fp001001.bin", 0x000000, 0x040000, CRC(31b17e39) SHA1(4f001bf365d6c259ac8a13894e207a44c15e1d8b) ) + ROM_LOAD16_BYTE( "fp001002.bin", 0x000001, 0x040000, CRC(5a6e2efb) SHA1(a3b2ecfb5b91c6013370b359f89db0da8f120ad9) ) + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fp001003.bin", 0x000000, 0x080000, CRC(0f904421) SHA1(de5810746cfab1a4a7d1b055b1a97bc7fbc173dd) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fp001006.bin", 0x000000, 0x080000, CRC(96cf395d) SHA1(877b291598e3a42e5003b2f50a16d162348ce72d) ) + ROM_LOAD( "fp001005.bin", 0x080000, 0x080000, CRC(65b5fe9a) SHA1(35605be00c7c455551d18386fcb5ad013aa2907e) ) +ROM_END + +ROM_START( krzybowl ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fv001.002", 0x000000, 0x040000, CRC(8c03c75f) SHA1(e56c50440681a0b06d785000018c4213266f2a4e) ) + ROM_LOAD16_BYTE( "fv001.001", 0x000001, 0x040000, CRC(f0630beb) SHA1(1ddd4ab1bc5ab2b6461eb35c8093884185828d7b) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fv001.003", 0x000000, 0x080000, CRC(7de22749) SHA1(933a11f2d45667348b136d72806fc2e2f6f8d944) ) + ROM_LOAD( "fv001.004", 0x080000, 0x080000, CRC(c7d2fe32) SHA1(37291fa78c28be274e1240e081ea253ebe487e5c) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fv001.005", 0x000000, 0x080000, CRC(5e206062) SHA1(e47cfb6947df178f3547dfe61907571bcb84e4ac) ) + ROM_LOAD( "fv001.006", 0x080000, 0x080000, CRC(572a15e7) SHA1(b6a3e99e14a473b78ff48d1a46b20a0862d128e9) ) +ROM_END + +ROM_START( extdwnhl ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fw001002.201", 0x000000, 0x080000, CRC(24d21924) SHA1(9914a68a578f884b06305ffcd9aeed7d83df1c7b) ) + ROM_LOAD16_BYTE( "fw001001.200", 0x000001, 0x080000, CRC(fb12a28b) SHA1(89167c042dc535b5f639057ff04a8e28824790f2) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fw001003.202", 0x000000, 0x200000, CRC(ac9b31d5) SHA1(d362217ea0c474994e3c79ddcf87ee6688428ea5) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD ( "fw001004.206", 0x000000, 0x200000, CRC(0dcb1d72) SHA1(ffc84f46f06f46750bddd1a303ed83a28fa9572f) ) + ROM_LOAD16_BYTE( "fw001005.205", 0x200000, 0x100000, CRC(5c33b2f1) SHA1(9ea848aeaccbba0b71e60b39cf844665bd97928f) ) + + ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "fw001006.152", 0x000000, 0x200000, CRC(d00e8ddd) SHA1(e13692034afec1a0e86d19abfb9efa518b374147) ) // FIRST AND SECOND HALF IDENTICAL + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fw001007.026", 0x080000, 0x080000, CRC(16d84d7a) SHA1(fdc13776ba1ec9c48a33a9f2dfe8a0e55c54d89e) ) // swapped halves + ROM_CONTINUE( 0x000000, 0x080000 ) +ROM_END + +ROM_START( gundhara ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "bpgh-003.u3", 0x000000, 0x080000, CRC(14e9970a) SHA1(31964bd290cc94c40684adf3a5d129b1c3addc3b) ) + ROM_LOAD16_BYTE( "bpgh-004.u4", 0x000001, 0x080000, CRC(96dfc658) SHA1(f570bc49758535eb00d93ecce9f75832f97a0d8d) ) + ROM_LOAD16_BYTE( "bpgh-002.103", 0x100000, 0x080000, CRC(312f58e2) SHA1(a74819d2f84a00c233489893f12c9ab1a98459cf) ) + ROM_LOAD16_BYTE( "bpgh-001.102", 0x100001, 0x080000, CRC(8d23a23c) SHA1(9e9a6488db424c81a97edcb7115cc070fe35c077) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "bpgh-008.u64", 0x000000, 0x200000, CRC(7ed9d272) SHA1(2e9243b3ecee27c175234f9bb1893ab498090fce) ) + ROM_LOAD( "bpgh-006.201", 0x200000, 0x200000, CRC(5a81411d) SHA1(ebf90afe027a0dc0fa3022978677fb071b9083d1) ) + ROM_LOAD( "bpgh-007.u63", 0x400000, 0x200000, CRC(aa49ce7b) SHA1(fe0064d533bd895657b88a0ef96e835443a4077f) ) + ROM_LOAD( "bpgh-005.200", 0x600000, 0x200000, CRC(74138266) SHA1(c859acff358a61a32e5810ff369b9d5528137337) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD ( "bpgh-010.u66", 0x000000, 0x100000, CRC(b742f0b8) SHA1(9246846c9ee839d5d84f5e02cf4605afcfd6bf7a) ) + ROM_LOAD16_BYTE( "bpgh-009.u65", 0x100000, 0x080000, CRC(b768e666) SHA1(473fa52c16c0a9f321e6429947a3e0fc1ef22f7e) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD ( "bpgh-012.u68", 0x000000, 0x200000, CRC(edfda595) SHA1(5942181430d59c0c303cd1cbe753910c26c109a2) ) + ROM_LOAD16_BYTE( "bpgh-011.u67", 0x200000, 0x100000, CRC(49aff270) SHA1(de25209e520cd8747042078440ee20866097d0cb) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "bpgh-013.u70", 0x080000, 0x080000, CRC(0fa5d503) SHA1(fd7a80cd25c23e737cc2c3d11de2291e22313b58) ) // swapped halves + ROM_CONTINUE( 0x000000, 0x080000 ) +ROM_END + +ROM_START( sokonuke ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "001-001.bin", 0x000000, 0x080000, CRC(9d0aa3ca) SHA1(f641c46f2c6e7f82bb9184daac62938afb607c09) ) + ROM_LOAD16_BYTE( "001-002.bin", 0x000001, 0x080000, CRC(96f2ef5f) SHA1(264e82e192089230f208edf609dee575bf5c6513) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "001-003.bin", 0x000000, 0x200000, CRC(ab9ba897) SHA1(650c1eadf82f6e2b4c598495c867118277565411) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD ( "001-004.bin", 0x000000, 0x100000, CRC(34ca3540) SHA1(a9b6b395037870033a2a422453e304fd4666b99e) ) + ROM_LOAD16_BYTE( "001-005.bin", 0x100000, 0x080000, CRC(2b95d68d) SHA1(2fb480c31a6a7e180a68bd774b5f86348bea0761) ) + + ROM_REGION( 0x100, REGION_GFX3, ROMREGION_ERASE | ROMREGION_DISPOSE ) /* Layer 2 */ + /* Unused */ + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "001-006.bin", 0x080000, 0x080000, CRC(ecfac767) SHA1(3d05bdb2c2a8c7eb5fa77b0c4482f98d3947c6d6) ) + ROM_CONTINUE( 0x000000, 0x080000 ) +ROM_END + +ROM_START( zombraid ) + ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fy001003.3", 0x000000, 0x080000, CRC(0b34b8f7) SHA1(8c6d7d208ece08695169f2e06806e7e55c595eb2) ) + ROM_LOAD16_BYTE( "fy001004.4", 0x000001, 0x080000, CRC(71bfeb1a) SHA1(75747b0c6e655624a5dc2e4fa8f16a6a51bd8769) ) + ROM_LOAD16_BYTE( "fy001002.103", 0x100000, 0x080000, CRC(313fd68f) SHA1(792733acc72b4719b3f7f79b57fb874c71e8abfb) ) + ROM_LOAD16_BYTE( "fy001001.102", 0x100001, 0x080000, CRC(a0f61f13) SHA1(ba14c5ae0d0b3f217c130eeebd987dfde4c64c0d) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fy001006.200", 0x000000, 0x200000, CRC(e9ae99f7) SHA1(7ffd62e5db4a48d362c90e8fca991c5b63f22bd8) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD ( "fy001008.66", 0x000000, 0x200000, CRC(73d7b0e1) SHA1(aa332b563005edb1a6e20fbceaba68b56761a634) ) + ROM_LOAD16_BYTE( "fy001007.65", 0x200000, 0x100000, CRC(b2fc2c81) SHA1(2c529beccea353c3e90563215ddf3d8931e0fb83) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD ( "fy001010.68", 0x000000, 0x200000, CRC(8b40ed7a) SHA1(05fcd7947a8419cab5ed2305fba9a671911e4850) ) + ROM_LOAD16_BYTE( "fy001009.67", 0x200000, 0x100000, CRC(6bcca641) SHA1(49c9106e6f23e25e5b5917af11fc48d34457c61a) ) + + ROM_REGION( 0x480000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fy001012.b", 0x000000, 0x080000, CRC(fd30e102) SHA1(ae02f94f69aa301b0c37921ca1117e3ad20467b5) ) + // skip 80000-fffff (banked region) + ROM_CONTINUE( 0x100000, 0x180000 ) + ROM_LOAD( "fy001011.a", 0x280000, 0x200000, CRC(e3c431de) SHA1(1030adacbbfabc00231417e09f3de40e3052f65c) ) +ROM_END + +ROM_START( madshark ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fq001002.201", 0x000000, 0x080000, CRC(4286a811) SHA1(c8d4a28008548fe7d1d70758462205862142c56b) ) + ROM_LOAD16_BYTE( "fq001001.200", 0x000001, 0x080000, CRC(38bfa0ad) SHA1(59398ef69caa01f51cdfb20db23af494db658e5e) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "fq001004.202", 0x100000, 0x100000, CRC(e56a1b5e) SHA1(f0dd34122fd7db15cc56714b72b60d07ccb59222) ) + ROM_CONTINUE( 0x000000, 0x100000 ) + + ROM_REGION( 0x400000, REGION_USER1, ROMREGION_DISPOSE ) /* Layers 1+2 */ + ROM_LOAD ( "fq001006.152", 0x000000, 0x200000, CRC(3bc5e8e4) SHA1(74cdf1bb2e58bef29c6f4371ff40f64472bff3ce) ) + ROM_LOAD16_BYTE( "fq001005.205", 0x200000, 0x100000, CRC(5f6c6d4a) SHA1(eed5661738282a14ce89917335fd1b695eb7351e) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_COPY( REGION_USER1, 0x000000, 0x000000, 0x100000 ) + ROM_COPY( REGION_USER1, 0x200000, 0x100000, 0x100000 ) + + ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_COPY( REGION_USER1, 0x100000, 0x000000, 0x100000 ) + ROM_COPY( REGION_USER1, 0x300000, 0x100000, 0x100000 ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fq001007.26", 0x000000, 0x100000, CRC(e4b33c13) SHA1(c4f9532de7a09c80f5a74c3a386e99a0f546846f) ) +ROM_END + +ROM_START( utoukond ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "93uta010.3", 0x000000, 0x080000, CRC(c486ef5e) SHA1(36e4ef4805d543216269f1161028d8a436f72284) ) + ROM_LOAD16_BYTE( "93uta011.4", 0x000001, 0x080000, CRC(978978f7) SHA1(a7fd3a4ce3a7c6c9d9bdd60df29b4f427abf4f92) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "93uta009.112", 0x0000, 0x10000, CRC(67f18483) SHA1(d9af58dec09c317ccab65553d53d82c8cce2bfb9) ) + + ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* Sprites */ + ROM_LOAD( "93uta04.64", 0x000000, 0x100000, CRC(9cba0538) SHA1(83278918b6ad160d3e53c178b3cad252e7b0edfb) ) + ROM_LOAD( "93uta02.201", 0x100000, 0x100000, CRC(884fedfa) SHA1(3710003bd2e55bba03e2720fcab0fe080163222d) ) + ROM_LOAD( "93uta03.63", 0x200000, 0x100000, CRC(818484a5) SHA1(642252abe56e26aa8376db2e25b192b11586d1e4) ) + ROM_LOAD( "93uta01.200", 0x300000, 0x100000, CRC(364de841) SHA1(a025bd57f60eac05c0d7b4fb69b4b4979f357e6b) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "93uta05.66", 0x000000, 0x100000, CRC(5e640bfb) SHA1(37f30ae6ab9d7860da6ca6a343fa9adf4b3d355c) ) + + ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "93uta07.68", 0x000000, 0x100000, CRC(67bdd036) SHA1(527b6a67e7a62263bee738dc82d6ff289ab54853) ) + ROM_LOAD( "93uta06.67", 0x100000, 0x100000, CRC(294c26e4) SHA1(459ec7f8c8db4f1e3906d5db240298405bda991c) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "93uta08.69", 0x000000, 0x100000, CRC(3d50bbcd) SHA1(e9b78d08466e1f9b42f11999bb53b6deceb81a12) ) +ROM_END + +ROM_START( neobattl ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "bp923001.u45", 0x000000, 0x020000, CRC(0d0aeb73) SHA1(5ca631d5d68e53029f379d9877a056997c6c6afa) ) // 1CC74: "SD GUNDAM v0.00. 1992/11/04 10:04:33" + ROM_LOAD16_BYTE( "bp923002.u46", 0x000001, 0x020000, CRC(9731fbbc) SHA1(196c913fb67496f9da2943ad1e69edf89cb65fdf) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "bp923003.u15", 0x00000, 0x80000, CRC(91ca98a1) SHA1(b02b362e3a6118f52d9e1a262ca11aecef887b00) ) + ROM_LOAD( "bp923004.u9", 0x80000, 0x80000, CRC(15c678e3) SHA1(8c0fa41a1f4e7b4e1c90faaeec7f6c910cc3ad0b) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "bp923005.u4", 0x000000, 0x100000, CRC(7c0e37be) SHA1(5d5779de948f986971a82db2a5a4302044c3257a) ) +ROM_END + +ROM_START( pairlove ) + ROM_REGION( 0x040000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ut2-001-001.1a", 0x000000, 0x010000, CRC(083338b7) SHA1(d775c1618272967713bd3f3164fdfc42dc5c36ca) ) + ROM_LOAD16_BYTE( "ut2-001-002.3a", 0x000001, 0x010000, CRC(39d88aae) SHA1(8498dfb221e9b34a889594fe5ed0431814b733e6) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "ut2-001-004.5j", 0x000000, 0x080000, CRC(fdc47b26) SHA1(0de51bcf67b909ac9578f0d1b14af8a4c758aacf) ) + ROM_LOAD( "ut2-001-005.5l", 0x080000, 0x080000, CRC(076f94a2) SHA1(94b4b41a497dea1b6db5396bd7cd81ebcb217735) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ut2-001-003.12a", 0x000000, 0x080000, CRC(900219a9) SHA1(3260a900df25beba597bf947a9fbb6f7392827d7) ) + ROM_RELOAD( 0x080000, 0x080000 ) +ROM_END + +ROM_START( crazyfgt ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "rom.u3", 0x00000, 0x40000, CRC(bf333e75) SHA1(be124558ca49963cc56d3255c546587558b61926) ) + ROM_LOAD16_BYTE( "rom.u4", 0x00001, 0x40000, CRC(505e9d47) SHA1(3797d396a24e46b891de4c40aafe960d1cf5f161) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD( "rom.u228", 0x000000, 0x80000, CRC(7181618e) SHA1(57c5aced95b0a11a43dc9bd532290f067113e65a) ) + ROM_LOAD( "rom.u227", 0x080000, 0x80000, CRC(7905b5f2) SHA1(633f86bf2be620afbe8012ade5d1e59c359a25d4) ) + ROM_LOAD( "rom.u226", 0x100000, 0x80000, CRC(ef210e34) SHA1(99241ffcbc8af889c8ab6f0bc67eedef27d455f0) ) + ROM_LOAD( "rom.u225", 0x180000, 0x80000, CRC(451b4419) SHA1(ab32b3c452b566ddfc64c0a80a257c3baadd8f41) ) + + ROM_REGION( 0xc0000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 1 */ + ROM_LOAD( "rom.u67", 0x000000, 0x40000, CRC(ec8c6831) SHA1(e0ef1c2e539c1780fc5816ec950d33cb2a69d55e) ) + ROM_LOAD( "rom.u68", 0x040000, 0x80000, CRC(2124312e) SHA1(1c6053c87a975bfdf910e75bd3e38d0898806ea0) ) + + ROM_REGION( 0xc0000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 2 */ + ROM_LOAD( "rom.u65", 0x000000, 0x40000, CRC(58448231) SHA1(711f24831777719f6a7b143f4f1bfd14f5a9ed4c) ) + ROM_LOAD( "rom.u66", 0x040000, 0x80000, CRC(c6f7735b) SHA1(0e77045f82d0bf659be5dbfe21cfc8f223faeee9) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* OKI samples */ + ROM_LOAD( "rom.u85", 0x00000, 0x40000, CRC(7b95d0bb) SHA1(f16dfd639eed6856e3ab93704caef592a07ba367) ) +ROM_END + + +static READ16_HANDLER( twineagl_debug_r ) +{ + /* At several points in the code, the program checks if four + consecutive bytes in this range are equal to a string, and if they + are, it fetches an address from the following 4 bytes and jumps there. + They are probably hooks for debug routines to be found in an extra ROM. + + 0000 "MT00" + jump address + 0008 "MT01" + jump address + 0010 "MT02" + jump address + 0018 "MT03" + jump address + 0020 "MT04" + jump address + 0028 "MT05" + jump address + 0030 "MT06" + jump address + 0038 "MT07" + jump address + 0040 "WZ08" + jump address + 0080 "KB00" + jump address + 00C0 "MT18" + jump address + 00C8 "MT19" + jump address + 00D0 "MT1a" + jump address + 00D8 "MT1b" + jump address + 00E0 "MT1c" + jump address + 00E8 "MT1d" + jump address + 00F0 "MT1e" + jump address + 00F8 "MT1f" + jump address + */ + + return 0; +} + +/* Extra RAM ? Check code at 0x00ba90 */ +/* 2000F8 = A3 enables it, 2000F8 = 00 disables? see downtown too */ +static UINT8 xram[8]; +static READ16_HANDLER( twineagl_200100_r ) +{ +logerror("%04x: twineagl_200100_r %d\n",activecpu_get_pc(),offset); + return xram[offset]; +} +static WRITE16_HANDLER( twineagl_200100_w ) +{ +logerror("%04x: twineagl_200100_w %d = %02x\n",activecpu_get_pc(),offset,data); + if (ACCESSING_LSB) + xram[offset] = data & 0xff; +} + +static DRIVER_INIT( twineagl ) +{ + /* debug? */ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x800000, 0x8000ff, 0, 0, twineagl_debug_r); + + /* This allows 2 simultaneous players and the use of the "Copyright" Dip Switch. */ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x200100, 0x20010f, 0, 0, twineagl_200100_r); + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x200100, 0x20010f, 0, 0, twineagl_200100_w); +} + + +/* Protection? NVRAM is handled writing commands here */ +static UINT16 downtown_protection[0x200/2]; +static READ16_HANDLER( downtown_protection_r ) +{ + int job = downtown_protection[0xf8/2] & 0xff; + + switch (job) + { + case 0xa3: + { + static const UINT8 word[] = "WALTZ0"; + if (offset >= 0x100/2 && offset <= 0x10a/2) return word[offset-0x100/2]; + else return 0; + } + default: + return downtown_protection[offset] & 0xff; + } +} + +static WRITE16_HANDLER( downtown_protection_w ) +{ + COMBINE_DATA(&downtown_protection[offset]); +} + +static DRIVER_INIT( downtown ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x200000, 0x2001ff, 0, 0, downtown_protection_r); + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x200000, 0x2001ff, 0, 0, downtown_protection_w); +} + + +static READ16_HANDLER( arbalest_debug_r ) +{ + /* At some points in the code, the program checks if four + consecutive bytes in this range are equal to a string, and if they + are, it fetches an address from the following 4 bytes and jumps there. + They are probably hooks for debug routines to be found in an extra ROM. + + 0000 "CHK1" + jump address + 0008 "CHK2" + jump address + */ + + return 0; +} + +static DRIVER_INIT( arbalest ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x80000, 0x8000f, 0, 0, arbalest_debug_r); +} + + +static DRIVER_INIT( metafox ) +{ + UINT16 *RAM = (UINT16 *) memory_region(REGION_CPU1); + + /* This game uses the 21c000-21ffff area for protection? */ +// memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x21c000, 0x21ffff, 0, 0, MRA16_NOP); +// memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x21c000, 0x21ffff, 0, 0, MWA16_NOP); + + RAM[0x8ab1c/2] = 0x4e71; // patch protection test: "cp error" + RAM[0x8ab1e/2] = 0x4e71; + RAM[0x8ab20/2] = 0x4e71; +} + + +static DRIVER_INIT ( blandia ) +{ + /* rearrange the gfx data so it can be decoded in the same way as the other set */ + + int rom_size; + UINT8 *buf; + UINT8 *rom; + int rpos; + + rom_size = 0x80000; + buf = malloc_or_die(rom_size); + + rom = memory_region(REGION_GFX2) + 0x40000; + + for (rpos = 0; rpos < rom_size/2; rpos++) { + buf[rpos+0x40000] = rom[rpos*2]; + buf[rpos] = rom[rpos*2+1]; + } + + memcpy( rom, buf, rom_size ); + + rom = memory_region(REGION_GFX3) + 0x40000; + + for (rpos = 0; rpos < rom_size/2; rpos++) { + buf[rpos+0x40000] = rom[rpos*2]; + buf[rpos] = rom[rpos*2+1]; + } + + memcpy( rom, buf, rom_size ); + + free(buf); +} + + +static DRIVER_INIT( eightfrc ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500004, 0x500005, 0, 0, MRA16_NOP); // watchdog?? +} + + +static DRIVER_INIT( zombraid ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xf00002, 0xf00003, 0, 0, zombraid_gun_r); + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xf00000, 0xf00001, 0, 0, zombraid_gun_w); +} + + +static DRIVER_INIT( kiwame ) +{ + UINT16 *RAM = (UINT16 *) memory_region(REGION_CPU1); + + /* WARNING: This game writes to the interrupt vector + table. Lev 1 routine address is stored at $100 */ + + RAM[0x64/2] = 0x0000; + RAM[0x66/2] = 0x0dca; +} + + +static DRIVER_INIT( rezon ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500006, 0x500007, 0, 0, MRA16_NOP); // irq ack? +} + +static DRIVER_INIT(wiggie) +{ + UINT8 *src; + int len; + UINT8 temp[16]; + int i,j; + + src = memory_region(REGION_CPU1); + len = memory_region_length(REGION_CPU1); + for (i = 0;i < len;i += 16) + { + memcpy(temp,&src[i],16); + for (j = 0;j < 16;j++) + { + static int convtable[16] = + { + 0x0, 0x1, 0x8, 0x9, + 0x2, 0x3, 0xa, 0xb, + 0x4, 0x5, 0xc, 0xd, + 0x6, 0x7, 0xe, 0xf + }; + + src[i+j] = temp[convtable[j]]; + } + + + } + + /* X1_010 is not used. */ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x100000, 0x103fff, 0, 0, MRA16_NOP); + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x100000, 0x103fff, 0, 0, MWA16_NOP); + + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xB00008, 0xB00009, 0, 0, wiggie_soundlatch_w); + +} + +static DRIVER_INIT( crazyfgt ) +{ + // protection check at boot + UINT16 *RAM = (UINT16 *) memory_region(REGION_CPU1); + RAM[0x1078/2] = 0x4e71; + + // fixed priorities? + seta_vregs = (UINT16*)auto_malloc(sizeof(UINT16)*3); + seta_vregs[0] = seta_vregs[1] = seta_vregs[2] = 0; + + driver_init_blandia(machine); +} + +/*************************************************************************** + + Game Drivers + +***************************************************************************/ + +/* Working Games: */ + +/* 68000 + 65C02 */ +GAME( 1987, tndrcade, 0, tndrcade, tndrcade, 0, ROT270, "[Seta] (Taito license)", "Thundercade / Twin Formation" , 0) // Title/License: DSW +GAME( 1987, tndrcadj, tndrcade, tndrcade, tndrcadj, 0, ROT270, "[Seta] (Taito license)", "Tokusyu Butai U.A.G. (Japan)" , 0) // License: DSW +GAME( 1988, twineagl, 0, twineagl, twineagl, twineagl, ROT270, "Seta (Taito license)", "Twin Eagle - Revenge Joe's Brother" , 0) // Country/License: DSW +GAME( 1989, downtown, 0, downtown, downtown, downtown, ROT270, "Seta", "DownTown (Set 1)" , 0) // Country/License: DSW +GAME( 1989, downtow2, downtown, downtown, downtown, downtown, ROT270, "Seta", "DownTown (Set 2)" , 0) // Country/License: DSW +GAME( 1989, downtowp, downtown, downtown, downtown, downtown, ROT270, "Seta", "DownTown (prototype)" , 0) // Country/License: DSW +GAME( 1989, usclssic, 0, usclssic, usclssic, 0, ROT270, "Seta", "U.S. Classic" , 0) // Country/License: DSW +GAME( 1989, calibr50, 0, calibr50, calibr50, 0, ROT270, "Athena / Seta", "Caliber 50" , 0) // Country/License: DSW +GAME( 1989, arbalest, 0, metafox, arbalest, arbalest, ROT270, "Seta", "Arbalester" , 0) // Country/License: DSW +GAME( 1989, metafox, 0, metafox, metafox, metafox, ROT270, "Seta", "Meta Fox" , 0) // Country/License: DSW + +/* 68000 */ +GAME( 1989, drgnunit, 0, drgnunit, drgnunit, 0, ROT0, "Seta", "Dragon Unit / Castle of Dragon", 0 ) +GAME( 1989, wits, 0, wits, wits, 0, ROT0, "Athena (Visco license)", "Wit's (Japan)" , 0) // Country/License: DSW +GAME( 1990, thunderl, 0, thunderl, thunderl, 0, ROT270, "Seta", "Thunder & Lightning" , 0) // Country/License: DSW +GAME( 1994, wiggie, 0, wiggie, thunderl, wiggie, ROT270, "Promat", "Wiggie Waggie", GAME_IMPERFECT_GRAPHICS ) // hack of Thunder & Lightning +GAME( 1991, rezon, 0, rezon, rezon, rezon, ROT0, "Allumer", "Rezon", 0 ) +GAME( 1992, rezont, rezon, rezon, rezont, rezon, ROT0, "Allumer (Taito license)","Rezon (Taito)", 0 ) +GAME( 1991, stg, 0, drgnunit, stg, 0, ROT270, "Athena / Tecmo", "Strike Gunner S.T.G", 0 ) +GAME( 1991, pairlove, 0, pairlove, pairlove, 0, ROT270, "Athena", "Pairs Love", 0 ) +GAME( 1992, blandia, 0, blandia, blandia, blandia, ROT0, "Allumer", "Blandia", 0 ) +GAME( 1992, blandiap, blandia, blandiap, blandia, 0, ROT0, "Allumer", "Blandia (prototype)", 0 ) +GAME( 1992, blockcar, 0, blockcar, blockcar, 0, ROT90, "Visco", "Block Carnival / Thunder & Lightning 2" , 0) // Title: DSW +GAME( 1992, qzkklogy, 0, drgnunit, qzkklogy, 0, ROT0, "Tecmo", "Quiz Kokology", 0 ) +GAME( 1992, neobattl, 0, umanclub, neobattl, 0, ROT270, "Banpresto / Sotsu Agency. Sunrise", "SD Gundam Neo Battling (Japan)", 0 ) +GAME( 1992, umanclub, 0, umanclub, umanclub, 0, ROT0, "Tsuburaya Prod. / Banpresto", "Ultraman Club - Tatakae! Ultraman Kyoudai!!", 0 ) +GAME( 1992, zingzip, 0, zingzip, zingzip, 0, ROT270, "Allumer + Tecmo", "Zing Zing Zip", 0 ) +GAME( 1993, atehate, 0, atehate, atehate, 0, ROT0, "Athena", "Athena no Hatena ?", 0 ) +GAME( 1993, daioh, 0, daioh, daioh, 0, ROT270, "Athena", "Daioh", 0 ) +GAME( 1993, jjsquawk, 0, jjsquawk, jjsquawk, 0, ROT0, "Athena / Able", "J. J. Squawkers", 0 ) +GAME( 1993, kamenrid, 0, kamenrid, kamenrid, 0, ROT0, "Toei / Banpresto", "Masked Riders Club Battle Race", 0 ) +GAME( 1993, madshark, 0, madshark, madshark, 0, ROT270, "Allumer", "Mad Shark", 0 ) +GAME( 1993, msgundam, 0, msgundam, msgundam, 0, ROT0, "Banpresto", "Mobile Suit Gundam", 0 ) +GAME( 1993, msgunda1, msgundam, msgundam, msgunda1, 0, ROT0, "Banpresto", "Mobile Suit Gundam (Japan)", 0 ) +GAME( 1993, oisipuzl, 0, oisipuzl, oisipuzl, 0, ROT0, "Sunsoft + Atlus", "Oishii Puzzle Ha Irimasenka", 0 ) +GAME( 1993, qzkklgy2, 0, qzkklgy2, qzkklgy2, 0, ROT0, "Tecmo", "Quiz Kokology 2", 0 ) +GAME( 1993, triplfun, oisipuzl, triplfun, oisipuzl, 0, ROT0, "bootleg", "Triple Fun", 0 ) +GAME( 1993, utoukond, 0, utoukond, utoukond, 0, ROT0, "Banpresto + Tsuburaya Prod.", "Ultra Toukon Densetsu (Japan)", 0 ) +GAME( 1993, wrofaero, 0, wrofaero, wrofaero, 0, ROT270, "Yang Cheng", "War of Aero - Project MEIOU", 0 ) +GAME( 1994, eightfrc, 0, eightfrc, eightfrc, eightfrc, ROT90, "Tecmo", "Eight Forces", 0 ) +GAME( 1994, kiwame, 0, kiwame, kiwame, kiwame, ROT0, "Athena", "Pro Mahjong Kiwame", 0 ) +GAME( 1994, krzybowl, 0, krzybowl, krzybowl, 0, ROT270, "American Sammy", "Krazy Bowl", 0 ) +GAME( 1995, extdwnhl, 0, extdwnhl, extdwnhl, 0, ROT0, "Sammy Industries Japan", "Extreme Downhill (v1.5)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1995, gundhara, 0, gundhara, gundhara, 0, ROT270, "Banpresto", "Gundhara", 0 ) +GAME( 1995, sokonuke, 0, extdwnhl, sokonuke, 0, ROT0, "Sammy Industries", "Sokonuke Taisen Game (Japan)", GAME_IMPERFECT_SOUND ) +GAME( 1995, zombraid, 0, gundhara, zombraid, zombraid, ROT0, "American Sammy", "Zombie Raid (US)", GAME_NO_COCKTAIL ) +GAME( 1996, crazyfgt, 0, crazyfgt, crazyfgt, crazyfgt, ROT0, "Subsino", "Crazy Fight", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |