summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/funworld/funworld.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/funworld/funworld.cpp')
-rw-r--r--src/mame/funworld/funworld.cpp9043
1 files changed, 9043 insertions, 0 deletions
diff --git a/src/mame/funworld/funworld.cpp b/src/mame/funworld/funworld.cpp
new file mode 100644
index 00000000000..1695e0d2e0c
--- /dev/null
+++ b/src/mame/funworld/funworld.cpp
@@ -0,0 +1,9043 @@
+// license:BSD-3-Clause
+// copyright-holders:Roberto Fresca, Grull Osgo, Andreas Naive, Peter Ferrie
+/*********************************************************************************************
+
+ Fun World / Amatic / TAB / Impera
+ Series 7000 hardware.
+
+ 65C02/65SC02 + 2x 6821 PIAs + 6845 CRTC + AY-3-8910.
+ From raw, to different ways of encryption. Even through custom CPUs.
+
+ Also from CMC, Dino4 (encrypted), and Leopard 4.
+
+ Driver by Roberto Fresca.
+ Based on a preliminary work of Curt Coder & Peter Trauner.
+
+
+**********************************************************************************************
+
+ Games running on this hardware:
+
+ * Jolly Card (German, set 1), TAB Austria, 1985.
+ * Jolly Card (German, set 2), TAB Austria, 1985.
+ * Jolly Card (3x3 deal), TAB Austria, 1985.
+ * Jolly Card Professional 2.0 (MZS Tech), MZS Tech, 1993.
+ * Jolly Card Professional 2.0 (Spale Soft), Spale Soft, 2000.
+ * Jolly Card (Evona Electronic), Evona Electronic 1998.
+ * Jolly Card (Croatian, set 1), TAB Austria, 1985.
+ * Jolly Card (Croatian, set 2), Soft Design, 1993.
+ * Super Joly 2000 - 3x, M.P. 1985.
+ * Jolly Card (German, Fun World, bootleg), Inter Games, 1986.
+ * Jolly Card (Spanish, blue TAB board, encrypted), TAB Austria, 1992.
+ * Jolly Card (Italian, different colors, set 1), bootleg, 1990.
+ * Jolly Card (Italian, different colors, set 2), bootleg, 1990.
+ * Jolly Card (Italian, bootleg, set 1), bootleg, 1990.
+ * Jolly Card (Italian, bootleg, set 2), bootleg, 1993.
+ * Jolly Card (Italian, bootleg, set 3), bootleg, 1990.
+ * Jolly Game (V1, Otti Karl logo), bootleg, 1993.
+ * Bonus Card (German), Fun World, 1986.
+ * Bonus Card (German, ATG Electronic hack), Fun World, 1986.
+ * Big Deal (Hungarian, set 1), Fun World, 1986.
+ * Big Deal (Hungarian, set 2), Fun World, 1986.
+ * Cuore 1 (Italian, set 1), C.M.C., 1996.
+ * Cuore 1 (Italian, set 2), C.M.C., 1996.
+ * Cuore 1 (Italian, set 3), C.M.C., 1996.
+ * Cuore 1 (Italian, set 4), C.M.C., 1996.
+ * Cuore 1 (Italian, set 5), C.M.C., 1996.
+ * Cuore 1 (Italian, set 6), C.M.C., 1996.
+ * Cuore 1 (Italian, set 7), bootleg, 1996.
+ * Elephant Family (Italian, new), C.M.C., 1997.
+ * Elephant Family (Italian, old), C.M.C., 1996.
+ * Pool 10 (Italian, set 1), C.M.C., 1996.
+ * Pool 10 (Italian, set 2), C.M.C., 1996.
+ * Pool 10 (Italian, set 3), C.M.C., 1996.
+ * Pool 10 (Italian, set 4), C.M.C., 1997.
+ * Pool 10 (Italian, set 5), C.M.C., 1996.
+ * Pool 10 (Italian, set 6), C.M.C., 1996.
+ * Pool 10 (Italian, set 7), C.M.C., 1997.
+ * Pool 10 (Italian, set 8), C.M.C., 1997.
+ * Pool 10 (Italian, set 9), bootleg (R.B.), 1996.
+ * Pool 10 (Italian, set 10), C.M.C., 1997.
+ * Magic 10 Nevada (bootleg of Pool 10), bootleg (Magic), 1997.
+ * New Biliard 98 (Pool 10 hack), bootleg, 1998.
+ * Royal (Pool 10 hack), unknown, 2001.
+ * Tortuga Family (Italian), C.M.C., 1997.
+ * Pot Game (Italian), C.M.C., 1996.
+ * Bottle 10 (Italian, set 1), C.M.C., 1996.
+ * Bottle 10 (Italian, set 2), C.M.C., 1996.
+ * Luna Park (set 1, dual program), unknown, 1998.
+ * Luna Park (set 2, dual program), unknown, 1998.
+ * Luna Park (set 3), unknown, 1998.
+ * Crystal Colours (CMC hardware), J.C.D. srl, 1998.
+ * Royal Card (German, set 1), TAB Austria, 1991.
+ * Royal Card (German, set 2), TAB Austria, 1991.
+ * Royal Card (German/Polish, set 3), TAB Austria, 1991.
+ * Royal Card (German, set 4), TAB Austria, 1991.
+ * Royal Card (German, set 5), TAB Austria, 1991.
+ * Royal Card (German, set 6), TAB Austria, 1991.
+ * Royal Card (TAB original), TAB Austria, 1991.
+ * Royal Card (German, set 7, CMC C1030 HW), bootleg, 1991.
+ * Royal Card (German, set 8), TAB Austria, 1991.
+ * Royal Card (French), TAB Austria, 1991.
+ * Royal Card v2.0 Professional, Digital Dreams, 1993.
+ * Royal Card / Royal Jackpot (with a third draw)(encrypted), TAB / Video Klein, 1991
+ * Witch Royal (Export version 2.1), Video Klein, 199?.
+ * Lucky Lady (3x3 deal), TAB Austria, 1991.
+ * Lucky Lady (4x1 aces), TAB Austria, 1991.
+ * Magic Card II (Bulgarian), Impera, 1996.
+ * Magic Card II (Nov, Yugoslavian), Impera, 1996.
+ * Magic Card II (green TAB or Impera board), Impera, 1996.
+ * Magic Card II (blue TAB board, encrypted), Impera, 1996.
+ * Royal Vegas Joker Card (Slow deal), Fun World, 1993.
+ * Royal Vegas Joker Card (Fast deal), Soft Design, 1993.
+ * Royal Vegas Joker Card (Fast deal, english gfx), Soft Design, 1993.
+ * Royal Vegas Joker Card (Fast deal, Mile), Mile, 1993.
+ * Jolly Joker (98bet, set 1). Impera, 199?.
+ * Jolly Joker (98bet, set 2). Impera, 199?.
+ * Jolly Joker (40bet, higher paytable), Impera, 1985.
+ * Jolly Joker (40bet, lower paytable), Impera, 1985.
+ * Jolly Joker (Apple Time), Apple Time, 199?.
+ * Jolly Joker (original program, interleaved GFX, Impera logo), Impera, 199?.
+ * Jolly Joker (original program, interleaved GFX, no logo), Impera, 199?.
+ * Jolly Joker (original program, interleaved GFX, Otti Karl logo, set 1), Impera, 199?.
+ * Jolly Joker (original program, interleaved GFX, Otti Karl logo, set 2), Impera, 199?.
+ * Jolly Joker (Solid State module in suicide board). Impera, 199?.
+ * Multi Win (Ver.0167, encrypted), Fun World, 1992.
+ * Multi Win (Ver.0091, encrypted), Fun World, 1991.
+ * Multi Win (EPM7032, encrypted), Amatic, 2001.
+ * Power Card (Ver 0263, encrypted), Fun World, 1993.
+ * Mega Card (Ver.0210, encrypted), Fun World, 1993.
+ * Mega Card (Ver.0053, encrypted), Fun World, 1992.
+ * Joker Card (encrypted), Fun World, 1993.
+ * Joker Card 300 (Ver.A267BC, encrypted), Amatic Trading, 1993.
+ * Royal Card (Evona, Polish, encrypted), Evona Electronic, 1991.
+ * Saloon (French, encrypted), unknown, 199?.
+ * Nevada (French, encrypted), unknown, 199?.
+ * Jolly Card (Italian, blue TAB board, encrypted), bootleg, 199?.
+ * Jolly Card (Italian, encrypted bootleg, set 1), bootleg, 1990.
+ * Jolly Card (Italian, encrypted bootleg, set 2), bootleg, 1993.
+ * Jolly Card (Italian, encrypted bootleg, set 3), bootleg (Cleco), 1993.
+ * Zabavni Karti (Bulgarian, cyrillic, encrypted), bootleg (Cleco), 1993.
+ * Pool 10 (Italian, Dino 4 hardware, encrypted), C.M.C., 1997.
+ * Royal Card (Italian, Dino 4 hardware, encrypted), unknown, 1998.
+ * China Town (Ver 1B, Dino4 HW), unknown, 1998.
+ * Mongolfier New (Italian), unknown, 199?.
+ * Soccer New (Italian), unknown, 199?.
+ * Fun World Quiz (German), Fun World, 198?.
+ * Fun World Quiz (German, 12-11-1990), Fun World, 1990.
+ * Fun World Quiz (German, 27-04-1990), Fun World, 1990.
+ * Novo Play Multi Card / Club Card, Admiral/Novomatic, 1986.
+ * Novo Play Club Card (V6.2H), Novo Play International, 1992.
+ * Novo Play Club Card (V3.3H), Novo Play International, 1991.
+ * Joker Card (Inter Games), Inter Games, 1991.
+ * Unknown Fun World A7-11 game 1, Fun World, 1985.
+ * Unknown Fun World A7-11 game 2, Fun World, 1985.
+ * Unknown Fun World A0-1 game, Fun World, 1991.
+ * Joker Card / Multi Card (Epoxy brick CPU), Fun World, 1991.
+ * Gratis Poker (V.204, set 1), Mega Soft, 1995.
+ * Gratis Poker (V.204, set 2), Mega Soft, 1995.
+ * Gkoulit (encrypted GFX), JK Amusement, 1995.
+ * Reflex Cards (English, serial protected), TAB Austria, 1999.
+ * Club Card (ver. 1.1 English), Impera / Mega Tech, 199?.
+ * Royal Card (stealth with NES multigame, set 1), bootleg, 1991.
+ * Royal Card (stealth with NES multigame, set 2), bootleg, 1991.
+ * Royal Card (stealth with MSX multigame), bootleg, 1991.
+
+
+**********************************************************************************************
+
+ The hardware is generally composed by:
+
+ CPU: 1x 65SC02 or 65C02 at 2MHz.
+ Sound: 1x AY-3-8910 or YM2149F (AY8910 compatible) at 2MHz.
+ I/O: 2x 6821 (PIA)
+ Video: 1x 6845 (CRTC)
+ RAM: 1x 6116
+ NVRAM: 1x 6264
+ ROMs: 3x 27256 (or 27512 in some cases)
+ PROMs: 1x 82S147 (or similar. 512 bytes)
+ PLDs: 1 to 4 PALs, GALs or PEELs
+ Clock: 1x Crystal: 16MHz.
+
+
+ All current games are running from a slightly modified to heavily hacked hardware.
+ Color palettes are normally stored in format GGBBBRRR inside a bipolar color PROM.
+
+ - bits -
+ 7654 3210
+ ---- -xxx Red component.
+ --xx x--- Blue component.
+ xx-- ---- Green component.
+
+
+ The hardware was designed to manage 4096 tiles with a size of 8x4 pixels each.
+ Also support 4bpp graphics and the palette limitation is 8 bits for color codes (256 x 16 colors).
+ It means the hardware was designed for more elaborated graphics than Jolly Card games...
+ Color PROMs from current games are 512 bytes length, but they only can use the first or the last 256 bytes.
+
+ Normal hardware capabilities:
+
+ - bits -
+ 7654 3210
+ xxxx xx-- tiles color (game tiles) ;codes 0x00-0xdc
+ xxx- x-xx tiles color (title). :codes 0xe9-0xeb
+ xxxx -xxx tiles color (background). ;codes 0xf1-0xf7
+
+
+ About protection, there are several degrees of protection found in the sets:
+
+ - There are writes to unknown offsets (out of the normal memory range), and some
+ checks later to see if the data is still there.
+
+ - There are checks for code in unused RAM and therefore jumps to offsets where there
+ are not pieces of code in RAM or just RAM is inexistent.
+ I think this is to avoid a "ROM swap" that allow the software to run in other game boards.
+
+ - There are "masked" unused inputs.
+ The software is polling the unused input status and expect a special value to boot the game.
+
+ - There are parts of code that are very complex and twisted with fake jumps to inexistent code,
+ or pretending to initialize fake devices.
+
+ - Encryption.
+
+ A) Encrypted CPU. At least five Fun World boards have custom encrypted CPUs:
+
+ - Joker Card from Vesely Svet, Mega Card, Power Card and Multi Win,
+ use custom unknown CPUs and also encrypted/scrambled prg roms.
+ - Royal Card (slovak, encrypted) from Evona Electronic seems to use a block
+ with CPU + extras (ICs, TTL, etc) to manage the encryption.
+
+ B) General encryption. Managed through hardware:
+
+ - All games using the blue TAB PCB with 2x HY18CV85 (electrically-erasable PLDs), use
+ complex operations for each byte nibble. See DRIVER_INIT for the final algorithm.
+ - Saloon (french) use bitswaps to address & data in program, graphics and color PROM.
+ - Dino4 hardware games have address/data bitswap in program, and data bitswap (sometimes
+ with extra boolean XOR operations) in graphics.
+
+ - Microcontroller. Some games (like Soccer New and Mongolfier New are using an extra MCU mainly
+ for protection.
+
+ - Mirrored video and color RAM. A derivative of CMC hardware uses this trick to avoid ROM swaps.
+ If you run Luna Park in a regular CMC board, you'll get an unplayable mess of graphics.
+
+
+ GENERAL NOTES:
+
+ - It takes 46 seconds for the bigdeal/jolycdat games to boot up
+ after the initial screen is displayed!!!
+
+ - The default DIP switch settings must be used when first booting up
+ the games to allow them to complete the NVRAM initialization.
+
+ - Almost all games: Start game, press and hold Service1 & Service2, press
+ reset (F3), release Service1/2 and press reset (F3) again.
+ Now the NVRAM has been initialized.
+
+ - Royalcdb needs a hard reset after NVRAM initialization.
+
+ - For games that allow remote credits, after NVRAM init change the payout
+ DIP switch from "Hopper" to "Manual Payout".
+
+
+
+ NOTES BY GAME/SET:
+
+ * Pool 10
+ * Cuore 1
+ * Elephant Family
+ * Tortuga Family
+ * Pot Game
+ * Bottle 10
+ * Luna Park
+
+ In Italy many people became addicted to videopokers. They put so much money on them,
+ and they had to sell the house. Also some engineers modified videopokers to do less
+ wins and so on... Because of this the government did some laws in order to regulate
+ videopokers wins. Starting from around 1996/1997 there were subsequent laws because
+ engineers always found a way to elude them.
+
+ Today all the videopokers need to be connected via AAMS net (a government society de-
+ dicated to games) which check if the videopoker is regular. Nowadays it's difficult
+ to trick and the videopoker has to give 75% of wins. This has made videopoker market
+ to collapse and infact there aren't many videopokers left.
+
+ Also because the laws changed very often and old videopokers became illegal was a
+ very bad thing for bar owners because they couldn't earn enough money.
+
+ Pool 10 (now found!), apparently was the "father" of other italian gambling games.
+ As soon as it became illegal, was converted to Cuore 1, Elephant Family, Tortuga Family
+ and maybe other games. So you can see that engineers always found a simple way to elude
+ the law.
+
+ There is another set of Cuore 1. I didn't include it because the only difference with
+ the supported set is the program rom that is double sized, having identical halves.
+
+ Luna Park, is running in a modified hardware with video RAM mirrored from 4000-4FFF to
+ 6000-6FFF and color RAM mirrored from 5000-5FFF to 7000-7FFF. The program writes criti-
+ cal graphics (cans, strings and partial screen cleans) to the mirrored range, so if you
+ run this program in a regular CMC hardware, you'll get an unplayable mess of graphics.
+ Also PRG rom higher address line is connected to DIP switch #1 so it should have 2 games
+ in the same PCB (2 revisions?).
+
+
+ There is at least one missing game in the family... 'Hyppo Family', also from C.M.C.
+ This game should be located and dumped.
+
+
+ --- Super Game ---
+
+ If you have some points accumulated and need to grab the tokens/tickets, you must to play
+ a bonus game called SUPER GAME to get the points out. To enter the bonus game, you must
+ press STOP5 in the attract mode. The payout system is through this game.
+
+ 5 themed items will be shown (cuores, balls, elephants, etc... depending of the game).
+ The joker will start to move from item to item quickly, but decreasing the speed gradually.
+ To beat the game, you need to push the start button in the exact moment when the joker is
+ located exactly in the center of the screen (item 3).
+
+ Depending of the DIP switches settings, you can grab the prize manually pressing the SCARICA
+ (payout) button, and then TICKET or HOPPER buttons. Press TICKET button to print a 100 points
+ ticket. Press HOPPER button to get tokens x10 points.
+
+ You have 1 attempt for each 100 earned points. If you lose the game, you lose the points.
+
+
+ * Bonus Card (German)
+ * Big Deal (Hungarian)
+
+ These ones seems to have normal RAM instead of NVRAM.
+ Going through the code, there's not any NVRAM initialization routine through service 1 & 2.
+
+
+ * Jolly Card Professional 2.0 (MZS Tech & Spale Soft)
+
+ Each 1st boot, this game show a generated code. You must enter this code in a DOS program to
+ get the input codes necessary to allow boot the game.
+
+ This set is one of the most wanted for customers because is a real SCAM.
+ The program has 2 hidden menues that allow change parameters without knowledge of the players.
+
+ See more at ROM_LOAD section...
+
+
+ * Jolly Card (Evona Electronic)
+
+ This set has some hidden features.
+ In the service 2 screen, press service 1 to enter to a message edit mode.
+
+
+ * Jolly Card (croatian sets) and Jolly Card Professional 2.0
+
+ These games don't operate with regular coins/tokens. Only remote credits are allowed.
+
+
+ * Royal Card Professional 2.0 (Digital Dreams)
+
+ Same generated code as Jolly Card Professional.
+
+
+ * Magic Card II (Impera)
+
+ Impera made 2 graphics sets for this game. One of them is encrypted, and meant for the TAB blue board.
+ This board has two HY18CV85 (electrically-erasable PLD) that handle the encryption.
+ In another hand, the sound has some weird things, but is confirmed that happen in the real thing.
+
+ The game resolution seems to change 'on the fly' when entering the input test mode.
+ There aren't any writes to the m6845 registers to manage these changes.
+
+ Regarding the CPU, it's a Mexican Rockwell R65C02 with some mods respect the regular/stock 65C02.
+ Some CPU instructions seems to be changed. The following piece of code at $C1A8 is very clear:
+
+ C1A8: A0 00 ldy #$00 ; clear Y register to use as counter.
+
+ C1AA: B9 9D C1 lda $C19D,y ; load PIA port address
+ C1AD: 85 06 sta $06 ; into $06-$07 ZP vector.
+ C1AF: B9 92 C1 lda $C192,y ;
+ C1B2: 85 07 sta $07 ;
+ C1B4: C0 0B cpy #$0B
+ C1B6: B0 0C bcs $C1C4
+
+ ... load values to store into Accumulator...
+ ...
+ C1C6: 91 06 sta ($06),y ; store value in PIA port, indexed (Y).
+ C1C8: C8 iny ; increment Y
+ C1C9: C0 0C cpy #$0C ; finish?
+ C1CB: D0 DD bne $C1AA ; if not, branch to load a new PIA address.
+
+ In this example, as soon as Y register increments, the indexed writes go out of range.
+ To get this piece of code working and initialize the PIAs properly, the instruction 0x91 should be
+ "sta ($ZP)" instead of Y indexed. (like instruction 0x92 in stock 65c02's).
+
+
+ * Jolly Joker (Impera)
+
+ To boot this game for 1st time, DSW should be in the following position:
+ 1=ON 2=OFF 3=ON 4=OFF 5=OFF 6=ON 7=ON 8=OFF
+
+ Press RESET (key F3) and then SERVICE1 & SERVICE2 (keys 9 & 0), then RESET (key F3).
+ When numbers start to fill the screen, press RESET (key F3) again to start the game.
+
+
+ * Joker Card 300 (Ver.A267BC, encrypted).
+ * Multi Win (Fun World)
+ * Power Card (Fun World)
+ * Mega Card (Fun World)
+
+ These sets seems to run in the same modified hardware. They are highly encrypted.
+
+ Joker Card has a title nag at boot. You can wait to finish nearly one minute,
+ or simply press SERVICE 2 (key 0), then START (key 1) to enter the game.
+
+ Joker Card has a weird way of play. The more you bet, the more cards burns to
+ get better chances. You're not betting really. Just buying removed cards.
+
+
+ * Mongolfier New
+ * Soccer New
+
+ These games are based in Royal Card. They are running in a heavely modified Royal Card
+ hardware with a microcontroller as an extra (protection?) component and a TDA2003 as
+ audio amplifier.
+
+ The extra microcontroller is a 8 bit (PLCC-44) TSC87C52-16CB from Intel (now dumped!)
+
+ Each set has double sized ROMs. One half contains the proper set and the other half store
+ a complete Royal Card set, so... Is possible the existence of a shortcut,'easter egg',
+ simple hack or DIP switches combination to enable the Royal Card game.
+
+ These games should be moved to a new driver in a near future, as soon as we know a bit more
+ about them and start to implement the missing pieces for an accurate emulation.
+
+
+ * Saloon
+
+ This game is totally encrypted. No PIAs to drive I/O. The PCB has printed "LEOPARDO 5", so we
+ can expect a game called the same way to appear.
+
+ This game should be moved to a new driver in a near future, as soon as we know a bit more about it.
+
+
+ * Fun World Quiz
+
+ Beschreibung / Description
+ --------------------------
+
+ Fur OES 5,-- Einwurf werden 3 Kredite gegeben. Fur einen Kredit bekommt der Spieler
+ 500 Spielpunkte. Bei jeder Frage kann der Spieler 100, 500 oder alle Punkte einsetzen.
+ Wird die Frage richtig beantwortet, wird der Einsatz aufaddiert. Erreicht der Spieler
+ nach 5 Fragen mehr als 2500 Punkte, bekommt er Bonusfragen. Das Spiel endet bei einer
+ falschen Beantwortung der Frage.
+
+ Insertion of ATS 5,- (Austrian Schilling coin) yields 5 credits. For 1 credit a player
+ receives 500 points. At each question a player can bet 100, 500 or all points. If a
+ question is answered correctly, the bet is added to the points. If a player reaches
+ more than 2500 points after 5 questions, he gets bonus questions. The game is over
+ after an incorrect answer.
+
+ Besides notes....
+
+ This machine is meant to work as "amusement", with high scores like another regular arcade.
+ You can set it as "bet mode", allowing to choose the amount of points to play, but can't be
+ turned to gambling mode (no payout, keyout, etc) for pubs, etc...
+
+ In bookkeeping mode (DIP switch #1):
+
+ Keep joystick left to clear bookkeeping.
+ Keep joystick up to clear high scores.
+ Keep joystick down to clear credits.
+ Keep joystick right to exit bookkeeping.
+
+ If the game has credits loaded, the bookkeeping mode will start
+ as soon as the current game ends.
+
+
+ * Novo Play Multi Card / Club Card
+
+ This game needs a default NVRAM to work. There is a special ROM that need to be
+ placed into the program socket, then turn ON the board till the OK message appear.
+ After this operation, just switch the special ROM with the regular program.
+ The board now is ready to operate.
+
+ To program the game, enter the service mode (Key 9), and then keep pressed both
+ HOLD2 & HOLD4 at least for 5 seconds....
+
+ You can see:
+
+ C1 C2 REMOTE IN-MAX/IN-MIN CONT
+
+ (Coin A) (Coin B) (Remote credits) (Bet Max & Minimum) (Difficult)
+
+
+ C2: Coin B, from 1-20... Selectable through HOLD1.
+ REMOTE: Remote Credits, from 10-100... Selectable through HOLD3.
+ IN-MAX: Maximum Bet allowed. From 1-40. selectable through HOLD4.
+ IN_MIN: Minimum Bet allowed. From 1-5. selectable through HOLD4, keeping COLLECT pressed.
+ CONT: Earnings control... From 1-4, selectable through HOLD5. 4 is the highest payment.
+
+ Press DEAL/DRAW to exit the mode.
+
+
+ * Unknown Royal Card on Dino4 hardware....
+
+ This one is really strange. The game is running in a Dino4 hardware, plus a daughterboard
+ with a mexican Rockwell R65C02 + an unknown PLCC. The program/gfx are totally decrypted.
+ The game vectors are $C122 (RESET) and $C20F (IRQ)
+
+ The code starts...
+
+ C122: A2 FF LDX #$FF ; load 0xFF to reg X
+ C124: 9A TXS ; transfer to the stack
+ C125: 78 SEI ; set interrupts
+ C126: D8 CLD ; clear decimal
+ C127: 18 CLC ; clear carry
+ C128: A9 4C LDA #$4C ;\
+ C12A: 8D 00 00 STA $0000 ; \
+ C12D: A9 10 LDA #$10 ; \ set 4C 10 C2 (JMP $C210) into $0000
+ C12F: 8D 01 00 STA $0001 ; /
+ C132: A9 C2 LDA #$C2 ; /
+ C134: 8D 02 00 STA $0002 ;/
+ C137: 4C DC 48 JMP $48DC ; jump to $48DC...
+
+ And the IRQ vector pointed code... does nothing!
+
+ C20F: 40 RTI ; return from interrupt
+
+ And the code pointed from $0000...
+
+ C210: 48 PHA ; transfer accumulator to stack
+ C211: AD 01 0A LDA $0A01 ; read the PIA #2 input
+ C214: 29 F7 AND #$F7 ; \ compare with 0xF7
+ C216: CD 01 0A CMP $0A01 ; /
+ C219: D0 02 BNE $C21D ; if not... jump to $C21D
+ C21B: 09 08 ORA #$08 ; \ clean the value
+ C21D: 8D 01 0A STA $0A01 ; /
+ C220: 68 PLA ; take out from the stack the previous accumulator value
+ C221: 40 RTI ; return from interrupt
+
+ The board was later connected to a fluke, and the pieces of code dumped from the real hardware,
+ match 100% the ones I decrypted here. Even with the game working properly in the real hardware.
+ The only visible changes are in the NVRAM, where the $0000 offset hasn't the JMP $C210 instruction
+ injected at the start...
+
+
+ * Joker Card / Multi Card (Epoxy brick CPU)
+
+ These series are running in a derivative hardware with epoxy CPU brick.
+ CPU is RP65C02A, with 2x Toshiba TC5565APL-10 RAMs. 1x Intel D27128A ROM.
+ and 1x PAL16L8B.
+
+ The main program is inside the battery backed RAM, and need to be dumped.
+ See more notes below in the ROM loading.
+
+
+ * Royal Card (Italian, Dino 4 hardware, encrypted)
+
+ This game is highly encrypted and is running in Dino 4 hardware.
+ To initialize the NVRAM, you should press both service buttons together (keys 0-9) and then reset (key F3).
+ Due to the way the routine is programmed, the procedure is time sensitive and often doesn't work.
+
+ This game has a programming menu through the service mode (key 0), then pressing STOP 2 & STOP 4 together
+ and waiting for some seconds.
+
+ You can see two options...
+
+ STOP 1 ---- OPZIONI 1
+ STOP 3 ---- OPZIONI 2
+
+ OPZIONI 1:
+ You can change game parameters for Gioco AB, Play Max, Play Min, Difficolt, Bonus, and Rilancio.
+
+ OPZIONI 2:
+ You can change game parameters for Tabella Vincite, Velocita Simboli, Control Double, Valore Ticket,
+ Limit Credit, and Limit Scarico.
+
+ In both cases, you can exit pressing the START button (key 1).
+
+
+ * Jolly Card (Italian, bootleg, set 2)
+
+ This game PCB has a TI EP910DC-30 CPLD, like others Italian bootlegs
+ that have an Altera EP910PC CPLD on board.
+
+ To init NVRAM, DIP switches must be in the following positions:
+ OFF ON ON ON ON ON ON ON
+
+ Then press SERVICE 1 + SERVICE 2 and reset, then release both buttons.
+
+ Once NVRAM is initialized, the hardware still complains about it due
+ to a hardware check (see more at the rom load), but is now working.
+
+ The game seems to work for a currency that needs decimal values.
+ Maybe Italian Lires...
+
+
+ * Jolly Card (German, Fun World, bootleg)
+
+ This game is a bootleg made from a Fun World original program.
+ The game has hidden features, as a program mode.
+
+ In the Service menu (key 0), press HOLD 1 & HOLD 2 together for
+ some seconds and the programming menu will appear.
+
+
+ * Royal Card (Evona, Polish, encrypted)
+
+ This is another highly encrypted game.
+ To initialize the NVRAM all DIP switches must be in ON. Keep pressed both service buttons
+ (keys 9 & 0) and then RESET (key F3), then release first the service 1 (key 9) and then
+ service 2 (key 0).
+
+ The game does some odd things, due to a possible bug in the
+ decryption scheme. (see the TO DO list).
+
+
+ * Zabavni Karti (ЗАБАВНИ КАРТИ)
+ (cyrillic, Bulgarian, encrypted)
+
+ This is a Bulgarian Jolly Card pseudo-clone, with cyrillic charset.
+ ЗАБАВНИ КАРТИ means "Fun cards" / "Cards for fun".
+
+ The game has encrypted GFX. Same style as blue TAB board.
+
+ This is a timed game. You coin for an amount of playing time.
+ Once the time counter ends, all earned credits/bonus dissapear.
+
+ It looks like an amusement version.
+
+ ---------------------------------------------------------------------
+
+ To initialize the NVRAM you must...
+
+ 1) Press SETUP (НАСТРОЙКА) (key 0)
+ 2) Keep pressed CANCEL (ИЗЧИСТВАНЕ) button (key N)
+ 3) Press the following STOP (СТОП) buttons (keys Z-X-C-V-B) sequence:
+
+ 1 - 5 - 4 - 3 - 4 - 2
+
+ (you will see the initialization message)
+
+ 4) Release the CANCEL (ИЗЧИСТВАНЕ) button (key N)
+
+ ---------------------------------------------------------------------
+
+ To configure the game...
+
+ 1) Press SETUP (НАСТРОЙКА) (key 0)
+
+ You'll see the following counters and menu:
+
+ КАРЕ С ЖОКЕР 0 (five of a kind)
+ КЕНТ ФЛЕШ РОЯЛ 0 (royal flush)
+ КЕНТ ФЛЕШ 0 (straight flush)
+ КАРЕ 0 (poker)
+ ФУЛ 0 (full house)
+ ФЛЕШ 0 (flush)
+ КЕНТА 0 (straight)
+ ТРОЙКА 0 (three of a kind)
+ 2 ДВОЙКИ 0 (two pairs)
+ ГОЛЯМА ДВОЙКИ 0 (high pair)
+
+
+ ВРЕМЕ: Натиснете бутон Стоп3
+ TIME: Press the Stop3 button
+
+ Изиграно време, мин. : 00
+ Played time, min. : 00
+
+ Платено време, мин. : 00
+ Paid time, min. : 00
+
+
+ НАСТРОЙКА: Натиснете бутони Стоп2 и Стоп4
+ SETUP: Press the Stop2 and Stop4 buttons
+
+ Бутон Стоп1 -- Време за една игра, мин. (1-99, 5 by default)
+ Stop1 Button -- Time for one game, min. (1-99, 5 by default)
+
+ Бутон Стоп2 -- Залог (1-99, 10 by default)
+ Stop2 button - Bet (1-99, 10 by default)
+
+ Бутон Стоп3 -- Ниво на трудност (0-3, 2 by default)
+ Stop3 button -- Level of difficulty (0-3, 2 by default)
+
+ ИЗХОД: Натиснете бутон Старт
+ EXIT: Press the Start button
+
+
+ НУЛИРАНЕ: Стоп1 нулира часовника
+ RESET: Stop1 resets the clock
+
+ ИЗЧИСТВАНЕ: Натиснете 2 с. бутон Изчистване
+ CLEAR: Press the Cancel button for 2 seconds
+
+ ИЗХОД: Натиснете бутон Старт
+ EXIT: Press the Start button
+
+ ---------------------------------------------------------------------
+
+ You can enter the test mode activating the 'TEST MODE' DIP switch.
+ (only will work if you have some adquired time)
+
+ For AUTOHOLD (АВТОСТОП) function, set the 'AUTO HOLD' DIP switch ON,
+ then toggle ON/OFF the function pressing CANCEL (ИЗЧИСТВАНЕ) button (key N).
+
+
+**********************************************************************************************
+
+ Memory Map (generic)
+ --------------------
+
+ $0000 - $07FF NVRAM // All registers and settings.
+ $0800 - $0803 PIA1 // Input Ports 0 & 1.
+ $0A00 - $0A03 PIA2 // Input Ports 2 & 3.
+ $0C00 - $0C00 AY-8910 (R/C) // Read/Control.
+ $0C01 - $0C01 AY-8910 (W) // Write. Lamps through output ports.
+ $0E00 - $0E00 CRTC6845 (A) // MC6845 addressing.
+ $0E01 - $0E01 CRTC6845 (R/W) // MC6845 Read/Write.
+
+ $2000 - $2FFF VideoRAM (bonuscrd/bigdeal)
+ $3000 - $3FFF ColorRAM (bonuscrd/bigdeal)
+
+ $4000 - $4FFF VideoRAM (magicrd2/royalcrd)
+ $5000 - $5FFF ColorRAM (magicrd2/royalcrd)
+
+ $6000 - $6FFF VideoRAM (CMC italian games)
+ $7000 - $7FFF ColorRAM (CMC italian games)
+
+ $8000 - $FFFF ROM (almost all games)
+
+
+ *** MC6845 Initialization ***
+
+ ----------------------------------------------------------------------------------------------------------------------
+ register: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
+ ----------------------------------------------------------------------------------------------------------------------
+ jollycrd: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ jolycdae: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ jolycdcr: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ jolycdit: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ jolycdab: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+
+ bigdeal: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+
+ cuoreuno: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ elephfam: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ pool10: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ tortufam: 0x7C 0x60 0x65 0x08 0x1E 0x08 0x1D 0x1D 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+
+ royalcrd: 0x7C 0x60 0x65 0xA8 0x1E 0x08 0x1D 0x1C 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ magicrd2: 0x7B 0x70 0x66 0xA8 0x24 0x08 0x22 0x22 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+
+ monglfir: 0x7C 0x60 0x65 0xA8 0x1E 0x08 0x1D 0x1C 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ soccernw: 0x7C 0x60 0x65 0xA8 0x1E 0x08 0x1D 0x1C 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+
+ rcdino4: 0x7C 0x60 0x65 0x08 0x21 0x08 0x1F 0x1F 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+ chinatow: 0x7C 0x60 0x65 0x08 0x21 0x08 0x1F 0x1F 0x00 0x07 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00.
+
+
+**********************************************************************************************
+
+
+ *** TO DO ***
+
+ - Figure out the remaining PIA connections for almost all games.
+ - Reverse-engineering the boot code of Jolly Card Professional 2.0,
+ and Royal Card Professional 2.0 to get the proper codes to boot.
+ - Analyze the unknown writes to $2000/$4000 in some games.
+ - Check for the reads to the ay8910 output ports in some games.
+ - Implement the MCU in monglfir and soccernw.
+
+
+*********************************************************************************************/
+
+#include "emu.h"
+#include "funworld.h"
+
+#include "cpu/m6502/g65sc02.h"
+#include "cpu/m6502/r65c02.h"
+#include "machine/6821pia.h"
+#include "machine/nvram.h"
+#include "screen.h"
+#include "speaker.h"
+
+#include "bonuscrd.lh"
+#include "jollycrd.lh"
+#include "novoplay.lh"
+#include "royalcrd.lh"
+
+
+#define MASTER_CLOCK XTAL(16'000'000)
+#define CPU_CLOCK (MASTER_CLOCK/8)
+#define SND_CLOCK (MASTER_CLOCK/8)
+#define CRTC_CLOCK (MASTER_CLOCK/8)
+
+
+/**********************
+* Read/Write Handlers *
+**********************/
+
+void funworld_state::funworld_lamp_a_w(uint8_t data)
+{
+/* - bits -
+ 7654 3210
+ ---- ---x Credit In counter.
+ ---- --x- HOLD1 & HOLD3 lamps (inverted).
+ ---- -x-- Credit Out counter.
+ ---- x--- HOLD2 lamp (inverted).
+ ---x ---- Unknown (inverted).
+ --x- ---- CANCEL / COLLECT (inverted).
+ -x-- ---- Hopper Motor (inverted).
+ x--- ---- HOLD4 lamp.
+*/
+ m_lamps[0] = BIT(~data, 1); // Hold1 (inverted)
+ m_lamps[2] = BIT(~data, 1); // Hold3 (inverted, see pinouts)
+
+ m_lamps[1] = BIT(~data, 3); // Hold2 / Low (inverted)
+ m_lamps[3] = BIT(data, 7); // Hold4 / High
+ m_lamps[5] = BIT(~data, 5); // Cancel / Collect (inverted)
+
+ machine().bookkeeping().coin_counter_w(0, data & 0x01); // Credit In counter
+ machine().bookkeeping().coin_counter_w(7, data & 0x04); // Credit Out counter, mapped as coin 8
+
+ m_lamps[7] = BIT(~data, 6); // Hopper Motor (inverted)
+
+// popmessage("Lamps A: %02X", (data ^ 0xff));
+}
+
+void funworld_state::funworld_lamp_b_w(uint8_t data)
+{
+/* - bits -
+ 7654 3210
+ ---- ---x HOLD5 lamp.
+ ---- --x- DEAL/DRAW lamp.
+ ---- -x-- Unknown (inverted).
+ xxxx x--- Unknown.
+*/
+ m_lamps[4] = BIT(data, 0); // Hold5 / Bet
+ m_lamps[6] = BIT(data, 1); // Start / Deal / Draw
+
+// popmessage("Lamps B: %02X", data);
+}
+
+void funworld_state::pia1_ca2_w(int state)
+{
+// TAB and Impera games are writing 0x01 constantly, and 0x00 with each screen change.
+// This line is tied to some sort of reset circuitery.
+
+// popmessage("PIA1 CA2: %02X", state);
+}
+
+
+/*************************
+* Memory map information *
+*************************/
+
+void funworld_state::funworld_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x2000, 0x2fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x3000, 0x3fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x4000, 0x7fff).rom();
+ map(0x8000, 0xbfff).rom();
+ map(0xc000, 0xffff).rom();
+}
+
+static uint8_t funquiz_question_bank = 0x80;
+
+uint8_t funworld_state::questions_r(offs_t offset)
+{
+ uint8_t* quiz = memregion("questions")->base();
+ int extraoffset = ((funquiz_question_bank & 0x1f) * 0x8000);
+
+ // if 0x80 is set, read the 2nd half of the question rom (contains header info)
+ if (funquiz_question_bank & 0x80) extraoffset += 0x4000;
+
+ return quiz[offset + extraoffset];
+}
+
+void funworld_state::question_bank_w(uint8_t data)
+{
+// printf("question bank write %02x\n", data);
+ funquiz_question_bank = data;
+}
+
+void funworld_state::funquiz_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+
+ map(0x1800, 0x1800).w(FUNC(funworld_state::question_bank_w));
+
+ map(0x2000, 0x2fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x3000, 0x3fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x4000, 0x7fff).r(FUNC(funworld_state::questions_r));
+
+ map(0xc000, 0xffff).rom();
+}
+
+void funworld_state::magicrd2_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x2c00, 0x2cff).ram(); // range for protection
+ map(0x3600, 0x36ff).ram(); // some games use $3603-05 range for protection
+ map(0x3c00, 0x3cff).ram(); // range for protection
+ map(0x4000, 0x4fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x5000, 0x5fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x6000, 0xffff).rom();
+}
+
+void funworld_state::clubcard_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x4000, 0x4fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x5000, 0x5fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x8000, 0xbfff).rom();
+ map(0xc000, 0xffff).rom();
+}
+
+void funworld_state::cuoreuno_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x2000, 0x2000).nopr(); // some unknown reads
+ map(0x3e00, 0x3fff).ram(); // some games use $3e03-05 range for protection
+ map(0x4000, 0x5fff).rom(); // used by rcdino4 (dino4 hw )
+ map(0x6000, 0x6fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x7000, 0x7fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x8000, 0xffff).rom();
+}
+
+
+uint8_t chinatow_state::chinatow_r_32f0(offs_t offset)
+{
+ logerror("read from 0x32f0 at offset %02X\n", offset);
+ switch (offset)
+ {
+ case 0: return 0xfe;
+ }
+ return 0xff;
+}
+
+void chinatow_state::chinatow_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x2000, 0x2000).nopr(); // some unknown reads
+ map(0x32f0, 0x32ff).r(FUNC(chinatow_state::chinatow_r_32f0));
+ map(0x4000, 0x5fff).rom(); // used by rcdino4 (dino4 hw)
+ map(0x6000, 0x6fff).ram().w(FUNC(chinatow_state::funworld_videoram_w)).share("videoram");
+ map(0x7000, 0x7fff).ram().w(FUNC(chinatow_state::funworld_colorram_w)).share("colorram");
+ map(0x8000, 0xffff).rom();
+}
+
+void lunapark_state::lunapark_map(address_map &map)
+{ // mirrored video RAM 4000/5000 to 6000/7000
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x4000, 0x4fff).ram().w(FUNC(lunapark_state::funworld_videoram_w)).share("videoram").mirror(0x2000);
+ map(0x5000, 0x5fff).ram().w(FUNC(lunapark_state::funworld_colorram_w)).share("colorram").mirror(0x2000);
+ map(0x8000, 0xffff).bankr("bank1");
+}
+
+void funworld_state::saloon_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0800).portr("IN0");
+ map(0x0801, 0x0801).portr("IN1");
+ map(0x0802, 0x0802).portr("IN2"); // maybe
+ map(0x0808, 0x0808).portr("IN3"); // maybe
+ map(0x0810, 0x0810).nopw();
+ map(0x0a00, 0x0a00).portr("IN4");
+ map(0x0a01, 0x0a01).portr("IN5");
+ map(0x081b, 0x081b).portw("I2C_CK");
+ map(0x081c, 0x081c).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x081d, 0x081d).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x1000, 0x1000).portr("I2C_DI").portw("I2C_DO");
+ map(0x1800, 0x1800).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x1800, 0x1801).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x2000, 0x2003).nopr(); // check for extra ROM in $2000. if exist just jump to $2100
+ map(0x6000, 0x6fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x7000, 0x7fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x8000, 0xffff).rom();
+}
+/*
+ Unknown R/W
+ -----------
+
+ 0800 RW ;input?
+ 081a W ;unknown (W 0x20)
+ 081b W ;unknown (W 0x20 & 0x30)
+ 0810 W ;unknown
+ 0a01 RW ;input?
+ 1000 RW ;input? (W 0xff & 0xfd)
+
+*/
+
+void funworld_state::witchryl_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x4000, 0x4fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x5000, 0x5fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x6000, 0x6000).portr("DSW2");
+ map(0x8000, 0xffff).rom();
+}
+
+uint8_t intergames_state::crtc_or_psg_r(offs_t offset)
+{
+ if (m_crtc_selected)
+ return m_crtc->register_r();
+ else
+ return m_ay8910->data_r(); // read back from both $3000 and $3001!
+}
+
+void intergames_state::crtc_or_psg_w(offs_t offset, uint8_t data)
+{
+ if (!m_crtc_selected)
+ m_ay8910->address_data_w(offset, data);
+ else if (BIT(offset, 0))
+ m_crtc->register_w(data);
+ else
+ m_crtc->address_w(data);
+}
+
+uint8_t intergames_state::prot_r(offs_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ if ((offset == 0xc1) || (offset == 0xef) || (offset == 0x99))
+ m_crtc_selected = false;
+ else
+ logerror("%s: Protection read from $%04X\n", machine().describe_context(), offset + 0x3600);
+ }
+ return 0xff;
+}
+
+void intergames_state::prot_w(offs_t offset, uint8_t data)
+{
+ if (offset == 0xf3)
+ m_crtc_selected = false;
+
+ logerror("%s: Writing $#%02X to $%04X\n", machine().describe_context(), data, offset + 0x3600);
+}
+
+void intergames_state::machine_reset()
+{
+ m_crtc_selected = true;
+}
+
+void intergames_state::intergames_map(address_map &map)
+{
+ map(0x0000, 0x0fff).ram().share("nvram");
+ map(0x2000, 0x2fff).ram().w(FUNC(intergames_state::funworld_videoram_w)).share("videoram");
+ map(0x3000, 0x3001).rw(FUNC(intergames_state::crtc_or_psg_r), FUNC(intergames_state::crtc_or_psg_w));
+ map(0x3200, 0x3203).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x3400, 0x3403).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x3600, 0x37ff).rw(FUNC(intergames_state::prot_r), FUNC(intergames_state::prot_w));
+ map(0x5000, 0x5fff).mirror(0x2000).ram().w(FUNC(intergames_state::funworld_colorram_w)).share("colorram");
+ map(0x8000, 0xdfff).rom();
+ map(0xe000, 0xefff).ram();
+ map(0xf000, 0xffff).rom();
+}
+
+void funworld_state::fw_brick_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x2000, 0x2fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x3000, 0x3fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x4000, 0x7fff).nopr(); // check for the brick RAM programming ROM.
+ map(0x8000, 0xbfff).ram().share("nvram1");
+ map(0xc000, 0xffff).rom();
+}
+
+void royalcrdf_state::royalcrdf_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x4000, 0x4fff).ram().w(FUNC(royalcrdf_state::funworld_videoram_w)).share("videoram");
+ map(0x5000, 0x5fff).ram().w(FUNC(royalcrdf_state::funworld_colorram_w)).share("colorram");
+ map(0x6000, 0x6003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x6800, 0x6803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x8000, 0xbfff).rom();
+ map(0xc000, 0xffff).rom();
+}
+
+
+void funworld_state::gratispk_map(address_map &map)
+{
+ map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r));
+ map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w));
+ map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x4000, 0x4fff).ram().w(FUNC(funworld_state::funworld_videoram_w)).share("videoram");
+ map(0x5000, 0x5fff).ram().w(FUNC(funworld_state::funworld_colorram_w)).share("colorram");
+ map(0x6000, 0xffff).rom();
+}
+
+
+/*************************
+* Input ports *
+*************************/
+
+static INPUT_PORTS_START( funworld )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Halten (Hold) 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Loeschen (Cancel) / Kassieren (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start) / Gamble (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buchhalt (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Halten (Hold) 4 / Hoch (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Halten (Hold) 2 / Tief (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Halten (Hold) 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hoppersch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreib (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "10 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x00, "Insert" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "Dattl Insert" )
+ PORT_DIPSETTING( 0x10, "TAB Insert" )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolycdcr )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Navijanje (Remote)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop (Hold) 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Ponistavange (Cancel) / Kasiranje (Take) / Autohold")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Djelenje (Start) / Gamble (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop (Hold) 5 / Ulog (Bet) / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Konobar (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Namjestit (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop (Hold) 4 / Veca (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop (Hold) 2 / Manja (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop (Hold) 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Vratiti Nazad (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolycdit )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop (Hold) 1 / Alta (High)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Doppio (Double) / Autohold")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop (Hold) 5 / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop (Hold) 4 / Accredito (Take)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop (Hold) 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop (Hold) 3 / Bassa (Low)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "50 Points/Pulse" )
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6")
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolycdib )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop (Hold) 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Autohold / Accredito (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Doppio (Double)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop (Hold) 5 / Bet / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop (Hold) 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop (Hold) 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop (Hold) 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test1") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test2") PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test3") PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test4") PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test5") PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test6") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test7") PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test8") PORT_CODE(KEYCODE_K)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test9") PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test10") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test11") PORT_CODE(KEYCODE_R)
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Auto Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // when is ON, allows the player to activate/deactivate the autohold through CANCEL button
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolycdic )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop (Hold) 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Autohold / Accredito (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Doppio (Double)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop (Hold) 5 / Bet / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop (Hold) 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop (Hold) 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop (Hold) 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Manual Payout SW") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW") // place '10000000' for NVRAM creation.
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, "Coinage B" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, "10 Credits" )
+ PORT_DIPSETTING( 0x00, "5 Credits" )
+ PORT_DIPNAME( 0x08, 0x08, "Coinage A" ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, "20 Credits" )
+ PORT_DIPSETTING( 0x00, "1 Credit" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Auto Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // when is ON, allows the player to activate/deactivate the autohold through CANCEL button
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolycdcy )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME(u8"Running / Credits (Навъртане)") // НАВЪРТАНЕ
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME(u8"Stop 1 (Стоп 1)") // СТОП 1
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME(u8"Cancel (Изчистване) / Autostop (Автостоп) / Take (Качване)") // ИЗЧИСТВАНЕ / АВТОСТОП / КАЧВАНЕ
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME(u8"Start (Старт) / Double (Дублиране)") // СТАРТ / ДУБЛИРАНЕ
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME(u8"Stop 5 (Стоп 5) / Half Gamble (Половин Хазарт)") // СТОП 5 / ПОЛОВИН ХАЗАРТ
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME(u8"Turnover (Оборот)") // ОБОРОТ (turnover)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME(u8"Setup (Настройка)") // НАСТРОЙКА (setup)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME(u8"Stop 4 (Стоп 4) / Big (Голяма)") // СТОП 4 / ГОЛЯМА
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME(u8"Stop 2 (Стоп 2) / Small (Малка)") // СТОП 2 / МАЛКА
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME(u8"Stop 3 (Стоп 3)") // СТОП 3
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test 1") PORT_CODE(KEYCODE_A) // present on the test mode, but erased
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test 2") PORT_CODE(KEYCODE_S) // normally coin2. present on the test mode, but erased.
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test 3") PORT_CODE(KEYCODE_D) // normally keyout. present on the test mode as "K'bo?".
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("test 4") PORT_CODE(KEYCODE_F) // normally coin1. present on the test mode, but erased.
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8") // only works with credits inserted
+ PORT_DIPSETTING( 0x01, "Normal Play" )
+ PORT_DIPSETTING( 0x00, "Test Mode" )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPSETTING( 0x00, "With Joker" )
+ PORT_DIPNAME( 0x40, 0x40, "Auto Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // when is ON, allows the player to activate/deactivate the autohold through CANCEL button
+ PORT_DIPNAME( 0x80, 0x80, "Credits In" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, "Allow Credits" )
+ PORT_DIPSETTING( 0x00, "Demo Mode" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolyc980 )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Navijanje (Remote)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop (Hold) 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Ponistavange (Cancel) / Kasiranje (Take) / Autohold")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Djelenje (Start) / Gamble (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop (Hold) 5 / Ulog (Bet) / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Konobar (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Namjestit (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop (Hold) 4 / Veca (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop (Hold) 2 / Manja (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop (Hold) 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Vratiti Nazad (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( bonuscrd )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Red")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Take")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Black / Bet")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Hoch (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Tief (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Half Gamble")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Payout")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+// DIP switch 8 should be left ON by default (all remaining ones in OFF)
+// to allow initialization. You can change settings later, after the boot.
+
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, "Bonus Type" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "Good Luck!" )
+ PORT_DIPSETTING( 0x02, "55/77/99 Bonus" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x00, "D-UP Type" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "Forced, Red-Low-High-Black" )
+ PORT_DIPSETTING( 0x10, "Classic Hi-Lo" )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( bigdeal )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Take")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Stake")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Nagy (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Icsi (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Half Gamble")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+// DIP switch 8 should be left ON by default (all remaining ones in OFF)
+// to allow initialization. You can change settings later, after the boot.
+
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, "Bonus Type" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "Good Luck!" )
+ PORT_DIPSETTING( 0x02, "55/77/99 Bonus" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x00, "D-UP Type" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "Forced, Red-Low-High-Black" )
+ PORT_DIPSETTING( 0x10, "Classic Hi-Lo" )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( magicrd2 )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Take")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Stake")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / High")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Low")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper SW") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7") // remote credits settings are always 10 points/pulse
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "10 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" )
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( royalcrd )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Halten (Hold) 1 / Hoch (High)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Loeschen/Gamble (Cancel/Play)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buchhalt (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Halten (Hold) 4 / Kassieren (Take)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Halten (Hold) 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Halten (Hold) 3 / Tief (Low)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("unknown bit 08") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hoppersch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreib (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7") // listed as 'Coin-C' in some sources
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "10 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x10, "Insert" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "Dattl Insert" )
+ PORT_DIPSETTING( 0x10, "TAB Insert" )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( royalcrdf )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Kredyt (Remote)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Zlikwidow (Cancel)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Rachunek (Account)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Vstawiac (Service 2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Vyplatit (Payout)") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Odpis (Keyout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, "Bonus" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x40, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( royaljp )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Halten (Hold) 1 / Hoch (High)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Loeschen/Gamble (Cancel/Play)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buchhalt (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Halten (Hold) 4 / Kassieren (Take)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Halten (Hold) 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Halten (Hold) 3 / Tief (Low)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("unknown bit 08") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hoppersch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreib (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+/* ________________________________________________________________________
+ |DIP Schalter 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Hopperbetrieb über Board ein/on |on | | | | | | | |
+ |(Hopper Payout) aus/off |off| | | | | | | |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Autohold an/yes | |on | | | | | | |
+ | aus/no | |off| | | | | | |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Gewinn ab: "Hohes Paar"/"High pair" | | |on | | | | | |
+ |(Profit) "König oder As"/"King or Ace"| | |off| | | | | |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Insert "Dattl" | | | |on | | | | |
+ |Insert "Royal-Jackpot" | | | |off| | | | |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Coin A = 10 Coin B = 50 | | | | |on |on | | |
+ |Coin A = 10 Coin B = 20 | | | | |on |off| | |
+ |Coin A = 1 Coin B = 20 | | | | |off|off| | |
+ |Coin A = 1 Coin B = 50 | | | | |off|on | | |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Immer / always | | | | | | |off| |
+ |________________________________________|___|___|___|___|___|___|___|___|
+ |Keyboard Test | | | | | | | |on |
+ |Spielbetrieb / Maingame | | | | | | | |off|
+ |________________________________________|___|___|___|___|___|___|___|___|
+
+ Default Settings from Video Klein: 01101100
+
+*/
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Main Game" )
+ PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:7" ) // Shown as "Always Off" in the manual
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "50 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "20 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "10 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "1 Point/Coin" )
+ PORT_DIPNAME( 0x10, 0x10, "Insert" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "Dattl Insert" )
+ PORT_DIPSETTING( 0x10, "Royal Jackpot" )
+ PORT_DIPNAME( 0x20, 0x00, "Profit" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "Hohes Paar" )
+ PORT_DIPSETTING( 0x20, "2 Kings or Aces" )
+ PORT_DIPNAME( 0x40, 0x00, "Autohold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( No ) )
+ PORT_DIPNAME( 0x80, 0x80, "Hopper Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( cuoreuno )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no remote credits
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1 / Switch Bet (1-Max)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Bet / Prendi (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Gioca (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Half Gamble / Super Game")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x60, 0x60, "Super Game Payment Type" ) PORT_DIPLOCATION("SW1:3,2")
+ PORT_DIPSETTING( 0x00, "Manual - User Choice 1" )
+ PORT_DIPSETTING( 0x20, "Manual - Coins" )
+ PORT_DIPSETTING( 0x40, "Manual - Tickets" )
+ PORT_DIPSETTING( 0x60, "Manual - User Choice 2" )
+
+// the following one (1st DSW) seems to be disconnected
+// to avoid the use of remote credits or direct payout
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( pool10 )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no remote credits
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1 / Switch Bet (1-Max)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Bet / Prendi (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Gioca (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Half Gamble / Super Game")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x60, 0x60, "Super Game Payment Type" ) PORT_DIPLOCATION("SW1:3,2")
+ PORT_DIPSETTING( 0x00, "Manual - User Choice 1" )
+ PORT_DIPSETTING( 0x20, "Manual - Coins" )
+ PORT_DIPSETTING( 0x40, "Manual - Tickets" )
+ PORT_DIPSETTING( 0x60, "Manual - User Choice 2" )
+
+// direct payout without play Super Game
+ PORT_DIPNAME( 0x80, 0x80, "Direct Payout (tickets)" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( lunapark )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no remote credits
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1 / Switch Bet (1-Max)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Bet / Prendi (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Gioca (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Half Gamble / Super Game")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+// the following one seems to be disconnected
+// to avoid the use of remote credits or direct payout
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+// the following one is connected to 1st DSW and is meant
+// for switch between different programs stored in different
+// halves of the program ROM
+ PORT_START("SELDSW")
+ PORT_DIPNAME( 0x01, 0x00, "Game Selector" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "PROGRAM 1, (5 TIRI LIRE 500, ABILITA VINTE)" )
+ PORT_DIPSETTING( 0x01, "PROGRAM 2, (10 TIRI LIRE 500, PARTITA VINTE)" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( jolyjokra )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Halten (Hold) 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Loeschen (Cancel) / Kassieren (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start) / Gamble (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buchhalt (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Halten (Hold) 4 / Hoch (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Halten (Hold) 2 / Tief (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Halten (Hold) 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hoppersch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreib (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "10 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "disabled" )
+ PORT_DIPSETTING( 0x10, "enabled" )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x40, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( vegasslw )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Kasiraj (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Kockaj (Double)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Ulog (Bet)")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buch (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Velika (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Mala (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreiben (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( vegasfst )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Prihoduj (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Dupliraj (Double)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Ulog (Bet)")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buch (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Velika (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Mala (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreiben (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "100 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "1000 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( vegasfte )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Kasiraj (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Kockaj (Double)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / +Ulog (Add Bet)")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buch (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Velika (High) / -Ulog (Remove Bet)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Mala (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreiben (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "100 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "1000 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( vegasmil )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Prihoduj (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Dupliraj (Double)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Ulog (Bet)")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buch (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Velika (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Mala (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreiben (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( saloon )
+ PORT_START("IN0") // 0800h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Play / Start / Enter")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2) // still unknown...
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / High / Menu Down")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Take / Autohold / Exit")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Menu")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Menu Up") PORT_CODE(KEYCODE_6) // check for extra functions...
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Bet")
+
+ PORT_START("IN1") // 0801h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-1") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-2") PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-3") PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-4") PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-5") PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-6") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-7") PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("1-8") PORT_CODE(KEYCODE_K)
+
+ PORT_START("IN2") // 0802h
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Low")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("IN3") // 0808h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Credits IN/OUT")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Keyout (Scarico Coin)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Warm Reset") PORT_CODE(KEYCODE_R)
+
+ PORT_START("IN4") // 0A00h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-1") PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-2") PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-3") PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-4") PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-5") PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-6") PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-7") PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("4-8") PORT_CODE(KEYCODE_8_PAD)
+
+ PORT_START("IN5") // 0A01h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-1") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-2") PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-3") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-4") PORT_CODE(KEYCODE_0)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-5") PORT_CODE(KEYCODE_T)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-6") PORT_CODE(KEYCODE_Y)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-7") PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("5-8") PORT_CODE(KEYCODE_I)
+
+ PORT_START("I2C_CK") // 081Bh
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("i2cmem", FUNC(i2cmem_device::write_scl)) // Serial Clock
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("I2C_DI") // 1000h Input
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", FUNC(i2cmem_device::read_sda)) // Serial Data In
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("I2C_DO") // 1000h Output
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("i2cmem", FUNC(i2cmem_device::write_sda)) // Serial Data Out
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( funquiz )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) // start?
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) // start?
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START3 ) // start?
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START4 ) // start or clear?
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY // joystick right
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY // joystick left
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY // joystick up
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY // joystick down
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // coin 2
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // coin 1
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+/*
+ 1 | Buchhaltung / Bookkeeping.
+ 2 | Nicht verwendet / Not used.
+ 3 | Ohne Zahlen (Wien) / No numbers (Vienna).
+ 4 | Nicht verwendet / Not used.
+ 5 | Nicht verwendet / Not used.
+ 6 | Richtige Antwort wird angezeigt / Right answer is shown.
+ 7 | Frage wird bei Einsatz angezeigt / Question is shown when bet is made.
+ 8 | Spiel mit Einsatzwahl / Game with betting.
+*/
+ PORT_DIPNAME( 0x01, 0x00, "Game with betting" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Show question in bet stage" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Right answer is shown" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "No numbers (Vienna)" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Bookkeeping" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( funquiza )
+ PORT_START("IN0") // 0800h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Option B") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Option A") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start / G")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Option F") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Books 1")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Books 2")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Option E") PORT_CODE(KEYCODE_B)
+
+ PORT_START("IN1") // 0801h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Option C") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Option D") PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN2") // 0A00h
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW") // 0A01h
+/*
+ 1 | Buchhaltung / Bookkeeping.
+ 2 | Nicht verwendet / Not used.
+ 3 | Ohne Zahlen (Wien) / No numbers (Vienna).
+ 4 | Nicht verwendet / Not used.
+ 5 | Nicht verwendet / Not used.
+ 6 | Richtige Antwort wird angezeigt / Right answer is shown.
+ 7 | Frage wird bei Einsatz angezeigt / Question is shown when bet is made.
+ 8 | Spiel mit Einsatzwahl / Game with betting.
+*/
+ PORT_DIPNAME( 0x01, 0x00, "Game with betting" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Show question in bet stage" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Right answer is shown" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "No numbers (Vienna)" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Bookkeeping" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( witchryl )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Halten (Hold) 1 / Hoch (High)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Loeschen/Gamble (Cancel/Play)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Buchhalt (Service1)")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Einstellen (Service2)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Halten (Hold) 4 / Kassieren (Take)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Halten (Hold) 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Halten (Hold) 3 / Tief (Low)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("unknown bit 08") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hoppersch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Abschreib (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Game" )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "10 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x08, "10 Points/Coin" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x00, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( novoplay )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Collect (D-UP) / Autohold")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Deal/Draw / Double")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Bet / Half")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service 1 / Test")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Service 2 / Select")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / High")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Low")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Collect (Payout)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, "5 Credits / Coin" )
+ PORT_DIPSETTING( 0x08, "10 Credits / Coin" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "Game Type" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, "Multi Card (without Jokers)" )
+ PORT_DIPSETTING( 0x00, "Club Card (with Jokers)" )
+ PORT_DIPNAME( 0x40, 0x40, "Allow Autohold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x80, 0x00, "Payout Mode" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( chinatow )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no remote credits
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1 / Switch Bet (1-Max)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Bet / Prendi (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Gioca (Play) / Gmable")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Half Gamble / Super Game")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Counter" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, "X10" )
+ PORT_DIPSETTING( 0x00, "X1" )
+ PORT_DIPNAME( 0x04, 0x04, "Royal Flush" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, "With" )
+ PORT_DIPSETTING( 0x00, "Without" )
+ PORT_DIPNAME( 0x08, 0x08, "5 of a kind" ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, "With" )
+ PORT_DIPSETTING( 0x00, "Without" )
+ PORT_DIPNAME( 0x60, 0x60, "Payout type" ) PORT_DIPLOCATION("SW1:3,2")
+ PORT_DIPSETTING( 0x00, "Ticket + Hopper" )
+ PORT_DIPSETTING( 0x20, "Ticket" )
+ PORT_DIPSETTING( 0x40, "Hopper" )
+ PORT_DIPSETTING( 0x60, "Ticket + Hopper" )
+ PORT_DIPNAME( 0x90, 0x90, "Coin/Credit ratio" ) PORT_DIPLOCATION("SW1:1,4")
+ PORT_DIPSETTING( 0x00, "1 coin 1 credit" )
+ PORT_DIPSETTING( 0x10, "1 coin 1 credit" )
+ PORT_DIPSETTING( 0x80, "1 coin 5 credits" )
+ PORT_DIPSETTING( 0x90, "1 coin 10 credits" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( rcdino4 )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no remote credits
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Bet")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Royal Flush" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x04, 0x04, "5 of a Kind" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x18, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,4")
+ PORT_DIPSETTING( 0x08, "1C-10C" )
+ PORT_DIPSETTING( 0x10, "1C-1C" )
+ PORT_DIPSETTING( 0x18, "1C-2C" )
+ PORT_DIPSETTING( 0x00, "1C-5C" )
+ PORT_DIPNAME( 0x60, 0x60, "Payment Type" ) PORT_DIPLOCATION("SW1:3,2")
+ PORT_DIPSETTING( 0x00, "Ticket + Hopper" )
+ PORT_DIPSETTING( 0x20, "Ticket" )
+ PORT_DIPSETTING( 0x40, "Hopper" )
+ PORT_DIPSETTING( 0x60, "Ticket + Hopper" )
+ PORT_DIPNAME( 0x80, 0x80, "Pagamenti (Payment)" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, "Pagamenti (Payment) A" )
+ PORT_DIPSETTING( 0x00, "Pagamenti (Payment) B" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( royal )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no remote credits
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1 / Switch Bet (1-Max)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Bet / Prendi (Take)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Gioca (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Half Gamble / Super Game")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Stop 4 / Alta (High)")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Stop 2 / Bassa (Low)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Stop 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x00, "Allow to Boot" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( fw_brick1 )
+ PORT_INCLUDE( novoplay )
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x20, 0x00, "Game Type" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, "Multi Card (without Jokers)" )
+ PORT_DIPSETTING( 0x00, "Joker Card (with Jokers)" )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( intrgmes )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Take")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Draw")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Bet")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / High")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Low")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("I /7") PORT_CODE(KEYCODE_E) // I /7
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F. C.") PORT_CODE(KEYCODE_R) // F.C.
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper SW") PORT_CODE(KEYCODE_T)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("CAV") PORT_CODE(KEYCODE_Y) // CAV.
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Collect")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("SER. IN") PORT_CODE(KEYCODE_A) // SER. IN
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("II/D") PORT_CODE(KEYCODE_S) // II/D
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("SER. SEL.") PORT_CODE(KEYCODE_D) // SER. SEL.
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("II/C") PORT_CODE(KEYCODE_F) // II/C
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("II/3") PORT_CODE(KEYCODE_G) // II/3
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("II/B") PORT_CODE(KEYCODE_H) // II/B
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("II/2") PORT_CODE(KEYCODE_J) // II/2
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "55/77/99-Bonus" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Language" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, "English" )
+ PORT_DIPSETTING( 0x00, "German" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "Auto Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( novop_ab )
+ PORT_INCLUDE( intrgmes )
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "Test Mode" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, "Language" ) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x00, "English" )
+ PORT_DIPSETTING( 0x04, "Hungarian" )
+ PORT_DIPSETTING( 0x08, "German" )
+ PORT_DIPSETTING( 0x0c, "English" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "Double Up Mode" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, "High-Low" )
+ PORT_DIPSETTING( 0x00, "High-Low-Red-Black" )
+ PORT_DIPNAME( 0x40, 0x40, "Auto Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( clubcard )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_NAME("Remote")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Take")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Bet / Half Gamble")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / High")
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Low")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper SW") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Coin B")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Coin A")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Test Mode" )
+ PORT_DIPSETTING( 0x01, "Gameplay" )
+ PORT_DIPNAME( 0x02, 0x02, "Remote Value" ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "100 Points/Pulse" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x04, "1 Coin / 10 Credits" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x08, "1 Coin / 10 Credits" )
+ PORT_DIPNAME( 0x10, 0x10, "Royal Flush / 5 of a Kind Payment" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x00, "150 / 150" )
+ PORT_DIPSETTING( 0x10, "500 / 1100" )
+ PORT_DIPNAME( 0x20, 0x20, "Joker" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "With Joker (also enables 5OAK" ) // also enables Five of a Kind
+ PORT_DIPSETTING( 0x20, "Without Joker" )
+ PORT_DIPNAME( 0x40, 0x40, "Hold" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x00, "Auto Hold" )
+ PORT_DIPSETTING( 0x40, "No Auto Hold" )
+
+// after nvram init, set the following one to 'manual'
+// to allow the remote credits mode to work
+ PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x00, "Hopper" )
+ PORT_DIPSETTING( 0x80, "Manual Payout SW" )
+INPUT_PORTS_END
+
+
+/*************************
+* Graphics Layouts *
+*************************/
+
+static const gfx_layout charlayout =
+{
+ 4,8,
+ RGN_FRAC(1,2),
+ 4,
+ { RGN_FRAC(0,2), RGN_FRAC(0,2) + 4, RGN_FRAC(1,2), RGN_FRAC(1,2) + 4 },
+ { 3, 2, 1, 0 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*4*2
+};
+
+
+/******************************
+* Graphics Decode Information *
+******************************/
+
+/* The palette system is adressable through a PLD.
+ The game could have 2 different palettes, located
+ in the first and second half of the bipolar PROM.
+*/
+
+static GFXDECODE_START( gfx_fw1stpal ) // Adressing the first half of the palette
+ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
+GFXDECODE_END
+
+static GFXDECODE_START( gfx_fw2ndpal ) // Adressing the second half of the palette
+ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x100, 16 )
+GFXDECODE_END
+
+
+/***********************
+* PIA Interfaces *
+***********************/
+
+/*
+ TAB light green board
+ ---------------------
+
+ PIA 0 PIA 1
+ .--------u--------. .--------u--------.
+ |01 VSS CA1 40|- GND |01 VSS CA1 40|- GND
+ |02 PA0 CA2 39|- N/C |02 PA0 CA2 39|- RESET circuitery
+ |03 PA1 /IRQA 38|- N/C |03 PA1 /IRQA 38|- 04 CPU (65C02)
+ |04 PA2 /IRQB 37|- N/C |04 PA2 /IRQB 37|- N/C
+ |05 PA3 /RS0 36|- 10 ROM(PRG) |05 PA3 /RS0 36|- 10 ROM(PRG)
+ |06 PA4 /RS1 35|- 09 ROM(PRG) |06 PA4 /RS1 35|- 23 AY(SOUND)
+ |07 PA5 /RESET 34|- 09 GAL/PAL |07 PA5 /RESET 34|- 37 AY(SOUND)
+ |08 PA6 D0 33| |08 PA6 D0 33|
+ |09 PA7 D1 32| |09 PA7 D1 32|
+ |10 PB0 D2 31| |10 PB0 D2 31|
+ |11 PB1 D3 30| |11 PB1 D3 30|
+ |12 PB2 D4 29| |12 PB2 D4 29|
+ |13 PB3 D5 28| |13 PB3 D5 28|
+ |14 PB4 D6 27| |14 PB4 D6 27|
+ |15 PB5 D7 26| |15 PB5 D7 26|
+ |16 PB6 E 25| |16 PB6 E 25|
+ |17 PB7 CS1 24| |17 PB7 CS1 24|
+ GND -|18 CB1 /CS2 23| N/C -|18 CB1 /CS2 23|
+ GND -|19 CB2 CS0 22| N/C -|19 CB2 CS0 22|
+ |20 VCC R/W 21| |20 VCC R/W 21|
+ '-----------------' '-----------------'
+
+
+ Novo Play Multi Card
+ --------------------
+
+ PIA 0 PIA 1
+ .--------u--------. .--------u--------.
+ |01 VSS CA1 40|- GND |01 VSS CA1 40|- GND
+ |02 PA0 CA2 39|- GND |02 PA0 CA2 39|- N/C
+ |03 PA1 /IRQA 38|- 65C02 (-IRQ) |03 PA1 /IRQA 38|- 65C02 (-IRQ)
+ |04 PA2 /IRQB 37|- N/C |04 PA2 /IRQB 37|- N/C
+ |05 PA3 /RS0 36|- A0 |05 PA3 /RS0 36|- A0
+ |06 PA4 /RS1 35|- A1 |06 PA4 /RS1 35|- A1
+ |07 PA5 /RESET 34|- 65C02 (-RST) |07 PA5 /RESET 34|- 65C02 (-RST)
+ |08 PA6 D0 33| |08 PA6 D0 33|
+ |09 PA7 D1 32| |09 PA7 D1 32|
+ |10 PB0 D2 31| |10 PB0 D2 31|
+ |11 PB1 D3 30| |11 PB1 D3 30|
+ |12 PB2 D4 29| |12 PB2 D4 29|
+ |13 PB3 D5 28| |13 PB3 D5 28|
+ |14 PB4 D6 27| |14 PB4 D6 27|
+ |15 PB5 D7 26| |15 PB5 D7 26|
+ |16 PB6 E 25| |16 PB6 E 25|
+ |17 PB7 CS1 24| |17 PB7 CS1 24|
+ GND -|18 CB1 /CS2 23| N/C -|18 CB1 /CS2 23|
+ GND -|19 CB2 CS0 22| N/C -|19 CB2 CS0 22|
+ |20 VCC R/W 21| |20 VCC R/W 21|
+ '-----------------' '-----------------'
+
+*/
+
+
+// these ports are set to output anyway, but this quietens the log
+uint8_t funworld_state::funquiz_ay8910_a_r()
+{
+ return 0x00;
+}
+
+uint8_t funworld_state::funquiz_ay8910_b_r()
+{
+ return 0x00;
+}
+
+
+/********************************
+* Machine Start & Reset *
+********************************/
+
+void lunapark_state::machine_start()
+{
+ funworld_state::machine_start();
+ uint8_t *ROM = memregion("maincpu")->base();
+ membank("bank1")->configure_entries(0, 2, &ROM[0], 0x8000);
+}
+
+void lunapark_state::machine_reset()
+{
+ uint8_t seldsw = (ioport("SELDSW")->read() );
+ popmessage("ROM Bank: %02X", seldsw);
+
+ membank("bank1")->set_entry(seldsw);
+}
+
+
+/**************************
+* Machine Drivers *
+**************************/
+
+void funworld_state::fw1stpal(machine_config &config)
+{
+ // basic machine hardware
+ G65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funworld_map);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ pia6821_device &pia0(PIA6821(config, "pia0"));
+ pia0.readpa_handler().set_ioport("IN0");
+ pia0.readpb_handler().set_ioport("IN1");
+
+ pia6821_device &pia1(PIA6821(config, "pia1"));
+ pia1.readpa_handler().set_ioport("IN2");
+ pia1.readpb_handler().set_ioport("DSW");
+ pia1.ca2_handler().set(FUNC(funworld_state::pia1_ca2_w));
+
+ // video hardware
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size((124+1)*4, (30+1)*8); // Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1)
+ screen.set_visarea(0*4, 96*4-1, 0*8, 29*8-1); // Taken from MC6845 init, registers 01 & 06
+ screen.set_screen_update(FUNC(funworld_state::screen_update_funworld));
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_fw1stpal);
+ PALETTE(config, m_palette, FUNC(funworld_state::funworld_palette), 0x200);
+
+ mc6845_device &crtc(MC6845(config, "crtc", CRTC_CLOCK)); // 2 MHz, verified on jollycrd & royalcrd
+ crtc.set_screen("screen");
+ crtc.set_show_border_area(false);
+ crtc.set_char_width(4);
+ crtc.out_vsync_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+
+ ay8910_device &ay8910(AY8910(config, "ay8910", SND_CLOCK)); // 2 MHz.
+ ay8910.port_a_write_callback().set(FUNC(funworld_state::funworld_lamp_a_w));
+ ay8910.port_b_write_callback().set(FUNC(funworld_state::funworld_lamp_b_w));
+ ay8910.add_route(ALL_OUTPUTS, "mono", 2.5); // analyzed to avoid clips
+}
+
+
+void funworld_state::fw2ndpal(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funworld_map);
+
+ m_gfxdecode->set_info(gfx_fw2ndpal);
+}
+
+
+
+void funworld_state::funquiz(machine_config &config)
+{
+ fw1stpal(config); // gray background.
+// fw2ndpal(config); // blue background.
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funquiz_map);
+
+ subdevice<ay8910_device>("ay8910")->port_a_read_callback().set(FUNC(funworld_state::funquiz_ay8910_a_r));
+ subdevice<ay8910_device>("ay8910")->port_b_read_callback().set(FUNC(funworld_state::funquiz_ay8910_b_r));
+}
+
+
+void magicrd2_state::magicrd2(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &magicrd2_state::magicrd2_map);
+
+ subdevice<mc6845_device>("crtc")->set_visarea_adjust(0, -56, 0, 0);
+
+ ay8910_device &ay8910(AY8910(config.replace(), "ay8910", SND_CLOCK)); // 2 MHz.
+ ay8910.port_a_write_callback().set(FUNC(magicrd2_state::funworld_lamp_a_w));
+ ay8910.port_b_write_callback().set(FUNC(magicrd2_state::funworld_lamp_b_w));
+ ay8910.add_route(ALL_OUTPUTS, "mono", 1.5); // analyzed to avoid clips
+}
+
+
+void funworld_state::royalcd1(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // (G65SC02P in pro version) 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::magicrd2_map);
+}
+
+
+void funworld_state::royalcd2(machine_config &config)
+{
+ fw2ndpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::magicrd2_map);
+}
+
+
+void funworld_state::cuoreuno(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::cuoreuno_map);
+}
+
+
+void funworld_state::saloon(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::saloon_map);
+
+ config.device_remove("pia0");
+ config.device_remove("pia1");
+
+ // Serial Memory
+ I2C_24C02(config, "i2cmem", 0).set_e0(1); // ? or maybe 2nd half of 24C04?
+}
+
+
+void funworld_state::witchryl(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::witchryl_map);
+}
+
+
+void lunapark_state::lunapark(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &lunapark_state::lunapark_map); // mirrored video RAM (4000/5000 to 6000/7000).
+}
+
+
+void chinatow_state::chinatow(machine_config &config)
+{
+ fw2ndpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &chinatow_state::chinatow_map);
+}
+
+void chinatow_state::rcdino4(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &chinatow_state::chinatow_map);
+}
+
+
+void intergames_state::intrgmes(machine_config &config)
+{
+ fw1stpal(config);
+
+ G65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &intergames_state::intergames_map);
+ //m_maincpu->set_periodic_int(FUNC(intergames_state::nmi_line_pulse), attotime::from_hz(60));
+
+ m_gfxdecode->set_info(gfx_fw2ndpal);
+}
+
+
+void funworld_state::fw_brick_1(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map);
+
+ NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0);
+}
+
+
+void funworld_state::fw_brick_2(machine_config &config)
+{
+ fw2ndpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map);
+
+ NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0);
+}
+
+
+void funworld_state::gratispk(machine_config &config)
+{
+// fw1stpal(config); // card deck wrong colors.
+ fw2ndpal(config); // correct palette
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::gratispk_map);
+}
+
+
+void funworld_state::clubcard(machine_config &config)
+{
+// fw1stpal(config); // 'alla Royal Card. Card deck wrong colors.
+ fw2ndpal(config); // proper colors.
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz.
+ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::clubcard_map);
+}
+
+
+uint8_t royalcrdf_state::royalcrdf_opcode_r(offs_t offset)
+{
+ // address-based data bitswap; 4 address bits are involved, but only
+ // 5 different bitswaps exist, with clear regularities, so the
+ // hardware is probably selecting the appropriate one by
+ // applying passive logic to the address bits; we encode it
+ // indexed by all the involved address bits instead. A notable fact is that
+ // all the permutations in royalcrdf & multiwin are odd-parity ones,
+ // so an intriguing possibility is that the hardware be applying
+ // a fixed odd number (3 would suffice) of address-dependent
+ // 1-bit-to-1-bit bitswaps; furthermore, in both sets one of the
+ // bitswaps is equal to the one applied to all the data (but notice
+ // that, in those cases, we are applying it twice to opcodes here)
+ constexpr std::array<std::array<int, 4>, 16> bs{{ // bitswaps for data bits 1, 2, 5 & 7, in that order
+ { 1, 5, 2, 7 },
+ { 1, 5, 2, 7 },
+ { 5, 1, 7, 2 },
+ { 7, 2, 5, 1 },
+ { 1, 5, 2, 7 },
+ { 1, 5, 2, 7 },
+ { 5, 2, 1, 7 },
+ { 7, 2, 5, 1 },
+ { 1, 5, 2, 7 },
+ { 1, 5, 2, 7 },
+ { 5, 1, 7, 2 },
+ { 1, 7, 5, 2 },
+ { 1, 5, 2, 7 },
+ { 1, 5, 2, 7 },
+ { 5, 2, 1, 7 },
+ { 1, 7, 5, 2 }
+ }};
+
+ // xor masks, dependent on the same address bits than the bitswaps,
+ // and with the same 5-values structure
+ constexpr std::array<uint8_t, 16> xm {
+ 0x02, 0x02, 0xa6, 0x82, 0x02, 0x02, 0x06, 0x82, 0x02, 0x02, 0xa6, 0x00, 0x02, 0x02, 0x06, 0x00
+ };
+
+ uint8_t data {m_maincpu->space(AS_PROGRAM).read_byte(offset)};
+
+ if(offset < 0x800)
+ data = bitswap<8>(data ^ 0x22, 2, 6, 7, 4, 3, 1, 5, 0);
+
+ unsigned idx {bitswap<4>(offset, 8, 5, 2, 1)};
+
+ return bitswap<8>(data, bs[idx][3], 6, bs[idx][2], 4, 3, bs[idx][1], bs[idx][0], 0) ^ xm[idx];
+}
+
+void royalcrdf_state::royalcrdf_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(royalcrdf_state::royalcrdf_opcode_r));
+}
+
+void royalcrdf_state::driver_init()
+{
+ uint8_t *ROM = memregion("maincpu")->base();
+ for (int x = 0x8000; x < 0x10000; x++)
+ {
+ ROM[x] = bitswap<8>(ROM[x] ^ 0x22, 2, 6, 7, 4, 3, 1, 5, 0);
+ }
+
+/* Temporary hack to modify the value that ends to be a NOP,
+ after the BRK, and balanced checksums. Will be removed once
+ found a workaround in the decryption routines.
+*/
+ ROM[0x802d] = 0xa2; // checksum.
+ ROM[0xbc4e] = 0x68; // future NOP after BRK.
+}
+
+void royalcrdf_state::royalcrdf(machine_config &config)
+{
+ fw1stpal(config);
+
+ R65C02(config.replace(), m_maincpu, CPU_CLOCK); // to avoid the NMI into BRK bug...
+ m_maincpu->set_addrmap(AS_PROGRAM, &royalcrdf_state::royalcrdf_map);
+
+ m_maincpu->set_addrmap(AS_OPCODES, &royalcrdf_state::royalcrdf_opcodes_map);
+}
+
+
+uint8_t multiwin_state::multiwin_opcode_r(offs_t offset)
+{
+ // same general encryption scheme than the one used by the EVONA Royald Card set;
+ // 4 address bits determine which bitswap+xor is applied to the opcodes; in this case,
+ // one of the address bits don't have effect on the bitswap, just on the xor;
+ // again, we have just five different bitswaps, and the hardware is probably using
+ // passive logic on the address bits to do the selection
+ constexpr std::array<std::array<int, 5>, 8> bs{{ // bitswaps for data bits 0, 2, 4, 5 & 7, in that order
+ { 5, 2, 4, 0, 7 },
+ { 4, 0, 2, 7, 5 },
+ { 7, 4, 5, 2, 0 },
+ { 4, 0, 2, 7, 5 },
+ { 2, 7, 0, 5, 4 },
+ { 4, 0, 2, 7, 5 },
+ { 0, 5, 7, 4, 2 },
+ { 4, 0, 2, 7, 5 }
+ }};
+
+ // xor masks
+ constexpr std::array<uint8_t, 16> xm {
+ 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x30, 0x00, 0x00, 0xb5, 0x10, 0xb5, 0x20, 0xb5, 0x30, 0xb5
+ };
+
+ uint8_t data {m_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ unsigned idx {bitswap<4>(offset, 6,9,5,3)};
+
+ return bitswap<8>(data, bs[idx&7][4],6,bs[idx&7][3],bs[idx&7][2],3,bs[idx&7][1],1,bs[idx&7][0]) ^ xm[idx];
+}
+
+void multiwin_state::multiwin_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(multiwin_state::multiwin_opcode_r));
+}
+
+void multiwin_state::driver_init()
+{
+ uint8_t *ROM = memregion("maincpu")->base();
+ for (int x = 0x4000; x < 0x10000; x++)
+ {
+ ROM[x] = bitswap<8>(ROM[x] ^ 0x91, 5, 6, 7, 2, 3, 0, 1, 4);
+ }
+}
+
+void multiwin_state::multiwin(machine_config &config)
+{
+ fw2ndpal(config);
+
+ m_maincpu->set_addrmap(AS_OPCODES, &multiwin_state::multiwin_opcodes_map);
+}
+
+
+class multiwina_state : public funworld_state
+{
+public:
+ multiwina_state(const machine_config &mconfig, device_type type, const char* tag):
+ funworld_state(mconfig, type, tag),
+ m_decode(*this, "decode")
+ {
+ }
+
+ void multiwina(machine_config& config);
+
+private:
+ required_region_ptr<uint8_t> m_decode;
+
+ uint8_t opcode_r(offs_t offset);
+
+ void opcodes_map(address_map &map) ATTR_COLD;
+};
+
+uint8_t multiwina_state::opcode_r(offs_t offset)
+{
+
+ uint8_t data {m_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ return m_decode[(offset & 3) * 0x100 + data];
+}
+
+void multiwina_state::opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(multiwina_state::opcode_r));
+}
+
+void multiwina_state::multiwina(machine_config &config)
+{
+ fw2ndpal(config);
+
+ m_maincpu->set_addrmap(AS_OPCODES, &multiwina_state::opcodes_map);
+}
+
+
+class jokercrd_state : public funworld_state
+{
+public:
+ jokercrd_state(const machine_config &mconfig, device_type type, const char* tag)
+ : funworld_state(mconfig, type, tag)
+ {
+ }
+
+ void jokercrd(machine_config& config);
+
+private:
+ uint8_t jokercrd_opcode_r(offs_t offset);
+
+ void jokercrd_opcodes_map(address_map &map) ATTR_COLD;
+};
+
+uint8_t jokercrd_state::jokercrd_opcode_r(offs_t offset)
+{
+ // even when errors could be lurking in the least used opcodes,
+ // all of them in the [8050,b369) & [c000, f063) ranges are believed
+ // to be covered by these tables, with the exception of the one @c0f1:
+
+ // c0da: a6 6a ldx $6a
+ // c0dc: ad 5c 00 lda $005c
+ // c0df: 29 3f and #$3f
+ // c0e1: 85 70 sta $70
+ // c0e3: 20 fa c0 jsr $c0fa
+ // c0e6: a5 70 lda $70
+ // c0e8: 9d 33 02 sta $0233, x
+ // c0eb: a2 00 ldx #$00
+ // c0ed: e4 6a cpx $6a
+ // c0ef: f0 08 beq $c0f9
+ // c0f1: XX 33 02 nop #$33 #$02 [YYY $0233, x]
+ // c0f4: f0 e4 beq $c0da
+ // c0f6: e8 inx
+ // c0f7: 80 f4 bra $c0ed
+ // c0f9: 60 rts
+ //
+ // c0fa: ad 4b 07 lda $074b
+ // c0fd: 0d 4c 07 ora $074c
+ // c100: d0 01 bne $c103
+ // c102: 60 rts
+ // c103: a5 70 lda $70
+ // c105: 29 30 and #$30
+ // c107: 09 01 ora #$01
+ // c109: 85 70 sta $70
+ // c10b: 60 rts
+
+ // it should be noted, however, that the subroutine @c0da seems to be called just from here:
+ // c044: 64 6a stz $6a
+ // c046: 20 da c0 jsr $c0da
+ // and, if no interrupt is messing with the accessed data, the STZ @c044 should make the BEQ @c0ef
+ // become an unconditional jump, converting the opcode @c0f1 in dead code
+
+
+ constexpr uint8_t UNKN {0xfc};
+
+ constexpr std::array<std::array<uint8_t, 256>, 4> decryption_tables{{
+ // _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ { UNKN, UNKN, UNKN, 0x3d, 0xe0, UNKN, UNKN, 0xb0, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 0_
+ UNKN, UNKN, 0x4a, 0x65, 0x18, 0x64, 0xad, UNKN, 0x90, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 1_
+ UNKN, UNKN, 0x49, UNKN, 0xa8, 0x8c, 0x20, UNKN, UNKN, 0xf8, UNKN, UNKN, 0xe6, UNKN, 0x88, UNKN, // 2_
+ UNKN, UNKN, UNKN, UNKN, 0xb2, UNKN, UNKN, UNKN, UNKN, 0x58, 0x38, 0x45, UNKN, UNKN, UNKN, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xd5, 0xa5, 0xa9, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 4_
+ UNKN, UNKN, UNKN, UNKN, 0xda, 0xa2, UNKN, 0x4e, 0x1a, UNKN, 0xe4, UNKN, UNKN, UNKN, 0x0c, 0x98, // 5_
+ 0xa6, UNKN, UNKN, UNKN, 0x9c, 0xfa, UNKN, 0xbd, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 6_
+ UNKN, UNKN, 0xc0, 0xc5, UNKN, UNKN, UNKN, UNKN, UNKN, 0xcd, UNKN, UNKN, UNKN, 0x8a, UNKN, 0x80, // 7_
+ UNKN, UNKN, 0x95, UNKN, UNKN, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, UNKN, 0x68, UNKN, UNKN, // 8_
+ 0xb1, UNKN, UNKN, UNKN, UNKN, 0xd0, 0x0d, 0xc9, UNKN, UNKN, UNKN, UNKN, 0x29, 0x3a, 0xc8, 0x8d, // 9_
+ 0xc6, 0xee, 0x25, UNKN, 0x05, 0x6e, UNKN, 0x2a, UNKN, 0x85, UNKN, UNKN, 0xd8, UNKN, 0xce, UNKN, // a_
+ UNKN, UNKN, UNKN, 0xe9, 0xc4, 0xe8, UNKN, UNKN, 0x99, 0x6a, 0x0a, UNKN, 0x84, UNKN, UNKN, UNKN, // b_
+ UNKN, UNKN, UNKN, 0x9d, 0x2d, 0x10, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, UNKN, 0x11, UNKN, // c_
+ UNKN, 0xb9, 0x86, UNKN, 0xca, UNKN, UNKN, UNKN, UNKN, UNKN, 0x7a, UNKN, 0xf0, 0x09, 0x4c, UNKN, // d_
+ 0x60, 0x78, UNKN, UNKN, UNKN, 0x48, 0x5a, UNKN, UNKN, UNKN, 0x79, UNKN, UNKN, UNKN, UNKN, 0xba, // e_
+ UNKN, UNKN, 0x6d, 0x92, UNKN, 0x26, UNKN, UNKN, 0xb5, UNKN, 0x69, UNKN, UNKN, 0xa4, UNKN, 0x1d },// f_
+
+ // _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ { UNKN, UNKN, UNKN, UNKN, 0x48, UNKN, UNKN, 0x0c, UNKN, 0x60, 0x6d, 0x20, 0xda, UNKN, 0xf0, UNKN, // 0_
+ UNKN, 0xcd, 0x95, UNKN, UNKN, 0xae, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x8e, UNKN, 0x29, UNKN, // 1_
+ 0x90, UNKN, UNKN, UNKN, 0x69, 0xb5, UNKN, UNKN, UNKN, UNKN, 0xd0, 0xad, UNKN, UNKN, UNKN, 0x9a, // 2_
+ 0xb6, 0x40, UNKN, 0xd5, 0xfa, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xa4, UNKN, 0x88, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x2a, UNKN, UNKN, UNKN, 0xa2, UNKN, UNKN, UNKN, UNKN, UNKN, // 4_
+ 0xee, UNKN, UNKN, UNKN, 0x64, UNKN, 0xb0, 0x9d, UNKN, UNKN, UNKN, 0x80, UNKN, 0xf8, 0xe8, UNKN, // 5_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x91, UNKN, 0xb9, 0x8a, UNKN, UNKN, UNKN, 0x10, UNKN, // 6_
+ 0x4a, UNKN, UNKN, 0xc8, 0x9c, 0x4e, UNKN, UNKN, UNKN, UNKN, 0xb2, 0x85, 0x45, 0xc9, UNKN, UNKN, // 7_
+ 0x1a, UNKN, UNKN, 0xe9, UNKN, UNKN, UNKN, UNKN, UNKN, 0xca, UNKN, 0xc6, UNKN, 0xb1, UNKN, UNKN, // 8_
+ 0x1d, UNKN, 0xa8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xc5, // 9_
+ 0xe0, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x30, UNKN, 0x0d, UNKN, 0x8d, // a_
+ UNKN, 0x86, UNKN, UNKN, 0xd9, 0xbd, UNKN, UNKN, 0x05, 0xaa, UNKN, 0x38, UNKN, 0x18, 0xe4, UNKN, // b_
+ UNKN, 0xa6, UNKN, 0xa5, 0xc0, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, 0x4c, 0x84, UNKN, 0x6e, UNKN, // c_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x19, 0x65, UNKN, UNKN, UNKN, 0xce, 0x7a, UNKN, 0x3a, // d_
+ UNKN, 0x7d, UNKN, 0x0a, 0x49, UNKN, UNKN, UNKN, 0xe6, 0xd8, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // e_
+ UNKN, UNKN, UNKN, UNKN, 0x09, 0xa9, 0x25, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x5a, UNKN, 0x68 },// f_
+
+ // _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ { UNKN, 0x20, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, UNKN, 0xb0, 0x85, 0x3d, UNKN, 0x86, UNKN, UNKN, // 0_
+ 0x18, UNKN, UNKN, UNKN, 0x8a, 0xad, 0x79, 0x98, UNKN, UNKN, 0xc0, UNKN, 0x30, UNKN, 0x10, UNKN, // 1_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe4, UNKN, UNKN, UNKN, 0x29, UNKN, UNKN, UNKN, UNKN, // 2_
+ 0x9e, 0x6d, 0xa6, UNKN, 0xc9, 0x6e, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 3_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xaa, UNKN, 0x9c, 0x09, UNKN, UNKN, UNKN, 0xfa, UNKN, // 4_
+ UNKN, 0x69, UNKN, UNKN, 0x2d, UNKN, UNKN, UNKN, UNKN, UNKN, 0xc4, UNKN, 0x1a, 0x4c, 0x5a, UNKN, // 5_
+ UNKN, UNKN, 0xe9, UNKN, 0xb1, UNKN, 0x0c, 0xee, 0xda, 0xb2, 0xce, UNKN, 0x74, UNKN, UNKN, UNKN, // 6_
+ 0x7d, 0x0d, 0x48, UNKN, UNKN, UNKN, 0xf8, 0xd8, UNKN, UNKN, 0x0a, UNKN, UNKN, 0x45, 0xc6, UNKN, // 7_
+ UNKN, UNKN, UNKN, UNKN, UNKN, 0x26, UNKN, UNKN, UNKN, 0xc5, UNKN, UNKN, UNKN, 0xae, UNKN, UNKN, // 8_
+ 0xa9, UNKN, 0x90, 0x3a, UNKN, UNKN, 0x6c, UNKN, 0x64, UNKN, UNKN, 0xd5, UNKN, UNKN, UNKN, UNKN, // 9_
+ UNKN, 0x7a, UNKN, 0x05, 0xa8, UNKN, UNKN, 0x60, UNKN, UNKN, 0xa4, 0x8d, 0x2a, UNKN, UNKN, UNKN, // a_
+ UNKN, UNKN, UNKN, UNKN, 0xa0, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x92, 0x66, // b_
+ UNKN, UNKN, 0xd0, 0xf0, UNKN, UNKN, 0x38, 0xbd, 0xa2, UNKN, 0xed, 0x9d, 0x80, UNKN, 0xa5, UNKN, // c_
+ UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x99, UNKN, 0x88, UNKN, 0xcd, UNKN, 0xe8, // d_
+ 0xca, 0xb5, 0x49, 0x68, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xe6, 0xe0, 0x4a, UNKN, // e_
+ UNKN, UNKN, UNKN, 0xc8, UNKN, 0xb9, 0x91, UNKN, UNKN, UNKN, UNKN, 0x65, 0x95, UNKN, UNKN, UNKN },// f_
+
+ // _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
+ { 0x65, UNKN, UNKN, UNKN, 0x30, UNKN, UNKN, UNKN, 0x8e, UNKN, UNKN, 0xda, 0x2d, 0xc4, UNKN, 0x68, // 0_
+ UNKN, 0xa2, UNKN, UNKN, 0x2a, 0xa6, UNKN, UNKN, UNKN, 0x86, UNKN, UNKN, 0x60, UNKN, 0xe6, 0xa4, // 1_
+ UNKN, 0x84, UNKN, UNKN, 0xbd, UNKN, UNKN, UNKN, UNKN, UNKN, 0xce, 0xe4, 0xf8, 0xa0, UNKN, 0x8d, // 2_
+ UNKN, 0xcd, UNKN, UNKN, UNKN, 0x88, 0x4a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, // 3_
+ 0xd8, UNKN, UNKN, UNKN, 0x40, 0x11, UNKN, UNKN, 0xaa, 0x79, UNKN, 0x98, UNKN, 0x85, UNKN, UNKN, // 4_
+ 0x9a, 0xc6, UNKN, UNKN, 0x74, UNKN, UNKN, UNKN, UNKN, 0x95, 0xdd, UNKN, UNKN, 0x6d, UNKN, UNKN, // 5_
+ 0x8a, 0x6e, UNKN, UNKN, 0x18, 0xc5, UNKN, 0xf9, UNKN, 0xb0, 0x7a, UNKN, UNKN, UNKN, UNKN, 0xc0, // 6_
+ 0x99, UNKN, UNKN, 0x10, 0x90, 0x38, 0x09, UNKN, UNKN, UNKN, 0xe0, UNKN, UNKN, UNKN, UNKN, UNKN, // 7_
+ UNKN, UNKN, UNKN, 0xb5, UNKN, 0x4c, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0xfa, UNKN, UNKN, // 8_
+ UNKN, UNKN, 0x6a, 0x29, UNKN, UNKN, 0x5a, 0xae, UNKN, 0x3a, UNKN, 0x9c, UNKN, 0x0d, 0x49, 0xee, // 9_
+ UNKN, UNKN, UNKN, UNKN, 0xa5, 0x69, 0xf0, UNKN, 0x80, UNKN, 0xc8, UNKN, UNKN, UNKN, 0xb9, UNKN, // a_
+ 0x1a, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, 0x0c, UNKN, UNKN, UNKN, UNKN, UNKN, // b_
+ UNKN, UNKN, UNKN, UNKN, 0x64, UNKN, UNKN, 0xb2, 0x9d, UNKN, UNKN, 0xca, UNKN, UNKN, 0x0a, 0x05, // c_
+ UNKN, UNKN, UNKN, 0x91, UNKN, UNKN, UNKN, 0x92, UNKN, UNKN, UNKN, 0xed, UNKN, UNKN, UNKN, UNKN, // d_
+ UNKN, 0xec, 0x20, UNKN, 0xad, 0xd0, UNKN, 0x3d, UNKN, 0xb1, 0x6c, 0x66, UNKN, 0x4e, UNKN, 0xd5, // e_
+ 0xe9, UNKN, UNKN, 0xa9, UNKN, UNKN, 0xe8, UNKN, UNKN, 0xc9, 0xa8, UNKN, UNKN, 0x48, UNKN, UNKN } // f_
+ }};
+
+ uint8_t data {m_maincpu->space(AS_PROGRAM).read_byte(offset)};
+ return decryption_tables[offset & 3][data];
+}
+
+void jokercrd_state::jokercrd_opcodes_map(address_map &map)
+{
+ map(0x0000, 0xffff).r(FUNC(jokercrd_state::jokercrd_opcode_r));
+}
+
+void jokercrd_state::jokercrd(machine_config &config)
+{
+ fw2ndpal(config);
+
+ m_maincpu->set_addrmap(AS_OPCODES, &jokercrd_state::jokercrd_opcodes_map);
+}
+
+
+
+/*************************
+* Rom Load *
+*************************/
+
+/******************************** Jolly Card sets ************************************/
+
+/*
+ Jolly Card, TAB Austria
+ -----------------------
+
+ Pinouts:
+
+ X1-01 GND X1-A GND
+ X1-02 GND X1-B GND
+ X1-03 GND X1-C GND
+ X1-04 +5V X1-D +5V
+ X1-05 +12V X1-E +12V
+ X1-06 NC X1-F NC
+ X1-07 NC X1-G NC
+ X1-08 NC X1-H NC
+ X1-09 NC X1-I Coin 1
+ X1-10 Coin 2 X1-J Pay Out SW
+ X1-11 Hold 3 X1-K NC
+ X1-12 NC X1-L GND
+ X1-13 Hold 4 X1-M Remote
+ X1-14 Bookkeeping SW X1-N GND
+ X1-15 Hold 2 X1-O Cancel
+ X1-16 Hold 1 X1-P Hold 5
+ X1-17 Start X1-Q
+ X1-18 Hopper Out X1-R
+ X1-19 Red X1-S Green
+ X1-20 Blue X1-T Sync
+ X1-21 GND X1-U Speaker GND
+ X1-22 Speaker + X1-V Management SW
+
+ X2-01 GND X2-A GND
+ X2-02 NC X2-B NC
+ X2-03 Start X2-C NC
+ X2-04 NC X2-D NC
+ X2-05 NC X2-E NC
+ X2-06 Lamp Start X2-F Lamp Hold 1+3
+ X2-07 Lamp Hold 2 X2-G Lamp Hold 4
+ X2-08 Lamp Hold 5 X2-H Lamp Cancel
+ X2-09 NC X2-I NC
+ X2-10 Counter In X2-J Counter Out
+ X2-11 Hopper Count X2-K Hopper Drive
+ X2-12 Counter Remote X2-L
+ X2-13 X2-M
+ X2-14 X2-N
+ X2-15 NC X2-O
+ X2-16 X2-P
+ X2-17 X2-Q Coin Counter
+ X2-18 X2-R
+
+ ---------------------------------------------------
+
+ DIP Switches:
+
+ ON OFF
+
+ 1 Hopper Manual Payout SW :Payout
+ 2 Auto Hold No Auto Hold :Hold
+ 3 Joker Without Joker :Joker
+ 4 Dattl Insert TAB Insert :Inserts
+ 5 5 Points/Coin 10 Points/Coin :Coin 1
+ 6 5 Points/Coin 10 Points/Coin :Coin 2
+ 7 10 Points/Pulse 100 Points/Pulse :Remote
+ 8 Play Keyboard Test :Mode
+
+ ---------------------------------------------------
+*/
+
+ROM_START( jollycrd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jolycard.run", 0x8000, 0x8000, CRC(f531dd10) SHA1(969191fbfeff4349afef619d9241ef5186e6d57f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jollycrd_nvram.bin", 0x0000, 0x0800, CRC(8f0a86c9) SHA1(467bd4f601ac6aa818c036f1269c2d43d27854f6) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+
+/*
+ Jolly Card (German)
+
+ 1x R65C02P2
+ 2x ST EF68B21P
+ 1x UM6845B
+ 1x Microchip AY-3-8910A
+ 1x Intel P5C090-50 (24 Macrocell CMOS PLD, DIP40)
+
+ 1x HY6264LP-15
+ 1x MK6116LN-15
+ 3x ST M27C256B
+ 1x 82S147 Bipolar PROM.
+ 1x GAL16V8S
+
+ 1x Xtal 16.000 MHz.
+ 1x 3.6V lithium battery.
+ 1x 8 DIP switches bank.
+
+*/
+ROM_START( jollycrda )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "pok14.bin", 0x8000, 0x8000, CRC(30936afb) SHA1(5b96cd7e425ad79163e1d55e530cbabcb116f8d2) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "tab3.bin", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "tab2.bin", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM. the game doesn't work without it
+ ROM_LOAD( "jollycrda_nvram.bin", 0x0000, 0x0800, CRC(5cbb4d8f) SHA1(da5edbef20bb4f0c634939389b3a9744c5743641) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "jop.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 ) // cracked PLD
+ ROM_LOAD( "tab1.0_gal16v8s.bin", 0x0000, 0x0117, CRC(574f9a48) SHA1(bb5e2e86da85130d92f61cc57038a844950f443e) )
+ROM_END
+
+
+ROM_START( jolyc3x3 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jc3x3.bin", 0x8000, 0x8000, CRC(71e304ad) SHA1(238b792d841432582c94b21a674d46a95e8f3826) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyc3x3_nvram.bin", 0x0000, 0x0800, CRC(727c70cf) SHA1(3639b0891514064e21ebdb280791cc9c8f5ba481) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+
+/*
+
+ Jolly Card Professional 2.0
+ ---------------------------
+
+ Special version with maximum bet up to 98/980 credits.
+ This game has an annoying password system through a DOS program.
+
+
+ differences:
+ ----------------------------------------------------------
+
+ MZS Soft:
+
+ - All manufacturer strings, phones and dates.
+ - Doesn't allow to clean partial IN/OUT meters.
+
+ $9FFF LDX #$EA ; Just clean 24 bytes from memory.
+ $A001 LDA #$00
+ $A003 STA $0300,X
+ $A006 INX
+ $A007 BNE $A003
+ $A009 RTS
+
+ - The following unknown bytes...
+
+ $47EB - $47FF: 05 05 01 04 04 ; Unknown.
+
+ ----------------------------------------------------------
+
+ Spale Soft:
+
+ - All manufacturer strings, phones and dates.
+
+ - Allow to clean partial IN/OUT meters.
+
+ $9FFF LDX #$00 ; Just clean 255 bytes from memory.
+ $A001 LDA #$00
+ $A003 STA $0300,X
+ $A006 INX
+ $A007 BNE $A003
+ $A009 RTS
+
+ - The following unknown bytes...
+
+ $47EB - $47FF: 00 00 00 00 00 ; Unknown.
+
+ ----------------------------------------------------------
+
+ 034E-034F: Partial IN.
+ 0360-0361: Partial OUT.
+ 044E-044F: Total IN.
+ 0460-0461: Total OUT.
+
+*/
+
+ROM_START( jolycmzs )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // MZS Tech
+ ROM_LOAD( "mzstech.bin", 0x8000, 0x8000, CRC(cebd1e56) SHA1(24d88b3383cecf3829556d75460053663aab4ef1) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+/* Load a default NVRAM, otherwise an annoying password system appears
+ generating a code that needs to be parsed by a PC-DOS program, that
+ is currently missing and never would appear. This program is supossed
+ to give back an hexa code to feed in the game through a combination
+ of inputs.
+*/
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycmzs_nvram.bin", 0x0000, 0x0800, CRC(828ffeef) SHA1(6a52282231f1944ba79049f267a9c1941373aea2) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+ROM_START( jolyc980 )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // Spale Soft
+ ROM_LOAD( "j980.bin", 0x8000, 0x8000, CRC(48249fff) SHA1(390cd0eb3399446a66363dc6760458170e1970fd) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+/* Load a default NVRAM, otherwise an annoying password system appears
+ generating a code that needs to be parsed by a PC-DOS program, that
+ is currently missing and never would appear. This program is supossed
+ to give back an hexa code to feed in the game through a combination
+ of inputs.
+*/
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyc980_nvram.bin", 0x0000, 0x0800, CRC(ef2c89c7) SHA1(a286001e205dcd16d914e07ba2b7c820335ab9c2) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+
+ROM_START( jolycdev ) // Jolly Card (lipa) from Evona
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "lipa.bin", 0x8000, 0x8000, CRC(62657c98) SHA1(237466dde26540c119c631c75f51c87ea59d1a91) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jollyb.bin", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jollya.bin", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdev_nvram.bin", 0x0000, 0x0800, CRC(ae2c2fb8) SHA1(912d673ea8e26ff62520a7b86e702e5260cff4c0) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8uni.bin", 0x0000, 0x0117, CRC(b81d7e0a) SHA1(7fef0b2bcea931a830d38ae0f1102434cf281d2d) )
+ROM_END
+
+
+/*
+ Jolly Card (other)
+ ------------------
+
+ - 1x G65SC02P (CPU)
+ - 1x MC68B45P (CRTC)
+ - 1x AY3-8910 (sound)
+ - 2x MC6821P (PIAs)
+
+ RAM: - 1x NVram DS1220Y (instead of 6116)
+ - 1x KM6264AL-10
+
+ - 1x Crystal : 16.000 MHz
+
+ These croatian sets are not meant to work with coins...
+ Only remote credits, as can be seen in test mode.
+*/
+
+ROM_START( jolyccra ) // Jolly Card (Croatian, set 1)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jollyc.bin", 0x8000, 0x8000, CRC(8926d99d) SHA1(dd5d1ac03d30d823dfcfe1349328ecb7afbc37fa) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jollyb.bin", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jollya.bin", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyccra_nvram.bin", 0x0000, 0x0800, CRC(478ab0a9) SHA1(8c5160d2ac8d4a9db0ae1e478d3bb1513a04544f) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+
+ROM_START( jolyccrb ) // Jolly Card (Croatian, set 2)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jollypkr.003", 0x8000, 0x8000, CRC(ea7340b4) SHA1(7dd468f28a488a4781521809d06db1d7917048ad) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyccrb_nvram.bin", 0x0000, 0x0800, CRC(c1d49c88) SHA1(27ffdedfc7f09ff11c3b2537db3681473b776074) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+
+/*
+ Jolly Card (italian, blue Tab board, encrypted)
+ -----------------------------------------------
+
+ - 1x HY6264LP
+ - 1x MC6845P
+ - 1x HM6116LP
+ - 1x G65SC02 (main)
+ - 1x AY-3-8910 (sound)
+ - 1x MC6821P
+ - 1x oscillator 16.000 MHz
+ - ROMs 2x TMS27c256 (1,2)
+ 1x M5M27256 (jn)
+ - 1x prom N82S147
+ - 1x GAL16V8B
+ - 2x HY18CV85 (electrically-erasable PLD)
+ - 1x 8 DIP switches
+ - 1x 22x2 edge connector
+ - 1x 18x2 edge connector
+ - 1x trimmer (volume)(missing)
+*/
+
+ROM_START( jolycdit ) // blue TAB PCB, encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jn.bin", 0x8000, 0x8000, CRC(6ae00ed0) SHA1(5921c2882aeb5eadd0e04a477fa505ad35e9d98c) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(46805150) SHA1(63687ac44f6ace6d8924b2629536bcc7d3979ed2) )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(43bcb2df) SHA1(5022bc3a0b852a7cd433e25c3c90a720e6328261) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdit_nvram.bin", 0x0000, 0x0800, CRC(c55c6706) SHA1(a38ae926f057fb47e48ca841b2d097fc4fd06416) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8b.bin", 0x0000, 0x0117, CRC(3ad712b1) SHA1(54214841fb178e4b59bf6051522718f7667bad28) )
+ROM_END
+
+
+/*
+ Jolly Card (Italian encrypted bootleg)
+ --------------------------------------
+
+ - 1x UM6845P
+ - 1x R65C02P3 (main CPU)
+ - 1x AY-3-8910 (sound)
+ - 2x MC68B21P
+ - 1x oscillator 16.000 MHz
+ - ROMs 3x 27256.
+ - 1x PROM M1-7649-5 (not dumped)
+ - 2x PLD HY18CV8S (not dumped)
+ - 1x PAL16L8ACN (not dumped)
+ - 1x 22x2 edge connector
+ - 1x 18x2 edge connector
+ - 1x trimmer (volume)
+ - 1x 8x2 DIP switches.
+
+ jolycdit vs jolycdib:
+
+ 1.BIN 1.BIN IDENTICAL
+ 2.BIN 2.bin IDENTICAL
+ jn.BIN 3.BIN 97.726440%
+
+ jolycdib program seems to be the original for blue TAB PCB.
+ jolycdit has some code patches and redirected parts to suspicious offsets (as d500, d000, etc)
+
+ This sets is not meant to work with coins...
+ Only remote credits, as can be seen in test mode.
+*/
+
+ROM_START( jolycdib ) // bootleg PCB, encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.bin", 0x8000, 0x8000, CRC(c76fdc79) SHA1(fc75c274d64fa9c99a546d424f38e79f1acf2576) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(46805150) SHA1(63687ac44f6ace6d8924b2629536bcc7d3979ed2) ) // sldh
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(43bcb2df) SHA1(5022bc3a0b852a7cd433e25c3c90a720e6328261) ) // sldh
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdib_nvram.bin", 0x0000, 0x0800, CRC(038a71fe) SHA1(99d3befbee8f9f86ce7f074de7f16fb25053c077) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8b.bin", 0x0000, 0x0117, CRC(3ad712b1) SHA1(54214841fb178e4b59bf6051522718f7667bad28) )
+ROM_END
+
+
+/*
+ Jolly Card (Italian encrypted bootleg, set 2)
+ ---------------------------------------------
+
+ This program works in both 'normal' and 'remote' modes,
+ allowing to pay through hopper, or just through manual
+ switch/button.
+
+ To initialize the NVRAM, DIP switches should be placed
+ at factory default: (On On On On On On On Off), then
+ keep pressed both service buttons (key 9 & 0), reset
+ using F3 key, and then finally releasing the service
+ buttons.
+*/
+
+ROM_START( jolycdic ) // another bootleg PCB, encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3ss.bin", 0x8000, 0x8000, CRC(3d7cde61) SHA1(6154878491f4d2f1ea035d18cdf43154c550d509) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(32c24495) SHA1(0d78c4d2743401b5ec9919d09814064eeac8023f) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(91093176) SHA1(b889c617f94161933c35c324c7d84fec182953d8) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdic_nvram.bin", 0x0000, 0x0800, CRC(47a5890b) SHA1(6a6531fe5e8f6c1b5a9aac314b2cce6a0129f6da) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8b.bin", 0x0000, 0x0117, NO_DUMP ) // sldh
+ROM_END
+
+/*
+ Jolly Card (Italian encrypted bootleg, set 3)
+ ---------------------------------------------
+
+ Running in a Cleco bootleg board.
+ Encrypted GFX.
+
+ Differences: 1 byte.
+
+ jolycdib jolycdic
+
+ C1D6: 0x60 0x10
+
+ C1E5: lda #$60 lda #$10
+ C1E7: sta $0000 sta $0000
+ C1EA: sta $0003 sta $0003
+ C1ED: sta $07f8 sta $07f8
+
+*/
+ROM_START( jolycdii )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "145-3.bin", 0x8000, 0x8000, CRC(812f88f1) SHA1(d387b7e4818dc6f5f2b6161a623c6e4f1eeedf2a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "145-2.bin", 0x0000, 0x8000, CRC(46805150) SHA1(63687ac44f6ace6d8924b2629536bcc7d3979ed2) )
+ ROM_LOAD( "145-1.bin", 0x8000, 0x8000, CRC(43bcb2df) SHA1(5022bc3a0b852a7cd433e25c3c90a720e6328261) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // Default NVRAM
+ ROM_LOAD( "jolycdii_nvram.bin", 0x0000, 0x0800, CRC(c2a138ad) SHA1(463fed8b495fa5286513f52fa09cf97f29e5f40e) )
+
+ ROM_REGION( 0x0800, "proms", 0 ) // Not a bipolar PROM. Just a replacement.
+ ROM_LOAD( "ws57c291_d27hc65d.bin", 0x0000, 0x0200, CRC(d96f3760) SHA1(07e80baf9c6c08171195b7810261e043197a9c3c) )
+ ROM_IGNORE( 0x0600 ) // empty
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8b.bin", 0x0000, 0x0117, NO_DUMP )
+ROM_END
+
+
+/* Jolly Card Italian bootleg...
+
+ This PCB has an Altera EP910PC CPLD on board
+
+ To init NVRAM, DSW must be:
+ OFF ON ON ON ON ON ON ON
+
+ Then (SERVICE1 + SERVICE2) and reset,
+ then another reset.
+
+ Q is remote (x100)
+ W is payout.
+
+-------------------------------------
+
+ Complete specs:
+
+ 1x Empty CPU place (surely Rockwell 65C02 bitwise family)
+
+ 1x GI AY-3-8910 Sound Processor.
+
+ 2x Motorola MC68B21P for I/O.
+ 1x GoldStar GM68B45S CRTC.
+ 1x Altera EP910PC-40.
+
+ 1x KM6264AL-10
+ 1x Dallas DS1220Y nonvolatile SRAM.
+
+ 2x M27C512 (ROMs 6 & 7)
+ 1x MBM27256 (ROM 5)
+
+ 1x N82S147N Bipolar PROM (undumped)
+
+ 1x Xtal 16 MHz.
+ 1x 8 DIP Switches bank.
+ 1x Jamma edge connector.
+ 1x Unknown POT between two caps, maybe for sound amp stage.
+
+*/
+ROM_START( jolycdid ) // Altera EP910PC CPLD
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "5.cpu", 0x8000, 0x8000, CRC(56158851) SHA1(abf1daad1198dcc017352742e3c00d57e8955bd4) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "7.bin", 0x0000, 0x8000, CRC(a4452751) SHA1(a0b32a8801ebaee7ede7873b244f1a424433fe94) )
+ ROM_CONTINUE( 0x0000, 0x8000) // Discarding 1nd half. 1ST AND 2ND HALF IDENTICAL
+ ROM_LOAD( "6.bin", 0x8000, 0x8000, CRC(8b64d4c6) SHA1(8106cba31cd3fbda0855e6070182d248e3d52495) )
+ ROM_CONTINUE( 0x8000, 0x8000) // Discarding 1nd half. 1ST AND 2ND HALF IDENTICAL
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdid_nvram.bin", 0x0000, 0x0800, CRC(6eb66015) SHA1(39490cf5d404c9e9fb58439f6d9876a3e9b29ba0) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(fc9a8aa3) SHA1(6f0a98bd0c7a64281bb1cce35de11b76978d7123) ) // sldh
+ROM_END
+
+
+/* Jolly Card Italian bootleg...
+
+ To init NVRAM, DSW must be:
+ OFF ON ON ON ON ON ON ON
+
+ Then (SERVICE1 + SERVICE2) and reset,
+ then another reset.
+
+ This set has spam graphics, but seems
+ used by another program.
+
+*/
+ROM_START( jolycdie ) // Bootleg PCB, NON encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "aic.cpu", 0x8000, 0x8000, CRC(56158851) SHA1(abf1daad1198dcc017352742e3c00d57e8955bd4) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "c.bin", 0x0000, 0x8000, CRC(eff5362c) SHA1(1c9a48866dc5ee37fad6d68465f326d243c821c3) )
+ ROM_LOAD( "b.bin", 0x8000, 0x8000, CRC(98309e14) SHA1(0d3e3766768fafc728a08668ad693f950d1fabab) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdie_nvram.bin", 0x0000, 0x0800, CRC(1b2fba44) SHA1(be5c956517072581edaebe9ae440a542964c8490) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(fc9a8aa3) SHA1(6f0a98bd0c7a64281bb1cce35de11b76978d7123) ) // sldh
+ROM_END
+
+/* Jolly Card Italian bootleg...
+
+ This PCB has an Altera EP910PC CPLD on board
+
+ This set doesn't need any NVRAM initialization.
+
+ 5 & 6 are coins.
+ W is payout.
+*/
+ROM_START( jolycdif ) // Altera EP910PC CPLD
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(80983f6a) SHA1(222ce5d4800887de92a73decbad31e96f8da3b4a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(a4452751) SHA1(a0b32a8801ebaee7ede7873b244f1a424433fe94) )
+ ROM_CONTINUE( 0x0000, 0x8000) // Discarding 1nd half. 1ST AND 2ND HALF IDENTICAL
+ ROM_LOAD( "3.bin", 0x8000, 0x8000, CRC(2856c82d) SHA1(7ce835bc2246ffede180cff0d8d0d4528afcc297) )
+ ROM_CONTINUE( 0x8000, 0x8000) // Discarding 1nd half. 1ST AND 2ND HALF IDENTICAL
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) ) // proper dump
+ROM_END
+
+
+/* Jolly Card Italian bootleg...
+
+ This PCB has a TI EP910DC-30 CPLD,
+ like others italian bootlegs that
+ have an Altera EP910PC CPLD on board.
+
+ To init NVRAM, DSW must be:
+ OFF ON ON ON ON ON ON ON
+
+ Then (SERVICE1 + SERVICE2) and reset,
+ then another reset.
+
+ Once NVRAM is initialized, the hardware still complains about it.
+ The code checks for values 0x45 & 0x56 at ROM space offsets $E825
+ and $E826. If these values are there, the code jumps to $C8C2,
+ where the game stucks with a hardware error message.
+
+ C8B3: LDA $E825 AD 25 E8 ; load the contents of $E825.
+ C8B6: CMP #$45 C9 45 ; compare with #$45, ASCII "E".
+ C8B8: BEQ $C8C2 F0 08 ; if true, jumps to $C8C2.
+ C8BA: LDA $E826 AD 26 E8 ; load the contents of $E826.
+ C8BD: CMP #$56 C9 56 ; compare with #$56, ASCII "V".
+ C8BF: BEQ $C8C2 F0 01 ; if true, jumps to $C8C2.
+ C8C1: RTS 60 ; returns from subroutine.
+ ....
+ C8C2: JMP $C0D8 4C D8 C0 ; jumps to hardware error.
+
+ Maybe something is mapped virtual or physically there that
+ shows different values that the ones from the ROM.
+
+*/
+ROM_START( jolycdig )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // TI EP910DC-30 CPLD (DIP-40 Ceramic)
+ ROM_LOAD( "3__27c256.bin", 0x8000, 0x8000, CRC(e939ed2a) SHA1(a413623499971517569bcf97860caad65ff5535f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2__27c512.bin", 0x0000, 0x8000, CRC(a4452751) SHA1(a0b32a8801ebaee7ede7873b244f1a424433fe94) )
+ ROM_IGNORE( 0x8000) // discarding 2nd half (identical halves)
+ ROM_LOAD( "1__27c512.bin", 0x8000, 0x8000, CRC(8b64d4c6) SHA1(8106cba31cd3fbda0855e6070182d248e3d52495) )
+ ROM_IGNORE( 0x8000) // discarding 2nd half (identical halves)
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdig_nvram.bin", 0x0000, 0x0800, CRC(a85854cb) SHA1(601d45f936626a8df7ffe8e36aef17416bbb7cca) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "27s29pc.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+ROM_START( jolycdih )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(3b2c237c) SHA1(08f646399c17747d6b9b8e86bb549dde87d26ba4) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(a4452751) SHA1(a0b32a8801ebaee7ede7873b244f1a424433fe94) )
+ ROM_CONTINUE( 0x0000, 0x8000) // Discarding 1nd half. 1ST AND 2ND HALF IDENTICAL
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(8b64d4c6) SHA1(8106cba31cd3fbda0855e6070182d248e3d52495) )
+ ROM_CONTINUE( 0x8000, 0x8000) // Discarding 1nd half. 1ST AND 2ND HALF IDENTICAL
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "dm74s472n.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0xb000, "plds", 0 )
+ ROM_LOAD( "ep910.bin", 0x0000, 0x0884, CRC(aa62207e) SHA1(a2e51cf3617d07ff1ce42ee1d56e1c17b6fe71de) )
+ ROM_LOAD( "pal16v8h-25pc-4.bin", 0x0900, 0x0117, CRC(df5be97d) SHA1(8cd63d49ab7020cdec07c1198413dc7d93e90d35) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolycdih_nvram.bin", 0x0000, 0x0800, CRC(02b3b335) SHA1(207a1289e4298d942e4806adf8ffb87e0b9b4e58) )
+ROM_END
+
+/**********************************************************************
+
+ ZABAVNI KARTI (ЗАБАВНИ КАРТИ)
+ Bulgarian Jolly Card clone with cyrillic charset.
+
+ ЗАБАВНИ КАРТИ means "Fun cards" / "Cards for fun".
+
+ Encrypted GFX. Same style as blue TAB board.
+
+ This is a timed game. You coin for an amount of playing time.
+ Once the time counter ends, all earned credits/bonus dissapear.
+
+ It looks like an amusement version.
+
+ To see more technical notes and setup instructions, see above
+ the section 'NOTES BY GAME/SET'.
+
+**********************************************************************/
+
+ROM_START( jolycdcy )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "256.bin", 0x8000, 0x8000, CRC(b7600b68) SHA1(04a532d3d1daa0ab43a2b7345ea0e86b8701f649) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(df434aa7) SHA1(e154868304f37a982d030de0989716ab9e27298d) )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(140546c5) SHA1(4dce119cd1a149eda6f546c0656de8fb8baef83b) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // Default NVRAM
+ ROM_LOAD( "jolycdcy_nvram.bin", 0x0000, 0x0800, CRC(4c96ea57) SHA1(f7115866e9df8d031f23971b900119902406c020) )
+
+ ROM_REGION( 0x0800, "proms", 0 )
+ ROM_LOAD( "n82s147a.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "peel18cv8.bin", 0x0000, 0x0155, CRC(fc51ef45) SHA1(a06916ccb65d7d3b9fd03f5de042c848d13478bb) )
+ROM_END
+
+
+ROM_START( sjcd2kx3 ) // Super Joly 2000 3x
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "sj3.bin", 0x8000, 0x8000, CRC(c530b518) SHA1(36934d8e1e2cb2f71eb44a05b86ec970c9f398cd) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "sj2.bin", 0x0000, 0x8000, CRC(d7253325) SHA1(ad40e662519da9b11f77690b7d41c5007f74e280) )
+ ROM_LOAD( "sj1.bin", 0x8000, 0x8000, CRC(82741749) SHA1(d0bf3073dff9ba1c4913fd754f965951e9cb5b03) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "sjcd2kx3_nvram.bin", 0x0000, 0x0800, CRC(1141368b) SHA1(b4af2d59b5e8115440e1219a621cfd2fb8c2c978) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8uni.bin", 0x0000, 0x0117, CRC(b81d7e0a) SHA1(7fef0b2bcea931a830d38ae0f1102434cf281d2d) )
+ROM_END
+
+
+ROM_START( jolycdab )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // program is testing/writing ROM offsets $8800-$BFFF (chksum?).
+ ROM_LOAD( "ig1poker.run", 0x8000, 0x8000, CRC(c96e6542) SHA1(ed6c0cf9fe8597dba9149b2225320d8d9c39219a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jn1poker.ch2", 0x0000, 0x8000, CRC(8d78e43d) SHA1(15c60f8e0cd88518b0dc72b92aff6d8d4b2149cf) )
+ ROM_LOAD( "jn1poker.ch1", 0x8000, 0x8000, CRC(d0a87f58) SHA1(6b7925557c4e40a1ebe52ecd14391cdd5e00b59a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM.
+ ROM_LOAD( "jolycdab_nvram.bin", 0x0000, 0x0800, CRC(30fe661b) SHA1(323c9b5e4856601dbd40f8e48aa8cd9a112e08a9) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+/*
+ Jolly Game (V1, Otti Karl logo)
+ Bootleg. 1993.
+
+ Color info in 2nd half of the Bipolar PROM.
+
+*/
+ROM_START( jolygame )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jg_99.1.bin", 0x8000, 0x8000, CRC(4154478f) SHA1(050340d75aa9a4b93025eef3507a8cfe220c466b) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(db147426) SHA1(f97f3fed13e2723a3b32eb146cd7c16b54088d61) )
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(e7e7a0fd) SHA1(232190a0b2086e12ea3d77652ef98c9e107b3dc7) )
+
+ ROM_REGION( 0x0800, "ds1220", 0 ) // to analyze...
+ ROM_LOAD( "ds1220.bin", 0x0000, 0x0800, CRC(4364b423) SHA1(01c8d5e3003f4a9cc8ec446ddc18ff83353688df) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM.
+ ROM_LOAD( "jolygame_nvram.bin", 0x0000, 0x0800, CRC(51213ede) SHA1(4da080e3b5ea8090609571883bbb04ea22774aa5) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29apc.bin", 0x0000, 0x0200, CRC(8992aa4d) SHA1(5a0649bff66e7cab1bcbadcdfc74c77a747cc58f) )
+ROM_END
+
+
+/******************************** Bonus Card based sets ************************************/
+
+/*
+ Bonus Card
+ Fun World, 1986.
+
+ Hardware Fun World/Impera/TAB...
+ Seems close to Big Deal and Royal Vegas Joker Card.
+
+ PCB Layout...
+ +----------------------------------------------------------------------------------------------------------------+
+ | |
+ | +--------+ +--------+ +----------+ +--------+ |
+ | | | +------------+ | | | LM380N | | | |
+ | | | | GD74LS157 | | | +----------+ | | +---+ +---+
+ | | | +------------+ |HYUNDAI | |AY38910A| | | +---+ --|
+ | | | | | |/P | |ULN| | | --|
+ | | | +------------+ |HY6116AL| | | |200| |74L| --|
+ | | | | GD74LS157 | |P-10 | | | |3AN| |S04| --|
+ | |MC68B45P| +------------+ | | |9027CCA | | | |N | --|
+ | | | | | | | | | | | --|
+ | | | +------------+ | | +----------+ | | +---+ | | --|
+ | | | | GD74LS157 | | | |XRU74HC126| | TAIWAN | +---+ --|
+ | | 2JR5 | +------------+ | | +----------+ | | --|
+ | | | +--------+ | | +---+ --|
+ | |LLAG9319| +------------+ +------------+ | | | | --|
+ | | | | GD74LS157 | | HD74LS245P | | | |ULN| +---+
+ | | | +------------+ +------------+ | | |200| |
+ | | | | | |3AN| |
+ | | | +----+ | | | | |
+ | | | +------------------+ |XTAL| | | | | |
+ | +--------+ | KM6264BL-10 | | | +----------+ +--------+ +---+ |
+ | | | |16.0| | 74LS139AN| +--------+ +--------+ |
+ | +-------------+ | 251Y KOREA | |0Mhz| +----------+ | | | | |
+ | | GD74LS245 | | | +----+ | | | | |
+ | +-------------+ +------------------+ | | | | +---+
+ | +---+ +------------+ |R65C02P2| |MC6821P | --|
+ | +-------------+ +------------+ | | |TIBPAL16L8-2| | | | | --|
+ | | HD74LS374P | | HD74LS374P | | | +------------+ |11450-12| | 0K2P | --|
+ | +-------------+ +------------+ | | | | | | --|
+ | |GD7| | MEXICO | | | --|
+ |+--------------------+ +----------+ |4LS| | | | | +---+ --|
+ ||Bonus Card 1 | | 74LS194AN| |368| | | |LLAI9320| | 8| --|
+ || | +----------+ +---+ |9314 | | | | | --|
+ || 27C256| |A27110-4| | | | | --|
+ || | +----------+ +---+ | | | | |DIP| --|
+ |+--------------------+ | 74LS194AN| | | | | | | | | --|
+ | +----------+ |74L| | | | | | | --|
+ | |S39| | | | | | | --|
+ |+--------------------+ +----------+ |3N | | | | | | 1| --|
+ ||Bonus Card 2 | | 74LS194AN| | | | | | | +---+ --|
+ || | +----------+ | | +--------+ +--------+ --|
+ || 27C256| +---+ +--------+ --|
+ || | +----------+ +--------------------+ | | --|
+ |+--------------------+ | 74LS194AN| |Bonus Card 3 | | | --|
+ | +----------+ | | | | --|
+ | | 27C256| |MC6821P | --|
+ |+----------+ +----------+ | | | | --|
+ || GD74LS174| |HD74LS02P | +--------------------+ | 0K2P | --|
+ |+----------+ +----------+ | | --|
+ | | | --|
+ |+---+ +---+ +---+ +---+ +---+ |LLAI9320| --|
+ ||GD7| | | |HD7| | | | | | | --|
+ ||4LS| |74S| |4LS| |74L| JOLLY-2-T |74L| | | --|
+ ||174| |472| |374| |S00| |S02| | | --|
+ || | |N | |P | |N | |N | | | --|
+ || | | | | | | | +----+ | | | | --|
+ || | | | | | | | | A00| | | | | --|
+ |+---+ | | | | | | +----+ | | | | +---+
+ | | | | | +---+ +---+ | | |
+ | +---+ +---+ +--------+ |
+ | |
+ +----------------------------------------------------------------------------------------------------------------+
+
+ A00 = TL7705ACP
+
+
+ DIP
+ +---------------+
+ |#|#| | | |#| | |
+ |---------------|
+ | | |#|#|#| |#|#|
+ +---------------+
+ 1 2 3 4 5 6 7 8
+
+*/
+
+ROM_START( bonuscrd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bonucard.cpu", 0x8000, 0x8000, CRC(da342100) SHA1(451fa6074aad19e9efd148c3d18115a20a3d344a) ) // original program
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "bonuscard_2.bin", 0x0000, 0x8000, CRC(b026823b) SHA1(8d0c80019a9b35104a3782c4fad5c2ca07440a37) )
+ ROM_LOAD( "bonuscard_1.bin", 0x8000, 0x8000, CRC(e07f72de) SHA1(f4bd6bc7a8aabe76d09d48362e32f29932fff4e4) )
+
+ ROM_REGION( 0x0400, "proms", 0 )
+ ROM_LOAD( "n82s147an.bin", 0x0000, 0x0200, BAD_DUMP CRC(136245f3) SHA1(715309982fcafbce88b08237ca46acec31273938) ) // from power card, original fun world encrypted bonus card clone.
+ ROM_LOAD( "74s472n.bin", 0x0200, 0x0200, CRC(e56780cb) SHA1(c06b854f21b1dcee465ac9c8c9a2934b7e99565f) ) // original dump, but doesn't match the cards colors in real board.
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "bonuscrd_tibpal16l8.bin", 0x0000, 0x0104, CRC(9af1ac12) SHA1(2b9770eeca081b8c744ba1250bb99569816d7a85) )
+ROM_END
+
+
+ROM_START( bonuscrda )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bonuscard_3.bin", 0x8000, 0x8000, CRC(c4c6f7af) SHA1(3d0c5c867a9473043fb0b2cde6c6b98c4580ad81) ) // identical to parent, but with 'ATG Electronic' string instead.
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "bonuscard_2.bin", 0x0000, 0x8000, CRC(b026823b) SHA1(8d0c80019a9b35104a3782c4fad5c2ca07440a37) )
+ ROM_LOAD( "bonuscard_1.bin", 0x8000, 0x8000, CRC(e07f72de) SHA1(f4bd6bc7a8aabe76d09d48362e32f29932fff4e4) )
+
+ ROM_REGION( 0x0400, "proms", 0 )
+ ROM_LOAD( "n82s147an.bin", 0x0000, 0x0200, BAD_DUMP CRC(136245f3) SHA1(715309982fcafbce88b08237ca46acec31273938) ) // from power card, original fun world encrypted bonus card clone.
+ ROM_LOAD( "74s472n.bin", 0x0200, 0x0200, CRC(e56780cb) SHA1(c06b854f21b1dcee465ac9c8c9a2934b7e99565f) ) // original dump, but doesn't match the cards colors in real board.
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "bonuscrd_tibpal16l8.bin", 0x0000, 0x0104, CRC(9af1ac12) SHA1(2b9770eeca081b8c744ba1250bb99569816d7a85) )
+ROM_END
+
+
+/*
+ Club Card (ver 1.1, English)
+ Impera / Mega Tech Salzburg
+
+ VRAM at 4000/5000
+*/
+ROM_START( clubcard )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cpu_256.bin", 0x8000, 0x8000, CRC(4b028c4d) SHA1(28ba4abc36d6adcb4299bb9a35f5f0d7572db656) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "c1.bin", 0x0000, 0x8000, CRC(09012966) SHA1(5b70c760bc06c054943f18057375d2743758416f) )
+ ROM_LOAD( "c2.bin", 0x8000, 0x8000, CRC(ed9a680a) SHA1(d63c49e9689f3d49818cf207761eb3430254e2cb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized NVRAM
+ ROM_LOAD( "clubcard_nvram.bin", 0x0000, 0x0800, CRC(974cb47b) SHA1(da9218210847ce73887355afa56d0ccfd45e5d94) )
+
+ ROM_REGION( 0x0400, "proms", 0 )
+ ROM_LOAD( "bprom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e92f74e0) SHA1(dfc4a9d140d21b990f769c10802c4d2c33dd4132) ) // borrowed from gratispk
+ROM_END
+
+
+/*
+ Big Deal (hungarian)
+ ------------------
+
+ - 1x MC6845P
+ - 1x YM2149F
+ - 2x MC6821P
+ - 1x Crystal 16.000 MHz
+*/
+
+ROM_START( bigdeal )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "poker4.001", 0x8000, 0x8000, CRC(bb0198c1) SHA1(6e7d42beb5723a4368ae3788f83b448f86e5653d) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "poker4.003", 0x0000, 0x8000, CRC(8c33a15f) SHA1(a1c8451c99a23eeffaedb21d1a1b69f54629f8ab) )
+ ROM_LOAD( "poker4.002", 0x8000, 0x8000, CRC(5f4e12d8) SHA1(014b2364879faaf4922cdb82ee07692389f20c2d) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // using joker card palette till a correct dump appear
+ ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+
+ROM_START( bigdealb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "poker8.003", 0x8000, 0x8000, CRC(09c93745) SHA1(a64e96ef3489bc37c2c642f49e62cfef371de6f1) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "poker4.003", 0x0000, 0x8000, CRC(8c33a15f) SHA1(a1c8451c99a23eeffaedb21d1a1b69f54629f8ab) )
+ ROM_LOAD( "poker4.002", 0x8000, 0x8000, CRC(5f4e12d8) SHA1(014b2364879faaf4922cdb82ee07692389f20c2d) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // using joker card palette till a correct dump appear
+ ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+
+/******************************** C.M.C. sets ************************************/
+
+/*
+ Cuore Uno (italian)
+ -----------------------------------
+
+ - CPU 1x G65SC02P
+ - 1x MC68B45P (CRT controller)
+ - 2x MC68B21CP (Peripheral Interface Adapter)
+ - 1x unknown (95101) DIP40 mil600
+ - 1x oscillator 16.000000 MHz
+ - ROMs 1x TMS27C512
+ 2x TMS27C256
+ - 1x PROM AM27S29
+ - 2x PALCE20V8H
+ - 1x PALCE16V8H (soldered)
+ - Note 1x JAMMA edge connector (keep -5 disconnected)
+ - 1x trimmer (volume)
+ - 1x 8 DIP switches
+ - 1x battery
+*/
+
+ROM_START( cuoreuno )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cuore1a.u2", 0x8000, 0x8000, CRC(6e112184) SHA1(283ac534fc1cb33d11bbdf3447630333f2fc957f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cuore1b.u21", 0x0000, 0x8000, CRC(14eca2b8) SHA1(35cba415800c6cd3e6ed9946057f33510ad2bfc9) )
+ ROM_LOAD( "cuore1c.u22", 0x8000, 0x8000, CRC(253fac84) SHA1(1ad104ab8e8d73df6397a840a4b26565b245d7a3) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreuno_nvram.bin", 0x0000, 0x0800, CRC(b5a1bf25) SHA1(c2996a28c080debf10ab7a7dc47c305aed172a83) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29_cu.bin", 0x0000, 0x0200, CRC(7ea61749) SHA1(3167acd79f9bda2078c2af3e049ad6abf160aeae) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_cu.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_cu.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_cu.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+ROM_START( cuoreunoa ) // same as pool10b but with cuoreuno GFX ROMs
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cmc.u2", 0x8000, 0x8000, CRC(64fee38e) SHA1(8a624a0b6eb4a3ba09e5b396dc5a01994dfdf294) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2mb.u21", 0x0000, 0x8000, CRC(2a3581c8) SHA1(8fa81c55fb2eb1d51ce5995f38ec4518d035c3af) )
+ ROM_LOAD( "2mc.u20", 0x8000, 0x8000, CRC(26f1162a) SHA1(c6d98e38377016f2b3daa138c3331a1aa91e422a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreunoa_nvram.bin", 0x0000, 0x0800, CRC(d9f35299) SHA1(2c3608bc9c322a9cc86f74d8fa2f660804a8cf3c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+ROM_START( cuoreunob )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "pool10tk.u2", 0x8000, 0x8000, CRC(837559be) SHA1(12b72c06cdf563c721544e6d96cac8fe3408ac50) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "b.u21", 0x0000, 0x8000, CRC(4b7d90b2) SHA1(1c3b022ebb71ed23bfd5da511525b1850f791941) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE( 0x8000 )
+ ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(e9d107ce) SHA1(3b05cc6f52ac59b432ad1353e9a4a6534e40d2f1) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE( 0x8000 )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreunob_nvram.bin", 0x0000, 0x0800, CRC(0f1ca7ac) SHA1(ea7c353ff8ffde632cbd900eb61a4cb982a4539e) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // not dumped for this set
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, BAD_DUMP CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8qs.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8qs.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+ROM_START( cuoreunoc ) // same code as pool10g, same GFX as cuoreunoa, found on 3 PCBs
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cuore_a.u2.1", 0x8000, 0x8000, CRC(7b537ce6) SHA1(b221d08c53b9e14178335632420e78070b9cfb27) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cuore_b.u21.1", 0x0000, 0x8000, CRC(2a3581c8) SHA1(8fa81c55fb2eb1d51ce5995f38ec4518d035c3af) )
+ ROM_LOAD( "cuore_c.u20.1", 0x8000, 0x8000, CRC(26f1162a) SHA1(c6d98e38377016f2b3daa138c3331a1aa91e422a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreunoc_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25.1", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // all read protected
+ ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "gal20v8a.u22", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "gal20v8a.u23", 0x0400, 0x0157, NO_DUMP )
+ROM_END
+
+ROM_START( cuoreunod ) // same code as pool10h, same GFX as cuoreunoa
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cuore_a.u2", 0x8000, 0x8000, CRC(b671c6dd) SHA1(070617bbe304469deb98504e3ee73800bff225bb) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cuore_b.u21", 0x0000, 0x8000, CRC(2a3581c8) SHA1(8fa81c55fb2eb1d51ce5995f38ec4518d035c3af) )
+ ROM_LOAD( "cuore_c.u20", 0x8000, 0x8000, CRC(26f1162a) SHA1(c6d98e38377016f2b3daa138c3331a1aa91e422a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreunod_nvram.bin", 0x0000, 0x0800, CRC(e93dee30) SHA1(195525e95a3bdc1b002b12fd27bc31c63d7a9276) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h-25pc-4.u5", 0x0000, 0x0117, CRC(c4569166) SHA1(f725dc654fc87b51968fc9f3178e4b22bfc04a6e) )
+ ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP ) // read protected
+ ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP ) // read protected
+ROM_END
+
+ROM_START( cuoreunoe ) // same code as pool10f, same GFX as cuoreunoa
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "a.u2", 0x8000, 0x8000, CRC(e8087fb8) SHA1(c012a81f561978bd97708a52f656e7b13e41a3e2) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "b.u21", 0x0000, 0x8000, CRC(2a3581c8) SHA1(8fa81c55fb2eb1d51ce5995f38ec4518d035c3af) )
+ ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(26f1162a) SHA1(c6d98e38377016f2b3daa138c3331a1aa91e422a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreunoe_nvram.bin", 0x0000, 0x0800, CRC(75dd3562) SHA1(a359cada144e7c90946649f5dd0998d0ee48f4d2) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, BAD_DUMP CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) // not dumped for this set
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h-25pc-4.u5", 0x0000, 0x0117, NO_DUMP ) // read protected
+ ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP ) // read protected
+ ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP ) // read protected
+ROM_END
+
+ROM_START( cuoreunof ) // same as cuoreunoc but with copyright removed
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.u2", 0x8000, 0x8000, CRC(ef66d40a) SHA1(ed406472a5f3d883036f0001082607f1561e6820) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cuore_b.u21", 0x0000, 0x8000, CRC(2a3581c8) SHA1(8fa81c55fb2eb1d51ce5995f38ec4518d035c3af) )
+ ROM_LOAD( "cuore_c.u20", 0x8000, 0x8000, CRC(26f1162a) SHA1(c6d98e38377016f2b3daa138c3331a1aa91e422a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "cuoreunof_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // all read protected
+ ROM_LOAD( "palce16v8h-25pc-4.u5", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "palce20v8h-25pc-4.u22", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "palce20v8h-25pc-4.u23", 0x0400, 0x0157, NO_DUMP )
+ROM_END
+
+/*
+ Elephant Family (italian, old)
+ -----------------------------
+
+ - CPU 1x R65C02P2
+ - 1x MC68B45P (CRT controller)
+ - 2x EF6821P (Peripheral Interface Adapter)
+ - 1x unknown (95101) DIP40 mil600
+ - 1x oscillator 16.000 MHz
+ - ROMs 2x M27C256
+ 1x TMS27C256
+ - 1x PROM AM27S29
+ - 2x PALCE20V8H (read protected)
+ - 1x PALCE16V8H (read protected)
+ - Note 1x JAMMA edge connector (keep -5 disconnected)
+ - 1x trimmer (volume)
+ - 1x 8 DIP switches
+ - 1x battery
+
+ u2.bin 1ST AND 2ND HALF IDENTICAL
+ u20.bin 1ST AND 2ND HALF IDENTICAL
+ u21.bin 1ST AND 2ND HALF IDENTICAL
+*/
+
+ROM_START( elephfam )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "eleph_a.u2", 0x8000, 0x8000, CRC(8392b842) SHA1(74c850c734ca8174167b2f826b9b1ac902669392) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "eleph_b.u21", 0x0000, 0x8000, CRC(e3612670) SHA1(beb65f7d2bd6d7bc68cfd876af51910cf6417bd0) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "eleph_c.u22", 0x8000, 0x8000, CRC(4b909bf3) SHA1(a822b12126bc58af6d3f999ab2117370015a039b) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "elephfam_nvram.bin", 0x0000, 0x0800, CRC(fb9b1100) SHA1(cf15ce55042f1c4399fec480c2f862622905a8b5) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29_ef.u25", 0x0000, 0x0200, CRC(bca8b82a) SHA1(4aa19f5ecd9953bf8792dceb075a746f77c01cfc) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_ef.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_ef.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_ef.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+ROM_START( elephfmb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "now.u2", 0x8000, 0x8000, CRC(7b537ce6) SHA1(b221d08c53b9e14178335632420e78070b9cfb27) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "elephb.u21", 0x0000, 0x8000, CRC(3c60549c) SHA1(c839b3ea415a877e5eac04e0522c342cce8d6e64) )
+ ROM_LOAD( "elephc.u20", 0x8000, 0x8000, CRC(448ba955) SHA1(2785cbc8cd42a7dda85bd8b81d5fbec01a1ba0bd) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "elephfmb_nvram.bin", 0x0000, 0x0800, CRC(13a0cfea) SHA1(9c8ce509ef1076e88ea853347b64c5591bc2e18c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29_ef.u25", 0x0000, 0x0200, CRC(bca8b82a) SHA1(4aa19f5ecd9953bf8792dceb075a746f77c01cfc) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_ef.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_ef.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_ef.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ Pool 10 (italian)
+ -----------------
+
+ - 1x R65C02P2 (main)
+ - 1x YM2149F (sound)
+ - 1x HD46505 (CRT controller)
+ - 2x EF6821P (Peripheral Interface Adapter)
+ - 1x oscillator 16.000000 MHz
+
+ - 2x M27256 (pool,1)
+ - 1x D27256 (2)
+ - 1x PROM N82S147AN
+ - 2x GAL20V8B (read protected)
+ - 1x PALCE16V8H (read protected)
+
+ - 1x JAMMA edge connector
+ - 1x trimmer (volume)
+ - 1x 8 DIP switches
+ - 1x battery
+
+
+ Connector, DIPs and instructions,
+ copied from an original sheet...
+
+ Components | | solder
+ ---------------------|--|-----------------
+ gnd |01| gnd
+ gnd |02| gnd
+ +5 |03| +5
+ +5 |04| +5
+ |06|
+ +12 |07| +5
+ |08| contatore out
+ motor hopper |09| contatore in
+ audio |10| audio
+ sw hopper |11| gnd
+ rosso |12| verde
+ blu |13| sync
+ gnd |14| statistic
+ manegement |15|
+ coin 1 |16| coin 2
+ sw ticket |17| motor ticket
+ hold 3 |18| lamp hold 3
+ hold 4 |19| lamp hold 4
+ hold 2 |20| lamp hold 2
+ hold 1 |21| lamp hold 1
+ hold 5 |22| lamp hold 5
+ start |23| lamp hold start
+ cancel |24| lamp hold cancel
+ nc |25| +5 lamp
+ ric. ticket + hopper |26| +12 lamp
+ gnd |27| gnd
+ gnd |28| gnd
+
+
+ DIPS
+ 1 2 3 4 5 6 7 8
+ on
+ off
+ ticket + hopper on on
+ hopper on off
+ ticket off on
+ no ticket - no hopper off off
+ 1 coin 1 credit off off
+ 1 coin 5 credits off on
+ 1 coin 10 credits on off
+ 1 coin 50 credits on on
+ five of kind yes off
+ five of kind no on
+ royal flush yes off
+ royal flush no on
+ in test on
+ in game off
+
+
+ Instructions:
+
+ STATISTICS = show in and out credits
+ MANEGEMENT = It's the general statistic. It shows in and out credits.
+
+ To cancel statistics press CANCEL for 5 seconds.
+ To change max and min value for play connect to GND the manegement pin,
+ at the same time press together HOLD 2 + HOLD 4 for some seconds.
+
+ The following menu will show up:
+
+ HOLD 1 = modify max value for play 1 to 10.
+ HOLD 2 = modify min value foe play 1 to 5.
+ Press start to exit from programming mode.
+
+ To unlock PCB from a possible lock:
+ connect GND to pins component15 and solder14 for 5 seconds
+
+ NB. Use lamps by 12V 0,15W
+ Memory version: V16
+*/
+
+ROM_START( pool10 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "pool10.u2", 0x8000, 0x8000, CRC(4e928756) SHA1(d9ac3d41ea32e060a7e269502b7f22333c5e6c61) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10_nvram.bin", 0x0000, 0x0800, CRC(2f2fab43) SHA1(f815b70c171bad99fa6a60c256e4fdc85dd6b290) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ - pool10b -
+
+ u2.bin 1ST AND 2ND HALF IDENTICAL
+ u20.bin 1ST AND 2ND HALF IDENTICAL
+ u21.bin 1ST AND 2ND HALF IDENTICAL
+*/
+ROM_START( pool10b ) // 1st set nominated for parent
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "u2.bin", 0x8000, 0x8000, CRC(64fee38e) SHA1(8a624a0b6eb4a3ba09e5b396dc5a01994dfdf294) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+// GFX ROMs are the same of pool10, but double sized with identical halves.
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "u21.bin", 0x0000, 0x8000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "u20.bin", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10b_nvram.bin", 0x0000, 0x0800, CRC(d9f35299) SHA1(2c3608bc9c322a9cc86f74d8fa2f660804a8cf3c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10b.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_p10b.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_p10b.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+ROM_START( pool10c )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "a.u2", 0x8000, 0x8000, CRC(ac157b17) SHA1(f2b7eb940273bc404d3e0d8dd0f00ca757cebf69) ) // sldh
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10c_nvram.bin", 0x0000, 0x0800, CRC(396aefed) SHA1(066b87ff054dfb37f733a812ad0dc1b1bd2478e6) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ - pool10d -
+
+ 3.50.u2 1ST AND 2ND HALF IDENTICAL
+*/
+ROM_START( pool10d )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.50.u2", 0x8000, 0x8000, CRC(4c68e1f4) SHA1(bbab63a18e0c041ce519daa32e12dd1b6a672dce) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) // sldh
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) // sldh
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10d_nvram.bin", 0x0000, 0x0800, CRC(6b5984a0) SHA1(156a94e74e33b1a15222cffff9b62e65f6f5f2f5) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ Pool 10...
+ Dino 4 (not working) board,
+ with the infamous mexican Rockwell R65C02.
+
+ Encrypted program & graphics ROMs.
+
+ PCB layout...
+ .----------------------------------------------------------------------------------------------.
+ | |
+ | .----. .----------. .--------------. .--------------. |
+ | |A00 | |M74HC00B1 | | SN74HCT245N | |PALCE16V8H-15 | |
+ | '----' '----------' '--------------' '--------------' |
+ | |
+ | .------------. .-----------. |
+ | | | | DIP SW #1 | .----------------------------. |
+ | | BATTERY | | | | R65C02P2 | |
+ '---. | | '-----------' | 11450-12 | |
+ | | | | MEXICO | |
+ | '------------' | 9740 S11493_2 | |
+ | '----------------------------' |
+ .---' .----------------------------. |
+ |--- | | |
+ |--- | HD46821P | |
+ |--- | | .--------------------. .---------. |
+ |--- | | | 3_50.U2 | |74HC126B1| |
+ |--- '----------------------------' | | '---------' |
+ |--- | | |
+ |--- .----------------------------. | 27256| |
+ |--- | MC6821P | '--------------------' |
+ |--- | QL M9N8623 | .---------. |
+ |--- .---------. | | |74HC139E | |
+ |---J |ULN2003A | | | '---------' |
+ |--- '---------' '----------------------------' .-----------------. |
+ |---A | | |
+ |--- | JAPAN 2G3 | .---------. |
+ |---M .---------. .-----------. .-----------. | HM6116LP-4 | |SN74LS02N| |
+ |--- |74LS04B1 | | 411GR-001 | | 411GR-001 | | | '---------' |
+ |---M '---------' '-----------' '-----------' '-----------------' |
+ |--- |
+ |---A |
+ |--- .----------------------------. .----------------------------. |
+ |--- | FILE | | MC6845P | |
+ |--- | KV89C72 | | R1A 8210 | |
+ |--- | | | | |
+ |--- | | | | |
+ |--- .-------------. '----------------------------' '----------------------------' |
+ |--- | 74HCT373N | |
+ |--- '-------------' .---------. .---------------. .-------------. .---------. |
+ |--- |ULN2003A | |PALCE20V8H-25PC| | SN74LS245N | |74157 PC | |
+ |--- .-------------. '---------' '---------------' '-------------' '---------' |
+ |--- | AM27S29 | |
+ |--- '-------------' .--------------------. .---------. |
+ |--- | 2.U21 | .--------------------. |74157 PC | |
+ |--- .--------. | | | GOLDSTAR | '---------' |
+ |-- |74LS174B| .---. | | | GM76C88-12 | |
+ '---. '--------' |74L| | 27256| | 8928 KOREA | .---------. |
+ | |S08| '--------------------' LC DINO 4 | | |74157 PC | |
+ | |B1 | '--------------------' '---------' |
+ | .--------. | | .--------------------. |
+ .---' |74LS02N | | | | 1.U20 | |
+ | '--------' '---' | | .-------------. .---------. |
+ | | | | SN74LS377N | |74157 PC | |
+ | | 27256| '-------------' '---------' |
+ | '--------------------' |
+ | .--------. |
+ | | XTAL | .---------. .---------------. .-------------. .---------. |
+ | | 16 MHz | |74LS161AN| |PALCE20V8H-25PC| | SN74LS377N | |74LS174B1| |
+ | '--------' '---------' '---------------' '-------------' '---------' |
+ | |
+ '----------------------------------------------------------------------------------------------'
+
+ A00 = TL7705ACE
+
+*/
+
+ROM_START( pool10e )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3_50.u2", 0x8000, 0x8000, CRC(764394bb) SHA1(0defcedc802c468c615560e47ec4064a4f084650) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(a0d54044) SHA1(c7be1f12f72095daee32ae41c3554d8ab4f99245) ) // sldh
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(55c9fcc8) SHA1(224bdf63ed345b1def4852af3b33f07790fbf123) ) // sldh
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10e_nvram.bin", 0x0000, 0x0800, CRC(e20f9a14) SHA1(617ca53263a971c9f835a95737a66fac5b99780f) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // Same as Pool 10, but the 1st half duplicated to cover any PLD addressing
+ ROM_LOAD( "am27s29.u25", 0x0000, 0x0200, CRC(2c315cbf) SHA1(f3f91329f2b8388decf26a050f8fb7da38694218) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // all read protected
+ ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP )
+ROM_END
+
+
+ROM_START( pool10f )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cmc-pool10+a+.u2", 0x8000, 0x8000, CRC(e8087fb8) SHA1(c012a81f561978bd97708a52f656e7b13e41a3e2) ) // sldh
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cmc-pool10-b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "cmc-pool10-c.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10f_nvram.bin", 0x0000, 0x0800, CRC(75dd3562) SHA1(a359cada144e7c90946649f5dd0998d0ee48f4d2) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "27s29.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+ROM_START( pool10g ) // 2nd set nominated for parent
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.u2", 0x8000, 0x8000, CRC(7b537ce6) SHA1(b221d08c53b9e14178335632420e78070b9cfb27) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10h_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+ROM_END
+
+
+ROM_START( pool10h )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cmc-pool10+a+.u2", 0x8000, 0x8000, CRC(b671c6dd) SHA1(070617bbe304469deb98504e3ee73800bff225bb) ) // sldh
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cmc-pool10+b+.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "cmc-pool10+c+.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10i_nvram.bin", 0x0000, 0x0800, CRC(e93dee30) SHA1(195525e95a3bdc1b002b12fd27bc31c63d7a9276) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+ROM_END
+
+
+ROM_START( pool10i )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "a.u2", 0x8000, 0x8000, CRC(566bc05d) SHA1(eec88c8ba6cb664f38ebf8b71f99b4e7d04a9601) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "b.u21", 0x0000, 0x8000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10l_nvram.bin", 0x0000, 0x0800, CRC(89cbee4b) SHA1(ff8031a96ee40e1e62abbae7a0b3d9dc2122759f) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+ROM_END
+
+ROM_START( pool10j )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cmcpool10.u2", 0x8000, 0x8000, CRC(f7fa2b12) SHA1(743563e51327b00dd638bcb2233e833ce74e62a0) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cmcpool10.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "cmcpool10.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10j_nvram.bin", 0x0000, 0x0800, CRC(48684b02) SHA1(6f2fbd0e2621e31b881edd8056ff93ee78f331ab) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // all read protected
+ ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP )
+ROM_END
+
+ROM_START( pool10k ) // found on two PCBs
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "eagle1.u2", 0x8000, 0x8000, CRC(1fdddc4e) SHA1(5c36374b7e36b615f051e20b684c5e058e82efce) ) // 0xxxxxxxxxxxxxxx = 0xFF
+ ROM_CONTINUE( 0x8000, 0x2000 )
+ ROM_CONTINUE( 0xc000, 0x2000 )
+ ROM_CONTINUE( 0xa000, 0x2000 )
+ ROM_CONTINUE( 0xe000, 0x2000 )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "eagle2.u21", 0x0000, 0x8000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "eagle3.u20", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "pool10k_nvram.bin", 0x0000, 0x0800, CRC(fb0e9e6a) SHA1(97fbcff4d615983321bf5d53884f7ed56f8a8998) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // all read protected
+ ROM_LOAD( "gal16v8ah.u5", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP )
+ROM_END
+
+ROM_START( mag10 ) // same code as pool10g but for title and copyright changes, u20 GFX ROM contains changes
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "magic_a.u2", 0x8000, 0x8000, CRC(c2379eed) SHA1(91ca7514d6c4a8032ab6a5221b7f09c02f7d65af) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "magic_b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "magic_c.u20", 0x8000, 0x8000, CRC(b863dead) SHA1(8f0016c39ce64a1ecde66f61b7f0db9cdfb36873) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "mag10_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // all read protected
+ ROM_LOAD( "palce16v8h-25pc-4.u5", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "20s25hb1.u22", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "20s25hb1.u23", 0x0400, 0x0157, NO_DUMP )
+ROM_END
+
+/*
+ New Biliard 98
+
+ CPUs:
+ 1x R65C02P2 u1 8-bit Microprocessor - main
+ 1x MC68B45P u8 CRT Controller (CRTC)
+ 2x MC68B21CP u29, u30 Peripheral Interface Adapter
+ 1x 89C10 u34 Programmable Sound Generator - sound
+ 1x TDA2003 u33 Audio Amplifier - sound
+ 1x oscillator 16.000000MHz os1
+
+ ROMs:
+ 3x 27C256 u2, u20, u21 dumped
+ 1x AM27S29PC u25 dumped
+
+ RAMs:
+ 1x KM6264BL-10L-12 u13
+ 1x GM76C28A-10 u3
+
+ PLDs:
+ 2x GAL20V8A-25LP u22, u23 read protected
+ 1x PALCE16V8H-15PC/4 u5 read protected
+
+ Others:
+ 1x 28x2 JAMMA edge connector
+ 1x trimmer (TR1, volume)
+ 1x 8 DIP switches bank (SW1)
+ 1x battery 3.6V
+
+ Notes:
+ PCB is marked: "top" and "C.M.C. POOL 10" on component side
+ PCB is marked: "bottom" and "POOL 10 C.M.C" on solder side
+
+*/
+ROM_START( biliard )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "biliard-a.u2", 0x8000, 0x8000, CRC(3b20348b) SHA1(002b9b8581adc1b253ee3babf0e4c1aad4a2f017) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "cmcpool10-b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "biliard-c.u20", 0x8000, 0x8000, CRC(b15d10ec) SHA1(9b0f32ff791063cfb2d8339a4e8041e034e73eb7) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "biliard_nvram.bin", 0x0000, 0x0800, CRC(2f2fab43) SHA1(f815b70c171bad99fa6a60c256e4fdc85dd6b290) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h-25pc-4.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8a-25lp.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8a-25lp.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ Royal...
+ This one seems to run in royalcd1 hardware.
+*/
+
+ROM_START( royal ) // brute hack of pool 10
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.u2", 0x8000, 0x8000, CRC(d4f36273) SHA1(2049257ea9ee52fde9cabfe40e809e00526a960e) ) // sldh
+
+// GFX ROMs are the same of pool10, but double sized with identical halves.
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(439eec10) SHA1(500139c16a883f0a5b0b8d91f4f067ba428d2d11) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9b59e72d) SHA1(96217272ce5abb78ff45ff116a5d921c57717ed9) ) // sldh
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "royal_nvram.bin", 0x0000, 0x0800, CRC(9df190d5) SHA1(4be0f5c6f89f822568e45e0e8457cf51ced2dcfe) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(d922d4e5) SHA1(d1541eabfd9cedd9eaa4fc48a3f64b078ea456be) ) // sldh
+ROM_END
+
+
+/*
+ Tortuga Family (italian) & Pot Game (italian)
+ ---------------------------------------------
+
+ - 1x G65SC02P2 (main)
+ - 1x 95101 (sound)
+ - 1x MC68B45P (CRT controller)
+ - 2x MC68B21CP (Peripheral Interface Adapter)
+ - 1x oscillator 16.000000 MHz
+
+ - 3x TMS27C256
+ - 1x PROM AM27S29PC
+ - 2x PALCE20V8H (read protected)
+ - 1x PALCE16V8H (read protected)
+
+ - 1x JAMMA edge connector
+ - 1x trimmer (volume)
+ - 1x 8 DIP switches
+ - 1x battery
+*/
+
+ROM_START( tortufam )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "tortu.a.u2", 0x8000, 0x8000, CRC(6e112184) SHA1(283ac534fc1cb33d11bbdf3447630333f2fc957f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "tortu.b.u21", 0x0000, 0x8000, CRC(e7b18584) SHA1(fa1c367469d4ced5d7c83c15a25ec5fd6afcca10) )
+ ROM_LOAD( "tortu.c.u20", 0x8000, 0x8000, CRC(3cda6f73) SHA1(b4f3d2d3c652ebf6973358ae33b7808de5939acd) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "tortufam_nvram.bin", 0x0000, 0x0800, CRC(e5a08b1b) SHA1(6575ed3ec66ef0e42129225fe1679519e5e1c946) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc_tf.u25", 0x0000, 0x0200, CRC(c6d433fb) SHA1(065de832bbe8765eb0aacc2029e587a4f5362f8a) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce20v8h_tf.u5", 0x0000, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_tf.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_tf.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+ROM_START( potgame )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "now.u2", 0x8000, 0x8000, CRC(7b537ce6) SHA1(b221d08c53b9e14178335632420e78070b9cfb27) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "potg.b.u21", 0x0000, 0x8000, CRC(32fc1d4f) SHA1(cc533a44498338bc0cbb7c7b9c42559ce7ff1337) )
+ ROM_LOAD( "potg.c.u20", 0x8000, 0x8000, CRC(0331eb42) SHA1(a8e838d644fc6d93a9632070b305e44e4242ce94) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "potgame_nvram.bin", 0x0000, 0x0800, CRC(2b07fb37) SHA1(9cbd3d8fb076d683a7853b3dd8a39a27f1c8872b) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29_pot.u25", 0x0000, 0x0200, CRC(a221f151) SHA1(270c57c9b7de912b136686bc6720eb8f12dbb805) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_pot.u5", 0x0000, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_pot.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "palce20v8h_pot.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+ROM_START( bottle10 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "boat_3.bin", 0x8000, 0x8000, CRC(e2db8334) SHA1(22ac4ce361a93b7e6d491e260635755dd562b294) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "boat_2.bin", 0x0000, 0x8000, CRC(a6b36c3f) SHA1(90b12d9552ad5dbf11a30fc7451da1f3e6763cc3) )
+ ROM_LOAD( "boat_1.bin", 0x8000, 0x8000, CRC(61fd8c19) SHA1(eb8fd8bd7de38a6c8a435e9e36daf699162138a5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "bottle10_nvram.bin", 0x0000, 0x0800, CRC(82927c53) SHA1(8cde91588cb53fefc84f0b14fc5c0b26a3a445eb) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+ROM_START( bottl10b )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.u2", 0x8000, 0x8000, CRC(e2db8334) SHA1(22ac4ce361a93b7e6d491e260635755dd562b294) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(9395c15b) SHA1(e4caefc6f55b07f5c4370a3b8652fa93e08987ce) )
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(61fd8c19) SHA1(eb8fd8bd7de38a6c8a435e9e36daf699162138a5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "bottl10b_nvram.bin", 0x0000, 0x0800, CRC(59976182) SHA1(f8d26169e86444607bc5a6649f41e7f5c05ddbb4) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected
+ROM_END
+
+/*
+ Luna Park sets...
+
+ This board has mirrored video RAM 4000-4FFF to 5000-5FFF,
+ and color RAM 6000-6FFF to 7000-7FFF.
+
+ Two different programs. One in each program ROM half.
+ PRG rom higher address line is connected to DIP switch #1,
+ so it should have 2 games in the same PCB (2 revisions?)
+
+ 1st half: 2nd half:
+
+ BE58: LDA #$04 LDA #$00
+ JSR $9DE2 JSR $9DE2
+
+ BE60: LDA #$09 LDA #$00
+ JSR $B25E JSR $B25E
+
+ BE73: A5 22 A5 23
+
+ BEC0: '5 TIRI LIRE 500' '10 TIRI LIRE 500'
+ BF40: 00 00 00 00... 'wait...no coin'
+ C3D0: 'ABILITA VINTE' 'PARTITA VINTE'
+ DF30: 20 20 20 20 20 00 00 00 00 00
+
+ The second set, has the same programs, but the strings on the first half
+ were changed to match the second program.
+
+*/
+// The following two have mirrored video RAM 4000/5000 to 6000/7000.
+ROM_START( lunapark )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // Two different programs. Selectable through a DIP switch
+ ROM_LOAD( "lunapark-425-95n003.u2", 0x0000, 0x10000, CRC(b3a620ee) SHA1(67b3498edf7b536e22c4d97c1f6ad5a71521e68f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "lunapark-425-95n002.u21", 0x0000, 0x8000, CRC(2bededb7) SHA1(b8d7e6fe307d347d762adf35d361ade620aab37b) )
+ ROM_CONTINUE( 0x0000, 0x8000) // Discarding 1nd half 0xff filled
+ ROM_LOAD( "lunapark-425-95n001.u20", 0x8000, 0x8000, CRC(7d91ce1f) SHA1(7e9bfad76f305d5787faffe3a07b218beb37fda8) )
+ ROM_CONTINUE( 0x8000, 0x8000) // Discarding 1nd half 0xff filled
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "lunapark_nvram.bin", 0x0000, 0x0800, CRC(f99e749b) SHA1(fafd4205dfaacb4c21215af6997d06ab419c9281) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(ddb74d72) SHA1(3d5dda3a935a3100cb86017f103b855d6449f73a) )
+ROM_END
+
+ROM_START( lunaparkb )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // Two different programs. Selectable through a DIP switch
+ ROM_LOAD( "lunapark-number-03_lunaparkb.u2", 0x0000, 0x10000, CRC(cb819bb7) SHA1(c7fb25eab093de2f644445a713d99ee8024d8499) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "27512.u21", 0x0000, 0x8000, CRC(d64ac315) SHA1(c67d9e67a988036844efd4f980d47a90c022ba18) ) // only the first 2 bytes different
+ ROM_CONTINUE( 0x0000, 0x8000) // Discarding 1nd half 0xff filled
+ ROM_LOAD( "27512.u20", 0x8000, 0x8000, CRC(7d91ce1f) SHA1(7e9bfad76f305d5787faffe3a07b218beb37fda8 ) )
+ ROM_CONTINUE( 0x8000, 0x8000) // Discarding 1nd half 0xff filled
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "lunaparkb_nvram.bin", 0x0000, 0x0800, CRC(f99e749b) SHA1(fafd4205dfaacb4c21215af6997d06ab419c9281) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(ddb74d72) SHA1(3d5dda3a935a3100cb86017f103b855d6449f73a) )
+ROM_END
+
+// This one hasn't mirrored video RAM, so could run in regular Cuore 1 hardware
+ROM_START( lunaparkc )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "lunapark-number-03_lunaparkc.u2", 0x8000, 0x8000, CRC(fdbe49c3) SHA1(a2b14a6998d5a27fba7bc360a15f17a48c91194f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "lunapark-number-01.u21", 0x0000, 0x8000, CRC(ee057944) SHA1(31b76dcadf1dd5aacac1dfed0c7c9f7190797ead) )
+ ROM_LOAD( "lunapark-number-02.u20", 0x8000, 0x8000, CRC(b8795aec) SHA1(5db2e64657dee7742eb9d11e65d29c83a93332b7) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "lunaparkc_nvram.bin", 0x0000, 0x0800, CRC(005b70fc) SHA1(682c2315b4fafb6255db989f0d49255fd8d7a1a9) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(ddb74d72) SHA1(3d5dda3a935a3100cb86017f103b855d6449f73a) )
+ROM_END
+
+/*
+ Crystal Colours...
+ Version running in CMC hardware.
+*/
+ROM_START( crystal )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "425-1995-number-03.u2", 0x8000, 0x8000, CRC(bab1ab88) SHA1(d224f2f7cd9313f51c484d781dc278e358f1e4fd) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "425-1995-number-02.u21", 0x0000, 0x8000, CRC(1eaf1bd9) SHA1(eb392f4a8864c59c7792f905f165f543087cb4a0) )
+ ROM_LOAD( "425-1995-number-01.u20", 0x8000, 0x8000, CRC(d3972c19) SHA1(a84ae765eeae1f9d443b0c4941b6f93dcc540f8c) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery)
+ ROM_LOAD( "crystal_nvram.bin", 0x0000, 0x0800, CRC(21a712ee) SHA1(259d83b8268a93f96b53580562e9c6e835f7473e) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(dd9db8bd) SHA1(6374795ae243759a887464b38ece078dc3735b6f) )
+ROM_END
+
+
+/******************************** Royal Card sets ************************************/
+
+/*
+ 1.bin NO MATCH
+ 2.bin = 1.bin royalcrdd Royal Card (German, set 5)
+ = u4_nmc27c256.bin royalcrdp Royal Card v2.0 Professional
+ 3.bin NO MATCH
+
+ This one works properly. Also Bet with Hold 5.
+
+*/
+
+ROM_START( royalcrd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(7f920318) SHA1(acbfed8d0a0984fd0c572a4de42d8dc08fb99a82) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(c46d804f) SHA1(b089821c7dae6714b49401d787f8bed859815763) )
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrd_nvram.bin", 0x0000, 0x0800, CRC(1c775f61) SHA1(c810421eaa31a72e3f2fe9a1d82858e7cc2f6b93) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "prom2.bin", 0x0000, 0x0200, CRC(7e5839e6) SHA1(5e8401d2b236f73cc017a73a369b3b3b821a1deb) )
+ROM_END
+
+/*
+ r.1 NO MATCH
+ r.2 = 1a.bin royalcrde Royal Card (German, set 6)
+ r.3 = 2a.bin royalcrde Royal Card (German, set 6)
+
+ All ROMs are double sized, with identical halves.
+ The set is working properly, with Bet (Hold 5) and normal payout. No Remote.
+*/
+ROM_START( royalcrda )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "r.1", 0x0000, 0x10000, CRC(761021ec) SHA1(3a00a1d2f74dbb06a0ab6605c32bef8013c93874) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "r.3", 0x0000, 0x8000, CRC(3af71cf8) SHA1(3a0ce0d0abebf386573c5936545dada1d3558e55) )
+ ROM_IGNORE( 0x8000)
+ ROM_LOAD( "r.2", 0x8000, 0x8000, CRC(8a66f22c) SHA1(67d6e8f8f5a0fd979dc498ba2cc67cf707ccdf95) )
+ ROM_IGNORE( 0x8000)
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrda_nvram.bin", 0x0000, 0x0800, CRC(c42dbad4) SHA1(b38552192e3f5f6bc2a4b92bddd2f95ac17ecc8c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "prom3_r.bin", 0x0000, 0x0200, CRC(7e5839e6) SHA1(5e8401d2b236f73cc017a73a369b3b3b821a1deb) )
+ROM_END
+
+/*
+ rc_1_pl.bin NO MATCH
+ rc_2_pl.bin = 1.bin royalcrdd Royal Card (German, set 5)
+ = u4_nmc27c256.bin royalcrdp Royal Card v2.0 Professional
+ rc_3_pl.bin = 2.bin royalcrdd Royal Card (German, set 5)
+
+ Working properly, with Bet (Hold 5) and Hold 2 shown a credit screen that allow payout or clear.
+*/
+ROM_START( royalcrdb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "rc_1_pl.bin", 0x8000, 0x8000, CRC(7a0ad63c) SHA1(7a1f6e0fd6e31f6950eeffc6a9ef073e909d85f9) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "rc_3_pl.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) )
+ ROM_LOAD( "rc_2_pl.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdb_nvram.bin", 0x0000, 0x0800, CRC(19bb3dea) SHA1(0965fbcec48ded99c5f6793efffb1d9329cc00eb) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "prom_epoxy.bin", 0x0000, 0x0200, CRC(b1e15441) SHA1(eb9318dd08e12281bef27a75bfdf54ec5d97fad6) )
+ROM_END
+
+/*
+ Royal Card (German, set 4)
+
+ roj.ic12 NO MATCH
+ roj.ic25 NO MATCH
+ roj.ic26 NO MATCH
+
+ roj.ic26 BADADDR xxxxxxx-xxxxxxxx
+ Bad dump. Address 08 is faulty.
+
+ GFX ROMS are double size.
+ Second half of GFX ROMs seems to be from Jolly Card.
+
+*/
+ROM_START( royalcrdc )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "roj.ic12", 0x8000, 0x8000, CRC(16923d58) SHA1(e865b91246ae5a21bdc9787e6e6e22be5182cabb) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 ) // borrowed from parent set, that matches 100%.
+ ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(c46d804f) SHA1(b089821c7dae6714b49401d787f8bed859815763) )
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x10000, "gfxbad", 0 ) // faulty gfx set with bad addressing and mix of royal card & jolly card tiles.
+ ROM_LOAD( "roj.ic26", 0x0000, 0x8000, BAD_DUMP CRC(3883cdcb) SHA1(b71a786822fe8fcb2c6fcdc463facb2738ec8c01) )
+ ROM_IGNORE( 0x8000)
+ ROM_LOAD( "roj.ic25", 0x8000, 0x8000, CRC(c5b787e8) SHA1(be88aa901c1f96d171af45c3602e0ce72b8fff34) )
+ ROM_IGNORE( 0x8000)
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdc_nvram.bin", 0x0000, 0x0800, CRC(eacb0c7b) SHA1(513816623aa3843dd5d0416fc012060c7a9f6c71) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "prom1.bin", 0x0000, 0x0200, CRC(8f6a33b1) SHA1(3a2f97563b7f094ef8b13a4e47a18e4a1fcf51c3) )
+ROM_END
+
+/*
+ Royal Card (set 5)
+ ------------------
+
+ - 1x HM6264LP
+ - 1x HD4650SP
+ - 1x HM6116LP
+ - 1x R65C02P2 (main)
+ - 1x WB5300 (labeled YM8910)(sound)
+ - 1x EF6821P
+ - 1x oscillator 16.000 MHz
+
+ - 1x D27256 (1)
+ - 1x S27C256 (2)
+ - 1x TMS27C256 (r2)
+ - 2x PEEL18CV8 (1 protected)
+ - 1x PALCE16V8H (protected)
+ - 1x PROM N82S147AN
+
+ - 1x 8 DIP Switches
+ - 1x 22x2 edge connector
+ - 1x 18x2 edge connector
+ - 1x trimmer (volume)
+*/
+
+ROM_START( royalcrdd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "r2.bin", 0x8000, 0x8000, CRC(25dfe0dc) SHA1(1a857a910d0c34b6b5bfc2b6ea2e08ed8ed0cae0) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) ) // sldh
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) // sldh
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdd_nvram.bin", 0x0000, 0x0800, CRC(335bfa5a) SHA1(7e9cbb502f450c515ea03ffcf4b7fbae60af4e73) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8h-4.bin", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "1-peel18cv8.bin", 0x0200, 0x0155, NO_DUMP ) // PLD is read protected
+ ROM_LOAD( "2-peel18cv8.bin", 0x0400, 0x0155, CRC(8fdafd55) SHA1(fbb187ba682111648ea1586f400990cb81a3077a) )
+ROM_END
+
+
+/*
+ Royal Card (set 6)
+ ------------------
+
+ - CPU 1x R65C02P2 (main)
+ - 1x MC68B45P (CRT controller)
+ - 2x MC68B21CP (Peripheral Interface Adapter)
+ - 1x oscillator 16.000 MHz
+ - 3x ROMs TMS 27C512
+ - 1x PALCE16V8H
+ - 1x prom AM27S29APC
+
+ - 1x 28x2 connector (maybe NOT jamma)
+ - 1x 10x2 connector
+ - 1x 3 legs connector (solder side)
+ - 1x 8 DIP Switches
+ - 1x trimmer (volume)
+*/
+
+ROM_START( royalcrde ) // both halves have different programs. we're using the 2nd one.
+ ROM_REGION( 0x10000, "maincpu", 0 ) // 1st half prg is testing RAM in offset $8600-$BF00...??
+ ROM_LOAD( "rc.bin", 0x0000, 0x10000, CRC(8a9a6dd6) SHA1(04c3f9f17d5404ac1414c51ef8f930df54530e72) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2a.bin", 0x0000, 0x8000, CRC(3af71cf8) SHA1(3a0ce0d0abebf386573c5936545dada1d3558e55) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "1a.bin", 0x8000, 0x8000, CRC(8a66f22c) SHA1(67d6e8f8f5a0fd979dc498ba2cc67cf707ccdf95) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrde_nvram.bin", 0x0000, 0x0800, CRC(3b03440f) SHA1(49e51b8c9e1404d39c479a2d0619aab43f1a6529) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "palce16v8h-4.bin", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ Royal Card (TAB Austria original)
+ With respective original PLD properly dumped.
+*/
+
+ROM_START( royalcrdt )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "r1_0.bin", 0x8000, 0x8000, CRC(829a6a1d) SHA1(b7064e4d60e33d0875eb73525230ea3b99f10542) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "novr3_0.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) )
+ ROM_LOAD( "novr2_0.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "jop1.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+
+ ROM_REGION( 0x0800, "nvram", 0 )
+ ROM_LOAD( "royalcrdt_nv.bin", 0x0000, 0x0800, CRC(67a6e68b) SHA1(d7ab01c4d9bd4fe58b5d0f4a945c00c5c4906008) )
+
+ ROM_REGION( 0x0200, "plds", 0 ) // Device type is 16L8
+ ROM_LOAD( "tab01_3.bin", 0x0000, 0x0104, CRC(a13a7a0a) SHA1(28e918ece4dcfa3883d2439c226b2f125d43f386) )
+ROM_END
+
+
+/*
+ Royal Card (set 7, encrypted)
+ -----------------------------
+
+ - Custom/encrypted CPU (epoxy block labelled "EVONA EX9511" -> www.evona.sk )
+ inserted into socked with "6502" mark.
+
+ - 1x YM2149
+
+ - 1x HD6845 (CRT controller)
+ - 1x MC68A21P (PIA)
+ - 1x 40 pin IC with surface scratched (PIA)
+ - 1x 8 DIP Switches
+ - Sanyo LC3517B SRAM (videoram ?)
+ - 6264 battery backed SRAM (battery is dead)
+ - 1x PALCE16V8
+ - 1x GAL16V8B
+ - 1x PEEL18CV8P x2
+ - 1x 82S147 PROM (near Yamaha and unknown 40pin) - "82s147.bin"
+ - 1x 27256 close to CPU module - "1.bin"
+ - 2x 27256 - gfx - "2.bin", "3.bin"
+*/
+
+ROM_START( royalcrdf ) // encrypted program rom
+ ROM_REGION( 0x10000*2, "maincpu", 0 ) // *2 for decrypted opcodes (see init)
+ ROM_LOAD( "rc_1.bin", 0x8000, 0x8000, CRC(8cdcc978) SHA1(489b58760a7c8646399c8cdfb86ec4341823e7dd) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "rc_2.bin", 0x0000, 0x8000, CRC(7f934488) SHA1(c537a09ef7e88a81ee9c2e1d971b3caf9d3dba0e) )
+ ROM_LOAD( "rc_3.bin", 0x8000, 0x8000, CRC(8612c6ed) SHA1(3306a252af479e0510f136020086015b60dce879) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdf_nvram.bin", 0x0000, 0x0800, CRC(05c14b70) SHA1(03ed97a67c7cd004f2c0abbb88fa3ec4a43c3f05) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(44dbf086) SHA1(43a2d615c00605db75a4fd4d57d9e056c0356f10) ) // sldh
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "palce16v8.bin", 0x0000, 0x0117, NO_DUMP ) // not present in the set
+ ROM_LOAD( "1-peel18cv8p.bin", 0x0200, 0x0155, NO_DUMP ) // not present in the set
+ ROM_LOAD( "2-peel18cv8p.bin", 0x0400, 0x0155, NO_DUMP ) // not present in the set
+ROM_END
+
+
+ROM_START( royalcrdg ) // CMC C1030 PCB, EP910EC-30 CPLD, NON encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.cpu", 0x8000, 0x8000, CRC(829a6a1d) SHA1(b7064e4d60e33d0875eb73525230ea3b99f10542) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) ) // sldh
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) // sldh
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdg_nvram.bin", 0x0000, 0x0800, CRC(853c7da9) SHA1(e275b22a9f470672bfc71425fcc44f547ba38b6d) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(a762ee84) SHA1(40883a7c0f4365e2725eb0b29d45467e1b7a1a31) ) // sldh
+ROM_END
+
+
+/*
+ Royal Card (German, set 8)
+ Year: 1991.
+ Manufacturer: TAB Austria.
+
+*/
+ROM_START( royalcrdh )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "145-3.bin", 0x8000, 0x8000, CRC(c4da3e95) SHA1(fb7c3652f783a3040e6e08616df102efcb0b4134) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "145-2.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) )
+ ROM_LOAD( "145-1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdh_nvram.bin", 0x0000, 0x0800, CRC(7757d73a) SHA1(997bfbd847d1d21777694331be92a1a5e79e4faf) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "prom.bin", 0x0000, 0x0200, CRC(7e5839e6) SHA1(5e8401d2b236f73cc017a73a369b3b3b821a1deb) ) // borrowed from parent set.
+ROM_END
+
+
+/*
+ Royal Card (French)
+ Year: 1991
+ Manufacturer: TAB Austria
+
+ 1x 6502A (missing)
+ 2x EF6821P Peripheral Interface Adapter
+ 1x 68A45 CRT Controller (CRTC)
+ 1x YM2149F Programmable Sound Generator
+ 1x oscillator 16000.000KHz
+
+ 3x 27256 1, 2, 3 (dumped)
+ 1x N82S147AN (dumped)
+
+ 1x 6264
+ 1x 6116
+
+ 2x PEEL18CV8P-25 (read protected) -> Extracted with CmD's PALdumper
+ 1x GAL16V8-25 (read protected) -> Extracted with CmD's PALdumper
+
+ 1x 28x2 JAMMA edge connector
+ 1x trimmer (volume)
+ 1x 8 DIP switches
+ 1x battery (missing)
+
+*/
+ROM_START( royalcdfr ) // Seems bootleg PCB, non encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.bin", 0x8000, 0x8000, CRC(69b944c1) SHA1(6ef76bff01f20376117dd7f67e5890eca754fcfb) ) // sldh
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) ) // sldh
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) // sldh
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcdfr_nvram.bin", 0x0000, 0x0800, CRC(bda344d4) SHA1(7793d289147bf03c0d8256d4023252c9677ac8ff) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+ROM_END
+
+
+ROM_START( royalcrdp )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "u16_m27c256b.bin", 0x8000, 0x8000, CRC(162996ff) SHA1(122c13ee9842e692d31490f216eb972df2321b7f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "u11_tms27c256.bin",0x0000, 0x8000, CRC(d6834c3a) SHA1(4b071b9826c086439b9763393b23c671261b3788) )
+ ROM_LOAD( "u4_nmc27c256.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147a.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "royalcrdp_nvram.bin", 0x0000, 0x0800, BAD_DUMP CRC(553f8c66) SHA1(d2c21786d715f81c537d860d8515fda6d766f630) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "palce16v8h_1.bin", 0x0000, 0x0117, NO_DUMP )
+ROM_END
+
+
+/*
+ Royal Card / Royal Jackpot (with third draw) (encrypted)
+
+ Encrypted graphics 'alla TAB blue PCB.
+ Maybe is the infamous encrypted Impera green PCB.
+
+ From the manual: "With third draw"
+ ...but I couldn't trigger this feature.
+
+ */
+
+ROM_START( royaljp )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "3.z.1_10.bin", 0x8000, 0x8000, CRC(ad03c41c) SHA1(8241a7eb02d7c06b7ea5bea5ab0d9ed4c6fcfd50) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "02.bin", 0x0000, 0x8000, CRC(c8f6f3e4) SHA1(5d8b32609562647c698926ea75c8f806b703332e) )
+ ROM_LOAD( "01.bin", 0x8000, 0x8000, CRC(3ced6423) SHA1(2309a856226404789fd219cf77ba2f378a90eee7) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "rj_d27hc65d-2,82s147.bin", 0x0000, 0x0200, CRC(d6570420) SHA1(90b6c126b485db823acffbfd195964a6282e60ea) )
+
+ ROM_REGION( 0x0800, "nvram", 0 )
+ ROM_LOAD( "royaljp_nvram.bin", 0x0000, 0x0800, CRC(48e51e2a) SHA1(b81a1741eef299384d4fa98a534099b2c0332074) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) // There are 3 GALs
+ ROM_LOAD( "gal20v8b.bin", 0x0000, 0x0157, NO_DUMP )
+ ROM_LOAD( "gal20v8a.bin", 0x0200, 0x0157, NO_DUMP )
+ ROM_LOAD( "gal16v8d.bin", 0x0400, 0x0117, NO_DUMP )
+ROM_END
+
+
+/******************************** Lucky Lady sets ************************************/
+
+ROM_START( lluck3x3 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "l3x3.bin", 0x8000, 0x8000, CRC(dbdb07ff) SHA1(6be43aa0b2c10d83373f20f477606cb031bc6dd9) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "l2.bin", 0x0000, 0x8000, CRC(8ca90a8f) SHA1(bc3db3f8c097f89eff488e3aca39bf24ff2b5cff) )
+ ROM_LOAD( "l1.bin", 0x8000, 0x8000, CRC(beadc35c) SHA1(8a6a5954a827def8c4c3b904d8ee58a4bde53d85) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "lluck3x3_nvram.bin", 0x0000, 0x0800, CRC(2fe79cff) SHA1(7839c04336b7702c7bdcd2b6917a353f4376f824) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+ROM_END
+
+
+ROM_START( lluck4x1 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "rk4x1.bin", 0x8000, 0x8000, CRC(37f8a355) SHA1(a6eb4c53464e373bdecbbaaf146f5f7cf66b4bcd) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "l2.bin", 0x0000, 0x8000, CRC(8ca90a8f) SHA1(bc3db3f8c097f89eff488e3aca39bf24ff2b5cff) )
+ ROM_LOAD( "l1.bin", 0x8000, 0x8000, CRC(beadc35c) SHA1(8a6a5954a827def8c4c3b904d8ee58a4bde53d85) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "lluck4x1_nvram.bin", 0x0000, 0x0800, CRC(05d2d7b8) SHA1(1188b2b4835cadd95b1e9160c2948a2e3457afd2) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+ROM_END
+
+
+/******************************** Magic Card II sets ************************************/
+
+/*
+ Magic Card II (Impera)
+ ----------------------
+
+ - 1x Special CPU with CM602 (??) on it <--- from dumper notes.
+ - 1x MC6845P
+ - 1x YM2149F
+ - 2x MC6821P
+ - 1x Crystal 16.000 MHz
+ - 2x HY18CV8S (electrically-erasable PLD)
+
+ Some versions have Mexican Rockwell R65C02.
+ The game doesn't work with a regular 65C02 CPU.
+
+ There are different programs that carry the same
+ graphics set for green TAB / Impera boards.
+
+ TAB blue boards can run the same programs, but needs
+ the encrypted graphics set.
+
+ All these games have some weird things...
+ 1) Some CPU instructions seems wrong (see below, in driver init)
+ 2) The CRTC is injected with some wrong register values (fact),
+ that place the game wrongly, and screw up the input test screen.
+
+*/
+
+ROM_START( magicrd2 ) // Impera... but seems Bulgarian hack, just for copyright
+ ROM_REGION( 0x10000, "maincpu", 0 ) // magicard.004 has extra code, and 2 different NVRAM contents harcoded
+ ROM_LOAD( "magicard.004", 0x0000, 0x8000, CRC(f6e948b8) SHA1(7d5983015a508ab135ccbf69b7f3c526c229e3ef) )
+ ROM_LOAD( "magicard.01", 0x8000, 0x8000, CRC(c94767d4) SHA1(171ac946bdf2575f9e4a31e534a8e641597af519) ) // 1st and 2nd half identical
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "mc2gr2.bin", 0x0000, 0x8000, CRC(733da697) SHA1(45122c64d5a371ec91cecc67b7faf179078e714d) )
+ ROM_LOAD( "mc2gr1.bin", 0x8000, 0x8000, CRC(2406b8d2) SHA1(e9d7a25562fd5adee351d7ef6ba02fff6aab021a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "magicrd2_nvram.bin", 0x0000, 0x0800, CRC(343b3162) SHA1(1524959dbbc0c6d7c5c3a4a6b20976382cfbe88f) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "mc2-82s147.bin", 0x0000, 0x0200, CRC(aa91cc35) SHA1(79f9a755441500e618c4183f524f969fffd44100) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8uni.bin", 0x0000, 0x0117, CRC(b81d7e0a) SHA1(7fef0b2bcea931a830d38ae0f1102434cf281d2d) ) // Universal GAL
+ROM_END
+
+
+ROM_START( magicrd2a ) // Nov (new). Imatic Yugoslavian hack for green TAB or Impera boards
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "m3_nov.bin", 0x8000, 0x8000, CRC(ee5468e6) SHA1(f859adbad30e561fca86e60ff5b2e666d8bf4071) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "m2_nov.bin", 0x0000, 0x8000, CRC(684d71f2) SHA1(e4522844a0406b3e83fa723508a7c05dd21e7fb6) )
+ ROM_LOAD( "m1_nov.bin", 0x8000, 0x8000, CRC(96151034) SHA1(3107d353705c6240a71faf308e11c45a87d95cf4) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM (passed protection)
+ ROM_LOAD( "mc2_nvram.bin", 0x0000, 0x0800, CRC(2070d63d) SHA1(86c72a2e81651b0138d8551a0cfcd07176f8e7d2) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "mc2_82s147.bin", 0x0000, 0x0200, CRC(aa91cc35) SHA1(79f9a755441500e618c4183f524f969fffd44100) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8uni.bin", 0x0000, 0x0117, CRC(b81d7e0a) SHA1(7fef0b2bcea931a830d38ae0f1102434cf281d2d) )
+ROM_END
+
+
+ROM_START( magicrd2b ) // Imatic Yugoslavian hack for green TAB or Impera boards
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "mc2prgv1.bin", 0x8000, 0x8000, CRC(7f759b70) SHA1(23a1a6e8eda57c4a90c51a970302f9a7bf590083) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "mc2gr2.bin", 0x0000, 0x8000, CRC(733da697) SHA1(45122c64d5a371ec91cecc67b7faf179078e714d) )
+ ROM_LOAD( "mc2gr1.bin", 0x8000, 0x8000, CRC(2406b8d2) SHA1(e9d7a25562fd5adee351d7ef6ba02fff6aab021a) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM (passed protection)
+ ROM_LOAD( "mc2_v1-v2_nvram.bin", 0x0000, 0x0800, BAD_DUMP CRC(f88c493d) SHA1(8a5352b46ab68164cd7adaaad6f15f04327b7451) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "mc2-82s147.bin", 0x0000, 0x0200, CRC(aa91cc35) SHA1(79f9a755441500e618c4183f524f969fffd44100) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8uni.bin", 0x0000, 0x0117, CRC(b81d7e0a) SHA1(7fef0b2bcea931a830d38ae0f1102434cf281d2d) )
+ROM_END
+
+
+ROM_START( magicrd2c ) // Imatic Yugoslavian hack for blue TAB board (encrypted)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "mc2prgv2.bin", 0x8000, 0x8000, CRC(b0ed6b40) SHA1(7167e67608f1b0b1cd956c838dacc1310861cb4a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "mc2gr1b.bin", 0x0000, 0x8000, CRC(ce2629a7) SHA1(84767ed5da8dcee44a210255537e10372bcc264b) )
+ ROM_LOAD( "mc2gr2b.bin", 0x8000, 0x8000, CRC(d2bf8bde) SHA1(975b8f43a0396c09e357b96d5ae7381b12152b9e) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM (passed protection)
+ ROM_LOAD( "mc2_v1-v2_nvram.bin", 0x0000, 0x0800, BAD_DUMP CRC(f88c493d) SHA1(8a5352b46ab68164cd7adaaad6f15f04327b7451) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "mc2-82s147.bin", 0x0000, 0x0200, CRC(aa91cc35) SHA1(79f9a755441500e618c4183f524f969fffd44100) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "gal16v8uni.bin", 0x0000, 0x0117, CRC(b81d7e0a) SHA1(7fef0b2bcea931a830d38ae0f1102434cf281d2d) )
+ROM_END
+
+
+
+/******************************** Royal Vegas Joker Card sets ************************************/
+
+ROM_START( vegasslw )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "vslow.bin", 0x8000, 0x8000, CRC(9cb7861a) SHA1(f934eacd5b3573a6bbeaa827f521b4a498e5bcdf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "v2.bin", 0x0000, 0x8000, CRC(af7ab460) SHA1(01ea400424152c09c10eb83a1bd569019969ccb7) )
+ ROM_LOAD( "v1.bin", 0x8000, 0x8000, CRC(23e0d1c6) SHA1(98967b14d3264c444a1dfbd15c57cde70f41f09d) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "vegasslw_nvram.bin", 0x0000, 0x0800, CRC(1aa043e3) SHA1(c93d071effb2f2fe95e9dc751174c2c765595f74) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+
+ROM_START( vegasfst )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "vfast.bin", 0x8000, 0x8000, CRC(87dfb28d) SHA1(9a06e695e59722b6c97e5a9fd2c8b238661e5a4a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "v2.bin", 0x0000, 0x8000, CRC(af7ab460) SHA1(01ea400424152c09c10eb83a1bd569019969ccb7) )
+ ROM_LOAD( "v1.bin", 0x8000, 0x8000, CRC(23e0d1c6) SHA1(98967b14d3264c444a1dfbd15c57cde70f41f09d) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "vegasfst_nvram.bin", 0x0000, 0x0800, CRC(5034de7a) SHA1(ab2077a49d94676531c73ad8d8ce9548bbfa2b81) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+
+ROM_START( vegasfte ) // Royal Vegas Joker Card (fast deal, english gfx)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ch3.bin", 0x8000, 0x8000, CRC(87dfb28d) SHA1(9a06e695e59722b6c97e5a9fd2c8b238661e5a4a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "ch2.bin", 0x0000, 0x8000, CRC(af7ab460) SHA1(01ea400424152c09c10eb83a1bd569019969ccb7) )
+ ROM_LOAD( "ch1.bin", 0x8000, 0x8000, CRC(0a3679c0) SHA1(ce8a067e1a2eccf9fabb16733ef3a14e0e8129e5) ) // X & Y in txt layer
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "vegasfte_nvram.bin", 0x0000, 0x0800, CRC(166c6055) SHA1(db2143a2a3adc92578bd3707391d2f5030cc6a6f) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+
+ROM_START( vegasmil )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // Mile
+ ROM_LOAD( "mile.bin", 0x8000, 0x8000, CRC(ef7e02e2) SHA1(7432b0e723dc528901c422ab1d7d01fd1bc1eb20) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "v2.bin", 0x0000, 0x8000, CRC(af7ab460) SHA1(01ea400424152c09c10eb83a1bd569019969ccb7) )
+ ROM_LOAD( "v1.bin", 0x8000, 0x8000, CRC(23e0d1c6) SHA1(98967b14d3264c444a1dfbd15c57cde70f41f09d) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "vegasmil_nvram.bin", 0x0000, 0x0800, CRC(d2608e5f) SHA1(ac936df71dbc0bfb811a3ba3c91444a2a3e7b036) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+
+/******************************** Jolly Joker sets ************************************/
+
+/*
+
+ Impera - Jolly Joker
+
+ PCB Layout:
+ _____________________________________________________________________________________________
+ | __________ |
+ | | MOP1603 | |
+ | _________ __ |__________| |
+ | ________________________ | A | | | _______ __ __ |___
+ | | | |_________| | | | | | | | | ___|
+ | | | |A | | | |D | |K | ___|
+ | | MC6845P | _________ | | | | | | | | ___|
+ | | | | A | | | |AY38910| | | | | ___|
+ | |________________________| |_________| |__| | A/P | |__| |__| ___|
+ | __ |9120CCA| ___|
+ | _________________ | | | | _______ ___|
+ | _____________ | | | | | | | K | ___|
+ | | T74LS245B1 | | KM6264BL_10 | |A | | | |_______| ___|
+ | |_____________| | | | | | | ___|
+ | | 206Y KOREA | | | | | _______ ___ ___|
+ | |_________________| |__| | | | | | |8 |
+ | | | | | |DIP| |
+ | _____________ _____________ |_______| | | | 1 | |
+ | | SN74LS374N | | SN74LS374N | |MC68B21| | | |___
+ | |_____________| |_____________| ________________________ | P| | | ___|
+ | | R65C02P2 | | | |___|1 ___|
+ | __________________ _________ | 11450_12 | |0K2P | ___|
+ | |CH1 | |74LS194AN| | 9209 | |LLEG912| __ ___|
+ | | | |_________| |________________________| | 6| | | ___|
+ | | M27C512 | | | | | ___|
+ | | | ___ __________________ | | |J | ___|
+ | |__________________| _________ | | |JOKER RUN | | | | | ___|
+ | |74LS194AN| | | | | | | | | ___|
+ | __________________ |_________| | | | M27C512 | | | |__| ___|
+ | |CH2 | | B | | | |_______| ___|
+ | | | _________ | | |__________________| ___|
+ | | M27C512 | |74LS194AN| | | _______ __ ___|
+ | | | |_________| | | | | | | ___|
+ | |__________________| | | _______________ | | | | ___|
+ | |___| | | | | |J | ___|
+ | _________ ________ _________ | HYUNDAI | |MC68B21| | | ___|
+ | |T54LS174M| |DL002D | |74LS194AN| _______ | HY6116ALP_10 | | P| | | ___|
+ | |_________| |________| |_________| | C | | | | | |__| ___|
+ | |_______| |_______________| |0K2P | ___|
+ | __ __ __ _________ |LLEG912| __ ___|
+ | | | | | | | |XTAL | _______ | 6| | | ___|
+ | | | | | | | | | | D | | | | | ___|
+ | |I | |H | |G | | 16 Mhz | |_______| | | |J | ___|
+ | | | | | | | |_________| | | | | ___|
+ | | | | | | | _________ ____ | | | | ___|
+ | |__| | | | | | E | | F | | | |__| ___|
+ | |__| |__| |_________| |____| |_______| ___|
+ | |
+ |_____________________________________________________________________________________________|
+
+
+ A = PC74HCT157P
+ B = AMPAL16L8DC
+ C = HD74LS189P
+ D = T54LS14M2
+ E = T74LS393B1
+ F = TL7705ACP
+ G = SN74LS374N
+ H = AM27S29PC
+ I = PC74HCT174P
+ J = 4116R_001
+ K = ULN2003A
+
+
+ DIP1:
+ ___________________
+ | ON |
+ | _______________ |
+ | |#|#|#|#|#|#|#|#| |
+ | | | | | | | | | | |
+ | |_______________| |
+ | 1 2 3 4 5 6 7 8 |
+ |___________________|
+
+*/
+
+ROM_START( jolyjokr ) // Jolly Joker (98bet, set 1)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "impera3orig.bin", 0x8000, 0x8000, CRC(ceb3a0d5) SHA1(25efae9f225abddfa663e6abcc91801996e5b0ea) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "impera2.bin", 0x0000, 0x8000, CRC(f0fa5941) SHA1(1fcade31ed6893ffcfd4efe97dfaaa31d24283ec) )
+ ROM_LOAD( "impera1.bin", 0x8000, 0x8000, CRC(c3ab44dd) SHA1(e46c0fd94da561f57033647f1703fa135777ece5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokr_nvram.bin", 0x0000, 0x0800, CRC(f33e66ed) SHA1(7a4b9a1b2f976d5d26f54915a213d5ac5eca0a42) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
+ROM_END
+
+
+ROM_START( jolyjokra ) // Jolly Joker (98bet, set 2)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "impera50.bin", 0x8000, 0x8000, CRC(7effc044) SHA1(961438e7fb8222296fb959b510cdf646e4ac3226) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "impera2.bin", 0x0000, 0x8000, CRC(f0fa5941) SHA1(1fcade31ed6893ffcfd4efe97dfaaa31d24283ec) )
+ ROM_LOAD( "impera1.bin", 0x8000, 0x8000, CRC(c3ab44dd) SHA1(e46c0fd94da561f57033647f1703fa135777ece5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokra_nvram.bin", 0x0000, 0x0800, CRC(ed43693c) SHA1(d4aa4e539ab12c97bc9b9b1077997195a11d782b) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
+ROM_END
+
+
+/*
+ Jolly Joker (40bet)
+
+ am27s29_ic40.bin 1ST AND 2ND HALF IDENTICAL
+ ic25.bin 1ST AND 2ND HALF IDENTICAL
+ ic26.bin 1ST AND 2ND HALF IDENTICAL
+
+ These graphics ROMs have enough data to fix the bitrotten graphics from the other Jolly Joker sets.
+ impera1.bin ---> bits 7 & 6
+ impera2.bin ---> bits 7 & 0
+
+ Two slightly different programs. One in each half.
+ Both have Min Bet (5), Max Bet (40).
+ Surely selectable through a PLD.
+
+ This is clearly the paytable. Here the differences...
+
+ offset: C9CF C9D0 C9D1 C9D2 C9D3 C9D4 C9D5 C9D6 C9D7 C9D8 C9D9 C9DA C9DB C9DC C9DD C9DE C9DF C9E0 C9E1 C9E2
+ program #1 0x01 0x00 0x02 0x00 0x03 0x00 0x05 0x00 0x07 0x00 0x10 0x00 0x40 0x00 0x00 0x01 0x00 0x05 0x00 0x11
+ program #2 0x01 0x00 0x02 0x00 0x03 0x00 0x05 0x00 0x07 0x00 0x10 0x00 0x40 0x00 0x00 0x01 0x50 0x02 0x00 0x03
+ ^^^^ ^^^^ ^^^^
+
+ offset: C9E3 C9E4 C9E5 C9E6 C9E7 C9E8 C9E9 C9EA C9EB C9EC C9ED C9EE C9EF C9F0 C9F1 C9F2 C9F3 C9F4 C9F5 C9F6
+ program #1 0x01 0x00 0x02 0x00 0x03 0x00 0x05 0x00 0x07 0x00 0x10 0x00 0x40 0x00 0x00 0x01 0x00 0x05 0x00 0x11
+ program #2 0x01 0x00 0x02 0x00 0x03 0x00 0x05 0x00 0x07 0x00 0x10 0x00 0x40 0x00 0x00 0x01 0x50 0x02 0x00 0x03
+ ^^^^ ^^^^ ^^^^
+ This change the paytable to the following values:
+
+ Program #1 Program #2
+
+ Five of a Kind 1100 Five of a Kind 300
+ Royak Flush 500 Royak Flush 250
+ Street Flush 100 Street Flush 100
+ Poker 40 Poker 40
+ Full House 10 Full House 10
+ Farbe 7 Farbe 7
+ Strasse 5 Strasse 5
+ Drilling 3 Drilling 3
+ 2 Paare 2 2 Paare 2
+ Hohes Paar 1 Hohes Paar 1
+
+ Will split in two different sets, since these programs were made to use as different
+ game variations, and aren't user selectable.
+
+*/
+ROM_START( jolyjokrb1 )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // Two different paytable programs. Using the 1st one (higher paytable)
+ ROM_LOAD( "unbekannt.bin", 0x8000, 0x8000, CRC(327fa3d7) SHA1(2435aada2377b2f8f01d059a7aba9bc7a8993537) )
+ ROM_IGNORE( 0x8000 ) // Using the 1st program. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "ic26.bin", 0x0000, 0x8000, CRC(3e45dfc6) SHA1(8fd0b0cc00cdd96244ae7e7a91f6613b1c144ee0) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "ic25.bin", 0x8000, 0x8000, CRC(1bd067af) SHA1(9436fe085ba63c00a12ea80903470a84535e3dc1) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokrb_nvram.bin", 0x0000, 0x0800, CRC(17007bb5) SHA1(72e08096293ce4fbde205a63b5ecd9641dbee017) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29_ic40.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
+ROM_END
+
+ROM_START( jolyjokrb2 )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // Two different paytable programs. Using the 2nd one (lower paytable)
+ ROM_LOAD( "unbekannt.bin", 0x8000, 0x8000, CRC(327fa3d7) SHA1(2435aada2377b2f8f01d059a7aba9bc7a8993537) )
+ ROM_CONTINUE( 0x8000, 0x8000) // overlapping with the 2nd program.
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "ic26.bin", 0x0000, 0x8000, CRC(3e45dfc6) SHA1(8fd0b0cc00cdd96244ae7e7a91f6613b1c144ee0) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "ic25.bin", 0x8000, 0x8000, CRC(1bd067af) SHA1(9436fe085ba63c00a12ea80903470a84535e3dc1) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokrb_nvram.bin", 0x0000, 0x0800, CRC(17007bb5) SHA1(72e08096293ce4fbde205a63b5ecd9641dbee017) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29_ic40.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
+ROM_END
+
+
+/*
+ Jolly Joker (Apple Time)
+ With Motorola SC67334CP 44N46 instead of regular M6845.
+
+ Program ROM is faulty...
+*/
+ROM_START( jolyjokrc )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "b+g_jj1.bin", 0x8000, 0x8000, BAD_DUMP CRC(2fd585a7) SHA1(d517141ef17da9b61ddf3e6e8c41f5173de980c3) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "jje.bin", 0x0000, 0x8000, CRC(d9da6e74) SHA1(2a966e2d7849aed9d952a9d94c99955ba651d14d) )
+ ROM_LOAD( "jjd.bin", 0x8000, 0x8000, CRC(9d596852) SHA1(a29e210cbdc75717465068e85b693edcc1c642da) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "tbp28s42.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
+
+ ROM_REGION( 0x0200, "plds", 0 ) // cracked PLD
+ ROM_LOAD( "jjpal.bin", 0x0000, 0x0117, CRC(3b084c34) SHA1(5d186b70317ef871c9a426eb420b66efcbd918de) )
+ROM_END
+
+/*
+ Jolly Joker
+ Impera.
+
+ The following two sets have the same program
+ but different graphics system.
+
+ Both sets have graphics ROMs data interleaved
+ inside the second half of a 16bit 27C210 EPROM.
+ The second set has some 8bits data in the first half.
+ Not clear if it's for obfuscation or just are the missing
+ logo graphics tiles.
+
+ The program looks original. The former sets programs
+ have differents offsets patched and moved blocks respect
+ this new program.
+
+ Didn't set as parent due to the fact that seems older.
+ Maybe being more original and less patched should be set
+ as parent.
+
+*/
+ROM_START( jolyjokro )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "impera1.bin", 0x0000, 0x10000, CRC(3cad9fcf) SHA1(09f23ae8c04e6b461e17a8b3978fe44566ffc3aa) )
+
+ ROM_REGION( 0x10000, "gfxpool", 0 )
+ ROM_LOAD( "impera2.bin", 0x0000, 0x10000, CRC(aa86dba6) SHA1(fe189dde83bd855f4a0b34b20c161a9addc15017) )
+ ROM_CONTINUE( 0x0000, 0x10000) // discarding 1st empty half (0000-ffff)
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x10000, 0xff) // deinterleaved GFX data will be placed here
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokro_nvram.bin", 0x0000, 0x0800, CRC(1f69e567) SHA1(86695ca6f9f93c6badd092410611d8061edf8efa) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "1_impera_color_ii.bin", 0x0000, 0x0200, CRC(9d62f9f5) SHA1(68300c25c7eaa13a3fdbf91ab0711d0bc530543d) )
+ROM_END
+
+ROM_START( jolyjokrp )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "impera1.bin", 0x0000, 0x10000, CRC(3cad9fcf) SHA1(09f23ae8c04e6b461e17a8b3978fe44566ffc3aa) )
+
+ ROM_REGION( 0x10000, "gfxpool", 0 )
+ ROM_LOAD( "9c_1ff1.bin", 0x00000, 0x10000, CRC(4b8f0821) SHA1(0821eed07f5e98b66d87a3079756dad72ffe9665) )
+ ROM_CONTINUE( 0x00000, 0x10000) // discarding 1st half (0000-ffff), but has some data. leftover?
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x10000, 0xff) // deinterleaved GFX data will be placed here
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokrp_nvram.bin", 0x0000, 0x0800, CRC(c8706e75) SHA1(421420b1ee82615faf290d1204342cdde776ffaf) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "impera_color_ii.bin", 0x0000, 0x0200, CRC(9d62f9f5) SHA1(68300c25c7eaa13a3fdbf91ab0711d0bc530543d) )
+ROM_END
+
+/*
+ Jolly Joker (Otti Karl logo)
+ Original Impera program.
+
+ Both sets have graphics ROMs data interleaved
+ inside the second half of a 16bit 27C210 EPROM.
+ The second set has full garbage in the first half.
+
+ The PLD (PAL16L8) was bruteforced.
+
+*/
+ROM_START( jolyjokrs ) // Jolly Joker (Otti Karl logo, set 1)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jolly_joker_standard_09.90.bin", 0x0000, 0x10000, CRC(3cad9fcf) SHA1(09f23ae8c04e6b461e17a8b3978fe44566ffc3aa) )
+
+ ROM_REGION( 0x10000, "gfxpool", 0 )
+ ROM_LOAD( "02.bin", 0x0000, 0x10000, CRC(dedf3bcc) SHA1(d534005ada564aae08c02422cdb405599489aa0a) )
+ ROM_CONTINUE( 0x0000, 0x10000) // discarding 1st empty half (0000-ffff)
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x10000, 0xff) // deinterleaved GFX data will be placed here
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokrs_nvram.bin", 0x0000, 0x0800, CRC(1f69e567) SHA1(86695ca6f9f93c6badd092410611d8061edf8efa) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "63s481n.bin", 0x0000, 0x0200, CRC(9d62f9f5) SHA1(68300c25c7eaa13a3fdbf91ab0711d0bc530543d) )
+
+ ROM_REGION( 0x0200, "plds", 0 ) // identical to jolyjokrt one
+ ROM_LOAD( "jolyjokrs_pal16l8.bin", 0x0000, 0x0117, CRC(b235c40b) SHA1(69611fe15f54220efcdbce9efb3e2738242af692) )
+ROM_END
+
+ROM_START( jolyjokrt ) // Jolly Joker (Otti Karl logo, set 2)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512.bin", 0x0000, 0x10000, CRC(3cad9fcf) SHA1(09f23ae8c04e6b461e17a8b3978fe44566ffc3aa) )
+
+ ROM_REGION( 0x10000, "gfxpool", 0 )
+ ROM_LOAD( "d27c210.bin", 0x0000, 0x10000, CRC(132e4747) SHA1(255976f672dd7cf755e198617f7d895f7b888ae7) )
+ ROM_CONTINUE( 0x0000, 0x10000) // discarding 1st half (0000-ffff) full of garbage
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x10000, 0xff) // deinterleaved GFX data will be placed here
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokrt_nvram.bin", 0x0000, 0x0800, CRC(1f69e567) SHA1(86695ca6f9f93c6badd092410611d8061edf8efa) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(9d62f9f5) SHA1(68300c25c7eaa13a3fdbf91ab0711d0bc530543d) )
+
+ ROM_REGION( 0x0200, "plds", 0 ) // identical to jolyjokrs one
+ ROM_LOAD( "jolyjokrt_pal16l8.bin", 0x0000, 0x0117, CRC(b235c40b) SHA1(69611fe15f54220efcdbce9efb3e2738242af692) )
+ROM_END
+
+
+/*
+ Jolly Joker
+ Impera.
+
+ This hardware has a daughterboard that seems a solid state replacement
+ for the suicide modules of funworld boards.
+
+ It's just a theory, but the main battery is routed to the daughterboard
+ connectors, when this module has not suicide program inside a RAM.
+
+ Module contents:
+
+ 1x Rockwell R65C02P2 Mexico.
+ 1x 27c512 EPROM stickered 'IMPERA1'.
+ 1x PAL16L8A2NC.
+ 1x 74HC241N.
+ 1x 74LS245N.
+ 1x 74LS139N.
+
+*/
+ROM_START( jolyjokrm ) // Jolly Joker (Solid State module in suicide board)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "impera1.bin", 0x0000, 0x10000, CRC(3cad9fcf) SHA1(09f23ae8c04e6b461e17a8b3978fe44566ffc3aa) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "02.bin", 0x0000, 0x8000, CRC(f0fa5941) SHA1(1fcade31ed6893ffcfd4efe97dfaaa31d24283ec) )
+ ROM_LOAD( "01.bin", 0x8000, 0x8000, CRC(c3ab44dd) SHA1(e46c0fd94da561f57033647f1703fa135777ece5) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "jolyjokrm_nvram.bin", 0x0000, 0x0800, CRC(f33e66ed) SHA1(7a4b9a1b2f976d5d26f54915a213d5ac5eca0a42) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "63s481.bin", 0x0000, 0x0200, CRC(1f974802) SHA1(c9d4d72edef3c03b0c6e1a0ffc0b82f6d213d29c) )
+ROM_END
+
+
+/******************************** Other sets ************************************/
+
+/*
+ Title: MULTI WIN
+ Company: FUN WORLD
+ Version: 0167
+ Date: 1992-11-11
+
+ Unknown or encrypted CPU.
+*/
+ROM_START( multiwin )
+ ROM_REGION( 0x10000*2, "maincpu", 0 ) // *2 for decrypted opcodes (see init)
+ ROM_LOAD( "multiwin3.bin", 0x8000, 0x8000, CRC(995ca34d) SHA1(4d6ec10810ece493447a01af149ad8387d5f3c2f) ) // first half is full of ff's
+ ROM_LOAD( "multiwin4.bin", 0x0000, 0x8000, CRC(f062125c) SHA1(93c9aa518810798f3449a28e851eb6433ba7bbf8) ) // first half is full of ff's
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "multiwin2.bin", 0x0000, 0x8000, CRC(580b3239) SHA1(362aa85c57ad0bce1d7d15a93b9998daba4d306a) )
+ ROM_LOAD( "multiwin1.bin", 0x8000, 0x8000, CRC(97589aa6) SHA1(2486116637bd906cb3b32acd86fc861c48a0475e) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "multi_prom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) ) // using the joker card one
+ROM_END
+
+
+/*
+ Multi Win
+ Version 0091
+ 1991-09-20
+
+ Different encryption scheme.
+ Looks closer to megacard.
+
++--------------------------------------------------------------------------------------+
+| +------+ +------+ |
+| +------+ +--------+ | | | | |
+| | | |74LS157N| |GOLDST| | | +--+ |
+| | | +--------+ |AR | |SOUND | | | +--+ +---+
+| | | +--------+ | | | | | | | | --|
+| |GOLDST| |74LS157N| |GM76C2| |AY-3-8| |K | |L | --|
+| |AR | +--------+ |8A-10 | |91C | | | | | --|
+| | | +--------+ | | +-------------------+ | | | | | | --|
+| |GM68B4| |74LS157N| | | | ::::::::::::::::: | | | +--+ +--+ --|
+| |5S | +--------+ +------+ +-------------------+ | | --|
+| | | +--------+ | | +--+ --|
+| |9141 | |74LS157N| | | | | --|
+| | | +--------+ +----------+ +----------+ | | |M | +---+
+| | | |PAL16L8ACN| | EMPTY | | | | | |
+| | | +----+ +----------+ +----------+ | | | | |
+| +------+ +--------------+ |XTAL| | | +--+ |
+| | KM6264BL-10 | | | +--------------------+ +------+ |
+| +----------+ | 214Y KOREA | |16.0| | | +------+ |
+| | 74LS245N | | | |00 | | FUN WORLD | | | |
+| +----------+ +--------------+ +----+ | ELEKTRONIK | | | +---+
+| | | | | --|
+| +----------+ +----------+ +--------------------+ |S22LD | --|
+| | 74LS374N | | 74LS374N | | | --|
+| +----------+ +----------+ +--+ +--+ +--------------+ | 9248 | --|
+| | | | | | EMPTY | | | --|
+|+--------------+ +--------+ | | | | | SOCKET | |EF6821| +--+ --|
+||Multi Win | |74LS194A| |A | |B | | IC25| |P | | | --|
+||ZG 1 | +--------+ | | | | +--------------+ | | |D | --|
+|| IC10| +--------+ | | | | | | |I | --|
+|+--------------+ |74LS194A| +--+ | | +--------------+ | | |P | --|
+| +--------+ +--+ |Multi Win | | | |1 | --|
+|+--------------+ +--------+ |91/F/1 | | | | | --|
+||Multi Win | |74LS194A| +--+ +--+ +--+ | IC37| | | +--+ --|
+||ZG 2 | +--------+ | | | | | | +--------------+ +------+ --|
+|| IC11| +--------+ |C | | | | | +------+ --|
+|+--------------+ |74LS194A| | | |D | |E | +--------------+ | | --|
+| +--------+ | | | | | | |Multi Win | | | --|
+|+--------+ +-------+ +--+ | | | | |91/F/2 | | | --|
+||74LS174N| |74LS02N| | | +--+ | IC41| | | --|
+|+--------+ +-------+ +--+ +--------------+ |MC68B2| --|
+| |1P | --|
+|+--+ +--+ +--+ +--+ | | --|
+|| | | | | | +--+ - | | |0K2P | --|
+||F | | | | | |I | |J | | | --|
+|| | |G | |H | | | BATTERY | | |LLFT92| --|
+|| | | | | | +--+ | | |24 | +---+
+|+--+ | | | | + +--+ | | |
+| | | | | | | |
+| +--+ +--+ +------+ |
++--------------------------------------------------------------------------------------+
+
+A: 74LS368AN H: 74LS374N
+B: 74LS245N I: MAX690CPA
+C: GD74LS393 J: DM74LS02N
+D: MN74HC241 K: ULN2003AN
+E: 74LS139N L: SN74LS04N
+F: 74LS174N M: ULN2003A
+G: DM74S472BN
+
+
+DIP 1:
++-------------------------------+
+|O N |
+|+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+|
+|| | |#| |#| |#| | | | | | | | ||
+|+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+|
+||#| | | | | | | |#| |#| |#| |#||
+|+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+|
+| 1 2 3 4 5 6 7 8 |
++-------------------------------+
+
+
+
+FUNWORLD CUSTOM CPU-MODULE:
+
+ +---------------------+
+ A10 ==|01 40|==
+ ==| |==
+ ==| [] TI74F245A |==
+ ==| |==
+ ==| |==
+ ==| +--+ |==
+ ==| | | 65SC02 |==
+ VCC ==| +--+ |== A00
+ A08 ==| |== A01
+ A09 ==| |== A02
+ ==| [] 7400 |== A03
+ ==| |== A04
+ ==| +-----------+ |== A05
+ ==| | CY7C291A | |== A06
+ ==| | | |== A07
+ ==| | | |==
+ ==| | | |==
+ ==| | 1 | |==
+ ==| +-----------+ |==
+ ==|20 21|== GND
+ +---------------------+
+
+*/
+ROM_START( multiwina )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "multiwin_91-f-1.ic37", 0x8000, 0x8000, CRC(88f122e0) SHA1(6b218e614ac86089321ad2ecb35b956de10031f3) ) // code in the 2nd half
+ ROM_LOAD( "multiwin_91-f-2.ic41", 0x0000, 0x8000, CRC(a09eda44) SHA1(b8bb6a2aa1b703b56e5fb0887d7e5dca28c388ea) ) // code in the 2nd half
+
+ ROM_REGION( 0x0800, "decode", 0 ) // from the CY7C291A inside of the custom CPU.
+ ROM_LOAD( "multiwin_cy7c291a.cpu", 0x0000, 0x0800, CRC(874abdaa) SHA1(b6457d5d501cdf0d38b01e3dadb48b8b97193db3) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "multiwin_zg2.ic11", 0x0000, 0x8000, CRC(2502778a) SHA1(04990c454ca55f1b3e6fdafebce3f2e9e6782329) )
+ ROM_LOAD( "multiwin_zg1.ic10", 0x8000, 0x8000, CRC(38547f3e) SHA1(1322a35ebc358ebc193c029500dc0abd6fd0c113) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "dm74s472.ic13", 0x0000, 0x0200, CRC(3bf9870c) SHA1(2bd99102a1f80ec07dbe3d41bdbcff11b237d680) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "multiwin_pal16l8acn.bin", 0x0000, 0x0104, NO_DUMP )
+ROM_END
+
+
+/*
+ Multi Win
+ Amatic, 2001.
+
+ Unknown version.
+ Game encrypted, using a daughterboard
+ with a Mexican R65C02 + Altera EPM7032.
+
+*/
+ROM_START( multiwinb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "win3.bin", 0x8000, 0x8000, CRC(5f01d620) SHA1(ddd86cba383f1e40e3821a58fc0ff7c1ac24de10) )
+
+ ROM_REGION( 0x0800, "altera", 0 ) // Altera EPM7032 object file
+ ROM_LOAD( "multiw1_epm7032.pof", 0x0000, 0x07ae, CRC(922d8d72) SHA1(2ad01fd0b4ddaa1098f3ffc203b6c502d1afd73a) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "win2.bin", 0x0000, 0x8000, CRC(bf031e5e) SHA1(1c971be5eb3e8c1a1b69ec9d00e46aa1fe26b8ee) )
+ ROM_LOAD( "win1.bin", 0x8000, 0x8000, CRC(8ea33d92) SHA1(5aa439181f0751040229ce75101dbdf8b3d68b6c) )
+
+ ROM_REGION( 0x0800, "proms", 0 )
+ ROM_LOAD( "291_n147.bin", 0x0000, 0x0800, CRC(e09e3a77) SHA1(2842875cff63650e15bf7eda3a730446c671c3ea) )
+
+ ROM_REGION( 0x0a00, "plds", 0 )
+ ROM_LOAD( "m1-20v8.bin", 0x0000, 0x0157, CRC(b05b51da) SHA1(5e43cc12cd8bcd820cb89d3008a02ea857daba6f) )
+ ROM_LOAD( "m2-20v8.bin", 0x0200, 0x0157, CRC(11852de6) SHA1(33fcf6f752a116e4df0492d17e0d5e53b31ce77d) )
+ ROM_LOAD( "16v8-3.bin", 0x0400, 0x0117, NO_DUMP )
+ ROM_LOAD( "jo393-4.bin", 0x0800, 0x0117, CRC(6eef3e7d) SHA1(2e1bb576f431743b133833c7c2f91a41a4fcbc37) )
+ROM_END
+
+
+/*
+ Power Card (Fun World)
+ Version 0263 / 1993-10-22
+
+ Amatic encrypted CPU based on 65SC02 (bitwise) family,
+ with the following components inside:
+
+ 1x CY7C291A (prom replacement).
+ 1x 65SC02 (CPU).
+ 1x TI74F245A (3-state octal latch from Texas Instruments).
+ 1x 7400 (quad 2-input NAND gate).
+
+ (Same as Mega Card CPU)
+
+
+ PCB Layout...
+ .----------------------------------------------------------------------------------------------------------------------.
+ | |
+ | .--------. .--------. .-------. |
+ | | | .------------. | | | | |
+ | | | | GD74LS157 | | | | | .---. '---.
+ | | | '------------' |Goldstar| |YAMAHA | | | .---. ---|
+ | |GOLDSTAR| | | | | |ULN| | | ---|
+ | | | .------------. |GM76C28A| | | |200| |74L| ---|
+ | | | | GD74LS157 | | -10 | | | |3AN| |S04| ---|
+ | |GM68B45S| '------------' | | |YM2149F| | | |P | ---|
+ | | | | | | | | | | | ---|
+ | | | .------------. | | .-------------------------------------. | | '---' | | ---|
+ | | | | GD74LS157 | | | |## ooooooooooooooooooooooooooooooo ##| | | '---' ---|
+ | | | '------------' | | |## ooooooooooooooooooooooooooooooo ##| | | ---|
+ | | | '--------' '-------------------------------------' | | .---. ---|
+ | | | .------------. | | | | ---|
+ | | | | GD74LS157 | .--------------. .--------------. | | |ULN| .---'
+ | | | '------------' |TIBPAL16L8-25C| | EMPTY SOCKET | | | |200| |
+ | | | '--------------' '--------------' | | |3AN| |
+ | | | .------------------. .-----. .--------------------------------. | | | | |
+ | '--------' | | |XTAL | |Lf. Nr: 00147 | '-------' '---' |
+ | | KM6264BL-10 | |16.00| |Type: 0-A | .-------. |
+ | .-------------. | | |MHz | |Datum: 27.10 | | | |
+ | | GD74LS245 | | | | | | | | | |
+ | '-------------' '------------------' '-----' | AMATIC | | | '---.
+ | | | | | ---|
+ | .-------------. .------------. '--------------------------------' | | ---|
+ | | HD74LS374P | | HD74LS374P | |MC6821P| ---|
+ | '-------------' '------------' .---. .---. .--------------------. | | ---|
+ | |GD7| |GD7| | | | | ---|
+ |.--------------------. .----------. |4LS| |4LS| | EMPTY SOCKET | | | .---. ---|
+ ||POWER C. | | 74LS194AN| |368| |245| | | | | | 8| ---|
+ || ZG 1 | '----------' |A | | | | | | | | | ---|
+ || 27C256| | | | | '--------------------' | | | | ---|
+ || IC10| .----------. '---' | | | | |DIP| ---|
+ |'--------------------' | 74LS194AN| | | .--------------------. | | | | ---|
+ | '----------' | | |LETS GO 1 | | | | | ---|
+ | '---' | 263 / A / 1 | | | | | ---|
+ |.--------------------. .----------. | 27C256| | | | 1| ---|
+ ||POWER C. | | 74LS194AN| .---. .---. .---. | IC37| | | '---' ---|
+ || ZG 2 | '----------' |GD7| |KS7| |GD7| '--------------------' '-------' ---|
+ || 27C256| |4LS| |4AH| |4LS| .-------. ---|
+ || IC11| .----------. |393| |CT2| |139| .--------------------. | | ---|
+ |'--------------------' | 74LS194AN| | | |41N| | | |LETS GO 1 | | | ---|
+ | '----------' | | | | | | | 263 / A / 2 | | | ---|
+ | '---' | | '---' | 27C256| | | ---|
+ |.----------. .----------. | | | IC41| | | ---|
+ || GD74LS174| |HD74LS02P | | | '--------------------' |MC6821P| ---|
+ |'----------' '----------' '---' | | ---|
+ | .---. | | ---|
+ |.---. .---. .---. .---. |HD7| | | ---|
+ ||GD7| | | |HD7| |MAX| Maxim |4LS| | | ---|
+ ||4LS| |N82| |4LS| |690| MAX690CPA |02P| | | ---|
+ ||174| |S14| |374| '---' | | | | ---|
+ || | |7N | |P | | | | | ---|
+ || | | | | | '---' | | ---|
+ |'---' | | | | | | .---'
+ | | | | | | | |
+ | '---' '---' '-------' |
+ | |
+ '----------------------------------------------------------------------------------------------------------------------'
+
+ DIP SW Bank
+ .---------------.
+ |#| |#|#|#|#|#|#|
+ |---------------|
+ | |#| | | | | | |
+ '---------------'
+ 1 2 3 4 5 6 7 8
+
+
+ Looks like a Bonus Card / Big Deal clone.
+ Inside the program ROM there is a reference to "Mega Card",
+ but the graphics are from Power Card.
+
+*/
+ROM_START( powercrd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "263a1.bin", 0x8000, 0x8000, CRC(9e5e477d) SHA1(428464a64bea8cb478bc8033859baa47d7de0297) ) // just the 2nd half
+ ROM_LOAD( "263a2.bin", 0x0000, 0x8000, CRC(11b1a13f) SHA1(766c1a45c238467d6a292795f5a159187966ceec) ) // just the 2nd half
+
+ ROM_REGION( 0x0800, "decode", 0 ) // from the CY7C291A inside of the custom CPU
+ ROM_LOAD( "powercrd_cy7c291a.bin", 0x0000, 0x0800, CRC(f1d8f35d) SHA1(2b5f9222a81a627d43fd8448385f85c71c24b914) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "power_c_zg2.ic11", 0x0000, 0x8000, CRC(108380bb) SHA1(922beffe3c06f391239125e6f4ccc86ec6980c45) )
+ ROM_LOAD( "power_c_zg1.ic10", 0x8000, 0x8000, CRC(dc9e70c6) SHA1(7ac5bdc734d9829ea6349b60817445cb88d7387c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an.bin", 0x0000, 0x0200, CRC(136245f3) SHA1(715309982fcafbce88b08237ca46acec31273938) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "powercrd_tibpal16l8.bin", 0x0000, 0x0104, CRC(b5c0a96d) SHA1(3547700e276326a27009202b2e82bc649abb33db) )
+ROM_END
+
+
+/*
+
+ Mega Card (MC3).
+ Ver. 0210.
+ Fun World, 1993.
+
+ Encrypted poker game.
+
+ 1x Custom encrypted Fun World CPU based on 65SC02 (Same as Power Card).
+ 1x GM68B45S CRTC.
+ 2x EF6821P PIAs.
+ 1x AY38910A.
+ 2x ULN2003AN (out).
+ 1x PAL16L8ACN (PLD).
+ 1x Maxim MAX690CPA (Microprocessor Supervisory Circuits).
+
+ RAM:
+ 1x GoldStar GM76C28-10.
+ 1x KM6264BL-10.
+
+ ROM:
+ 4x 27C256 (two for program, two for GFX).
+ 1x N82S147AN bipolar PROM.
+
+ Other:
+
+ 1x 16MHz Xtal.
+ 1x 8 DIP switches bank.
+ 1x 3V. CR2025 lithium battery.
+
+ 1X 17x2 Pin male connector.
+ 1X 22x2 Pin edge connector.
+ 1X 8x2 Pin edge connector.
+
+
+
+ PCB layout:
+
+ .----------------------------------------------------------------------------------------------------------------------.
+ | |
+ | .--------. .--------. .-------. |
+ | | | .------------. | | | | |
+ | | | | GD74LS157 | | | | | .---. '---.
+ | | | '------------' |Goldstar| | | | | .---. 8 ---|
+ | |GOLDSTAR| | | | | |ULN| | | ---|
+ | | | .------------. |GM76C28 | | | |200| |74L| P ---|
+ | | | | GD74LS157 | | -10 | | | |3AN| |S04| I ---|
+ | |GM68B45S| '------------' | | |AY38910| | | |P | N ---|
+ | | | | | |A/P | | | | | ---|
+ | | | .------------. | | .-------------------------------------. | | '---' | | C ---|
+ | | | | GD74LS157 | | | |## ooooooooooooooooooooooooooooooo ##| | | '---' O ---|
+ | | | '------------' | | |## ooooooooooooooooooooooooooooooo ##| | | N ---|
+ | | | '--------' '-------------------------------------' | | .---. N ---|
+ | | | .------------. | | | | ---|
+ | | | | GD74LS157 | .--------------. .--------------. | | |ULN| .---'
+ | | | '------------' | PAL16L8ACN | | EMPTY SOCKET | | | |200| |
+ | | | '--------------' '--------------' | | |3AN| |
+ | | | .------------------. .-----. .--------------------------------. | | | | |
+ | '--------' | | |XTAL | |Lfnd. Nr: 0057 | '-------' '---' |
+ | | KM6264BL-10 | |16.00| |Type: 'F' | .-------. |
+ | .-------------. | | |0MHz | |Datum: 17.3.93 | | | |
+ | | GD74LS245 | | | | | | | | | |
+ | '-------------' '------------------' '-----' | FUN WORLD | | | '---.
+ | | | | | ---|
+ | .-------------. .------------. '--------------------------------' | | ---|
+ | | HD74LS374P | | HD74LS374P | |EF6821P| ---|
+ | '-------------' '------------' .---. .---. .--------------------. | | ---|
+ | |GD7| |GD7| | | | | ---|
+ |.--------------------. .----------. |4LS| |4LS| | EMPTY SOCKET | | | .---. ---|
+ ||MEGA | |74LS194AN | |368| |245| | | | | | 8| ---|
+ ||ZG 1 | '----------' |A | | | | | | | | | ---|
+ || 27C256| | | | | '--------------------' | | | | 22 ---|
+ || IC10| .----------. '---' | | | | |DIP| ---|
+ |'--------------------' |74LS194AN | | | .--------------------. | | | | P ---|
+ | '----------' | | |MEGA MC 3 | | | | | I ---|
+ | '---' | 210/F/1 | | | | | N ---|
+ |.--------------------. .----------. | 27C256| | | | 1| ---|
+ ||MEGA | |74LS194AN | .---. .---. .---. | IC37| | | '---' C ---|
+ ||ZG 2 | '----------' |GD7| |MN7| |GD7| '--------------------' '-------' O ---|
+ || 27C256| |4LS| |4HC| |4LS| .-------. N ---|
+ || IC11| .----------. |393| |241| |139| .--------------------. | | N ---|
+ |'--------------------' |74LS194AN | | | | | | | |MEGA MC 3 | | | E ---|
+ | '----------' | | | | | | | 210/F/2 | | | C ---|
+ | '---' | | '---' | 27C256| | | T ---|
+ |.----------. .----------. | | | IC41| | | O ---|
+ ||GD74LS174 | |HD74LS02P | | | '--------------------' |EF6821P| R ---|
+ |'----------' '----------' '---' | | ---|
+ | ------- .---. | | ---|
+ |.---. .---. .---. .---. / CR-2025 \ |HD7| | | ---|
+ ||GD7| | | |HD7| |MAX| | LITHIUM | |4LS| | | ---|
+ ||4LS| |N82| |4LS| |690| | BATTERY | |02P| | | ---|
+ ||174| |S14| |374| '---' \ +3V. / | | | | ---|
+ || | |7AN| |P | Maxim ------- | | | | ---|
+ || | | | | | MAX690CPA '---' | | ---|
+ |'---' | | | | | | .---'
+ | | | | | | | |
+ | '---' '---' '-------' |
+ | |
+ '----------------------------------------------------------------------------------------------------------------------'
+
+
+ The encrypted CPU:
+
+ It's a DIP40 custom IC. It has inside a PLCC28 IC and 3 dies:
+
+ The PLCC28 chip is a CY7C291A (prom replacement)
+ DIE#1 is a TI74F245A, a 3-state octal latch from Texas Instruments.
+ DIE#2 is the CPU, a 65SC02.
+ DIE#3 is a 7400, a quad 2-input NAND gate.
+
+ Is unknown how they are connected.
+
+*/
+
+ROM_START( megacard )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "mega_mc3_210-f-1.ic37", 0x8000, 0x8000, CRC(747f5ed1) SHA1(06757bb6a792dca93978b17b54c28e413e3720b1) ) // just the 2nd half
+ ROM_LOAD( "mega_mc3_210-f-2.ic41", 0x0000, 0x8000, CRC(373094d2) SHA1(8aed2502e89b0e7522e88f351ac256f1afad7ee8) ) // just the 2nd half
+
+ ROM_REGION( 0x0300, "die_65sc02", 0 ) // from the 65SC02 die inside of the custom CPU
+ ROM_LOAD( "gteu65decoderom.bin", 0x0000, 0x02f1, CRC(089af0c6) SHA1(0f46a73a7859a694a07ebe74d476fae80e57e329) )
+
+ ROM_REGION( 0x0800, "decode", 0 ) // from the CY7C291A inside of the custom CPU
+ ROM_LOAD( "megacard_cy7291a.bin", 0x0000, 0x0800, CRC(596f01ac) SHA1(a8606a1dd385fbb46b1a96f11a759fa6580803d8) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "mega_zg2.ic11", 0x0000, 0x8000, CRC(0993d380) SHA1(e5e2386948fba2fb6b79339af27bd1d0f1e198ca) )
+ ROM_LOAD( "mega_zg1.ic10", 0x8000, 0x8000, CRC(de2e2dd0) SHA1(17962d84838f39de41bc7a41d399fd18cd0bd5b7) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147an.bin", 0x0000, 0x0200, CRC(136245f3) SHA1(715309982fcafbce88b08237ca46acec31273938) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "megacard_pal16l8.bin", 0x0000, 0x0117, CRC(3159a548) SHA1(ad904fa35b78570e44323469967803e34ef4bc0c) )
+ROM_END
+
+/*
+
+ Mega Card (MC3).
+ Ver. 0053.
+ Fun World, 1992.
+
+ Poker game with encrypted CPU: F - 10/03/1992.
+
+*/
+
+ROM_START( megacarda )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "megamc3_0057-f-1.ic37", 0x8000, 0x8000, CRC(ca3becc0) SHA1(04dd8cebc53241d35eab842766b59e0f0e091b86) ) // just the 2nd half
+ ROM_LOAD( "megamc3_0057-f-2.ic41", 0x0000, 0x8000, CRC(91add9f8) SHA1(b0fe9015fe4760de73f2ee00c89a16c19340a884) ) // just the 2nd half
+
+ ROM_REGION( 0x0300, "die_65sc02", 0 ) // from the 65SC02 die inside of the custom CPU, version 0210.
+ ROM_LOAD( "gteu65decoderom.bin", 0x0000, 0x02f1, CRC(089af0c6) SHA1(0f46a73a7859a694a07ebe74d476fae80e57e329) )
+
+ ROM_REGION( 0x0800, "decode", 0 ) // from the CY7C291A inside of the custom CPU, version 0210.
+ ROM_LOAD( "megacard_cy7291a.bin", 0x0000, 0x0800, CRC(596f01ac) SHA1(a8606a1dd385fbb46b1a96f11a759fa6580803d8) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "mega_zg2.ic11", 0x0000, 0x8000, CRC(0993d380) SHA1(e5e2386948fba2fb6b79339af27bd1d0f1e198ca) )
+ ROM_LOAD( "mega_zg1.ic10", 0x8000, 0x8000, CRC(de2e2dd0) SHA1(17962d84838f39de41bc7a41d399fd18cd0bd5b7) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // original BP has bit 1 = 0 along the dump. the device is damaged. rest of bits match the parent dump.
+ ROM_LOAD( "n82s147an.ic3", 0x0000, 0x0200, CRC(136245f3) SHA1(715309982fcafbce88b08237ca46acec31273938) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "megacarda_pal16l8.bin", 0x0000, 0x0117, CRC(fcda7872) SHA1(60acdb968e6229a8f71c2e29d22e132906a65bd5) ) // cracked.
+ROM_END
+
+
+/*
+ Joker Card 300
+ 1993, Amatic Trading GmbH, Austria.
+ Language seems to be Czech.
+
+ There are tiles from Vesely Svet (Sprightly World). Maybe a leftover.
+ Program roms are encrypted. Seems to be a Big Deal clone, running in
+ Fun World Multi Win hardware.
+
+ Unfortunately, the graphics ROM vesely_zg_1.ic10 has address 8 line (leg 25) shorted.
+ Seems that the protection diode was blown due to a bad handling.
+
+ With forensics techniques, a special device was constructed to process
+ the faulty ROM and try to read the contents. Fortunately after all these
+ efforts, we got a perfect and complete dump.
+
+
+ Specs:
+
+ 1x Custom Fun World CPU, based on 6502 family. Silkscreened "Fun World Elektronik".
+ 1x Maxim MAX690CPA - Microprocessor Supervisory IC (DIP 8).
+
+ 2x MC68B21P PIAs.
+ 1x GM68B45S CRT Controller.
+
+ 1x AY-3-8910.
+ 1x TDA2003 Audio amplifier.
+
+ 4x ROM 27C256.
+ 1x RAM GM76C28A.
+ 1x RAM KM6264BL.
+ 1x PROM N82S147AN.
+
+ 1x PAL 16L8ACN
+
+ 1x 8 DIP switches bank.
+ 1x Push button (SW2). (reset?)
+ 1x Variable Resistor (VR1).
+ 1x 16 MHz. Crystal.
+ 1x CR2025 (3V) battery.
+
+ 1x 2x17 pin male connector.
+ 1x 2x22 Edge connector.
+ 1x 2x8 Edge connector.
+
+ ------------------------------------------------------------------------
+
+ In IC41.bin you can see the following strings:
+
+ AMATIC TRADING GMBH AUSTRIA
+
+ JEDE UNERLAUBTEVERAENDERUNG
+ BZWKOPIE WIRD DENZORN DER
+ GOETTERAUF SICH ZIEHEN
+
+ VERSION A267BC 200/300 KARTE
+ 1993-11-29
+
+ ------------------------------------------------------------------------
+
+ ic41.bin 1ST AND 2ND HALF IDENTICAL
+ ic37.bin 1ST AND 2ND HALF IDENTICAL
+ ic10.bin BADADDR xxxxxx-xxxxxxxx
+
+*/
+
+ROM_START( jokercrd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ic41.bin", 0x4000, 0x4000, CRC(d36188b3) SHA1(3fb848fabbbde9fbb70875b3dfef62bfb3a8cbcb) )
+ ROM_IGNORE( 0x4000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "ic37.bin", 0xc000, 0x4000, CRC(8e0d70c4) SHA1(018f92631acbe98e5826a41698f0e07b4b46cd71) )
+ ROM_IGNORE( 0x4000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "vesely_zg_2.ic11", 0x0000, 0x8000, CRC(21d05a57) SHA1(156c18ec31b08e4c4af6f73b49cb5d5c68d1670f) )
+ ROM_LOAD( "vesely_zg_1.ic10", 0x8000, 0x8000, CRC(f315587a) SHA1(6f24dd24ae4c48f2ee1db96d5cbff863734048de) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "ic13.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+ROM_START( jokercrdf )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bc4_t.ic38", 0x4000, 0x4000, CRC(2c1701b2) SHA1(1457bc1c0c7845173ebb930dfe3d313a4866b9ad) )
+ ROM_LOAD( "bc4_p.ic12", 0xc000, 0x4000, CRC(b5fde2a2) SHA1(508c881267447c06d0d65e9ca2517574d2b73fcc) )
+
+ ROM_REGION( 0x0800, "decode", 0 ) // inside of the custom CPU
+ ROM_LOAD( "internal_table.bin", 0x0000, 0x0800, CRC(f1d8f35d) SHA1(2b5f9222a81a627d43fd8448385f85c71c24b914) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.ic11", 0x0000, 0x8000, CRC(ba994fc3) SHA1(95d2a802c38d7249f10eb2bbe46edfb9b14b6faa) )
+ ROM_LOAD( "1.ic10", 0x8000, 0x8000, CRC(367db105) SHA1(400b82dc9e0be4c17a02add009aab3c43dd901f8) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ // PROM was broken beyond repair on this PCB, using the one from jokcrdep since GFX ROMs match 100%
+ ROM_LOAD( "ic13.bin", 0x0000, 0x0200, BAD_DUMP CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+ROM_END
+
+/*
+ Mongolfier New
+ --------------
+
+ - 1x G65SC02P2 (main)
+ - 1x KC89C72 (sound)
+ - 1x TDA2003 (sound)
+ - 1x MC68B45P (CRT controller)
+ - 2x EF6821P (Peripheral Interface Adapter)
+ - 1x TSC87C52-16CB (PLCC44)(Programmable 8bit Microcontroller, now dumped)
+ - 1x M48Z08-100PC1 (Zero Power RAM - Lithium Battery)
+ - 1x oscillator 16.0000 MHz
+
+ - 3x M27C512
+ - 1x PROM AM27S29PC
+ - 1x PALCE16V8H (read protected)
+
+ - 1x JAMMA edge connector
+ - 1x trimmer (volume)
+ - 2x 8 DIP switches
+ - 1x 4 DIP switches
+ - 1x green led
+
+ ----------------------------------------------
+
+ Needs FF in the NVRAM offset 0x82 to boot...
+*/
+
+ROM_START( mongolnw )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "prgteov.2.3m.u16", 0x8000, 0x8000, CRC(996b851a) SHA1(ef4e3d036ca10b33c83749024d04c4d4c09feeb7) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "cpu1", 0 ) // TSC87C52-16CB MCU Code
+ ROM_LOAD( "tsc87c52-mf.u40", 0x0000, 0x02000 , CRC(ae22e778) SHA1(0897e05967d68d7f23489e98717663e3a3176070) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "mong.rc.b2.u3", 0x0000, 0x8000, CRC(5e019b73) SHA1(63a544dccb9589e5a6b938e604c09d4d8fc060fc) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "mong.rc.c1.u2", 0x8000, 0x8000, CRC(e3fc24c4) SHA1(ea4e67ace63b55a76365f7e11a67c7d420a52dd7) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "mongolnw_nvram.bin", 0x0000, 0x0800, CRC(700531fa) SHA1(a8bcf86df6bd06d2ee54b4898dd7822060b81dba) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc_mf.u24", 0x0000, 0x0200, CRC(da9181af) SHA1(1b30d992f3b2a4b3bd81e3f99632311988e2e8d1) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "palce16v8h_mf.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ Soccer New (italian)
+ --------------------
+
+ - 1x G65SC02P2 (main)
+ - 1x KC89C72 (sound)
+ - 1x TDA2003 (sound)
+ - 1x MC68B45P (CRT controller)
+ - 1x EF68B21P (Peripheral Interface Adapter)
+ - 1x EF6821P (Peripheral Interface Adapter)
+ - 1x TSC87C52-16CB (PLCC44)(Programmable 8bit Microcontroller, now dumped)
+ - 1x M48Z08-100PC1 (Zero Power RAM - Lithium Battery)
+ - 1x oscillator 16.0000MHz
+
+ - 3x M27C512
+ - 1x PROM AM27S29PC
+ - 1x PALCE16V8H (read protected)
+
+ - 1x JAMMA edge connector
+ - 1x trimmer (volume)
+ - 2x 8 DIP switches
+ - 1x 4 DIP switches
+ - 1x green led
+
+ am27s29pc_sn.u24 1ST AND 2ND HALF IDENTICAL
+ prgteo2gv2.3.u16 1ST AND 2ND HALF IDENTICAL
+ soccer1.u2 1ST AND 2ND HALF IDENTICAL
+ soccer2.u3 1ST AND 2ND HALF IDENTICAL
+ tsc87c52-sn.u40 1xxxxxxxxxxxx = 0xFF
+
+ ----------------------------------------------
+
+ Needs FF in the NVRAM offset 0x82 to boot...
+*/
+
+ROM_START( soccernw )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "prgteo2gv2.3.u16", 0x8000, 0x8000, CRC(c61d1937) SHA1(c516f13a108da60b7ccee338b63a025009ef9099) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x10000, "cpu1", 0 ) // TSC87C52-16CB MCU Code
+ ROM_LOAD( "tsc87c52-sn.u40", 0x0000, 0x02000 , CRC(af0bd35b) SHA1(c6613a7bcdec2fd6060d6dcf639654568de87e75) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "soccer2.u3", 0x0000, 0x8000, CRC(db09b5bb) SHA1(a12bf2938f5482ea5ebc0db6fd6594e1beb97017) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "soccer1.u2", 0x8000, 0x8000, CRC(564cc467) SHA1(8f90c4bacd97484623666b25dae77e628908e243) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "soccernw_nvram.bin", 0x0000, 0x0800, CRC(607247bd) SHA1(06bbed08166d8930f14e1f41843ac7faeded263d) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc_sn.u24", 0x0000, 0x0200, CRC(d02894fc) SHA1(adcdc912cc0b7a7f67b122fa94fca921c957b282) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "palce16v8h_sn.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected
+ROM_END
+
+
+/*
+ Saloon (France, encrypted)
+ --------------------------
+
+ - 1x 65SC02 (main)
+ - 1x 8948? (sound)
+ - 1x MC6845P (CRT controller)
+ - 1x oscillator 16.000000 MHz
+
+ - 2x M27C512
+ - 1x M27C256B
+ - 1x PROM N82S147N
+ - 1x GAL16V8-25LNC (read protected)
+ - 1x GAL18CV8-25 (read protected)
+
+ - 1x HY6264ALP-12
+ - 1x UM6116K-3L
+
+ - 1x JAMMA edge connector
+ - 1x trimmer (volume?)
+ - 1x LM380N (amplifier)
+ - 1x ULN2803A (8 Darlington arrays)
+ - 1x battery
+ - 1x test button
+ - 1x indicator LED
+ - NO DIP switches
+
+ Board has printed "LEOPARDO 5"
+*/
+
+ROM_START( saloon )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3s.bin", 0x0000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) )
+ ROM_LOAD( "2s.bin", 0x8000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) )
+
+ ROM_REGION( 0x0100, "i2cmem", 0 )
+ ROM_LOAD( "saloon_i2c.bin", 0x0000, 0x0100, CRC(57e9ce5a) SHA1(3a8420a8ed50faf31a30c01f9438f1df95e5789a) )
+ROM_END
+
+ROM_START( nevadafw )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3s.bin", 0x0000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) )
+ ROM_LOAD( "2s.bin", 0x8000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) )
+
+ ROM_REGION( 0x0100, "i2cmem", 0 )
+ ROM_LOAD( "nevada_i2c.bin", 0x0000, 0x0100, CRC(cdb519db) SHA1(b7781cebee3c8f788a78f8fec9314ae5af513514) )
+ROM_END
+
+/**** Fun World Quiz ****
+
+ Fun World Quiz
+ Oehlinger Ges.m.b.H.
+
+ Horizontal Display
+ Currents
+ +5V 2A
+ +12V 0.5A
+ -5V -
+
+ 4 way joystick.
+ 1 action button.
+
+
+ Pinouts
+ --------------+--+--+--------------
+ GND |A |01| GND
+ GND |B |02| GND
+ GND |C |03| GND
+ +5V |D |04| +5V
+ +12V |E |05| +12V
+ |F |06|
+ |H |07|
+ ... |J |08| ... Empty (*)
+ Credits |K |09| ...
+ ... |L |10| ...
+ ... |M |11| 1P Start
+ ... |N |12| 2P Start
+ 1P Action 1 |P |13| 1P Action 2
+ 2P Action 1 |R |14| 2P Action 2
+ 1P Left |S |15| 1P Right
+ 1P Down |T |16| 1P Up
+ 2P Left |U |17| 2P Right
+ 2P Down |V |18| 2P Up
+ Video Green |W |19| Video Red
+ Video Sync |X |20| Video Blue
+ Speaker |Y |21| Video GND
+ ... |Z |22| Speaker
+
+ Some pinout letters are missing.
+ This was a decision made by engineers
+ to avoid mix-ups.
+
+ (*) Normally used in System Austria pinout.
+
+
+ DIP Switches (simple on/off)
+ --+-----------------------------------------------------------------------
+ 1 | Buchhaltung / Bookkeeping.
+ 2 | Nicht verwendet / Not used.
+ 3 | Ohne Zahlen (Wien) / No numbers (Vienna).
+ 4 | Nicht verwendet / Not used.
+ 5 | Nicht verwendet / Not used.
+ 6 | Richtige Antwort wird angezeigt / Right answer is shown.
+ 7 | Frage wird bei Einsatz angezeigt / Question is shown when bet is made.
+ 8 | Spiel mit Einsatzwahl / Game with betting.
+ --+-----------------------------------------------------------------------
+
+*/
+ROM_START( funquiz ) // Fun World Quiz
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "kqu_6.bin", 0xc000, 0x4000, CRC(50f0e586) SHA1(85ce5b95283113e2ac94fd882c57ce1b26135ed0) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x4000, 0xff)
+ ROM_LOAD( "q_3.bin", 0x4000, 0x4000, CRC(0dafa07a) SHA1(5d6fa842c617f92fad14a597396249d5a4d28c9a) )
+ ROM_FILL( 0x8000, 0x4000, 0xff)
+ ROM_LOAD( "q_2.bin", 0xc000, 0x4000, CRC(ce07c6e1) SHA1(6b77a9198e29c195d983b856e8826e8174945321) )
+
+// One unpopulated questions socket... Maybe sport_1 is missing
+ ROM_REGION( 0x100000, "questions", ROMREGION_ERASEFF )
+
+ // 01 - Allgemein
+ ROM_LOAD( "allg_1.bin", 0x00000, 0x8000, CRC(1351cf56) SHA1(50e89c3e6d256bcf7f1d3c0dbef935e4e8561096) )
+ ROM_LOAD( "allg_2.bin", 0x08000, 0x8000, CRC(021492a4) SHA1(b59e1303f17c9e5af05a808118ae729205690bb2) )
+ ROM_LOAD( "allg_3.bin", 0x10000, 0x8000, CRC(de8e055f) SHA1(593fce143ee5994087bbac8b51ac7e2d02e8701c) )
+ ROM_LOAD( "allg_4.bin", 0x18000, 0x8000, CRC(5c87177a) SHA1(a8a8318165008cb3295e25d4b4d38146f44a32fc) ) // this one has the category in the rom in ALL caps, is it official?
+ ROM_LOAD( "allg_5.bin", 0x20000, 0x8000, CRC(83056686) SHA1(00f14ded371751d54a391bf583d940b32ddeae58) )
+
+ // 02 - Geschichte
+ ROM_LOAD( "gesch_1.bin", 0x28000, 0x8000, CRC(6f785938) SHA1(1e3df7c262d8cb7d7981c9d424d4c1361fe55b50) )
+ ROM_LOAD( "gesch_2.bin", 0x30000, 0x8000, CRC(3363c0ba) SHA1(f1a2a86e6abc73dd9312fa744b6929fae138e219) )
+
+ // 03 - Geographie
+ ROM_LOAD( "geo_1.bin", 0x38000, 0x8000, CRC(504da831) SHA1(4bef7bed4d300400c094cb30e9af55d3c6f47c29) )
+ ROM_LOAD( "geo_2.bin", 0x40000, 0x8000, CRC(7c563119) SHA1(9f3ae3ba3e4f60d9ea4b5c95aa5aaada8bb446a3) )
+ ROM_LOAD( "geo_3.bin", 0x48000, 0x8000, CRC(537ac6d2) SHA1(ed3eff9f7c71a6fe7ec59af2376a0b2ba17cc1c3) )
+
+ // 04 - Technik
+ ROM_LOAD( "tech_1.bin", 0x50000, 0x8000, CRC(cf5b9edc) SHA1(f1085c9915d21c4da581d06c9568d2bb47d467ed) )
+
+ // 05 - Sport
+ ROM_LOAD( "sport_2.bin", 0x58000, 0x8000, CRC(7accde63) SHA1(75ec3a02368d3a07d48ef9a9ff4ca7f8cf7798e2) )
+
+ // 07 - Pop
+ ROM_LOAD( "pop_1.bin", 0x60000, 0x8000, CRC(5c74781e) SHA1(0a50a706fd397bb220e31f1a7adaa4204b242888) )
+ ROM_LOAD( "pop_2.bin", 0x68000, 0x8000, CRC(10103648) SHA1(6fdc1aa4dcc8919e46def1c19adc2b9686c0f72d) )
+
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+ROM_END
+
+/*
+ Fun World Quiz.
+ 12-11-1990
+
+ CPU Brick:
+ - Ricoh RP65C02G
+ - M27128A
+ - logic...
+
+*/
+ROM_START( funquiza )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "a.ic12", 0xc000, 0x4000, CRC(e3b1fa5d) SHA1(3479db70249fd37b6e932d563b41550f910721c8) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "q3.ic7", 0x0000, 0x8000, CRC(7fe77d14) SHA1(0cc7395e1cdabd98206a2caa1cb6a1e165e56434) )
+ ROM_LOAD( "q2.ic6", 0x8000, 0x8000, CRC(bc4f1b8f) SHA1(5af1423d2d1c698141848a6d6864cd2f4a54ca1c) )
+
+ ROM_REGION( 0x100000, "questions", ROMREGION_ERASEFF )
+
+ // 01 - Allgemein
+ ROM_LOAD( "allg1.bin", 0x00000, 0x8000, CRC(1351cf56) SHA1(50e89c3e6d256bcf7f1d3c0dbef935e4e8561096) )
+ ROM_LOAD( "allg2.bin", 0x08000, 0x8000, CRC(021492a4) SHA1(b59e1303f17c9e5af05a808118ae729205690bb2) )
+ ROM_LOAD( "allg3.bin", 0x10000, 0x8000, CRC(4eb29de3) SHA1(5c5d47959c06261ab51fc4e821bff0fe41ac9176) )
+ ROM_LOAD( "allg4.bin", 0x18000, 0x8000, CRC(5c87177a) SHA1(a8a8318165008cb3295e25d4b4d38146f44a32fc) )
+ ROM_LOAD( "allg5.bin", 0x20000, 0x8000, CRC(83056686) SHA1(00f14ded371751d54a391bf583d940b32ddeae58) )
+
+ // 02 - Technik
+ ROM_LOAD( "tech1.bin", 0x28000, 0x8000, CRC(cf5b9edc) SHA1(f1085c9915d21c4da581d06c9568d2bb47d467ed) )
+
+ // 03 - Sport
+ ROM_LOAD( "sp1.bin", 0x30000, 0x8000, CRC(20fb1261) SHA1(ad029f1a2b19365543c77fcd1103f6c5783c9f68) )
+ ROM_LOAD( "sp2.bin", 0x38000, 0x8000, CRC(1988f5b7) SHA1(969ae64796e432c04862cb8c159e419a4793e9f0) )
+
+ // 04 - Film - Unterhaltung
+ ROM_LOAD( "unterh1.bin", 0x40000, 0x8000, CRC(996e7adc) SHA1(7b271cdb6ef555d31c2b17c6104bd30cd2eabcb3) )
+
+ // 05 - Geographie
+ ROM_LOAD( "geo1.bin", 0x48000, 0x8000, CRC(504da831) SHA1(4bef7bed4d300400c094cb30e9af55d3c6f47c29) )
+ ROM_LOAD( "geo2.bin", 0x50000, 0x8000, CRC(7c563119) SHA1(9f3ae3ba3e4f60d9ea4b5c95aa5aaada8bb446a3) )
+ ROM_LOAD( "geo3.bin", 0x58000, 0x8000, CRC(537ac6d2) SHA1(ed3eff9f7c71a6fe7ec59af2376a0b2ba17cc1c3) )
+
+ // 06 - Pop
+ ROM_LOAD( "pop1.bin", 0x60000, 0x8000, CRC(5c74781e) SHA1(0a50a706fd397bb220e31f1a7adaa4204b242888) )
+ ROM_LOAD( "pop2.bin", 0x68000, 0x8000, CRC(10103648) SHA1(6fdc1aa4dcc8919e46def1c19adc2b9686c0f72d) )
+
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "m3-7649-5.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+ROM_END
+
+/*
+ Fun World Quiz.
+ 27-04-1990
+
+*/
+ROM_START( funquizb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "a.bin", 0xc000, 0x4000, CRC(e3b1fa5d) SHA1(3479db70249fd37b6e932d563b41550f910721c8) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x4000, 0xff)
+ ROM_LOAD( "q3.c7", 0x4000, 0x4000, CRC(0dafa07a) SHA1(5d6fa842c617f92fad14a597396249d5a4d28c9a) )
+ ROM_FILL( 0x8000, 0x4000, 0xff)
+ ROM_LOAD( "q2.c6", 0xc000, 0x4000, CRC(ce07c6e1) SHA1(6b77a9198e29c195d983b856e8826e8174945321) )
+
+ ROM_REGION( 0x100000, "questions", ROMREGION_ERASEFF )
+
+ // 01 - Allgemein
+ ROM_LOAD( "allg1.bin", 0x00000, 0x8000, CRC(1351cf56) SHA1(50e89c3e6d256bcf7f1d3c0dbef935e4e8561096) )
+ ROM_LOAD( "allg2.bin", 0x08000, 0x8000, CRC(021492a4) SHA1(b59e1303f17c9e5af05a808118ae729205690bb2) )
+ ROM_LOAD( "allg3.bin", 0x10000, 0x8000, CRC(de8e055f) SHA1(593fce143ee5994087bbac8b51ac7e2d02e8701c) )
+ ROM_LOAD( "allg4.bin", 0x18000, 0x8000, CRC(5c87177a) SHA1(a8a8318165008cb3295e25d4b4d38146f44a32fc) )
+ ROM_LOAD( "allg5.bin", 0x20000, 0x8000, CRC(83056686) SHA1(00f14ded371751d54a391bf583d940b32ddeae58) )
+
+ // 02 - Technik
+ ROM_LOAD( "tech1.bin", 0x28000, 0x8000, CRC(cf5b9edc) SHA1(f1085c9915d21c4da581d06c9568d2bb47d467ed) )
+
+ // 03 - Sport
+ ROM_LOAD( "sport1.bin", 0x30000, 0x8000, CRC(b351c745) SHA1(3b64d8e935eb4cd5bdf82934983b3ffab465257a) )
+ ROM_LOAD( "sport2.bin", 0x38000, 0x8000, CRC(7accde63) SHA1(75ec3a02368d3a07d48ef9a9ff4ca7f8cf7798e2) )
+
+ // 04 - Film - Unterhaltung
+ ROM_LOAD( "unt1.bin", 0x40000, 0x8000, CRC(996e7adc) SHA1(7b271cdb6ef555d31c2b17c6104bd30cd2eabcb3) )
+
+ // 05 - Geographie
+ ROM_LOAD( "geo1.bin", 0x48000, 0x8000, CRC(504da831) SHA1(4bef7bed4d300400c094cb30e9af55d3c6f47c29) )
+ ROM_LOAD( "geo2.bin", 0x50000, 0x8000, CRC(7c563119) SHA1(9f3ae3ba3e4f60d9ea4b5c95aa5aaada8bb446a3) )
+ ROM_LOAD( "geo3.bin", 0x58000, 0x8000, CRC(537ac6d2) SHA1(ed3eff9f7c71a6fe7ec59af2376a0b2ba17cc1c3) )
+
+ // 06 - Pop
+ ROM_LOAD( "pop1.bin", 0x60000, 0x8000, CRC(5c74781e) SHA1(0a50a706fd397bb220e31f1a7adaa4204b242888) )
+ ROM_LOAD( "pop2.bin", 0x68000, 0x8000, CRC(10103648) SHA1(6fdc1aa4dcc8919e46def1c19adc2b9686c0f72d) )
+
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "m3-7649-5.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+ROM_END
+
+
+/*
+ Witch Royal
+ by Video Klein
+
+ Original Video Klein PCB
+ with CPU box.
+
+*/
+ROM_START( witchryl )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "hn58c256.bin", 0x8000, 0x8000, CRC(b89a47b9) SHA1(11fcdd5756f2998748d2f1084b1db459e90126df) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.u11", 0x0000, 0x8000, CRC(7edc8f44) SHA1(cabad613fa8a72dc12587d19a72bc9c6861486bd) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "3.u4", 0x8000, 0x8000, CRC(5e4a0d59) SHA1(08eb9b1a617a7b2e6f87377819dba07082cf38b4) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "witchryl_nvram.bin", 0x0000, 0x0800, CRC(98366bed) SHA1(279a5ce4639b8b2ac29146b32512615253c45991) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "27s29.u26", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+ROM_END
+
+
+/*
+ Admiral Club Card (Novo Play)
+ Novomatic, 1986.
+
+ Hardware Fun World/Impera/TAB...
+ Seems close to Royal Vegas Joker Card.
+
+*/
+
+ROM_START( novoplay ) // Similar to Royal Vegas Joker Card
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "np1_run.bin", 0x8000, 0x8000, CRC(4078d695) SHA1(d0e39064250733968044aec216040fe62fecc880) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "np1_ch2.bin", 0x0000, 0x8000, CRC(188d6fad) SHA1(3bc9bab24d8c7beed0c5f491c19a004ca7d719a1) )
+ ROM_LOAD( "np1_ch1.bin", 0x8000, 0x8000, CRC(fdc3bd67) SHA1(0ec2d5e0b1937849934f98e253e18887af0331e8) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "novoplay_nvram.bin", 0x0000, 0x0800, CRC(92019972) SHA1(e6d1e231cd2ce27e718ed9482dbe9ddc8612eb67) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "np1_27s29.bin", 0x0000, 0x0200, CRC(8992aa4d) SHA1(5a0649bff66e7cab1bcbadcdfc74c77a747cc58f) )
+ROM_END
+
+/*
+ Novo Play Club Card
+ V6.2H
+
+ Novo Play International.
+
+ PCB from Novo Play, rev 1.6 (1992).
+ Similar hardware scheme than Inter Games.
+*/
+ROM_START( novoplaya )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "np_62h.bin", 0x8000, 0x8000, CRC(5b00faf0) SHA1(9144fef9c445f32cb681d7b935ead2032b40fb05) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "np4-ch2_9250.bin", 0x0000, 0x8000, CRC(7223471c) SHA1(785c6af6cf7e06978bc178a5c1c6b21f9db58a88) )
+ ROM_LOAD( "np4-ch1_9250.bin", 0x8000, 0x8000, CRC(c57bac23) SHA1(5b329ece7a0682b8ef5f9a13abb0312f7c885339) )
+
+ ROM_REGION( 0x1000, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "novoplaya_nvram.bin", 0x0000, 0x1000, CRC(d8e47867) SHA1(a05a6ac6d37d919cad57ef4df18e1b28bad5a907) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "n82s147an.bin", 0x0000, 0x0200, CRC(8992aa4d) SHA1(5a0649bff66e7cab1bcbadcdfc74c77a747cc58f) )
+ROM_END
+
+/*
+ Novo Play Club Card
+ V3.3H
+
+ Novo Play International.
+
+ PCB from Novo Play, rev 1.5 (1991).
+ Similar hardware scheme than Inter Games.
+*/
+ROM_START( novoplayb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "np33.bin", 0x8000, 0x8000, CRC(a4c09120) SHA1(faa40920e84dab13a792f73aacf60ad3855d68ea) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "np4-ch2_9250.bin", 0x0000, 0x8000, CRC(7223471c) SHA1(785c6af6cf7e06978bc178a5c1c6b21f9db58a88) )
+ ROM_LOAD( "np4-ch1_9250.bin", 0x8000, 0x8000, CRC(c57bac23) SHA1(5b329ece7a0682b8ef5f9a13abb0312f7c885339) )
+
+ ROM_REGION( 0x0800, "ds1220", 0 ) // Dallas DS1220 to analize.
+ ROM_LOAD( "ds1220.bin", 0x0000, 0x0800, CRC(f6c65329) SHA1(b64ca34661b9690aa9b69a20a7f6683954bbe76a) )
+
+ ROM_REGION( 0x1000, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "novoplayb_nvram.bin", 0x0000, 0x1000, CRC(5dac2bdb) SHA1(1036dc9cd6602c2a8f7183a5f83c5dea56e2a503) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // PLD addresses the 2nd half
+ ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(8992aa4d) SHA1(5a0649bff66e7cab1bcbadcdfc74c77a747cc58f) )
+ROM_END
+
+
+/*
+ Jolly Card (spanish, encrypted)
+ -------------------------------
+
+ Rare unknown board with scratched chips.
+ A daughterboard with a big chip (can barely read 'mexico')
+ Other can barely read '68'
+
+ 3 roms.
+
+ Graphics are encrypted 'alla blue TAB board.
+ Program is encrypted through scrambling data lines.
+
+*/
+
+ROM_START( jolycdsp ) // Encrypted program in a module. Blue TAB PCB encrypted graphics
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ct3.bin", 0x8000, 0x8000, CRC(0c9cbae6) SHA1(4f834370229797cac302a5185ed1e77ef2b7cabb) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "ct2.bin", 0x0000, 0x8000, CRC(7569e719) SHA1(f96e1e72bc13d1888f3868f8d404fd3db94db7b2) )
+ ROM_LOAD( "ct1.bin", 0x8000, 0x8000, CRC(8f438635) SHA1(3200e20f4b28173cc2a68d0f87969627570418dc) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "ctunk_nvram.bin", 0x0000, 0x0800, CRC(c55c6706) SHA1(a38ae926f057fb47e48ca841b2d097fc4fd06416) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // Borrowed from the parent set
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+
+/*
+ Unknown encrypted Royal Card
+ Dino4 hardware with daughterboard (CPU+PLCC)
+
+ 1x Rockwell R65C02P4 CPU (11450-14 Mexico 9802 B54074-2)
+ 1x Unknown sanded 44 pin PLCC
+
+ 2x 68C21
+ 1x 6845
+ 1x YM2149F
+
+ 16 Mhz. xtal
+
+ -----------------
+
+ BP C17C (just after the CRTC init)
+
+ Code checks offset $32F0 for 0xFE, and has two NOPs... Maybe was requested to continue.
+ Same as China Town. WTH is mapped there?
+
+*/
+
+ROM_START( rcdino4 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ryc_1a.u2", 0x0000, 0x10000, CRC(a22704d6) SHA1(0f5721a042d7ec8f4c9a93b38c2a9e3b2d115fc5) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "m27c512.u2", 0x0000, 0x8000, CRC(915f1e59) SHA1(2eb2a7acca50318eb1775b01a00b1d3c74e1522c) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "m27c512.u20", 0x8000, 0x8000, CRC(86e55f5a) SHA1(be71301b6887e8cc5924864d0f97b54e0668875e) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "rcdino4_nvram.bin", 0x0000, 0x0800, CRC(a2dc069e) SHA1(23e296cc0cc0c6f0c34eccffff8c78d2cef2dbae) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(649e6ccc) SHA1(674a5ea3b4b2e7de766e787debef5f695bff7a40) )
+ROM_END
+
+/*
+ China Town
+ Dino 4 encrypted hardware
+
+ BP C17F
+ CFD5...
+ Checks offset $32F0 for 0xFE to continue. Otherwise got in a stuck loop.
+ WTH is mapped there?
+
+*/
+ROM_START( chinatow )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ctw-1b.u2", 0x0000, 0x10000, CRC(2cdeb1b6) SHA1(942a4f77b15b0e69de5414ce63c53f4f1ef6ba78) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "27c512.u2", 0x0000, 0x8000, CRC(6ace221f) SHA1(d35a6621d9d9231a844d7043da78035855ebf572) )
+ ROM_CONTINUE( 0x0000, 0x8000) // Discarding 1nd half 0xff filled
+ ROM_LOAD( "27c512.u20", 0x8000, 0x8000, CRC(efb7f1ec) SHA1(260005526fc9b4087ca03f7cc585e40b6fa007fb) )
+ ROM_CONTINUE( 0x8000, 0x8000) // Discarding 1nd half 0xff filled
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "chinatow_nvram.bin", 0x0000, 0x0800, CRC(eef4c5e7) SHA1(a2d9a9f617d35ccb99236114e5ce3257ad572f49) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(e7e989be) SHA1(309a5cf169ef04c9daea48967f47c80fb29f2fcf) )
+ROM_END
+
+
+/*
+ Joker Card from Inter Games (Austria).
+
+ 1x G65SC02P-2
+ 2x MC68B21P
+ 1x MC68B45P
+ 1x AY38910A/P
+ 3x NMC27C256Q
+ 1x Dallas DS1220Y
+ 1x AM27S29APC
+ 1x LM380N
+ 1x Crystal 16.0000 MHz.
+
+ The hardware has way different architecture.
+
+ Video RAM splitted in two well separated offsets:
+ Video RAM at $2000 and Attr/Color Ram at $5000 mirrored at $7000.
+
+ PIAs at $3200 and $3400.
+ AY8910 at $3000-$3001.
+ CRTC at... $3000-$3001 too!!!.
+
+ There are multiple buffers and compare from some registers,
+ reminding the way some hardwares handle inputs without PIAs.
+
+ Some jumps to hardware errors were patched till we can understand
+ a bit better the hardware behaviour.
+
+ Bipolar PROM has the first half empty, so will black the screen
+ after any attempt of ROM swap.
+
+ A lot of reverse-engineering was needed to get this game working...
+*/
+ROM_START( intrgmes )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bonus-off_5b87d19c.bin", 0x8000, 0x8000, CRC(03a4d1ef) SHA1(375ae1de5e6e4a7a6d6cedfd08902826fa62f93b) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "ig2ch2.bin", 0x0000, 0x8000, CRC(52f0bc70) SHA1(cd9ba34efb438c9610551900c3de2a09aea76cb9) )
+ ROM_LOAD( "ig2ch1.bin", 0x8000, 0x8000, CRC(8fc7d74e) SHA1(bf7ee7ef5c95877fe82fb6e04a5d8ab211fc730c) )
+
+ ROM_REGION( 0x1000, "nvram", 0 ) // Default NVRAM.
+ ROM_LOAD( "intrgmes_nvram.bin", 0x0000, 0x0800, CRC(7ce7c42c) SHA1(da5b2fbecd83ae87616f3c65fc0d6fd05f9fe7c5) )
+ ROM_LOAD( "ds1220y.bin", 0x0800, 0x0800, CRC(7bc4554e) SHA1(c9ad1651e673f8edd0fd354b1098db8f27697d18) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(8992aa4d) SHA1(5a0649bff66e7cab1bcbadcdfc74c77a747cc58f) )
+ROM_END
+
+
+// http://www.citylan.it/wiki/images/6/69/1189_PCB_component_side.jpg
+ROM_START( royalcrd_nes )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "me2.bin", 0x0000, 0x10000, CRC(2144efab) SHA1(47fef8e0d2b05869e667731fdaf535722b9a8f19) ) // this is one (or more?) Royal Card programs, with (c)1991 TAB Austria in them
+
+ ROM_REGION( 0x2000, "pic16c57", 0 )
+ ROM_LOAD( "pic.bin", 0x0000, 0x2000, NO_DUMP )
+
+ ROM_REGION( 0x20000, "gfx1", 0 ) // these are (encrypted?) GFX ROMS
+ ROM_LOAD( "me3.bin", 0x00000, 0x10000, CRC(398a6f7c) SHA1(126048c75ab5df421f9dd2e39c6b68e15bf54f38) )
+ ROM_LOAD( "me4.bin", 0x10000, 0x10000, CRC(6f84222a) SHA1(eee8e46d464211914cb99d15fd9f7dd4aa009664) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "24c04.bin", 0x0000, 0x0200, CRC(e349687c) SHA1(1e6da87ba771baacc7687524158a1db8b789b673) )
+ ROM_REGION( 0x0200, "proms2", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5377c680) SHA1(33857bbbfebfce28b8a68c69e030bf560a701e83) )
+
+ // and this is just an untouched NES multigame..
+ ROM_REGION( 0x0100000, "nes_prg", 0 )
+ ROM_LOAD( "me0.bin", 0x0000, 0x0100000, CRC(83a4e841) SHA1(280e1a26737fe0b90dd19be706df89e09ef84c77) ) // == 64 in 1 [a1][p1].prg nes:mc_64a 64 in 1 (Alt Games)
+ ROM_REGION( 0x80000, "nes_chr", 0 )
+ ROM_LOAD( "me1.bin", 0x0000, 0x80000, CRC(7114b404) SHA1(0f5a206af25725b2e97c404a616e341f15925431) ) // == 64 in 1 [a1][p1].chr nes:mc_64a 64 in 1 (Alt Games)
+ROM_END
+
+ROM_START( royalcrd_nesa ) // same as royalcrd_nes but for different main CPU ROM (mostly some routines appear to have been removed in royalcrd_nes but present here)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "me2.bin", 0x0000, 0x10000, CRC(04b16c53) SHA1(b0fcf8e2049b6065b95990c3a597166a83d7c7e6) ) // SLDH, this is one (or more?) Royal Card programs, with (c)1991 TAB Austria in them
+
+ ROM_REGION( 0x2000, "pic16c55", 0 )
+ ROM_LOAD( "pic.bin", 0x0000, 0x2000, NO_DUMP )
+
+ ROM_REGION( 0x20000, "gfx1", 0 ) // these are (encrypted?) GFX ROMS
+ ROM_LOAD( "me3.bin", 0x00000, 0x10000, CRC(398a6f7c) SHA1(126048c75ab5df421f9dd2e39c6b68e15bf54f38) )
+ ROM_LOAD( "me4.bin", 0x10000, 0x10000, CRC(6f84222a) SHA1(eee8e46d464211914cb99d15fd9f7dd4aa009664) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "24c04.bin", 0x0000, 0x0200, CRC(e349687c) SHA1(1e6da87ba771baacc7687524158a1db8b789b673) )
+ ROM_REGION( 0x0200, "proms2", 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5377c680) SHA1(33857bbbfebfce28b8a68c69e030bf560a701e83) )
+
+ // and this is just an untouched NES multigame..
+ ROM_REGION( 0x0100000, "nes_prg", 0 )
+ ROM_LOAD( "me0.bin", 0x0000, 0x0100000, CRC(83a4e841) SHA1(280e1a26737fe0b90dd19be706df89e09ef84c77) ) // == 64 in 1 [a1][p1].prg nes:mc_64a 64 in 1 (Alt Games)
+ ROM_REGION( 0x80000, "nes_chr", 0 )
+ ROM_LOAD( "me1.bin", 0x0000, 0x80000, CRC(7114b404) SHA1(0f5a206af25725b2e97c404a616e341f15925431) ) // == 64 in 1 [a1][p1].chr nes:mc_64a 64 in 1 (Alt Games)
+ROM_END
+
+// http://www.citylan.it/wiki/images/5/54/1188_PCB_component_side.jpg
+ROM_START( royalcrd_msx )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "me2.bin", 0x0000, 0x20000, CRC(4968fe51) SHA1(ae120f40c97e099c3f65b802c51838673958e87e) ) // this is one (or more?) Royal Card programs, with (c)1991 TAB Austria in them (2nd half is empty)
+
+ ROM_REGION( 0x20000, "gfx1", 0 ) // these are (encrypted?) GFX ROMS
+ ROM_LOAD( "me3.bin", 0x00000, 0x10000, CRC(398a6f7c) SHA1(126048c75ab5df421f9dd2e39c6b68e15bf54f38) )
+ ROM_LOAD( "me4.bin", 0x10000, 0x10000, CRC(b536d59c) SHA1(8050f87c3352d7501611c49e83e34e800f28c9a7) ) // BADADDR xxxxxx-xxxxxxxxx , should probably just match above set
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "24c04.bin", 0x0000, 0x0200, CRC(2a1e8abe) SHA1(639a704f25af02597ead2e69d15ac47953c27f09) )
+
+ // some kind of MSX multigame?
+ ROM_REGION( 0x0100000, "msx_prg", 0 )
+ ROM_LOAD( "me0.bin", 0x0000, 0x10000, CRC(bd5be18b) SHA1(b43a176db0522bcda0a17dd0c210c987dc380c97) ) // weird pattern? might be bad if not a lookup table? BADADDR -------xxxxxxxxx
+ ROM_LOAD( "me1.bin", 0x0000, 0x40000, CRC(2152c6b7) SHA1(e512e29f4a899cc3f91a446141fd4432a487228f) )
+ROM_END
+
+
+/*
+ Unknown Funworld A7-11 game
+
+ CPU epoxy brick marked "Funworld A7-11", with:
+ 1x RP65C02A
+ 2x Toshiba TC5565PL1-12
+ 1x Toshiba TMM24128AP
+ 1x PAL16L8B-2CN
+ 3x TTL's...
+
+ PCB components:
+
+ 2x Hitachi HD68B21P
+ 1x Hitachi HD46505SP-2
+ 1x GI AY-3-8910A
+
+ 1x Toshiba TC5565APL-10
+ 1x Hitachi HD6116LP-3
+ 2x Toshiba TMM27256AD-20
+ 1x Harris M3-7649A-5 Bipolar PROM.
+
+ 1x Xtal 16.000 MHz.
+ 1x 3.6V lithium battery.
+ 1x 8 DIP switches bank.
+
+*/
+ROM_START( fw_a7_11 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "tmm24128ap.bin", 0xc000, 0x4000, CRC(67ac1337) SHA1(896bd30d4b061f08b8eeeb36aaceb7859f342eaf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "e-3.bin", 0x0000, 0x8000, CRC(d34f0e63) SHA1(5984248331ec632b665f60ad553b74916630d4d3) )
+ ROM_LOAD( "e-2.bin", 0x8000, 0x8000, CRC(16aebfb3) SHA1(3a2c587b2c31341a83ec9e0f9dd188d4bb63e764) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "m3-7649a-5.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+
+ ROM_REGION( 0x0200, "plds", 0 )
+ ROM_LOAD( "pal16l8b-2cn_block.bin", 0x0000, 0x0117, NO_DUMP )
+ROM_END
+
+ROM_START( fw_a7_11a )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "tmm24128ap.bin", 0xc000, 0x4000, CRC(28126b0f) SHA1(e2baa643c1858cd3ea53abf801fc9ab1a1e3ff9b) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(d34f0e63) SHA1(5984248331ec632b665f60ad553b74916630d4d3) )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(16aebfb3) SHA1(3a2c587b2c31341a83ec9e0f9dd188d4bb63e764) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "m3-7649a-5.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+
+ ROM_REGION( 0x0200, "plds", 0 ) // cracked PLD
+ ROM_LOAD( "pal16l8acn_block.bin", 0x0000, 0x0117, CRC(fcda7872) SHA1(60acdb968e6229a8f71c2e29d22e132906a65bd5) )
+ROM_END
+
+/*
+ Unknown Funworld A0-1 game
+ CPU epoxy brick marked "Funworld A0-1".
+*/
+ROM_START( fw_a0_1 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "d27128.bin", 0xc000, 0x4000, CRC(67ac1337) SHA1(896bd30d4b061f08b8eeeb36aaceb7859f342eaf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "10.bin", 0x0000, 0x8000, CRC(d34f0e63) SHA1(5984248331ec632b665f60ad553b74916630d4d3) )
+ ROM_LOAD( "9.bin", 0x8000, 0x8000, CRC(16aebfb3) SHA1(3a2c587b2c31341a83ec9e0f9dd188d4bb63e764) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147n.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+ROM_END
+
+/*
+ Joker Card / Multi Card
+ Funworld.
+
+ This game is running in a derivative hardware with epoxy CPU brick.
+ CPU is a 65C02, with two 5565 RAMs and one 27128 ROM.
+ Also there are present some PLD and logic. (see above).
+
+ The main program is inside the battery backed RAM, and need to be dumped.
+ These RAMs are connected to the mainboard battery, so once the Brick is unplugged,
+ the battery stops to feed the RAM and the program just vanish.
+
+ From factory, they used the central connector to plug a module with the game program,
+ and then the code inside the ROM check for offset $4000 onward if the module is
+ present through some sort of checksum. If the module is present, the code will
+ copy the range 4000-7fff (the game program inside the external module) to the
+ 8000-bfff location, where is the battery backed RAM inside the brick.
+
+ We need to find a new working board and reverse the central connector, to construct
+ some interface that allows us to dump the content of the internal battery backed RAM.
+
+ For debug purposes, we plugged an external game code from another similar game, that
+ matches all calls from the original ROM code. We suspect is the same code with different
+ language (English instead German). With this external code the game is completely playable.
+
+ ----
+
+ CPU epoxy brick marked "76AF".
+
+ Epoxy Brick contents:
+
+ - CPU: 1x Ricoh RP65C02A.
+ - RAM: 2x Toshiba TC5565APL-10.
+ - ROM: 1x Intel D27128A.
+ - PLD: 1x PAL16L8B.
+
+ - LOGIC: 1x HD74HC241P.
+ 1x M74LS245P.
+ 1x SN74LS139N.
+
+*/
+ROM_START( jokcrdep )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "e-1.bin", 0xc000, 0x4000, CRC(67ac1337) SHA1(896bd30d4b061f08b8eeeb36aaceb7859f342eaf) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "200_zg_2.bin", 0x0000, 0x8000, CRC(ba994fc3) SHA1(95d2a802c38d7249f10eb2bbe46edfb9b14b6faa) )
+ ROM_LOAD( "200_zg_1.bin", 0x8000, 0x8000, CRC(367db105) SHA1(400b82dc9e0be4c17a02add009aab3c43dd901f8) )
+
+ ROM_REGION( 0x0800, "nvram", 0 )
+ ROM_LOAD( "joker_nvram.bin", 0x0000, 0x0800, CRC(92019972) SHA1(E6D1E231CD2CE27E718ED9482DBE9DDC8612EB67) ) // Default NVRAM.
+
+ ROM_REGION( 0x4000, "nvram1", 0 )
+ ROM_LOAD( "e-0.bin", 0x0000, 0x4000, BAD_DUMP CRC(8FD42F3B) SHA1(208209761DE046189070B88AD4340C8D7FF55F1F) ) // Internal suicide program. Taken from Novo Play.
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "sn82s147n.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) )
+ROM_END
+
+
+/*
+ Gratis Poker
+ Stmk
+ Version: 004
+ 29. Sept. 95
+
+*/
+ROM_START( gratispk ) // Gratis Poker (V.204, Set 1)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "gratis_poker_club_ver_204.bin", 0x8000, 0x8000, CRC(e53da78e) SHA1(6b87af4d66082f1a18e9e00a41df2484f5373cc7) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(daec20c7) SHA1(340bdb7749a7d898e96db5a470821cfe7216ea57) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(112c5f33) SHA1(fffaa247a97f9bde7374cc80ab0bb9fb71bcc4b6) )
+ ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "gratispk_nvram.bin", 0x0000, 0x0800, CRC(8fcad62f) SHA1(85def713ed5b9bbdbf0d077a38f779d6f4329a1c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "tbp28s42n.bin", 0x0000, 0x0200, CRC(e92f74e0) SHA1(dfc4a9d140d21b990f769c10802c4d2c33dd4132) )
+ROM_END
+
+ROM_START( gratispka ) // Gratis Poker (V.204, Set 2)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "35g_ver_204.bin", 0x8000, 0x8000, CRC(e53da78e) SHA1(6b87af4d66082f1a18e9e00a41df2484f5373cc7) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(4f077fa3) SHA1(d65005b7111b77ac7c3707bd12bc376506d9477b) )
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(0f3711b0) SHA1(ce874dbfc2d7171cff2be41d4a44fe8194526ef7) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "gratispk_nvram.bin", 0x0000, 0x0800, CRC(8fcad62f) SHA1(85def713ed5b9bbdbf0d077a38f779d6f4329a1c) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "tbp28s42n.bin", 0x0000, 0x0200, CRC(e92f74e0) SHA1(dfc4a9d140d21b990f769c10802c4d2c33dd4132) )
+ROM_END
+
+
+/*
+ Γκούλιτ
+ Nkoúlit
+ Gullit
+
+ Greek hack of Royal Card.
+
+*/
+ROM_START( nkoulit )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c256-3.bin", 0x8000, 0x8000, CRC(3f4f671d) SHA1(0aa87f813567f7a537315bf3d452343e5a449e13) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "27c256-2.bin", 0x0000, 0x8000, CRC(4a9ea5ad) SHA1(50504544265646e12ce769a1fd40d7afeae8b8d3) )
+ ROM_LOAD( "27c256-1.bin", 0x8000, 0x8000, CRC(7b3a6d1a) SHA1(b7f2e534ad4467cd0a9d86019be8110caf45c024) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "nkoulit_nvram.bin", 0x0000, 0x0800, CRC(73584f67) SHA1(4aab0d4fe846592e1cbc8b3c2411ddc1bf79fd95) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "am27s29pc.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+ROM_END
+
+
+/*
+ Reflex Cards (English)
+ Need special NVRAM to boot.
+
+ Without the factory NVRAM, you can generate one.
+ The attract works, and allow coin up. When you start a game,
+ a serial number entering screen appears. You must to match
+ the secret number to continue:
+
+ Serial: 00000000
+ Key: FFFFFFFF
+
+ The real serial number isn't shown. Just zeroes as mask.
+ You must to enter digit by digit using the HOLD buttons,
+ then turn the machine off, and on. (you can reset in MAME).
+
+ If you entered the correct number, the game continues,
+ otherwise you'll be stuck forever.
+
+ The code and NVRAM were reversed to find the serial number
+ and key offsets and the way they are stored, to construct
+ a working default NVRAM.
+
+*/
+ROM_START( reflexcrd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "bonus_2_27c256-1.bin", 0x8000, 0x8000, CRC(8fbcf0b9) SHA1(3a45c09fbec3e4ecce24ac2562a68b453755886f) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "27c256-2.bin", 0x0000, 0x8000, CRC(05fe86fc) SHA1(a58ab5d107936f7d462f8f748bb6ac27bd77429b) )
+ ROM_LOAD( "27c256-3.bin", 0x8000, 0x8000, CRC(1617ed13) SHA1(312065406ce1d1d7c4ad566e2b13268f7eb524bb) )
+
+ ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM
+ ROM_LOAD( "reflexcrd_nvram.bin", 0x0000, 0x0800, CRC(c2c69e5b) SHA1(e4abbf09abc044ba17e542cc8e1cfa16ee7cf776) )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "bipolar_prom.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+ROM_END
+
+
+/**************************
+* Driver Initialization *
+**************************/
+
+void funworld_state::init_tabblue()
+{
+/****************************************************************************************************
+
+ +-------------------------+
+ | Blue TAB PCB Decryption |
+ +-------------------------+
+
+ It performs by byte nibble a boolean XOR against the same value shifted to the right, then shift
+ the result to the left, carring the less significant bit and losing the most significant one.
+
+
+ Encrypted nibble: 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ Bits: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
+ -------------------------------------------------------------------------------------------------
+ Bits: 0000 0011 0110 0101 1100 1111 1010 1001 1000 1011 1110 1101 0100 0111 0010 0001
+ Decrypted nibble: 0 3 6 5 C F A 9 8 B E D 4 7 2 1
+
+
+*****************************************************************************************************/
+
+ int x, na, nb, nad, nbd;
+ uint8_t *src = memregion( "gfx1" )->base();
+
+
+ for (x=0x0000; x < 0x10000; x++)
+ {
+ na = src[x] & 0xf0; // nibble A
+ nb = src[x] << 4; // nibble B
+
+ nad = (na ^ (na >> 1)) << 1; // nibble A decrypted
+ nbd = ((nb ^ (nb >> 1)) >> 3) & 0x0f; // nibble B decrypted
+
+ src[x] = nad + nbd; // decrypted byte
+ }
+}
+
+
+void magicrd2_state::init_magicd2b()
+{
+ /*****************************************************************
+
+ For a serie of Mexican Rockwell's 65c02
+ seems that opcode 0x91 is STA ($zp) instead of STA ($zp),y
+ ...or is patched with the correct opcode (0x92) by PLDs...
+
+ In offset $C1C4, the code is trying to initialize both PIAs
+ putting value 0x34 in $0800-$0803 & $0A00-$0A03.
+
+ The code use STA ($zp),y (opcode 0x91). As soon as register 'y'
+ increments, almost all writes go out of range.
+
+ ******************************************************************/
+ uint8_t *ROM = memregion("maincpu")->base();
+
+ ROM[0xc1c6] = 0x92;
+}
+
+
+void magicrd2_state::init_magicd2c()
+{
+// *** same as blue TAB PCB, with the magicd2a patch ***
+ int x, na, nb, nad, nbd;
+ uint8_t *src = memregion( "gfx1" )->base();
+ uint8_t *ROM = memregion("maincpu")->base();
+
+ for (x=0x0000; x < 0x10000; x++)
+ {
+ na = src[x] & 0xf0; // nibble A
+ nb = src[x] << 4; // nibble B
+
+ nad = (na ^ (na >> 1)) << 1; // nibble A decrypted
+ nbd = ((nb ^ (nb >> 1)) >> 3) & 0x0f; // nibble B decrypted
+
+ src[x] = nad + nbd; // decrypted byte
+ }
+
+ ROM[0xc1c6] = 0x92;
+}
+
+
+void funworld_state::init_mongolnw()
+{
+// temporary patch to avoid hardware errors for debug purposes
+ uint8_t *ROM = memregion("maincpu")->base();
+
+ ROM[0x9115] = 0xa5;
+
+// prevents one test from triggering hardware error
+ ROM[0xb8f3] = 0xff;
+}
+
+
+void funworld_state::init_soccernw()
+{
+// temporary patch to avoid hardware errors for debug purposes
+ uint8_t *ROM = memregion("maincpu")->base();
+
+ ROM[0x80b2] = 0xa9;
+ ROM[0x80b3] = 0x00;
+ ROM[0x9115] = 0xa5;
+
+// prevents one test from triggering hardware error
+ ROM[0xb8f3] = 0xff;
+}
+
+
+void funworld_state::init_saloon()
+/*************************************************
+
+ LEOPARDO 5 Hardware
+ -------------------
+
+ Special thanks to Andreas Naive, that
+ figured out the address encryption.
+
+ Program:
+ Low 8 bits of address are scrambled.
+ Also the values have bits 0 & 2 bitswapped.
+
+ GFX:
+ Low 11 bits of address are scrambled.
+
+ Color:
+ Data has bits 2-3-5-6-7 scrambled.
+ Address has the 8 lower bits scrambled.
+
+*************************************************/
+{
+ uint8_t *rom = memregion("maincpu")->base();
+ int size = memregion("maincpu")->bytes();
+ int start = 0x8000;
+
+ uint8_t *gfxrom = memregion("gfx1")->base();
+ int sizeg = memregion("gfx1")->bytes();
+
+ uint8_t *prom = memregion("proms")->base();
+ int sizep = memregion("proms")->bytes();
+
+ popmessage(" Please: Start with <2> and <Z> buttons pressed to run system properly");
+
+
+ /*****************************
+ * Program ROM decryption *
+ *****************************/
+
+ // data lines swap: 76543210 -> 76543012
+
+ for (int i = start; i < size; i++)
+ {
+ rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 0, 1, 2);
+ }
+
+ {
+ std::vector<uint8_t> buffer(size);
+ memcpy(&buffer[0], rom, size);
+
+ // address lines swap: fedcba9876543210 -> fedcba9820134567
+
+ for (int i = start; i < size; i++)
+ {
+ int a = ((i & 0xff00) | bitswap<8>(i & 0xff, 2, 0, 1, 3, 4, 5, 6, 7));
+ rom[a] = buffer[i];
+ }
+
+ }
+
+
+ /******************************
+ * Graphics ROM decryption *
+ ******************************/
+
+ {
+ std::vector<uint8_t> buffer(sizeg);
+ memcpy(&buffer[0], gfxrom, sizeg);
+
+ // address lines swap: fedcba9876543210 -> fedcb67584a39012
+
+ for (int i = 0; i < sizeg; i++)
+ {
+ int a = bitswap<16>(i, 15, 14, 13, 12, 11, 6, 7, 5, 8, 4, 10, 3, 9, 0, 1, 2);
+ gfxrom[a] = buffer[i];
+ }
+ }
+
+
+ /****************************
+ * Color PROM decryption *
+ ****************************/
+
+ // data lines swap: 76543210 -> 23546710
+
+ {
+ std::vector<uint8_t> buffer;
+ for (int i = 0; i < sizep; i++)
+ {
+ buffer.push_back(bitswap<8>(prom[i], 2, 3, 5, 4, 6, 7, 1, 0));
+ }
+
+ // address lines swap: fedcba9876543210 -> fedcba9487652013
+ for (int i = 0; i < sizep; i++)
+ {
+ int a = bitswap<16>(i, 15, 14, 13, 12, 11, 10, 9, 4, 8, 7, 6, 5, 2, 0, 1, 3);
+ prom[a] = buffer[i];
+ }
+ }
+
+ m_palette->update();
+
+
+ // inversion for i2c clock generation in i2c_rx routine
+ rom[0xbf23] = 0x60; // ex 70h
+ rom[0xbf2a] = 0x70; // ex 60h
+}
+
+
+void funworld_state::init_dino4()
+/*****************************************************
+
+ DINO 4 hardware.
+
+ Program ROM data & address lines are swapped,
+ hardcoded in the board.
+
+ GFX ROMs address lines are also swapped, but they
+ are connected to 2 PLDs that handle the encryption.
+
+ Color PROM is straight.
+
+ All PLD's are read protected.
+
+******************************************************/
+{
+ uint8_t *rom = memregion("maincpu")->base();
+ int size = memregion("maincpu")->bytes();
+ int start = 0x8000;
+
+ uint8_t *gfxrom = memregion("gfx1")->base();
+ int sizeg = memregion("gfx1")->bytes();
+
+ /*****************************
+ * Program ROM decryption *
+ *****************************/
+
+ // data lines swap: 76543210 -> 76543120
+
+ for (int i = start; i < size; i++)
+ {
+ rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0);
+ }
+
+ {
+ std::vector<uint8_t> buffer(size);
+ memcpy(&buffer[0], rom, size);
+
+ // address lines swap: fedcba9876543210 -> fedcba9867543210
+ for (int i = start; i < size; i++)
+ {
+ int a = bitswap<16>(i, 15, 13, 14, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
+ rom[a] = buffer[i];
+ }
+ }
+
+
+ /******************************
+ * Graphics ROM decryption *
+ ******************************/
+
+ {
+ std::vector<uint8_t> buffer(sizeg);
+ memcpy(&buffer[0], gfxrom, sizeg);
+
+ // address lines swap: fedcba9876543210 -> fedcb67584a39012
+
+ for (int i = 0; i < sizeg; i++)
+ {
+ int a = bitswap<16>(i, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0);
+ gfxrom[a] = buffer[i];
+ }
+ }
+}
+
+
+void funworld_state::init_ctunk()
+/*********************************************************
+
+ CTUNK: Rare board with blue TAB board encryption scheme
+ plus a daughterboard for program encryption.
+
+*********************************************************/
+{
+ uint8_t *rom = memregion("maincpu")->base();
+ int size = memregion("maincpu")->bytes();
+ int start = 0x8000;
+
+ /*****************************
+ * Program ROM decryption *
+ *****************************/
+
+ // data lines swap: 76543210 -> 56734012
+
+ for (int i = start; i < size; i++)
+ {
+ rom[i] = bitswap<8>(rom[i], 5, 6, 7, 3, 4, 0, 1, 2);
+ }
+
+ //buffer = std::make_unique<uint8_t[]>(size);
+ //memcpy(buffer, rom, size);
+
+
+ /*****************************
+ * Graphics ROMs decryption *
+ *****************************/
+
+ uint8_t *src = memregion( "gfx1" )->base();
+ //uint8_t *ROM = memregion("maincpu")->base();
+ for (int x = 0x0000; x < 0x10000; x++)
+ {
+ int na = src[x] & 0xf0; // nibble A
+ int nb = src[x] << 4; // nibble B
+
+ int nad = (na ^ (na >> 1)) << 1; // nibble A decrypted
+ int nbd = ((nb ^ (nb >> 1)) >> 3) & 0x0f; // nibble B decrypted
+
+ src[x] = nad + nbd; // decrypted byte
+ }
+}
+
+
+static void decrypt_rcdino4(uint8_t *rom, int size, uint8_t *gfxrom, int sizeg, uint8_t *src)
+{
+ /*****************************
+ * Program ROM decryption *
+ *****************************/
+
+ // data lines swap: 76543210 -> 76543120
+ {
+ std::vector<uint8_t> buffer;
+ for (int i = 0; i < size; i++)
+ {
+ buffer.push_back(bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0));
+ }
+
+ // address lines swap: fedcba9876543210 -> fedcba9867543210
+
+ for (int i = 0; i < size; i++)
+ {
+ int a = bitswap<16>(i, 15, 13, 14, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
+ rom[a] = buffer[i];
+ }
+ }
+
+ /******************************
+ * Graphics ROM decryption *
+ ******************************/
+
+ {
+ std::vector<uint8_t> buffer(sizeg);
+ memcpy(&buffer[0], gfxrom, sizeg);
+
+ // address lines swap: fedcba9876543210 -> fedcb67584a39012
+
+ for (int i = 0; i < sizeg; i++)
+ {
+ int a = bitswap<16>(i, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0);
+ gfxrom[a] = buffer[i];
+ }
+ }
+
+ // d4-d5 data lines swap, plus a XOR with 0x81, implemented in two steps for an easy view
+
+ for (int x = 0x0000; x < 0x10000; x++)
+ {
+ src[x] = bitswap<8>(src[x], 7, 6, 4, 5, 3, 2, 1, 0);
+ src[x] = src[x] ^ 0x81;
+ }
+}
+
+
+
+static uint8_t rcdino4_add[] =
+{
+// 0 1 2 3 4 5 6 7 8 9 a b c d e f
+/*0*/ 1, 9, 9, 9, 9, 2, 9, 9, 1, 2, 1, 9, 9, 3, 9, 9,
+/*1*/ 2, 2, 9, 9, 9, 9, 9, 9, 1, 9, 1, 9, 9, 9, 9, 9,
+/*2*/ 3, 9, 9, 9, 9, 2, 2, 9, 1, 2, 1, 9, 9, 3, 3, 9,
+/*3*/ 2, 9, 9, 9, 9, 9, 9, 9, 1, 9, 1, 9, 9, 3, 9, 9,
+/*4*/ 1, 9, 9, 9, 9, 2, 9, 9, 1, 2, 1, 9, 3, 3, 9, 9,
+/*5*/ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9,
+/*6*/ 1, 9, 9, 9, 2, 2, 9, 9, 1, 2, 1, 9, 3, 3, 3, 9,
+/*7*/ 9, 2, 9, 9, 9, 9, 9, 9, 9, 3, 1, 9, 9, 3, 9, 9,
+/*8*/ 2, 9, 9, 9, 2, 2, 2, 9, 1, 9, 1, 9, 9, 3, 3, 9,
+/*9*/ 2, 2, 9, 9, 9, 2, 9, 9, 1, 3, 9, 9, 3, 3, 3, 9,
+/*a*/ 2, 9, 2, 9, 2, 2, 2, 9, 1, 2, 1, 9, 9, 3, 3, 2,
+/*b*/ 2, 2, 9, 9, 9, 2, 9, 9, 9, 3, 9, 9, 9, 3, 9, 9,
+/*c*/ 2, 9, 9, 9, 2, 2, 2, 9, 1, 2, 1, 9, 3, 3, 3, 9,
+/*d*/ 2, 9, 9, 9, 9, 9, 9, 9, 1, 9, 1, 9, 9, 3, 9, 9,
+/*e*/ 2, 9, 9, 9, 2, 9, 2, 9, 1, 2, 1, 9, 3, 9, 3, 9,
+/*f*/ 2, 9, 9, 9, 9, 2, 9, 9, 1, 3, 1, 9, 9, 3, 9, 9
+};
+
+static uint8_t rcdino4_keys40[] =
+{
+// 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d
+ 0x36, 0x54, 0x47, 0x6b, 0xce, 0x95, 0xa2, 0x66, 0x3a, 0x46, 0x53, 0xd7, 0xc4, 0xa4,
+// 4e 4f
+ 0x00, 0x00,
+// 50
+ 0x56
+};
+
+static uint8_t rcdino4_keys80[] =
+{
+// 81 82 83 84 85
+ 0xb8, 0x32, 0x1c, 0x23, 0xe2,
+// 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+// 92 93 94 95 96 97
+ 0x4c, 0x00, 0x3d, 0x00, 0xd9, 0x16,
+// 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+// a4 a5 a6
+ 0x5e, 0x73, 0x69,
+// a7 a8 a9
+ 0x00, 0x00, 0x00,
+// aa
+ 0xa6,
+// ab ac ad ae af
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+// b0 b1
+ 0xc3, 0x40,
+// b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+// c3 c4 c5
+ 0x92, 0xb7, 0x24,
+// c6 c7 c8 c9
+ 0x00, 0x00, 0x00, 0x00,
+// ca
+ 0x62,
+// cb cc cd ce cf
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+// d0
+ 0x84,
+// d1
+ 0x00,
+// d2
+ 0xaa,
+// d3 d4 d5
+ 0x00, 0x00, 0x00,
+// d6
+ 0xea,
+// d7 d8 d9 da db dc dd de df
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+// e0
+ 0x17,
+// e1 e2 e3
+ 0x00, 0x00, 0x00,
+// e4
+ 0xc0,
+// e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+// f8 f9 fa fb fc fd fe
+ 0x06, 0x1e, 0x28, 0x5a, 0xcf, 0x79, 0x11
+};
+
+void chinatow_state::init_rcdino4()
+{
+ /*****************************************************
+
+ Dino4 hardware with CPU+PLCC daughterboard
+
+ Program ROM data & address lines are swapped.
+ GFX ROMs address lines are swapped and data encrypted.
+
+ Color PROM seems straight.
+
+ ******************************************************/
+ uint8_t *rom = memregion("maincpu")->base();
+
+ decrypt_rcdino4(rom, memregion("maincpu")->bytes(), memregion("gfx1")->base(), memregion("gfx1")->bytes(), memregion( "gfx1" )->base());
+
+ int j = 0;
+ for (int i = 0x40; i < (0x40 + std::size(rcdino4_keys40));)
+ {
+ uint8_t key = rcdino4_keys40[i - 0x40];
+
+ do
+ {
+ uint8_t c = rom[(i << 8) + j] ^ key;
+ int add = rcdino4_add[c];
+
+ if (add == 9)
+ {
+ ++j;
+ }
+ else
+ {
+ rom[(i << 8) + j] = c;
+ j += add;
+ }
+ }
+
+ while (j < 0x100);
+
+ j &= 0xff;
+ ++i;
+ }
+
+ j = 1;
+ int i = 0x81;
+
+ do
+ {
+ uint8_t key = rcdino4_keys80[i - 0x81];
+
+ do
+ {
+ uint8_t c = rom[(i << 8) + j] ^ key;
+ int add = rcdino4_add[c];
+
+ if (((i == 0x81)
+ && (j >= 0xa3) && (j <= 0xb1) // text string
+ )
+ || ((i == 0x82)
+ && (j >= 0x35) && (j <= 0x53) // table of addresses
+ )
+ || ((i == 0x85)
+ && (j >= 0x7e) && (j <= 0x8d) // '0'-'9', 'A'-'F'
+ )
+ || ((i == 0x94)
+ && (((j >= 0x4a) && (j <= 0x86)) // zeroes
+ || ((j >= 0xbf) && (j <= 0xc1)) // set of masks */
+ )
+ )
+ || ((i == 0x96)
+ && (j >= 0x39) && (j <= 0x3e) // set of masks
+ )
+ || ((i == 0xa6)
+ && (j >= 0x30) && (j <= 0x32) // set of masks
+ )
+ || ((i == 0xaa)
+ && (j >= 0xf2) // table of addresses
+ )
+ || ((i == 0xc3)
+ && (j >= 0x70) && (j <= 0xaf) // set of masks
+ )
+ || ((i == 0xc4)
+ && (j >= 0xdc) // zeroes and things
+ )
+ || ((i == 0xd0)
+ && (j >= 0xd2) // text and zeroes
+ )
+ || ((i == 0xd2)
+ && ((j <= 0x2f) // text and zeroes
+ || ((j >= 0x84) && (j <= 0xaf)) // text and zeroes
+ )
+ )
+ || (add == 9)
+ )
+ {
+ ++j;
+ }
+ else
+ {
+ rom[(i << 8) + j] = c;
+ j += add;
+ }
+ }
+ while (j < 0x100);
+
+ j &= 0xff;
+
+ do {} while (((++i - 0x81) < std::size(rcdino4_keys80))
+ && !rcdino4_keys80[i - 0x81]);
+
+ if ((i - 0x81) == std::size(rcdino4_keys80))
+ {
+ break;
+ }
+
+ if ((i == 0xa4)
+ || (i == 0xb0)
+ || (i == 0xf8)
+ )
+ {
+ j = 0; // re-align offset after skipping some pages
+ }
+ }
+ while (1);
+}
+
+void chinatow_state::init_rcdinch()
+{
+ /*****************************************************
+
+ Dino4 hardware with CPU+PLCC daughterboard
+
+ Less encryption than rc4dino
+
+ ******************************************************/
+ decrypt_rcdino4(memregion("maincpu")->base(), memregion("maincpu")->bytes(), memregion("gfx1")->base(), memregion("gfx1")->bytes(), memregion( "gfx1" )->base());
+}
+
+
+void funworld_state::init_jolycdig()
+{
+ // covering two values in ROM space checked for hardware errors.
+ // maybe some virtual or physically mapped there.
+
+ uint8_t *rom = memregion("maincpu")->base();
+
+ rom[0xe825] = 0xff; // checks for #$45, ascii E.
+ rom[0xe826] = 0xff; // checks for #$56, ascii V.
+}
+
+void intergames_state::init_novop_a()
+{
+ // NOP'ing some values in ROM space to avoid the hardware error.
+
+ uint8_t *rom = memregion("maincpu")->base();
+
+ rom[0xb25e] = 0xfc;
+ rom[0xadd0] = 0x40;
+}
+
+void intergames_state::init_novop_b()
+{
+ // NOP'ing some values in ROM space to avoid the hardware error.
+
+ uint8_t *rom = memregion("maincpu")->base();
+
+ rom[0xb2bf] = 0xfc;
+ rom[0xae31] = 0x40;
+}
+
+void intergames_state::init_intgms()
+{
+ // NOP'ing some values in ROM space to avoid the hardware error.
+
+ uint8_t *rom = memregion("maincpu")->base();
+
+ rom[0xadc6] = 0xea;
+
+ rom[0xadd2] = 0xea;
+ rom[0xadd3] = 0xea;
+
+ rom[0xade6] = 0xea;
+ rom[0xade7] = 0xea;
+
+ rom[0xadf8] = 0xea;
+ rom[0xadf9] = 0xea;
+
+ rom[0xae16] = 0xea;
+ rom[0xae17] = 0xea;
+
+ rom[0xaead] = 0xea;
+ rom[0xaeae] = 0xea;
+ rom[0xaeaf] = 0xea;
+
+// verify checksum against values stored at 07F2-07F3.
+// rom[0xaf69] = 0xea;
+// rom[0xaf6a] = 0xea;
+// rom[0xaf6b] = 0xea;
+}
+
+
+void funworld_state::init_impera16()
+/*****************************************************
+
+ Routines to deinterleave the Impera GFX stored
+ in 16 bit EPROMS, on 8 bit systems.
+
+ Regular GFX ROMs for this system, are interleaved
+ in a big 27C210 ROM.
+
+******************************************************/
+{
+ uint8_t *gfx16rom = memregion("gfxpool")->base();
+ int size = memregion("gfxpool")->bytes();
+
+ uint8_t *gfx8rom = memregion("gfx1")->base();
+ int sizeg = memregion("gfx1")->bytes();
+
+ /*****************************
+ * Deinterleaving GFX *
+ *****************************/
+
+ int j = 0;
+
+ for (int i = 0; i < size; i += 2)
+ {
+ gfx8rom[j] = gfx16rom[i];
+ gfx8rom[j + (sizeg / 2)] = gfx16rom[i + 1];
+ j++;
+ }
+}
+
+
+/**********************************************
+* Game Drivers *
+**********************************************/
+
+// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT
+
+// Jolly Card based...
+GAMEL( 1985, jollycrd, 0, fw1stpal, funworld, funworld_state, empty_init, ROT0, "TAB Austria", "Jolly Card (German, set 1)", 0, layout_jollycrd )
+GAMEL( 1985, jollycrda, jollycrd, fw1stpal, funworld, funworld_state, empty_init, ROT0, "TAB Austria", "Jolly Card (German, set 2)", 0, layout_jollycrd )
+GAMEL( 1985, jolyc3x3, jollycrd, fw1stpal, funworld, funworld_state, empty_init, ROT0, "TAB Austria", "Jolly Card (3x3 deal)", 0, layout_jollycrd )
+GAMEL( 1993, jolycmzs, jollycrd, cuoreuno, jolyc980, funworld_state, empty_init, ROT0, "MZS Tech", "Jolly Card Professional 2.0 (MZS Tech)", 0, layout_jollycrd )
+GAMEL( 2000, jolyc980, jollycrd, cuoreuno, jolyc980, funworld_state, empty_init, ROT0, "Spale Soft", "Jolly Card Professional 2.0 (Spale Soft)", 0, layout_jollycrd )
+GAMEL( 1998, jolycdev, jollycrd, fw1stpal, funworld, funworld_state, empty_init, ROT0, "TAB Austria / Evona Electronic", "Jolly Card (Evona Electronic)", 0, layout_jollycrd )
+GAMEL( 1985, jolyccra, jollycrd, cuoreuno, jolycdcr, funworld_state, empty_init, ROT0, "TAB Austria", "Jolly Card (Croatian, set 1)", 0, layout_jollycrd )
+GAMEL( 1993, jolyccrb, jollycrd, cuoreuno, jolycdcr, funworld_state, empty_init, ROT0, "Soft Design", "Jolly Card (Croatian, set 2)", 0, layout_jollycrd )
+GAMEL( 1985, sjcd2kx3, jollycrd, fw1stpal, funworld, funworld_state, empty_init, ROT0, "M.P.", "Super Joly 2000 - 3x", 0, layout_jollycrd )
+GAMEL( 1986, jolycdab, jollycrd, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Inter Games", "Jolly Card (German, Fun World, bootleg)", 0, layout_jollycrd )
+GAMEL( 1992, jolycdsp, jollycrd, cuoreuno, jolycdit, funworld_state, init_ctunk, ROT0, "TAB Austria", "Jolly Card (Spanish, blue TAB board, encrypted)", 0, layout_royalcrd )
+GAMEL( 1990, jolycdid, jollycrd, cuoreuno, jolycdcr, funworld_state, empty_init, ROT0, "bootleg", "Jolly Card (Italian, different colors, set 1)", 0, layout_jollycrd ) // italian, CPLD, different colors.
+GAMEL( 1990, jolycdie, jollycrd, cuoreuno, jolycdib, funworld_state, empty_init, ROT0, "bootleg", "Jolly Card (Italian, different colors, set 2)", 0, layout_jollycrd ) // not from TAB blue PCB.
+GAMEL( 1990, jolycdif, jollycrd, cuoreuno, jolycdib, funworld_state, empty_init, ROT0, "bootleg", "Jolly Card (Italian, bootleg, set 1)", 0, layout_jollycrd ) // italian, CPLD. doesn't need nvram init.
+GAMEL( 1993, jolycdig, jollycrd, cuoreuno, jolycdib, funworld_state, init_jolycdig, ROT0, "bootleg", "Jolly Card (Italian, bootleg, set 2)", 0, layout_jollycrd ) // italian, CPLD. needs nvram.
+GAMEL( 1990, jolycdih, jollycrd, cuoreuno, jolycdib, funworld_state, empty_init, ROT0, "bootleg", "Jolly Card (Italian, bootleg, set 3)", 0, layout_jollycrd )
+GAMEL( 1993, jolygame, jollycrd, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "bootleg", "Jolly Game (V1, Otti Karl logo)", 0, layout_jollycrd )
+
+// Bonus Card based...
+GAMEL( 1986, bonuscrd, 0, fw2ndpal, bonuscrd, funworld_state, empty_init, ROT0, "Fun World", "Bonus Card (German)", MACHINE_IMPERFECT_COLORS, layout_bonuscrd ) // use fw1stpal machine for green background
+GAMEL( 1986, bonuscrda, bonuscrd, fw2ndpal, bonuscrd, funworld_state, empty_init, ROT0, "Fun World", "Bonus Card (German, ATG Electronic hack)", MACHINE_IMPERFECT_COLORS, layout_bonuscrd ) // use fw1stpal machine for green background
+GAMEL( 1986, bigdeal, bonuscrd, fw2ndpal, bigdeal, funworld_state, empty_init, ROT0, "Fun World", "Big Deal (Hungarian, set 1)", MACHINE_IMPERFECT_COLORS, layout_bonuscrd )
+GAMEL( 1986, bigdealb, bonuscrd, fw2ndpal, bigdeal, funworld_state, empty_init, ROT0, "Fun World", "Big Deal (Hungarian, set 2)", MACHINE_IMPERFECT_COLORS, layout_bonuscrd )
+
+// CMC Italian jamma PCB's...
+GAMEL( 1996, cuoreuno, 0, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Cuore 1 (Italian, set 1)", 0, layout_jollycrd )
+GAMEL( 1996, cuoreunoa, cuoreuno, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Cuore 1 (Italian, set 2)", 0, layout_jollycrd )
+GAMEL( 1996, cuoreunob, cuoreuno, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Cuore 1 (Italian, set 3)", 0, layout_jollycrd )
+GAMEL( 1996, cuoreunoc, cuoreuno, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Cuore 1 (Italian, set 4)", 0, layout_jollycrd )
+GAMEL( 1996, cuoreunod, cuoreuno, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Cuore 1 (Italian, set 5)", 0, layout_jollycrd )
+GAMEL( 1996, cuoreunoe, cuoreuno, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Cuore 1 (Italian, set 6)", 0, layout_jollycrd )
+GAMEL( 1996, cuoreunof, cuoreuno, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "bootleg", "Cuore 1 (Italian, set 7)", 0, layout_jollycrd )
+GAMEL( 1997, elephfam, 0, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Elephant Family (Italian, new)", 0, layout_jollycrd )
+GAMEL( 1996, elephfmb, elephfam, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Elephant Family (Italian, old)", 0, layout_jollycrd )
+GAMEL( 1996, pool10, 0, cuoreuno, pool10, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 1)", 0, layout_jollycrd )
+GAMEL( 1996, pool10b, pool10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 2)", 0, layout_jollycrd )
+GAMEL( 1996, pool10c, pool10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 3)", 0, layout_jollycrd )
+GAMEL( 1997, pool10d, pool10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 4)", 0, layout_jollycrd )
+GAMEL( 1997, pool10f, pool10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 5)", 0, layout_jollycrd )
+GAMEL( 1996, pool10g, pool10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 6)", 0, layout_jollycrd )
+GAMEL( 1996, pool10h, pool10, cuoreuno, pool10, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 7)", 0, layout_jollycrd )
+GAMEL( 1997, pool10i, pool10, cuoreuno, pool10, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 8)", 0, layout_jollycrd )
+GAMEL( 1996, pool10j, pool10, cuoreuno, pool10, funworld_state, empty_init, ROT0, "bootleg (R.B.)", "Pool 10 (Italian, set 9)", 0, layout_jollycrd )
+GAMEL( 1997, pool10k, pool10, cuoreuno, pool10, funworld_state, empty_init, ROT0, "C.M.C.", "Pool 10 (Italian, set 10)", 0, layout_jollycrd )
+GAMEL( 1997, mag10, pool10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "bootleg (Magic)", "Magic 10 Nevada (bootleg of Pool 10)", 0, layout_jollycrd )
+GAMEL( 1998, biliard, pool10, cuoreuno, pool10, funworld_state, empty_init, ROT0, "bootleg", "New Biliard 98 (Pool 10 hack)", 0, layout_jollycrd )
+GAMEL( 2001, royal, pool10, royalcd1, royal, funworld_state, empty_init, ROT0, "<unknown>", "Royal (Pool 10 hack)", 0, layout_jollycrd )
+GAMEL( 1997, tortufam, 0, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Tortuga Family (Italian)", 0, layout_jollycrd )
+GAMEL( 1996, potgame, 0, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Pot Game (Italian)", 0, layout_jollycrd )
+GAMEL( 1996, bottle10, 0, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Bottle 10 (Italian, set 1)", 0, layout_jollycrd )
+GAMEL( 1996, bottl10b, bottle10, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "C.M.C.", "Bottle 10 (Italian, set 2)", 0, layout_jollycrd )
+GAMEL( 1998, lunapark, 0, lunapark, lunapark, lunapark_state, empty_init, ROT0, "<unknown>", "Luna Park (set 1, dual program)", 0, layout_jollycrd ) // mirrored video RAM (4000/5000 to 6000/7000).
+GAMEL( 1998, lunaparkb, lunapark, lunapark, lunapark, lunapark_state, empty_init, ROT0, "<unknown>", "Luna Park (set 2, dual program)", 0, layout_jollycrd ) // mirrored video RAM (4000/5000 to 6000/7000).
+GAMEL( 1998, lunaparkc, lunapark, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "<unknown>", "Luna Park (set 3)", 0, layout_jollycrd ) // regular video RAM 6000/7000.
+GAMEL( 1998, crystal, 0, cuoreuno, cuoreuno, funworld_state, empty_init, ROT0, "J.C.D. srl", "Crystal Colours (CMC hardware)", 0, layout_jollycrd )
+
+// Royal Card based...
+GAMEL( 1991, royalcrd, 0, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German, set 1)", 0, layout_jollycrd )
+GAMEL( 1991, royalcrda, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German, set 2)", 0, layout_jollycrd )
+GAMEL( 1991, royalcrdb, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German/Polish, set 3)", 0, layout_jollycrd )
+GAMEL( 1991, royalcrdc, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German, set 4)", 0, layout_jollycrd )
+GAMEL( 1991, royalcrdd, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German, set 5)", 0, layout_royalcrd )
+GAMEL( 1991, royalcrde, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German, set 6)", 0, layout_jollycrd )
+GAMEL( 1991, royalcrdt, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (TAB original)", 0, layout_jollycrd )
+GAMEL( 1990, royalcrdg, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (German, set 7, CMC C1030 HW)", 0, layout_jollycrd ) // big CPLD
+GAMEL( 1991, royalcrdh, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (German, set 8)", 0, layout_jollycrd )
+GAMEL( 1991, royalcdfr, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Royal Card (French)", 0, layout_jollycrd )
+GAME( 1993, royalcrdp, royalcrd, cuoreuno, royalcrd, funworld_state, empty_init, ROT0, "Digital Dreams", "Royal Card v2.0 Professional", 0 )
+GAMEL( 199?, royaljp, royalcrd, royalcd1, royaljp, funworld_state, init_tabblue, ROT0, "TAB / Video Klein", "Royal Card / Royal Jackpot (with a third draw)(encrypted)", 0, layout_jollycrd )
+GAMEL( 199?, witchryl, 0, witchryl, witchryl, funworld_state, empty_init, ROT0, "Video Klein", "Witch Royal (Export version 2.1)", 0, layout_jollycrd )
+
+// Lucky Lady based...
+GAMEL( 1991, lluck3x3, royalcrd, cuoreuno, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Lucky Lady (3x3 deal)", 0, layout_jollycrd )
+GAMEL( 1991, lluck4x1, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Lucky Lady (4x1 aces)", 0, layout_jollycrd )
+
+// Magic Card 2 based...
+GAMEL( 1996, magicrd2, 0, magicrd2, magicrd2, magicrd2_state, empty_init, ROT0, "Impera", "Magic Card II (Bulgarian)", 0, layout_jollycrd )
+GAMEL( 1996, magicrd2a, magicrd2, magicrd2, magicrd2, magicrd2_state, empty_init, ROT0, "Impera", "Magic Card II (Nov, Yugoslavian)", 0, layout_jollycrd )
+GAME( 1996, magicrd2b, magicrd2, magicrd2, magicrd2, magicrd2_state, init_magicd2b, ROT0, "Impera", "Magic Card II (green TAB or Impera board)", 0 )
+GAME( 1996, magicrd2c, magicrd2, magicrd2, magicrd2, magicrd2_state, init_magicd2c, ROT0, "Impera", "Magic Card II (blue TAB board, encrypted)", 0 )
+
+// Joker Card based...
+GAMEL( 1993, vegasslw, 0, fw2ndpal, vegasslw, funworld_state, empty_init, ROT0, "Fun World", "Royal Vegas Joker Card (slow deal)", 0, layout_jollycrd )
+GAMEL( 1993, vegasfst, vegasslw, fw2ndpal, vegasfst, funworld_state, empty_init, ROT0, "Soft Design", "Royal Vegas Joker Card (fast deal)", 0, layout_jollycrd )
+GAMEL( 1993, vegasfte, vegasslw, fw2ndpal, vegasfte, funworld_state, empty_init, ROT0, "Soft Design", "Royal Vegas Joker Card (fast deal, English gfx)", 0, layout_jollycrd )
+GAMEL( 1993, vegasmil, vegasslw, fw2ndpal, vegasmil, funworld_state, empty_init, ROT0, "Mile", "Royal Vegas Joker Card (fast deal, Mile)", 0, layout_jollycrd )
+
+// Jolly Joker based...
+GAMEL( 199?, jolyjokr, 0, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Impera", "Jolly Joker (98bet, set 1)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokra, jolyjokr, fw1stpal, jolyjokra, funworld_state, empty_init, ROT0, "Impera", "Jolly Joker (98bet, set 2)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrb1, jolyjokr, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Impera", "Jolly Joker (40bet, higher paytable)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrb2, jolyjokr, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Impera", "Jolly Joker (40bet, lower paytable)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrc, jolyjokr, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Apple Time", "Jolly Joker (Apple Time)", MACHINE_NOT_WORKING, layout_jollycrd ) // bad program ROM...
+GAMEL( 199?, jolyjokro, jolyjokr, fw2ndpal, funworld, funworld_state, init_impera16, ROT0, "Impera", "Jolly Joker (original program, interleaved GFX, Impera logo)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrp, jolyjokr, fw2ndpal, funworld, funworld_state, init_impera16, ROT0, "Impera", "Jolly Joker (original program, interleaved GFX, no logo)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrs, jolyjokr, fw2ndpal, funworld, funworld_state, init_impera16, ROT0, "Impera", "Jolly Joker (original program, interleaved GFX, Otti Karl logo, set 1)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrt, jolyjokr, fw2ndpal, funworld, funworld_state, init_impera16, ROT0, "Impera", "Jolly Joker (original program, interleaved GFX, Otti Karl logo, set 2)", 0, layout_jollycrd )
+GAMEL( 199?, jolyjokrm, jolyjokr, fw1stpal, funworld, funworld_state, empty_init, ROT0, "Impera", "Jolly Joker (Solid State module in suicide board)", 0, layout_jollycrd )
+
+// Encrypted games...
+GAME( 1992, multiwin, 0, multiwin, funworld, multiwin_state, driver_init, ROT0, "Fun World", "Multi Win (Ver.0167, encrypted)", 0 ) // original funworld, encrypted.
+GAME( 1991, multiwina, multiwin, multiwina,funworld, multiwina_state,empty_init, ROT0, "Fun World", "Multi Win (Ver.0091, encrypted)", MACHINE_IMPERFECT_GRAPHICS ) // different encryption scheme, different tilemap / screen parameters
+GAME( 2001, multiwinb, multiwin, fw2ndpal, funworld, funworld_state, empty_init, ROT0, "Amatic", "Multi Win (EPM7032, encrypted)", MACHINE_NOT_WORKING ) // daughterboard with R65C02 + Altera EPM7032.
+GAME( 1993, powercrd, 0, multiwina,funworld, multiwina_state,empty_init, ROT0, "Fun World", "Power Card (Ver 0263, encrypted)", 0 ) // clone of Bonus Card.
+GAME( 1993, megacard, 0, multiwina,funworld, multiwina_state,empty_init, ROT0, "Fun World", "Mega Card (Ver.0210, encrypted)", 0 )
+GAME( 1993, megacarda, megacard, multiwina,funworld, multiwina_state,empty_init, ROT0, "Fun World", "Mega Card (Ver.0053, encrypted)", 0 )
+GAME( 1993, jokercrdf, 0, multiwina,funworld, multiwina_state,empty_init, ROT0, "Fun World", "Joker Card (encrypted)", 0 )
+GAME( 1993, jokercrd, 0, jokercrd, funworld, jokercrd_state, empty_init, ROT0, "Amatic Trading", "Joker Card 300 (Ver.A267BC, encrypted)", 0 )
+GAME( 1991, royalcrdf, royalcrd, royalcrdf,royalcrdf, royalcrdf_state,driver_init, ROT0, "Evona Electronic", "Royal Card (Evona, Polish, encrypted)", 0 )
+GAME( 198?, saloon, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Saloon (French, encrypted)", 0 )
+GAME( 198?, nevadafw, 0, saloon, saloon, funworld_state, init_saloon, ROT0, "<unknown>", "Nevada (French, encrypted)", 0 )
+
+// Encrypted TAB blue PCB...
+GAMEL( 199?, jolycdit, jollycrd, cuoreuno, jolycdit, funworld_state, init_tabblue, ROT0, "bootleg", "Jolly Card (Italian, blue TAB board, encrypted)", 0, layout_royalcrd )
+GAMEL( 1990, jolycdib, jollycrd, cuoreuno, jolycdib, funworld_state, init_tabblue, ROT0, "bootleg", "Jolly Card (Italian, encrypted bootleg, set 1)", 0, layout_jollycrd ) // not a real TAB blue PCB
+GAMEL( 1993, jolycdic, jollycrd, cuoreuno, jolycdic, funworld_state, init_tabblue, ROT0, "bootleg", "Jolly Card (Italian, encrypted bootleg, set 2)", 0, layout_jollycrd ) // not a real TAB blue PCB
+GAMEL( 1993, jolycdii, jollycrd, cuoreuno, jolycdib, funworld_state, init_tabblue, ROT0, "bootleg (Cleco)", "Jolly Card (Italian, encrypted bootleg, set 3)", 0, layout_jollycrd ) // Cleco bootleg PCB
+GAMEL( 1993, jolycdcy, jollycrd, cuoreuno, jolycdcy, funworld_state, init_tabblue, ROT0, "bootleg (Cleco)", "Zabavni Karti (Bulgarian, cyrillic, encrypted)", 0, layout_jollycrd ) // Cleco bootleg PCB
+
+// Dino 4 encrypted hardware...
+GAMEL( 1997, pool10e, pool10, cuoreuno, cuoreuno, funworld_state, init_dino4, ROT0, "C.M.C.", "Pool 10 (Italian, Dino 4 hardware, encrypted)", 0, layout_jollycrd )
+GAME( 1998, rcdino4, 0, rcdino4, rcdino4, chinatow_state, init_rcdino4, ROT0, "<unknown>", "Royal Card (Italian, Dino 4 hardware, encrypted)",0 )
+GAMEL( 1998, chinatow, 0, chinatow, chinatow, chinatow_state, init_rcdinch, ROT0, "<unknown>", "China Town (Ver 1B, Dino4 HW)", 0, layout_jollycrd )
+
+// MCU based games...
+GAME( 199?, mongolnw, 0, royalcd1, royalcrd, funworld_state, init_mongolnw, ROT0, "<unknown>", "Mongolfier New (Italian)", MACHINE_UNEMULATED_PROTECTION )
+GAME( 199?, soccernw, 0, royalcd1, royalcrd, funworld_state, init_soccernw, ROT0, "<unknown>", "Soccer New (Italian)", MACHINE_UNEMULATED_PROTECTION )
+
+// Quiz games...
+GAME( 199?, funquiz, 0, funquiz, funquiz, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (German)", 0 )
+GAME( 1990, funquiza, 0, funquiz, funquiza, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (German, 12-11-1990)", 0 )
+GAME( 1990, funquizb, 0, funquiz, funquiza, funworld_state, empty_init, ROT0, "Fun World", "Fun World Quiz (German, 27-04-1990)", 0 )
+
+// Other games...
+GAMEL( 1986, novoplay, 0, fw2ndpal, novoplay, funworld_state, empty_init, ROT0, "Admiral / Novomatic", "Novo Play Multi Card / Club Card", 0, layout_novoplay )
+GAMEL( 1992, novoplaya, novoplay, intrgmes, novop_ab, intergames_state, init_novop_a, ROT0, "Novo Play International", "Novo Play Club Card (V6.2H)", 0, layout_novoplay )
+GAMEL( 1991, novoplayb, novoplay, intrgmes, novop_ab, intergames_state, init_novop_b, ROT0, "Novo Play International", "Novo Play Club Card (V3.3H)", 0, layout_novoplay )
+GAME( 1991, intrgmes, 0, intrgmes, intrgmes, intergames_state, init_intgms, ROT0, "Inter Games", "Joker Card (Inter Games)", 0 )
+GAMEL( 1985, fw_a7_11, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 1", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1985, fw_a7_11a, fw_a7_11, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A7-11 game 2", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1991, fw_a0_1, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "unknown Fun World A0-1 game", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1991, jokcrdep, 0, fw_brick_2, fw_brick1, funworld_state, empty_init, ROT0, "Fun World", "Joker Card / Multi Card (Epoxy brick CPU)", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 199?, gratispk, 0, gratispk, funworld, funworld_state, empty_init, ROT0, "Mega Soft", "Gratis Poker (V.204, set 1)", 0, layout_jollycrd )
+GAMEL( 199?, gratispka, gratispk, gratispk, funworld, funworld_state, empty_init, ROT0, "Mega Soft", "Gratis Poker (V.204, set 2)", 0, layout_jollycrd )
+GAMEL( 1995, nkoulit, royalcrd, royalcd1, royalcrd, funworld_state, init_tabblue, ROT0, "JK Amusement", "Gkoulit (encrypted GFX)", 0, layout_jollycrd )
+GAMEL( 1999, reflexcrd, royalcrd, royalcd1, royalcrd, funworld_state, empty_init, ROT0, "TAB Austria", "Reflex Cards (English, serial protected)", 0, layout_jollycrd )
+GAMEL( 199?, clubcard, 0, clubcard, clubcard, funworld_state, empty_init, ROT0, "Impera / Mega Tech", "Club Card (ver. 1.1 English)", MACHINE_IMPERFECT_COLORS, layout_jollycrd ) // use fw1stpal machine for green background
+
+// These are 2-in-1 stealth boards, they can run the Poker game, or, using completely separate hardware on the same PCB, a NES / MSX Multigames!
+GAMEL( 1991, royalcrd_nes, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with NES multigame, set 1)", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1991, royalcrd_nesa, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with NES multigame, set 2)", MACHINE_NOT_WORKING, layout_jollycrd )
+GAMEL( 1991, royalcrd_msx, royalcrd, royalcd2, royalcrd, funworld_state, empty_init, ROT0, "bootleg", "Royal Card (stealth with MSX multigame)", MACHINE_NOT_WORKING, layout_jollycrd )