summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/funworld.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/funworld.c')
-rw-r--r--src/mame/drivers/funworld.c2031
1 files changed, 2031 insertions, 0 deletions
diff --git a/src/mame/drivers/funworld.c b/src/mame/drivers/funworld.c
new file mode 100644
index 00000000000..50fdd13fa87
--- /dev/null
+++ b/src/mame/drivers/funworld.c
@@ -0,0 +1,2031 @@
+/**********************************************************************************
+
+
+ FUNWORLD.
+
+
+ Original preliminary driver: Curt Coder, Peter Trauner.
+ Rewrite and aditional work: Roberto Fresca.
+
+
+ Games running in this hardware:
+
+ * Jolly Card (Austria), TAB-Austria, 1985.
+ * Jolly Card (Austria, encrypted), TAB-Austria, 1985.
+ * Jolly Card (Croatia), Soft Design, 1993.
+ * Jolly Card (Italia, encrypted), bootleg, 199?.
+ * Jolly Card (Austria, Fun World, bootleg), Inter Games, 1995.
+ * Big Deal (Hungary, set 1), Fun World, 1990.
+ * Big Deal (Hungary, set 2), Fun World, 1990.
+ * Jolly Card (Austria, Fun World), Fun World, 1990.
+ * Cuore 1 (Italia), C.M.C., 1996.
+ * Elephant Family (Italia, new), C.M.C., 1997.
+ * Elephant Family (Italia, old), C.M.C., 1996.
+ * Pool 10 (Italia, set 1), C.M.C., 1996.
+ * Pool 10 (Italia, set 2), C.M.C., 1996.
+ * Tortuga Family (Italia), C.M.C., 1997.
+ * Royal Card (Austria, set 1), TAB-Austria, 1991.
+ * Royal Card (Austria, set 2), TAB-Austria, 1991.
+ * Royal Card (Slovakia, encrypted), Evona Electronic, 1991.
+ * Magic Card II (Bulgaria, bootleg), Impera, 1996.
+ * Joker Card (Ver.A267BC, encrypted), Vesely Svet, 1993.
+ * Mongolfier New (Italia), bootleg, 199?.
+ * Soccer New (Italia), bootleg, 199?.
+ * Snooker 10 (Ver 1.11), Sandiy, 1998.
+ * Saloon (France, encrypted), unknown, 199?.
+
+
+***********************************************************************************
+
+
+ The hardware is generally composed by:
+
+ CPU: 1x 65SC02 or 65C02 at 2MHz.
+ Sound: 1x AY3-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 RRRBBBGG 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 16colors).
+ It means the hardware was designed for more elaborated graphics than Jolly Card games...
+ Color PROMs from current games are 512 bytes lenght, but they only use the first 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 two Fun World boards have custom encrypted CPUs:
+
+ - Joker Card from Vesely Svet use a custom unknown CPU and use encrypted prg roms.
+ - Royal Card (Slovakia, 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:
+
+ - Jolly Card (Italia, encrypted GFXs) use substitution for each byte nibble. See DRIVER_INIT for the algorythm.
+ - Jolly Card (Austria, encrypted) use simple XOR with a fixed value.
+
+ - Microcontroller. Some games are using an extra microcontroller mainly for protection.
+
+
+
+ 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
+
+ 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.
+
+
+ - Jolly Card (Austria, Fun World, bootleg)
+
+ This one seems to have normal RAM instead of NVRAM.
+ Going through the code, there's not any NVRAM initialization routine through service 1 & 2.
+
+
+ - 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.
+
+
+ - Snooker 10
+
+ This game is running in a complete different hardware.
+ 2x MACH231-15, an AD-65 (equivalent to OKI6295), no AY-8910, no NVRAM, no PIAs, no CRTC,
+ different memory map, and an unknown DIP40 IC, that could be an extra CPU or MCU.
+ Tiles are flipped in X-axis respect to the normal funworld games, so need it's own GFX decode.
+ Also palette is stored in a normal 27C256 ROM, repeated 64 times.
+
+ This game should be moved to a new driver in a near future, as soon as we know a bit more
+ about it 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.
+
+
+
+***********************************************************************************
+
+
+ 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.
+ $0E00 - $0E00 CRTC6845 (A) // MC6845 adressing.
+ $0E01 - $0E01 CRTC6845 (R/W) // MC6845 Read/Write.
+
+ $2000 - $2FFF VideoRAM (funworld/bigdeal)
+ $3000 - $3FFF ColorRAM (funworld/bigdeal)
+
+ $4000 - $4FFF VideoRAM (magiccrd/royalcrd)
+ $5000 - $5FFF ColorRAM (magiccrd/royalcrd)
+
+ $6000 - $6FFF VideoRAM (cuoreuno/elephfam)
+ $7000 - $7FFF ColorRAM (cuoreuno/elephfam)
+
+ $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.
+ magiccrd: 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.
+
+
+***********************************************************************************
+
+
+ *** Hardware Info ***
+
+
+ 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
+
+ ---------------------------------------------------
+
+
+ Jolly Card (Austria, Fun World, bootleg)
+ ----------------------------------------
+
+ - 1x G65SC02P (CPU)
+ - 1x MC68B45P (CRTC)
+ - 1x AY3-8910 (sound)
+ - 2x MC6821P (PIAs)
+
+ RAM: - 1x 6116
+ - 1x KM6264AL-10
+
+ - 1x Crystal : 16.000 MHz
+
+
+ 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
+
+
+ Jolly Card (Italia)
+ -------------------
+
+ - 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
+ - 1x 8 DIP switches
+ - 1x 22x2 edge connector
+ - 1x 18x2 edge connector
+ - 1x trimmer (volume)(missing)
+
+
+ Big Deal (Hungary)
+ ------------------
+
+ - 1x MC6845P
+ - 1x YM2149F
+ - 2x MC6821P
+ - 1x Crystal 16.000 MHz
+
+
+ Magic Card II (Bulgaria, bootleg)
+ ---------------------------------
+
+ - 1x Special CPU with CM602 (??) on it
+ - 1x MC6845P
+ - 1x YM2149F
+ - 2x MC6821P
+ - 1x Crystal 16.000 MHz
+
+
+ Cuore Uno (Italia)
+ ------------------
+
+ - 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
+
+
+ Elephant Family (Italia, 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
+
+
+ Pool 10 (Italia)
+ ----------------
+
+ - 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
+
+
+ Tortuga Family (Italia)
+ -----------------------
+
+ - 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
+
+
+ Royal Card (set 1)
+ ------------------
+
+ - 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)
+
+
+ Royal Card (set 2)
+ ------------------
+
+ - 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)
+
+
+ Royal Card (set 3, 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"
+
+
+ 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
+
+
+ Soccer New (Italia)
+ -------------------
+
+ - 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
+
+
+ Snooker 10 (Ver 1.11)
+ ---------------------
+
+ - 1x Unknown DIP40 (main)
+ - 1x AD-65 (equivalent to OKI6295)
+ - 1x LM358N (sound)
+ - 1x TDA2003 (sound)
+ - 2x MACH231-15-JC/1-18JI/1
+ - 1x oscillator 16.00MHz
+
+ - 2x TMS27C256 (1,2)
+ - 2x M27C256 (3,5)
+ - 1x M27C2001 (4)
+
+ - 1x JAMMA edge connector
+ - 1x 15 legs connector
+ - 1x trimmer (volume)
+ - 1x 8 DIP switches
+ - 1x battery
+
+
+ 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"
+
+
+
+***********************************************************************************
+
+
+ *** Driver updates by Roberto Fresca ***
+
+
+ 2005/09/08
+ - Added Cuore Uno, Elephant Family and Royal Card.
+
+ 2005/09/19
+ - Added some clones.
+ - Cleaned up and renamed all sets. Made parent-clone relationship.
+
+ 2005/12/15
+ - Corrected CPU freq (2 MHz) in cuoreuno and elephfam (both have R65c02P2).
+ (I suspect more games must have their CPU running at 2 MHz).
+ - Corrected videoram and colorram offset in cuoreuno and elephfam.
+ - To initialize the NVRAM in cuoreuno and elephfam:
+ Start game, press and hold Service1 & Service2, press reset (F3),
+ release Service1 & Service2 and press reset (F3) again.
+
+ 2006/10/18
+ - Corrected the screen size and visible area to cuoreuno and elephfam based on mc6845 registers.
+ - Added all inputs to cuoreuno and elephfam.
+ - Added test mode DIP switch to cuoreuno and elephfam.
+ - Managed cuoreuno and elephfam inputs to pass the initial checks. Now both games are playable.
+ - Changed the cuoreuno full name to "Cuore 1" (as shown in the attract).
+
+ 2006/10/22-28
+ - Corrected cuoreuno and elephfam graphics to 4bpp.
+ - Fixed elephfam gfx planes.
+ - Simulated cuoreuno palette based on screenshots.
+ - Simulated elephfam palette based on screenshots.
+
+
+ 2006/11/01 to 2006/12/04
+
+ ******** REWRITE ********
+
+ - Merged/splitted some machine drivers, memory maps and inputs.
+ - Unified get_bg_tile_info for all games.
+ - Mapped the input buttons in a better format (all games). Keys: 156-QW-ZXCVBNM.
+ - Added proper color PROM decode routines.
+ - Rewrote the technical notes.
+ - Splitted the driver to driver/video.
+
+ - Corrected the screen size and visible area to magiccrd based on mc6845 registers.
+ - Added the remaining 2 GFX planes to magiccrd, but GFX are imperfect (bad decode or bad dump?). Color PROM need to be dumped.
+ - Royalcrd: Added all inputs and DIP switches.
+ Fixed memory map, gfx decode
+ Corrected screen size and visible area based on mc6845 registers.
+ Corrected CPU clock to 2mhz.
+
+ - New game added: Joker Poker. Not working due to use of custom encrypted CPU.
+ - New game added: Royal Card (Slovakia, encrypted). Not working due to use of a custom encrypted CPU.
+ - Fixed jolycdcr gfx to 4bpp.
+ - Other fixes to get jolycdcr running.
+ - Managed royalcdb to work, using the 2nd half of program ROM. (seems to be mapped that way)
+ - Managed jolycdit to work, but with imperfect graphics due to gfx encryption.
+ - Fixed CPU clock to 2MHz. in all remaining games.
+ - Fixed ay8910 frequency based on elephfam audio.
+ - Fixed ay8910 volume in all games to avoid clipping.
+ - Reworked jolycdcr inputs: The game was designed to work only with remote credits. After nvram init, set the payout dip to "manual".
+ - Reworked jolycdit inputs: After nvram init, set the payout dip to "manual" to allow work the remote mode.
+ - Set jolycdat as bigdeal clone. The game has the same layout/behaviour instead of the normal jolly card games, even when are sharing gfx roms.
+ - Added the bipolar PROM and GAL to jolycdit. Confirmed the GFX ROMs as good dumps.
+ - Added an alternate set of Elephant Family. This one lacks of test mode and doesn't allow to switch between min-max bets through stop1.
+ - Added color PROMs to cuoreuno and elephfam sets but still no routed. Also added PLDs (protected, bad dumps).
+ - Corrected jollycrd screen size and visible area based on mc6845 registers.
+ - Hooked, wired and decoded the color prom in jollycrd sets based on jolycdit redump. Now colors are perfect.
+ - Wired and decoded the color prom in cuoreuno and elephfam sets. Now colors are perfect.
+ - Wired and decoded the color prom in royalcrd. Now colors are perfect.
+ - Hooked, wired and decoded the color prom in bigdeal sets based on jolycdat (jollycrd palette).
+ Colors seems to be correct, but need to check against the real thing. Flagged as IMPERFECT_COLORS till a color PROM dump appear.
+ - Decrypted jolycdit gfx roms.
+ - Added set Jolly Card (Austria, encrypted).
+ - Decrypted jolycdae and managed the planes to show correct colors. The set is working properly.
+
+
+ 2006/12/24
+ - Fixed some incomplete inputs.
+ - Added new working game: Pool 10.
+ - Added new working game: Tortuga Family.
+ - Added new game: Mongolfier New. Not working due to the lack of MCU emulation.
+ - Added new game: Soccer New. Not working due to the lack of MCU emulation.
+ - Updated technical notes.
+
+ 2007/02/01
+ - All crystals documented via #defines.
+ - All CPU and sound clocks derived from #defined crystal values.
+ - Added DIPLOCATIONS to all games.
+ - Added a pool10 alternate set.
+ - Added proper tsc87c52 MCU dumps to monglfir and soccernew.
+ - Modified the refresh rate to 60 fps according to some video evidences.
+ - Updated technical notes.
+
+ 2007/02/25
+ - Added new game: Snooker 10 (Ver 1.11). Preliminary.
+ Properly decoded GFX
+ Proper colors decoded.
+ - Updated technical notes.
+
+ 2007/09/21
+ - Added new game: Saloon (France, encrypted). Preliminary.
+ - Updated technical notes.
+
+
+
+ *** TO DO ***
+
+ - Fix the last 2 GFX planes in magiccrd.
+ - Figure out the royalcdc, jokercrd and saloon encryption.
+ - Analyze the unknown writes to $2000/$4000 in some games.
+ - Check for the reads to the ay8910 output ports in some games.
+ - Figure out the MCU in monglfir and soccernw.
+ - Correct the ROM_REGION in some games to allow the use of RGN_FRAC
+
+
+***********************************************************************************/
+
+
+#define MASTER_CLOCK 16000000
+
+#include "driver.h"
+#include "sound/ay8910.h"
+#include "video/crtc6845.h"
+#include "machine/6821pia.h"
+
+#include "funworld.lh"
+
+/* from video */
+extern WRITE8_HANDLER( funworld_videoram_w );
+extern WRITE8_HANDLER( funworld_colorram_w );
+extern PALETTE_INIT( funworld );
+extern VIDEO_START( funworld );
+extern VIDEO_START( magiccrd );
+extern VIDEO_UPDATE( funworld );
+
+
+/**********************
+* Read/Write Handlers *
+**********************/
+
+static WRITE8_HANDLER(funworld_lamp_a_w)
+{
+ coin_counter_w(0, data & 0x01); // credit in counter
+
+ output_set_lamp_value(0, 1-((data >> 1) & 1)); // button hold1 and
+ output_set_lamp_value(2, 1-((data >> 1) & 1)); // hold3 (see pinouts)
+
+ coin_counter_w(7, data & 0x04); // credit out counter, mapped as coin 8
+
+ output_set_lamp_value(1, 1-((data >> 3) & 1)); // button hold2/low
+ output_set_lamp_value(5, 1-((data >> 5) & 1)); // button 6 (collect/cancel)
+ output_set_lamp_value(3, (data >> 7) & 1); // button hold4/high
+}
+
+static WRITE8_HANDLER(funworld_lamp_b_w)
+{
+ output_set_lamp_value(4, (data >> 0) & 1); // button hold5/bet
+ output_set_lamp_value(6, (data >> 1) & 1); // button 7 (start/play)
+}
+
+
+/*************************
+* Memory map information *
+*************************/
+
+static ADDRESS_MAP_START( funworld_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x0800, 0x0803) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x0a00, 0x0a03) AM_READWRITE(pia_1_r, pia_1_w)
+ AM_RANGE(0x0c00, 0x0c00) AM_READWRITE(AY8910_read_port_0_r, AY8910_control_port_0_w)
+ AM_RANGE(0x0c01, 0x0c01) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0x0e00, 0x0e00) AM_WRITE(crtc6845_address_w)
+ AM_RANGE(0x0e01, 0x0e01) AM_READWRITE(crtc6845_register_r, crtc6845_register_w)
+ AM_RANGE(0x2000, 0x2fff) AM_RAM AM_WRITE(funworld_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x3000, 0x3fff) AM_RAM AM_WRITE(funworld_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0x4000, 0x4000) AM_READNOP
+ AM_RANGE(0x8000, 0xbfff) AM_ROM
+ AM_RANGE(0xc000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( magiccrd_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x0800, 0x0803) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x0a00, 0x0a03) AM_READWRITE(pia_1_r, pia_1_w)
+ AM_RANGE(0x0c00, 0x0c00) AM_READWRITE(AY8910_read_port_0_r, AY8910_control_port_0_w)
+ AM_RANGE(0x0c01, 0x0c01) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0x0e00, 0x0e00) AM_WRITE(crtc6845_address_w)
+ AM_RANGE(0x0e01, 0x0e01) AM_READWRITE(crtc6845_register_r, crtc6845_register_w)
+ AM_RANGE(0x3600, 0x36ff) AM_RAM // some games use $3603-05 range for protection.
+ AM_RANGE(0x4000, 0x4fff) AM_RAM AM_WRITE(funworld_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x5000, 0x5fff) AM_RAM AM_WRITE(funworld_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0x6000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cuoreuno_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x0800, 0x0803) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x0a00, 0x0a03) AM_READWRITE(pia_1_r, pia_1_w)
+ AM_RANGE(0x0c00, 0x0c00) AM_READWRITE(AY8910_read_port_0_r, AY8910_control_port_0_w)
+ AM_RANGE(0x0c01, 0x0c01) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0x0e00, 0x0e00) AM_WRITE(crtc6845_address_w)
+ AM_RANGE(0x0e01, 0x0e01) AM_READWRITE(crtc6845_register_r, crtc6845_register_w)
+ AM_RANGE(0x2000, 0x2000) AM_READNOP // some unknown reads
+ AM_RANGE(0x3e00, 0x3fff) AM_RAM // some games use $3e03-05 range for protection.
+ AM_RANGE(0x6000, 0x6fff) AM_RAM AM_WRITE(funworld_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x7000, 0x7fff) AM_RAM AM_WRITE(funworld_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0x8000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( royalmcu_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x2800, 0x2803) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x2a00, 0x2a03) AM_READWRITE(pia_1_r, pia_1_w)
+ AM_RANGE(0x2c00, 0x2c00) AM_READWRITE(AY8910_read_port_0_r, AY8910_control_port_0_w)
+ AM_RANGE(0x2c01, 0x2c01) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0x2e00, 0x2e00) AM_WRITE(crtc6845_address_w)
+ AM_RANGE(0x2e01, 0x2e01) AM_READWRITE(crtc6845_register_r, crtc6845_register_w)
+ AM_RANGE(0x4000, 0x4fff) AM_RAM AM_WRITE(funworld_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x5000, 0x5fff) AM_RAM AM_WRITE(funworld_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0x6000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( snookr10_map, ADDRESS_SPACE_PROGRAM, 8 ) // RAM 64K (8K x 8),
+ AM_RANGE(0x0000, 0x0fff) AM_RAM
+ AM_RANGE(0x1000, 0x1000) AM_READNOP // input port?
+ AM_RANGE(0x3000, 0x3004) AM_READNOP // input port?
+ AM_RANGE(0x5000, 0x5001) AM_READNOP // input port?
+ AM_RANGE(0x6000, 0x6fff) AM_RAM AM_WRITE(funworld_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x7000, 0x7fff) AM_RAM AM_WRITE(funworld_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0x8000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+
+/*************************
+* Input ports *
+*************************/
+
+static INPUT_PORTS_START( funworld )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Halten (Hold) 1") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Loeschen (Cancel) / Kassieren (Take)") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start) / Gamble (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble") PORT_CODE(KEYCODE_B)
+ 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_BUTTON4 ) PORT_NAME("Halten (Hold) 4 / Hoch (High)") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Halten (Hold) 2 / Tief (Low)") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Halten (Hold) 3") PORT_CODE(KEYCODE_C)
+ 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_W)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Abschreib (Payout)") PORT_CODE(KEYCODE_M) // Payout? Need to check with hopper filled.
+
+ PORT_START_TAG("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_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote" ) 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 enable 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( jolycdcr )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Navijanje (Remote)") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Stop (Hold) 1") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Ponistavange (Cancel) / Kasiranje (Take) / Autohold") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Djelenje (Start) / Gamble (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Stop (Hold) 5 / Ulog (Bet) / Half Gamble") PORT_CODE(KEYCODE_B)
+ 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_BUTTON4 ) PORT_NAME("Stop (Hold) 4 / Veca (High)") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stop (Hold) 2 / Manja (Low)") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Stop (Hold) 3") PORT_CODE(KEYCODE_C)
+ 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_BUTTON7 ) PORT_NAME("Vratiti Nazad (Payout)") PORT_CODE(KEYCODE_M) // Payout? Need to check with hopper filled.
+
+ PORT_START_TAG("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_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote" ) 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 enable 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( jolycdit )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Stop (Hold) 1 / Alta (High)") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Clear / Doppio (Double) / Autohold") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Stop (Hold) 5 / Half Gamble") PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Stop (Hold) 4 / Accredito (Take)") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stop (Hold) 2") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Stop (Hold) 3 / Bassa (Low)") PORT_CODE(KEYCODE_C)
+ 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_BUTTON7 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_M)
+
+ PORT_START_TAG("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_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote" ) 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 enable 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( bigdeal )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Hold 1") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Clear / Take") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Hold 5 / Stake") PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Hold 4 / Nagy (High)") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Hold 2 / Icsi (Low)") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Hold 3 / Half Gamble") PORT_CODE(KEYCODE_C)
+ 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_BUTTON7 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_M)
+
+ PORT_START_TAG("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_TAG("DSW")
+ /* the following one should be left ON by default to allow initialization */
+ 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, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, "Remote" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x04, "100 Points/Pulse" )
+ 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, 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( magiccrd )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Hold 1") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Clear / Take") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Hold 5 / Stake") PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Hold 4 / High") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Hold 2 / Low") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Hold 3") PORT_CODE(KEYCODE_C)
+ 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_BUTTON7 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_M)
+
+ PORT_START_TAG("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_TAG("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_A ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x00, "5 Points/Coin" )
+ PORT_DIPSETTING( 0x04, "10 Points/Coin" )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_B ) ) 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_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Halten (Hold) 1 / Hoch (High)") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Loeschen/Gamble (Cancel/Play)") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Geben (Start)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Halten (Hold) 5 / Half Gamble") PORT_CODE(KEYCODE_B)
+ 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_BUTTON4 ) PORT_NAME("Halten (Hold) 4 / Kassieren (Take)") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Halten (Hold) 2") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Halten (Hold) 3 / Tief (Low)") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("unknown bit 08") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hoppersch") PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Abschreib (Payout)") PORT_CODE(KEYCODE_M) // Payout? Need to check with hopper filled.
+
+ PORT_START_TAG("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_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, "Keyboard Test" )
+ PORT_DIPSETTING( 0x01, "Play" )
+ PORT_DIPNAME( 0x02, 0x00, "Remote" ) PORT_DIPLOCATION("SW1:7") // in some sources is listed as 'Coin-C'
+ PORT_DIPSETTING( 0x00, "10 Points/Pulse" )
+ PORT_DIPSETTING( 0x02, "50 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 enable 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( cuoreuno )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Stop 1 / Switch Bet (1-Max)") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Clear / Bet / Prendi (Take)") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Gioca (Play)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Stop 5 / Half Gamble / Super Game") PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Stop 4 / Alta (High)") PORT_CODE(KEYCODE_V)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stop 2 / Bassa (Low)") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Stop 3") PORT_CODE(KEYCODE_C)
+ 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_BUTTON7 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_M) // Payout? Need to check with hopper filled.
+
+ PORT_START_TAG("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_TAG("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( 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 (1st DSW) seems to be disconnected
+ to avoid the use of remote credits / manual 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( snookr10 )
+INPUT_PORTS_END
+
+
+/*************************
+* Graphics Layouts *
+*************************/
+
+/* Magic Card tiles should be 4bpp, but the last two planes
+ have flipped tiles, half flipped (bottom half), and lack of others needed.
+ (See the text tiles at 0x0840) */
+
+static const gfx_layout charlayout =
+{
+ 4,
+ 8,
+ 0x1000,
+// RGN_FRAC(1,2),
+ 4,
+ { 0, 4, 0x8000*8, 0x8000*8+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
+};
+
+static const gfx_layout sn10_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 },
+ { 0, 1, 2, 3 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*4*2
+};
+
+
+/******************************
+* Graphics Decode Information *
+******************************/
+
+static GFXDECODE_START( funworld )
+ GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 16 )
+GFXDECODE_END
+
+static GFXDECODE_START( sn10 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0x0000, sn10_charlayout, 0, 16 )
+GFXDECODE_END
+
+
+/***********************
+* PIA Interfaces *
+***********************/
+
+static const pia6821_interface pia0_intf =
+{
+ /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */
+ input_port_0_r, input_port_1_r, 0, 0, 0, 0,
+
+ /* PIA outputs: A, B, CA2, CB2 */
+ 0, 0, 0, 0,
+
+ /* PIA IRQs: A, B */
+ 0, 0
+};
+
+static const pia6821_interface pia1_intf =
+{
+ /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */
+ input_port_2_r, input_port_3_r, 0, 0, 0, 0,
+
+ /* PIA outputs: A, B, CA2, CB2 */
+ 0, 0, 0, 0,
+
+ /* PIA IRQs: A, B */
+ 0, 0
+};
+
+
+/************************
+* Sound Interface *
+************************/
+
+static struct AY8910interface ay8910_intf =
+{
+ 0, // portA in
+ 0, // portB in
+ funworld_lamp_a_w, // portA out
+ funworld_lamp_b_w // portB out
+};
+
+
+/**************************
+* Machine Drivers *
+**************************/
+
+static MACHINE_DRIVER_START( funworld )
+ // basic machine hardware
+ MDRV_CPU_ADD_TAG("main", M65SC02, MASTER_CLOCK/8) // 2MHz
+ MDRV_CPU_PROGRAM_MAP(funworld_map, 0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse, 1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_NVRAM_HANDLER(generic_0fill)
+
+ // video hardware
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE((124+1)*4, (30+1)*8) // Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1).
+ MDRV_SCREEN_VISIBLE_AREA(0*4, 96*4-1, 0*8, 29*8-1) // Taken from MC6845 init, registers 01 & 06.
+
+ MDRV_GFXDECODE(funworld)
+
+ MDRV_DEFAULT_LAYOUT(layout_funworld)
+
+ MDRV_PALETTE_LENGTH(0x200)
+ MDRV_COLORTABLE_LENGTH(0x200)
+ MDRV_PALETTE_INIT(funworld)
+ MDRV_VIDEO_START(funworld)
+ MDRV_VIDEO_UPDATE(funworld)
+
+ // sound hardware
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD_TAG("ay8910", AY8910, MASTER_CLOCK/8) // 2MHz
+ MDRV_SOUND_CONFIG(ay8910_intf)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 8.0) // analyzed to avoid clips.
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( bigdeal )
+ MDRV_IMPORT_FROM(funworld)
+
+ MDRV_SOUND_REPLACE("ay8910", AY8910, MASTER_CLOCK/8) // 2MHz
+ MDRV_SOUND_CONFIG(ay8910_intf)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 5.0) // analyzed to avoid clips.
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( magiccrd )
+ MDRV_IMPORT_FROM(funworld)
+
+ MDRV_CPU_REPLACE("main", M65C02, MASTER_CLOCK/8) // 2MHz
+ MDRV_CPU_PROGRAM_MAP(magiccrd_map, 0)
+
+ MDRV_SCREEN_SIZE((123+1)*4, (36+1)*8) // Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1).
+ MDRV_SCREEN_VISIBLE_AREA(0*4, 112*4-1, 0*8, 34*8-1) // Taken from MC6845 init, registers 01 & 06.
+// MDRV_SCREEN_VISIBLE_AREA(0*4, 98*4-1, 0*8, 32*8-1) // adjusted to screen for testing purposes.
+
+ MDRV_GFXDECODE(funworld)
+ MDRV_VIDEO_START(magiccrd)
+
+ MDRV_SOUND_REPLACE("ay8910", AY8910, MASTER_CLOCK/8) // 2MHz
+ MDRV_SOUND_CONFIG(ay8910_intf)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.6) // analyzed to avoid clips.
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( royalcrd )
+ MDRV_IMPORT_FROM(funworld)
+
+ MDRV_CPU_REPLACE("main", M65C02, MASTER_CLOCK/8) // original cpu = R65C02P2 (2MHz)
+ MDRV_CPU_PROGRAM_MAP(magiccrd_map, 0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( cuoreuno )
+ MDRV_IMPORT_FROM(funworld)
+
+ MDRV_CPU_REPLACE("main", M65C02, MASTER_CLOCK/8) // original cpu = R65C02P2 (2MHz)
+ MDRV_CPU_PROGRAM_MAP(cuoreuno_map, 0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( royalmcu )
+ MDRV_IMPORT_FROM(funworld)
+
+ MDRV_CPU_REPLACE("main", M65SC02, MASTER_CLOCK/8) // original cpu = R65C02P2 (2MHz)
+ MDRV_CPU_PROGRAM_MAP(royalmcu_map, 0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( snookr10 )
+ MDRV_CPU_ADD_TAG("main", M65SC02, MASTER_CLOCK/8) // 2MHz
+ MDRV_CPU_PROGRAM_MAP(snookr10_map, 0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse, 1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ // video hardware
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE((124+1)*4, (30+1)*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*4, 96*4-1, 0*8, 29*8-1)
+
+ MDRV_GFXDECODE(sn10)
+
+// MDRV_DEFAULT_LAYOUT(layout_funworld)
+
+ MDRV_PALETTE_LENGTH(0x200)
+ MDRV_COLORTABLE_LENGTH(0x200)
+ MDRV_PALETTE_INIT(funworld)
+ MDRV_VIDEO_START(funworld)
+ MDRV_VIDEO_UPDATE(funworld)
+MACHINE_DRIVER_END
+
+/*************************
+* Rom Load *
+*************************/
+
+ROM_START( jollycrd )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "jolycard.run", 0x8000, 0x8000, CRC(f531dd10) SHA1(969191fbfeff4349afef619d9241ef5186e6d57f) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+ROM_START( jolycdae ) // encrypted roms...
+ ROM_REGION( 0x18000, REGION_CPU1, 0 )
+ ROM_LOAD( "pokeru0.bin", 0x8000, 0x10000, CRC(7732f177) SHA1(b75fca596a7315d1379fa5bcf07c449ec32c90f5) )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "pokeru1.bin", 0x00000, 0x10000, CRC(878d695b) SHA1(0e1ea455e991e591316a340c56b23fa26764988d) )
+ ROM_LOAD( "pokeru2.bin", 0x10000, 0x10000, CRC(b7b2946a) SHA1(25b15296b32bf88db6d60991105bba667f7940cc) )
+ ROM_COPY( REGION_GFX1, 0x10000, 0x00000, 0x8000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+ROM_START( jolycdcr )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "jollypkr.003", 0x8000, 0x8000, CRC(ea7340b4) SHA1(7dd468f28a488a4781521809d06db1d7917048ad) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+ROM_START( jolycdit ) // encrypted graphics.
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "jn.bin", 0x8000, 0x8000, CRC(6ae00ed0) SHA1(5921c2882aeb5eadd0e04a477fa505ad35e9d98c) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(46805150) SHA1(63687ac44f6ace6d8924b2629536bcc7d3979ed2) )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(43bcb2df) SHA1(5022bc3a0b852a7cd433e25c3c90a720e6328261) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+
+ ROM_REGION( 0x0200, REGION_PLDS, 0 )
+ ROM_LOAD( "gal16v8b.bin", 0x0000, 0x0117, CRC(3ad712b1) SHA1(54214841fb178e4b59bf6051522718f7667bad28) )
+ROM_END
+
+ROM_START( jolycdat ) // there are unused pieces of code that compare or jumps within $4000-$5000 range.
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "bonucard.cpu", 0x8000, 0x4000, CRC(da342100) SHA1(451fa6074aad19e9efd148c3d18115a20a3d344a) )
+ ROM_CONTINUE( 0xc000, 0x4000 )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
+ ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) ) // jollycrd palette till a dump appear.
+ROM_END
+
+ROM_START( jolycdab )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 ) // program is testing/writting RAM in offset $8800-$BFFF (ROM)...??
+ ROM_LOAD( "ig1poker.run", 0x8000, 0x8000, CRC(c96e6542) SHA1(ed6c0cf9fe8597dba9149b2225320d8d9c39219a) )
+// ROM_RELOAD( 0x4000, 0x4000 )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "jn1poker.ch2", 0x0000, 0x8000, CRC(8d78e43d) SHA1(15c60f8e0cd88518b0dc72b92aff6d8d4b2149cf) )
+ ROM_LOAD( "jn1poker.ch1", 0x8000, 0x8000, CRC(d0a87f58) SHA1(6b7925557c4e40a1ebe52ecd14391cdd5e00b59a) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
+ROM_END
+
+ROM_START( bigdeal )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "poker4.001", 0x8000, 0x8000, CRC(bb0198c1) SHA1(6e7d42beb5723a4368ae3788f83b448f86e5653d) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "poker4.003", 0x0000, 0x8000, CRC(8c33a15f) SHA1(a1c8451c99a23eeffaedb21d1a1b69f54629f8ab) )
+ ROM_LOAD( "poker4.002", 0x8000, 0x8000, CRC(5f4e12d8) SHA1(014b2364879faaf4922cdb82ee07692389f20c2d) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) ) // jollycrd palette till a dump appear.
+ROM_END
+
+ROM_START( bigdealb )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "poker8.003", 0x8000, 0x8000, CRC(09c93745) SHA1(a64e96ef3489bc37c2c642f49e62cfef371de6f1) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "poker4.003", 0x0000, 0x8000, CRC(8c33a15f) SHA1(a1c8451c99a23eeffaedb21d1a1b69f54629f8ab) )
+ ROM_LOAD( "poker4.002", 0x8000, 0x8000, CRC(5f4e12d8) SHA1(014b2364879faaf4922cdb82ee07692389f20c2d) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) ) // jollycrd palette till a dump appear.
+ROM_END
+
+ROM_START( cuoreuno )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "cuore1a.u2", 0x8000, 0x8000, CRC(6e112184) SHA1(283ac534fc1cb33d11bbdf3447630333f2fc957f) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "cuore1b.u21", 0x0000, 0x8000, CRC(14eca2b8) SHA1(35cba415800c6cd3e6ed9946057f33510ad2bfc9) )
+ ROM_LOAD( "cuore1c.u22", 0x8000, 0x8000, CRC(253fac84) SHA1(1ad104ab8e8d73df6397a840a4b26565b245d7a3) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "am27s29_cu.bin", 0x0000, 0x0200, CRC(7ea61749) SHA1(3167acd79f9bda2078c2af3e049ad6abf160aeae) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_cu.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_cu.u22", 0x0200, 0x0157, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_cu.u23", 0x0400, 0x0157, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( elephfam )
+ ROM_REGION( 0x18000, REGION_CPU1, 0 )
+ ROM_LOAD( "eleph_a.u2", 0x8000, 0x10000, CRC(8392b842) SHA1(74c850c734ca8174167b2f826b9b1ac902669392) )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "eleph_c.u22", 0x00000, 0x10000, CRC(4b909bf3) SHA1(a822b12126bc58af6d3f999ab2117370015a039b) )
+ ROM_LOAD( "eleph_b.u21", 0x10000, 0x10000, CRC(e3612670) SHA1(beb65f7d2bd6d7bc68cfd876af51910cf6417bd0) )
+ ROM_COPY( REGION_GFX1, 0x10000, 0x00000, 0x8000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "am27s29_ef.u25", 0x0000, 0x0200, CRC(bca8b82a) SHA1(4aa19f5ecd9953bf8792dceb075a746f77c01cfc) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_ef.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_ef.u22", 0x0200, 0x0157, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_ef.u23", 0x0400, 0x0157, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( elephfmb )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "now.u2", 0x8000, 0x8000, CRC(7b537ce6) SHA1(b221d08c53b9e14178335632420e78070b9cfb27) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "elephb.u21", 0x0000, 0x8000, CRC(3c60549c) SHA1(c839b3ea415a877e5eac04e0522c342cce8d6e64) )
+ ROM_LOAD( "elephc.u20", 0x8000, 0x8000, CRC(448ba955) SHA1(2785cbc8cd42a7dda85bd8b81d5fbec01a1ba0bd) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "am27s29_ef.u25", 0x0000, 0x0200, CRC(bca8b82a) SHA1(4aa19f5ecd9953bf8792dceb075a746f77c01cfc) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_ef.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_ef.u22", 0x0200, 0x0157, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_ef.u23", 0x0400, 0x0157, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( pool10 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "pool10.u2", 0x8000, 0x8000, CRC(4e928756) SHA1(d9ac3d41ea32e060a7e269502b7f22333c5e6c61) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
+ ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) /* GAL is read protected */
+ ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) /* GAL is read protected */
+ROM_END
+
+ROM_START( pool10b )
+ ROM_REGION( 0x18000, REGION_CPU1, 0 )
+ ROM_LOAD( "u2.bin", 0x8000, 0x10000, CRC(64fee38e) SHA1(8a624a0b6eb4a3ba09e5b396dc5a01994dfdf294) )
+
+ /* GFX ROMs are the same of pool10, but double sized with identical halves. */
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "u20.bin", 0x00000, 0x10000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) )
+ ROM_LOAD( "u21.bin", 0x10000, 0x10000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) )
+ ROM_COPY( REGION_GFX1, 0x10000, 0x00000, 0x8000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_p10b.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_p10b.u22", 0x0200, 0x0157, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_p10b.u23", 0x0400, 0x0157, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( tortufam )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "tortu.a.u2", 0x8000, 0x8000, CRC(6e112184) SHA1(283ac534fc1cb33d11bbdf3447630333f2fc957f) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "tortu.b.u21", 0x0000, 0x8000, CRC(e7b18584) SHA1(fa1c367469d4ced5d7c83c15a25ec5fd6afcca10) )
+ ROM_LOAD( "tortu.c.u20", 0x8000, 0x8000, CRC(3cda6f73) SHA1(b4f3d2d3c652ebf6973358ae33b7808de5939acd) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "am27s29pc_tf.u25", 0x0000, 0x0200, CRC(c6d433fb) SHA1(065de832bbe8765eb0aacc2029e587a4f5362f8a) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce20v8h_tf.u5", 0x0000, 0x0157, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_tf.u22", 0x0200, 0x0157, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "palce20v8h_tf.u23", 0x0400, 0x0157, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( royalcrd )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "r2.bin", 0x8000, 0x8000, CRC(25dfe0dc) SHA1(1a857a910d0c34b6b5bfc2b6ea2e08ed8ed0cae0) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "2.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) )
+ ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h-4.bin", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "1-peel18cv8.bin", 0x0200, 0x0155, NO_DUMP ) /* PEEL is read protected */
+ ROM_LOAD( "2-peel18cv8.bin", 0x0400, 0x0155, CRC(8fdafd55) SHA1(fbb187ba682111648ea1586f400990cb81a3077a) )
+ROM_END
+
+ROM_START( royalcdb ) // both halves have different program. we're using the 2nd one.
+ ROM_REGION( 0x20000, REGION_CPU1, 0 ) // 1st half prg is testing RAM in offset $8600-$BF00...??
+ ROM_LOAD( "rc.bin", 0x10000, 0x10000, CRC(8a9a6dd6) SHA1(04c3f9f17d5404ac1414c51ef8f930df54530e72) )
+ ROM_COPY( REGION_CPU1, 0x18000, 0x8000, 0x8000 )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "1a.bin", 0x0000, 0x10000, CRC(8a66f22c) SHA1(67d6e8f8f5a0fd979dc498ba2cc67cf707ccdf95) )
+ ROM_LOAD( "2a.bin", 0x10000, 0x10000, CRC(3af71cf8) SHA1(3a0ce0d0abebf386573c5936545dada1d3558e55) )
+ ROM_COPY( REGION_GFX1, 0x10000, 0x00000, 0x8000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
+
+ ROM_REGION( 0x0200, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h-4.bin", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( royalcdc ) // encrypted program rom.
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "rc_1.bin", 0x8000, 0x8000, CRC(8cdcc978) SHA1(489b58760a7c8646399c8cdfb86ec4341823e7dd) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "rc_3.bin", 0x0000, 0x8000, CRC(8612c6ed) SHA1(3306a252af479e0510f136020086015b60dce879) )
+ ROM_LOAD( "rc_2.bin", 0x8000, 0x8000, CRC(7f934488) SHA1(c537a09ef7e88a81ee9c2e1d971b3caf9d3dba0e) )
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(44dbf086) SHA1(43a2d615c00605db75a4fd4d57d9e056c0356f10) )
+
+ ROM_REGION( 0x0600, REGION_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( magiccrd )
+ ROM_REGION( 0x18000, REGION_CPU1, 0 )
+ ROM_LOAD( "magicard.004", 0x0000, 0x8000, CRC(f6e948b8) SHA1(7d5983015a508ab135ccbf69b7f3c526c229e3ef) ) // only last 16kbyte visible?
+ ROM_LOAD( "magicard.01", 0x8000, 0x10000, CRC(c94767d4) SHA1(171ac946bdf2575f9e4a31e534a8e641597af519) ) // 1ST AND 2ND HALF IDENTICAL
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "magicard.03", 0x0000, 0x8000, CRC(733da697) SHA1(45122c64d5a371ec91cecc67b7faf179078e714d) )
+ ROM_LOAD( "magicard.001", 0x8000, 0x8000, CRC(685f7a67) SHA1(fc65a9d26a5cbbe2fa08dc0f27212dae2d8bcbdc) ) // bad dump?, or sprite plane
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147_mc.bin", 0x0000, 0x0200, NO_DUMP ) // not present in the set.
+ROM_END
+
+ROM_START( jokercrd )
+/* (Multi) Joker Card from Vesely Svet (Sprightly World). Czech poker game.
+ Program roms seems encrypted. Custom Fun World CPU based on 6502 family.
+ Seems to be a Big Deal clone.
+*/
+ ROM_REGION( 0x18000, REGION_CPU1, 0 )
+ ROM_LOAD( "ic41.bin", 0x8000, 0x8000, CRC(d36188b3) SHA1(3fb848fabbbde9fbb70875b3dfef62bfb3a8cbcb) ) // only last 16kbyte visible?
+ ROM_LOAD( "ic37.bin", 0x10000, 0x8000, CRC(8e0d70c4) SHA1(018f92631acbe98e5826a41698f0e07b4b46cd71) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_COPY( REGION_CPU1, 0x10000, 0xc000, 0x4000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ic10.bin", 0x0000, 0x8000, CRC(2bbd27ad) SHA1(37d37899398d95beac5f3cbffc4277c97aca1a23) )
+ ROM_LOAD( "ic11.bin", 0x8000, 0x8000, CRC(21d05a57) SHA1(156c18ec31b08e4c4af6f73b49cb5d5c68d1670f) ) // bad dump?, or sprite plane
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "ic13.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
+ROM_END
+
+ROM_START( monglfir )
+ ROM_REGION( 0x20000, REGION_CPU1, 0 )
+ ROM_LOAD( "prgteov.2.3m.u16", 0x10000, 0x10000, CRC(996b851a) SHA1(ef4e3d036ca10b33c83749024d04c4d4c09feeb7) )
+ ROM_COPY( REGION_CPU1, 0x18000, 0x8000, 0x8000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* TSC87C52-16CB MCU Code */
+ ROM_LOAD( "tsc87c52-mf.u40", 0x00000, 0x02000 , CRC(ae22e778) SHA1(0897e05967d68d7f23489e98717663e3a3176070) )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "mong.rc.b2.u3", 0x00000, 0x10000, CRC(5e019b73) SHA1(63a544dccb9589e5a6b938e604c09d4d8fc060fc) )
+ ROM_LOAD( "mong.rc.c1.u2", 0x10000, 0x10000, CRC(e3fc24c4) SHA1(ea4e67ace63b55a76365f7e11a67c7d420a52dd7) )
+ ROM_COPY( REGION_GFX1, 0x10000, 0x8000, 0x8000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "am27s29pc_mf.u24", 0x0000, 0x0200, CRC(da9181af) SHA1(1b30d992f3b2a4b3bd81e3f99632311988e2e8d1) )
+
+ ROM_REGION( 0x0200, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_mf.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( soccernw )
+ ROM_REGION( 0x20000, REGION_CPU1, 0 )
+ ROM_LOAD( "prgteo2gv2.3.u16", 0x10000, 0x10000, CRC(c61d1937) SHA1(c516f13a108da60b7ccee338b63a025009ef9099) )
+ ROM_COPY( REGION_CPU1, 0x18000, 0x8000, 0x8000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* TSC87C52-16CB MCU Code */
+ ROM_LOAD( "tsc87c52-sn.u40", 0x00000, 0x02000 , CRC(af0bd35b) SHA1(c6613a7bcdec2fd6060d6dcf639654568de87e75) )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "soccer2.u3", 0x00000, 0x10000, CRC(db09b5bb) SHA1(a12bf2938f5482ea5ebc0db6fd6594e1beb97017) )
+ ROM_LOAD( "soccer1.u2", 0x10000, 0x10000, CRC(564cc467) SHA1(8f90c4bacd97484623666b25dae77e628908e243) )
+ ROM_COPY( REGION_GFX1, 0x10000, 0x8000, 0x8000 ) // rgn,srcoffset,offset,length.
+
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "am27s29pc_sn.u24", 0x0000, 0x0200, CRC(d02894fc) SHA1(adcdc912cc0b7a7f67b122fa94fca921c957b282) )
+
+ ROM_REGION( 0x0200, REGION_PLDS, 0 )
+ ROM_LOAD( "palce16v8h_sn.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+ROM_START( snookr10 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "1.u2", 0x8000, 0x8000, CRC(216ccb2d) SHA1(d86270cd03a08f6fd3e7b327b8173f66da28e5e8) )
+
+ /* the first 256 bytes looks as a color palette.
+ unknown code starting at 0x0400 */
+ ROM_REGION( 0x40000, REGION_CPU2, 0 )
+ ROM_LOAD( "4.u18", 0x00000, 0x40000 , CRC(17090d56) SHA1(3a4c247f96c80f8cf4c1389b273880c5ea6fc39d) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "2.u22", 0x0000, 0x8000, CRC(a70d9c48) SHA1(3fa90190323526553866662afda4dbe1c94abeff) )
+ ROM_LOAD( "3.u25", 0x8000, 0x8000, CRC(3009faaa) SHA1(d1cda455b270cb9afa65b9701735a3a1f2a48df2) )
+
+ /* This should be changed because the palette is stored in a normal ROM instead of a color PROM */
+ ROM_REGION( 0x8000, REGION_PROMS, 0 )
+ ROM_LOAD( "5.u27", 0x0000, 0x8000, CRC(f3d7d640) SHA1(f78060f4603e316fa3c2ec4ba6d7edf261cf6d8a) )
+ROM_END
+
+ROM_START( saloon )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "1s.bin", 0x8000, 0x8000, CRC(66938330) SHA1(09118d607eff7121472db7d2cc24079e063dc7cf) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "2s.bin", 0x0000, 0x8000, CRC(39a792d5) SHA1(45c956a4a33587238a24eed602039115db1bb4b6) )
+ ROM_LOAD( "3s.bin", 0x8000, 0x8000, CRC(babc0964) SHA1(f084465cc34ea7ac19091d3e75ef7d55c48273ae) )
+
+ /* looks strange */
+ ROM_REGION( 0x0200, REGION_PROMS, 0 )
+ ROM_LOAD( "82s147_saloon.bin", 0x0000, 0x0200, CRC(f424ccc1) SHA1(6df1215f58cca786e9f0ea4bf35407cf7fe21d83) )
+ROM_END
+
+
+/**************************
+* Driver Initialization *
+**************************/
+
+static DRIVER_INIT( funworld )
+{
+ /* Initializing PIAs... */
+ pia_config(0, &pia0_intf);
+ pia_config(1, &pia1_intf);
+}
+
+static DRIVER_INIT( jolycdit )
+{
+/* The encryption seems to be...
+
+ For each nibble:
+
+ xe = (3 * xd) & 0f ; where xe = encrypted value, xd = decrypted value.
+
+ and then 3 swapped pairs... (3,7) (b,f) (6,e)
+
+ ...or cases (3,7,b,f) ^ 4
+ ...and cases (6,e) ^ 8
+
+ to get the same result.
+
+ Since the table is very short, we will substitute each nibble.
+*/
+
+ int x, na, nb, nad, nbd;
+ UINT8 *src = memory_region( REGION_GFX1 );
+
+ for (x=0x0000;x<0x10000;x++)
+ {
+ na = src[x] & 0xf0; // nibble a
+ nb = src[x] & 0x0f; // nibble b
+
+ switch (na)
+ {
+ case 0x10: nad = 0x30; break;
+ case 0x20: nad = 0x60; break;
+ case 0x30: nad = 0x50; break;
+ case 0x40: nad = 0xc0; break;
+ case 0x50: nad = 0xf0; break;
+ case 0x60: nad = 0xa0; break;
+ case 0x70: nad = 0x90; break;
+ case 0x90: nad = 0xb0; break;
+ case 0xa0: nad = 0xe0; break;
+ case 0xb0: nad = 0xd0; break;
+ case 0xc0: nad = 0x40; break;
+ case 0xd0: nad = 0x70; break;
+ case 0xe0: nad = 0x20; break;
+ case 0xf0: nad = 0x10; break;
+ default: nad = na; break;
+ }
+
+ switch (nb)
+ {
+ case 0x01: nbd = 0x03; break;
+ case 0x02: nbd = 0x06; break;
+ case 0x03: nbd = 0x05; break;
+ case 0x04: nbd = 0x0c; break;
+ case 0x05: nbd = 0x0f; break;
+ case 0x06: nbd = 0x0a; break;
+ case 0x07: nbd = 0x09; break;
+ case 0x09: nbd = 0x0b; break;
+ case 0x0a: nbd = 0x0e; break;
+ case 0x0b: nbd = 0x0d; break;
+ case 0x0c: nbd = 0x04; break;
+ case 0x0d: nbd = 0x07; break;
+ case 0x0e: nbd = 0x02; break;
+ case 0x0f: nbd = 0x01; break;
+ default: nbd = nb; break;
+ }
+
+ src[x] = nad + nbd; // decrypted value.
+ }
+
+ /* Initializing PIAs... */
+ pia_config(0, &pia0_intf);
+ pia_config(1, &pia1_intf);
+}
+
+static DRIVER_INIT( jolycdae )
+{
+ /* decrypting roms... */
+
+ int x;
+ UINT8 *srcp = memory_region( REGION_CPU1 );
+ UINT8 *srcg = memory_region( REGION_GFX1 );
+
+ for (x=0x8000;x<0x18000;x++)
+ {
+ srcp[x] = srcp[x] ^ 0x56; // simple XOR with 0x56
+ }
+
+ for (x=0x0000;x<0x20000;x++)
+ {
+ srcg[x] = srcg[x] ^ 0x56; // simple XOR with 0x56
+ }
+
+ /* Initializing PIAs... */
+ pia_config(0, &pia0_intf);
+ pia_config(1, &pia1_intf);
+}
+
+static DRIVER_INIT( soccernw )
+{
+/* temporary patch to avoid hardware errors for debug purposes */
+ UINT8 *ROM = memory_region(REGION_CPU1);
+
+ ROM[0x80b2] = 0xa9;
+ ROM[0x80b3] = 0x00;
+
+// DEBUG
+// run to $810a
+
+// ROM[0xa33a] = 0xea;
+// ROM[0xa33b] = 0xea;
+// ROM[0xa33c] = 0xea;
+
+ /* Initializing PIAs... */
+ pia_config(0, &pia0_intf);
+ pia_config(1, &pia1_intf);
+}
+
+
+/*************************
+* Game Drivers *
+*************************/
+
+// YEAR NAME PARENT MACHINE INPUT INIT COMPANY FULLNAME
+GAME( 1985, jollycrd, 0, funworld, funworld, funworld, ROT0, "TAB-Austria", "Jolly Card (Austria)", 0 )
+GAME( 1985, jolycdae, jollycrd, funworld, funworld, jolycdae, ROT0, "TAB-Austria", "Jolly Card (Austria, encrypted)", 0 )
+GAME( 1993, jolycdcr, jollycrd, cuoreuno, jolycdcr, funworld, ROT0, "Soft Design", "Jolly Card (Croatia)", 0 )
+GAME( 199?, jolycdit, jollycrd, cuoreuno, jolycdit, jolycdit, ROT0, "bootleg", "Jolly Card (Italia, encrypted)", 0 )
+GAME( 1990, jolycdab, jollycrd, funworld, funworld, funworld, ROT0, "Inter Games", "Jolly Card (Austria, Fun World, bootleg)", GAME_NOT_WORKING )
+GAME( 1986, bigdeal, 0, bigdeal, bigdeal, funworld, ROT0, "Fun World", "Big Deal (Hungary, set 1)", GAME_IMPERFECT_COLORS )
+GAME( 1986, bigdealb, bigdeal, bigdeal, bigdeal, funworld, ROT0, "Fun World", "Big Deal (Hungary, set 2)", GAME_IMPERFECT_COLORS )
+GAME( 1986, jolycdat, bigdeal, bigdeal, bigdeal, funworld, ROT0, "Fun World", "Jolly Card (Austria, Fun World)", GAME_IMPERFECT_COLORS )
+GAME( 1996, cuoreuno, 0, cuoreuno, cuoreuno, funworld, ROT0, "C.M.C.", "Cuore 1 (Italia)", 0 )
+GAME( 1997, elephfam, 0, cuoreuno, cuoreuno, funworld, ROT0, "C.M.C.", "Elephant Family (Italia, new)", 0 )
+GAME( 1996, elephfmb, elephfam, cuoreuno, cuoreuno, funworld, ROT0, "C.M.C.", "Elephant Family (Italia, old)", 0 )
+GAME( 1996, pool10, 0, cuoreuno, cuoreuno, funworld, ROT0, "C.M.C.", "Pool 10 (Italia, set 1)", 0 )
+GAME( 1996, pool10b, pool10, cuoreuno, cuoreuno, funworld, ROT0, "C.M.C.", "Pool 10 (Italia, set 2)", 0 )
+GAME( 1997, tortufam, 0, cuoreuno, cuoreuno, funworld, ROT0, "C.M.C.", "Tortuga Family (Italia)", 0 )
+GAME( 1991, royalcrd, 0, royalcrd, royalcrd, funworld, ROT0, "TAB-Austria", "Royal Card (Austria, set 1)", 0 )
+GAME( 1991, royalcdb, royalcrd, royalcrd, royalcrd, funworld, ROT0, "TAB-Austria", "Royal Card (Austria, set 2)", 0 )
+GAME( 1991, royalcdc, royalcrd, royalcrd, royalcrd, funworld, ROT0, "Evona Electronic","Royal Card (Slovakia, encrypted)", GAME_WRONG_COLORS | GAME_NOT_WORKING )
+GAME( 1996, magiccrd, 0, magiccrd, magiccrd, funworld, ROT0, "Impera", "Magic Card II (Bulgaria, bootleg)", GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
+GAME( 1993, jokercrd, 0, funworld, funworld, funworld, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", GAME_WRONG_COLORS | GAME_NOT_WORKING )
+GAME( 199?, monglfir, 0, royalmcu, royalcrd, funworld, ROT0, "bootleg", "Mongolfier New (Italia)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 199?, soccernw, 0, royalcrd, royalcrd, soccernw, ROT0, "bootleg", "Soccer New (Italia)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1998, snookr10, 0, snookr10, snookr10, 0, ROT0, "Sandiy", "Snooker 10 (Ver 1.11)", GAME_NO_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 198?, saloon, 0, funworld, funworld, funworld, ROT0, "Unknown", "Saloon (France, encrypted)", GAME_NO_SOUND | GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )