summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/snookr10.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/snookr10.cpp')
-rw-r--r--src/mame/drivers/snookr10.cpp1224
1 files changed, 0 insertions, 1224 deletions
diff --git a/src/mame/drivers/snookr10.cpp b/src/mame/drivers/snookr10.cpp
deleted file mode 100644
index b97bab7da6a..00000000000
--- a/src/mame/drivers/snookr10.cpp
+++ /dev/null
@@ -1,1224 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Roberto Fresca
-/**********************************************************************************
-
- SNOOKER 10 / SANDII'
- Driver by Roberto Fresca.
-
-
- Games running on this hardware:
-
- * Snooker 10 (Ver 1.11), Sandii', 1998.
- * Apple 10 (Ver 1.21), Sandii', 1998.
- * Ten Balls (Ver 1.05), unknown, 1997.
- * Crystals Colours (Ver 1.02), JCD srl, 1998.
- * Crystals Colours (Ver 1.01), JCD srl, 1998.
-
-
-***********************************************************************************
-
- The hardware is generally composed by:
-
- CPU: 1x 65SC02 at 2MHz.
-
- Sound: 1x AD-65 or U6295 (OKI6295 compatible) at 1MHz, pin7 HIGH.
- 1x LM358N.
- 1x TDA2003.
-
- HD-PLD: 2x AMD MACH231-15-JC/1-18JI/1 or...
- 2x XILINX XC9572-PQ100ASJ-15C or...
- 2x Lattice ispLSI1024-60LJ for earlier revisions.
-
- RAM: 1x 76C88AL-15 or U6264, SRAM 8Kx8.
- NVRAM: 1x 76C88AL-15 or HT6116-70, SRAM 8Kx8 (battery backed).
- ROMs: 4x 27C256 (3x 27C256 for earlier revisions).
- 1x 27C020 for ADPCM samples.
-
- PROMs: 1x 82S147, AM27S29, or similar. (512 bytes).
-
- Clock: 1x Crystal: 16MHz.
-
- Other: 1x 28x2 edge connector.
- 1x 15-pins connector.
- 1x 7 pins connector (JTAG?) (on Crystals Colours boards).
- 1x trimmer (volume).
- 1x 8 DIP switches.
- 1x 3.6 Volt, 55-80 mAh battery.
-
-
-***************************************************************************************
-
- All supported games have been coded using some italian C.M.C games as point to start,
- changing hardware accesses, program logics, graphics, plus protection and some I/O
- through the 2x high density PLDs.
-
- Color palettes are normally stored in format GGBBBRRR inside a bipolar color PROM
- (old hardware), or repeated 64 times inside a regular 27c256 ROM (new hardware).
-
- - bits -
- 7654 3210
- ---- -xxx Red component.
- --xx x--- Blue component.
- xx-- ---- Green component.
-
- Same as Funworld video hardware, this one 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 these games...
-
- Color PROMs from current games are 512 bytes lenght, but they only use the first 256 bytes.
-
- The sound is composed by 4-bit ADPCM samples. All the supported games have the same sound ROM.
- All the sounds/samples were ripped from the Gottlieb pinball 'Cue Ball Wizard'(1992).
-
-
- ***** Game Notes *****
-
- To initialize NVRAM (for all games), keep pressed ESTATISTICA (key '9') + MANAGEMENT (key '0'),
- then press RESET (key F3), and finally release both (ESTATISTICA + MANAGEMENT) keys.
-
- Enter ESTATISTICA (key '9'), to enter the stats mode. Press PLAY/CANCELLA (key 'N')
- for 5 seconds to reset all values to zero. Press START (key '1') to exit the mode.
-
- Enter MANAGEMENT (key '0'), to enter the management mode. Press PLAY/CANCELLA (key 'N')
- to access the PROGRAMAZZIONE (program mode), where you can change the game parameters.
- Press START (key '1') to exit both modes.
-
- To clear credits (and stats), just re-initialize the NVRAM.
-
- Only for the new hardware revision (snookr10 & apple10), pressing STOP 1 (key 'Z') into the
- stats mode, make the hidden Input Test mode to appear. Press RESET (F3) to exit the mode.
-
-
- --- 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 (apples, balls, 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.
-
-
- NOTE: Bit 7 of input port 0x3004 is tied to bit 7 of input port 0x3003 (DIP switch 1).
- This allow to use the PAYOUT button to trigger the Supper Game instead of STOP 5.
-
-
-***************************************************************************************
-
- Encryption schemes...
- ---------------------
-
- * Apple 10
-
- - Tile matrix and color data (video & color RAM) are totally encrypted/scrambled.
-
- You can see the following table, where 'Normal tile #' is the tile number called
- to be drawn, and 'Scrambled tile #' is the physical tile position in the matrix:
-
- Normal | Scrambled
- tile # | tile #
- -------+----------
- 0x00 | 0x00 \
- 0x01 | 0x80 |
- 0x02 | 0x40 | Big "0"
- 0x03 | 0xC0 |
- 0x04 | 0x20 |
- 0x05 | 0xA0 /
- -------+----------
- 0x06 | 0x60 \
- 0x07 | 0xE0 |
- 0x08 | 0x10 | Big "1"
- 0x09 | 0x90 |
- 0x0A | 0x50 |
- 0x0B | 0xD0 /
- -------+----------
- 0x0C | 0x30 \
- 0x0D | 0xB0 |
- 0x0E | 0x70 | Big "2"
- 0x0F | 0xF0 |
- 0x10 | 0x08 |
- 0x11 | 0x88 /
- -------+----------
- 0x12 | 0x48 \
- 0x13 | 0xC8 |
- 0x14 | 0x28 | Big "3"
- 0x15 | 0xA8 |
- 0x16 | 0x68 |
- 0x17 | 0xE8 /
- -------+----------
- 0x18 | 0x18 \
- 0x19 | 0x98 |
- 0x1A | 0x58 | Big "4"
- 0x1B | 0xD8 |
- 0x1C | 0x38 |
- 0x1D | 0xB8 /
- -------+----------
- 0x1E | 0x78 \
- 0x1F | 0xF8 |
- 0x20 | 0x04 | Big "5"
- 0x21 | 0x84 |
- 0x22 | 0x44 |
- 0x23 | 0xC4 /
- -------+----------
- 0x24 | 0x24 \
- 0x25 | 0xA4 |
- 0x26 | 0x64 | Big "6"
- 0x27 | 0xE4 |
- 0x28 | 0x14 |
- 0x29 | 0x94 /
- -------+----------
- 0x2A | 0x54 \
- 0x2B | 0xD4 |
- 0x2C | 0x34 | Big "7"
- 0x2D | 0xB4 |
- 0x2E | 0x74 |
- 0x2F | 0xF4 /
- -------+----------
-
- So we extract the following decryption table:
-
- 0 <-> 0; 1 <-> 8; 2 <-> 4; 3 <-> C
- 4 <-> 2; 5 <-> A; 6 <-> 6; 7 <-> E
- 8 <-> 1; 9 <-> 9; A <-> 5; B <-> D
- C <-> 3; D <-> B; E <-> 7; F <-> F
-
- ...and then swap nibbles.
-
- Also note that the values are inverted/mirrored bits of the original ones.
-
- 0x01 (0001) <-> 0x08 (1000)
- 0x02 (0010) <-> 0x04 (0100)
- 0x03 (0011) <-> 0x0C (1100)
- 0x04 (0100) <-> 0x04 (0010)
- 0x05 (0101) <-> 0x0A (1010)
- ...and so on.
-
- To properly decrypt the thing 'on the fly' as the hardware does, I applied a bitswap into TILE_GET_INFO.
- This method rearrange the tile number for each tile called to be drawn.
-
- The final algorithm is:
- digit #3
- +-------+ swapped digits 1 & 2
- | | +-------+------+
- tile_offset = bitswap<16>((tile_offset & 0xfff),15,14,13,12, 8,9,10,11, 0,1,2,3, 4,5,6,7)
- | | | | | | | | || | | |
- inverted inverted|inverted
- bitorder bitorder|bitorder
- Colors are scrambled in the following way:
-
- Normal | Scrambled
- offset | offset
- ----------+-----------
- 0x00-0x0F | 0x00-0x0F
- 0x10-0x1F | 0x80-0x8F
- 0x20-0x2F | 0x40-0x4F
- 0x30-0x3F | 0xC0-0xCF
- 0x40-0x4F | 0x20-0x2F
- 0x50-0x5F | 0xA0-0xAF
- 0x60-0x6F | 0x60-0x6F
- 0x70-0x7F | 0xE0-0xEF
- ----------+-----------
- 0x80-0x8F | 0x10-0x1F
- 0x90-0x9F | 0x90-0x9F
- 0xA0-0xAF | 0x50-0x5F
- 0xB0-0xBF | 0xD0-0xDF
- 0xC0-0xCF | 0x30-0x3F
- 0xD0-0xDF | 0xB0-0xBF
- 0xE0-0xEF | 0x70-0x7F
- 0xF0-0xFF | 0xF0-0xFF
-
- And each one of these segments are internally scrambled too.
-
- So, the algorithm to properly decrypt the color codes is very different here:
-
- 1st nibble
- inverted bitorder
- | | | |
- color_index = bitswap<8>(color_index,4,5,6,7,2,3,0,1)
- <-> <->
- 2nd nibble
- swappeed pairs
-
- Scary, huh?... ;-)
-
-
------------------------------------------------------------------------------------
-
- * Crystals Color
-
- - Tile matrix and color data (video & color RAM) are totally encrypted/scrambled.
-
- You can see the following table, where 'Normal tile #' is the tile number called
- to be drawn, and 'Scrambled tile #' is the physical tile position in the matrix:
-
- Normal | Scrambled
- tile # | tile #
- -------+-----------
- 0x00 | 0x000 \
- 0x01 | 0x800 |
- 0x02 | 0x100 | Big "0"
- 0x03 | 0x900 |
- 0x04 | 0x004 |
- 0x05 | 0x804 /
- -------+-----------
- 0x06 | 0x104 \
- 0x07 | 0x904 |
- 0x08 | 0x008 | Big "1"
- 0x09 | 0x808 |
- 0x0A | 0x108 |
- 0x0B | 0x908 /
- -------+-----------
- 0x0C | 0x00C \
- 0x0D | 0x80C |
- 0x0E | 0x10C | Big "2"
- 0x0F | 0x90C |
- 0x10 | 0x010 |
- 0x11 | 0x810 /
- -------+-----------
- 0x12 | 0x110 \
- 0x13 | 0x910 |
- 0x14 | 0x014 | Big "3"
- 0x15 | 0x814 |
- 0x16 | 0x114 |
- 0x17 | 0x914 /
- -------+-----------
- 0x18 | 0x018 \
- 0x19 | 0x818 |
- 0x1A | 0x118 | Big "4"
- 0x1B | 0x918 |
- 0x1C | 0x01C |
- 0x1D | 0x81C /
- -------+-----------
- 0x1E | 0x11C \
- 0x1F | 0x91C |
- 0x20 | 0x200 | Big "5"
- 0x21 | 0xA00 |
- 0x22 | 0x300 |
- 0x23 | 0xB00 /
- -------+-----------
- 0x24 | 0x204 \
- 0x25 | 0xA04 |
- 0x26 | 0x304 | Big "6"
- 0x27 | 0xB04 |
- 0x28 | 0x208 |
- 0x29 | 0xA08 /
- -------+-----------
- 0x2A | 0x308 \
- 0x2B | 0xB08 |
- 0x2C | 0x20C | Big "7"
- 0x2D | 0xA0C |
- 0x2E | 0x30C |
- 0x2F | 0xB0C /
- -------+-----------
-
-
- Will see some binary patterns...
-
- TILE NORMAL POS SCRAMBLED POS
- -----+---------------+---------------
- 00: 0000 0000 0000 : 0000 0000 0000
- 01: 0000 0000 0001 : 1000 0000 0000
- 02: 0000 0000 0010 : 0001 0000 0000
- 03: 0000 0000 0011 : 1001 0000 0000
- 04: 0000 0000 0100 : 0000 0000 0100
- 05: 0000 0000 0101 : 1000 0000 0100
- 06: 0000 0000 0110 : 0001 0000 0100
- 07: 0000 0000 0111 : 1001 0000 0100
-
- 08: 0000 0000 1000 : 0000 0000 1000
- 09: 0000 0000 1001 : 1000 0000 1000
- 0A: 0000 0000 1010 : 0001 0000 1000
- 0B: 0000 0000 1011 : 1001 0000 1000
- 0C: 0000 0000 1100 : 0000 0000 1100
- 0D: 0000 0000 1101 : 1000 0000 1100
- 0E: 0000 0000 1110 : 0001 0000 1100
- 0F: 0000 0000 1111 : 1001 0000 1100
-
- 10: 0000 0001 0000 : 0000 0001 0000
- 11: 0000 0001 0001 : 1000 0001 0000
- 12: 0000 0001 0010 : 0001 0001 0000
- 13: 0000 0001 0011 : 1001 0001 0000
- 14: 0000 0001 0100 : 0000 0001 0100
- 15: 0000 0001 0101 : 1000 0001 0100
- 16: 0000 0001 0110 : 0001 0001 0100
- 17: 0000 0001 0111 : 1001 0001 0100
-
- 18: 0000 0001 1000 : 0000 0001 1000
- 19: 0000 0001 1001 : 1000 0001 1000
- 1A: 0000 0001 1010 : 0001 0001 1000
- 1B: 0000 0001 1011 : 1001 0001 1000
- 1C: 0000 0001 1100 : 0000 0001 1100
- 1D: 0000 0001 1101 : 1000 0001 1100
- 1E: 0000 0001 1110 : 0001 0001 1100
- 1F: 0000 0001 1111 : 1001 0001 1100
-
- 20: 0000 0010 0000 : 0010 0000 0000
- 21: 0000 0010 0001 : 1010 0000 0000
- 22: 0000 0010 0010 : 0011 0000 0000
- 23: 0000 0010 0011 : 1011 0000 0000
- 24: 0000 0010 0100 : 0010 0000 0100
- 25: 0000 0010 0101 : 1010 0000 0100
- 26: 0000 0010 0110 : 0011 0000 0100
- 27: 0000 0010 0111 : 1011 0000 0100
-
- 28: 0000 0010 1000 : 0010 0000 1000
- 29: 0000 0010 1001 : 1010 0000 1000
- 2A: 0000 0010 1010 : 0011 0000 1000
- 2B: 0000 0010 1011 : 1011 0000 1000
- 2C: 0000 0010 1100 : 0010 0000 1100
- 2D: 0000 0010 1101 : 1010 0000 1100
- 2E: 0000 0010 1110 : 0011 0000 1100
- 2F: 0000 0010 1111 : 1011 0000 1100
-
- 40: 0000 0100 0000 : 0000 0100 0000
- 80: 0000 1000 0000 : 0000 1000 0000
- C0: 0000 1100 0000 : 0000 1100 0000
- 100: 0001 0000 0000 : 0000 0000 0010
-
-
- We have enough data to arrange the following bitswap:
-
- FEDCBA9876543210 -> normal tile index.
- ||||||||||||
- |||||||||||+--> B -
- ||||||||||+---> 8 \
- |||||||||+----> 2 |
- ||||||||+-----> 3 |
- |||||||+------> 4 |
- ||||||+-------> 9 |> FEDC0A517694328B -> encrypted tile index.
- |||||+--------> 6 |
- ||||+---------> 7 |
- |||+----------> 1 |
- ||+-----------> 5 |
- |+------------> A /
- +-------------> 0 -
-
-
- - Color RAM: Colors are scrambled in the following way:
-
- Normal | Scrambled
- offset | offset
- ----------+-----------
- 0x00-0x1F | 0x00-0x1F
- 0x20-0x3F | 0x40-0x5F
- 0x40-0x5F | 0x20-0x3F
- 0x60-0x7F | 0x60-0x7F
- ----------+-----------
- 0x80-0x9F | 0x80-0x9F
- 0xA0-0xBF | 0xC0-0xDF
- 0xC0-0xDF | 0xA0-0xBF
- 0xE0-0xFF | 0xE0-0xFF
-
-
- The color codes are swapped in blocks of 32 bytes. 0x20<->0x40 and 0xA0<->0xC0,
- giving us the following binary representation:
-
- Normal | Scrambled
- offset | offset
- ---------------+-----------
- 00: 0000 0000 : 0000 0000
- 20: 0010 0000 : 0100 0000 <-- changed
- 40: 0100 0000 : 0010 0000 <-- changed
- 60: 0110 0000 : 0110 0000
- 80: 1000 0000 : 1000 0000
- A0: 1010 0000 : 1100 0000 <-- changed
- C0: 1100 0000 : 1010 0000 <-- changed
- E0: 1110 0000 : 1110 0000
-
-
- So, the algorithm to properly decrypt the color codes is the following one:
-
- color_index = bitswap<8>(color_index,7,5,6,4,3,2,1,0)
- | |
- swapped
-
- Happy end here :)
-
-
-***********************************************************************************
-
- * MEMORY MAPS *
- ---------------
-
- (Old hardware)
-
- $0000 - $07FF NVRAM (battery backed 6116) ;R/W, all registers and settings.
- $1000 - $1000 OKI6295 ;R/W, sound.
- $4000 - $4000 Input Port 0 ;R
- $4001 - $4001 Input Port 1 ;R
- $4002 - $4002 Input Port 2 ;R
- $4003 - $4003 Input Port 3 ;R , DIP switches.
- $5000 - $5000 Output Port 0 ; W, lamps & counters.
- $5001 - $5001 Output Port 1 ; W, lamps.
- $6000 - $6FFF Video RAM
- $7000 - $7FFF Color RAM
- $8000 - $FFFF ROM Space
-
-
- (New hardware)
-
- $0000 - $07FF NVRAM (battery backed 6116) ;R/W, all registers and settings.
- $1000 - $1000 OKI6295 ;R/W, sound.
- $3000 - $3000 Input Port 0 ;R
- $3001 - $3001 Input Port 1 ;R
- $3002 - $3002 Input Port 2 ;R
- $3003 - $3003 Input Port 3 ;R , DIP switches.
- $3004 - $3004 Input Port 4 ;R , bit 7 in parallel with DIP switch 1.
- $5000 - $5000 Output Port 0 ; W, lamps & counters.
- $5001 - $5001 Output Port 1 ; W, lamps.
- $6000 - $6FFF Video RAM
- $7000 - $7FFF Color RAM
- $8000 - $FFFF ROM Space
-
-
- (Crystals hardware)
-
- $0000 - $07FF NVRAM (battery backed 6116) ;R/W, all registers and settings.
- $1000 - $1000 Output Port 0 ; W, lamps & counters.
- $1001 - $1001 Output Port 1 ; W, lamps.
- $2000 - $2008 Special Input ;R , special ports meant for data channels...
- $3000 - $3000 Input Port 0 ;R
- $3001 - $3001 Input Port 1 ;R
- $3002 - $3002 Input Port 2 ;R
- $3003 - $3003 Input Port 3 ;R , DIP switches.
- $5000 - $5000 OKI6295 ;R/W, sound.
- $6000 - $6FFF Video RAM
- $7000 - $7FFF Color RAM
- $8000 - $FFFF ROM Space
-
-
-***********************************************************************************
-
- *** Driver Updates ***
-
-
- [2016/03/30]
-
- - Added Crystals Colours (v1.02)
- - Set the new set as parent.
- - Added proper default NVRAM.
- - Added technical notes.
-
-
- [2013/05/12]
-
- Crystals Colours:
- - Decrypted the tile matrix / video RAM.
- - Wrote proper memory map and inputs from the scratch.
- - Bypassed the program data channels protection.
- - Decrypted the colors / color RAM.
- - Added button-lamps support.
- - Created a default NVRAM.
- - Promoted to working state.
- - Added technical and encryption notes...
-
- Snooker 10:
- - Fixed NVRAM size.
- - Added default NVRAM.
-
- Apple 10:
- - Fixed NVRAM size.
- - Added default NVRAM.
-
- Ten Balls:
- - Fixed NVRAM size.
- - Added default NVRAM.
-
-
- [2013/05/04]
-
- - Added Crystals Colours (Ver 1.01).
-
-
- [2008/10/09]
-
- - Reworked the button-lamps matrix system.
- - Documented both output ports.
- - Connected coin in, key in and payout counters.
- - Improved the lamps layout to be more realistic.
- - Updated technical notes.
-
-
- [2008/06/09]
-
- - Fixed the tilemap size.
- - Fixed the screen size.
- - Updated technical notes.
-
-
- [2008/05/29]
-
- - Switched the color system to RESNET calculations.
- - Hooked the infamous bit7 of Input Port 0x3004 in parallel to DIP switch 1.
- This allow to use the PAYOUT button to trigger the Super Game instead of STOP 5.
- - Demultiplexed lamps matrix.
- - Added lamps support, but is still imperfect.
- - Updated technical notes.
-
-
- [2008/05/22]
-
- - Confirmed the CPU clock after some PCB measurements.
- - Changed the SND clock to 1MHz to match the PCB measurement.
- - Corrected the internal OKI6295 frequency turning the pin 7 state to HIGH.
- - Inputs: Eliminated all pulse limitations.
- Affected buttons have a rattled sound in the real thing too.
- - Updated technical notes.
-
-
- [2008/04/28]
-
- - Created a new machine driver for tenballs due to different memory map.
- - Worked all the input ports from the scratch.
- - Fixed the sound ROM_REGION.
- - Added the oki6295 emulation to all games.
- - Hooked output ports.
- - Documented and calculated all bits related to lamps.
- - Adjusted palette lenght to 256 colors.
- - Totally decrypted the apple10 color matrix. Now colors are perfect.
- - Created a new machine driver for apple10 due to encryption.
- - Reverse engineering the code to complete the DIP switches.
- - Added diplocations to DIP switches.
- - Promoted snookr10, apple10 and tenballs to 'WORKING' state.
- - Added game instructions & notes.
- - Updated encryption & technical notes.
-
-
- [2008/04/24]
-
- - Decrypted the apple10 tile matrix.
- - Partially decrypted the apple10 color codes.
- - Added encryption notes.
- - Updated technical notes.
-
-
- [2008/04/18]
-
- - Initial release. Support for snookr10, apple10 and tenballs.
- - Added technical/general notes.
-
-
- *** TO DO ***
-
- - Nothing... :)
-
-***********************************************************************************/
-
-
-#include "emu.h"
-#include "includes/snookr10.h"
-
-#include "cpu/m6502/m65sc02.h"
-#include "machine/nvram.h"
-#include "sound/okim6295.h"
-#include "screen.h"
-#include "speaker.h"
-
-#include "snookr10.lh"
-
-
-#define MASTER_CLOCK XTAL(16'000'000)
-
-/**********************
-* Read/Write Handlers *
-* - Input Ports - *
-**********************/
-
-READ8_MEMBER(snookr10_state::dsw_port_1_r)
-{
-/*
- --------------------------------
- PORT 0x3004 ;INPUT PORT 4
- --------------------------------
- BIT 0 =
- BIT 1 =
- BIT 2 =
- BIT 3 =
- BIT 4 =
- BIT 5 =
- BIT 6 =
- BIT 7 = Complement of DS1, bit 7
- ---------------------------------
-*/
-return ioport("SW1")->read();
-}
-
-
-/**********************
-* Read/Write Handlers *
-* - Output Ports - *
-**********************/
-
-/* Lamps are multiplexed using a 6 bit matrix.
- The first 4 bits are from Port A, and the
- remaining 2 are from Port B.
-
- LAMPS components:
-
- START = bit5
- CANCEL = bit2
- STOP1 = bit0
- STOP2 = bit1
- STOP3 = bit0
- STOP4 = bit3
- STOP5 = bit4
-*/
-
-WRITE8_MEMBER(snookr10_state::output_port_0_w)
-{
-/*
- ----------------------------
- PORT 0x5000 ;OUTPUT PORT A
- ----------------------------
- BIT 0 = Coin counter.
- BIT 1 = Lamps matrix, m_bit0.
- BIT 2 = Payout x10.
- BIT 3 = Lamps matrix, m_bit1.
- BIT 4 = Key in.
- BIT 5 = Lamps matrix, m_bit2.
- BIT 6 =
- BIT 7 = Lamps matrix, m_bit3.
- ----------------------------
-*/
- m_outportl = data;
-
- m_bit0 = (data >> 1) & 1;
- m_bit1 = (data >> 3) & 1;
- m_bit2 = (data >> 5) & 1;
- m_bit3 = (data >> 7) & 1;
- m_bit4 = m_outporth & 1;
- m_bit5 = (m_outporth >> 1) & 1;
-
- m_lamps[0] = m_bit5; /* Lamp 0 - START */
- m_lamps[1] = m_bit2; /* Lamp 1 - CANCEL */
- m_lamps[2] = m_bit0; /* Lamp 2 - STOP1 */
- m_lamps[3] = m_bit1; /* Lamp 3 - STOP2 */
- m_lamps[4] = m_bit0; /* Lamp 4 - STOP3 */
- m_lamps[5] = m_bit3; /* Lamp 5 - STOP4 */
- m_lamps[6] = m_bit4; /* Lamp 6 - STOP5 */
-
- machine().bookkeeping().coin_counter_w(0, data & 0x01); /* Coin in */
- machine().bookkeeping().coin_counter_w(1, data & 0x10); /* Key in */
- machine().bookkeeping().coin_counter_w(2, data & 0x04); /* Payout x10 */
-
-// logerror("high: %04x - low: %X \n", m_outporth, m_outportl);
-// popmessage("written : %02X", data);
-}
-
-WRITE8_MEMBER(snookr10_state::output_port_1_w)
-{
-/*
- ----------------------------
- PORT 0x5001 ;OUTPUT PORT B
- ----------------------------
- BIT 0 = Lamps matrix, m_bit4
- BIT 1 = Lamps matrix, m_bit5
- BIT 2 =
- BIT 3 =
- BIT 4 =
- BIT 5 =
- BIT 6 =
- BIT 7 =
- ----------------------------
-*/
- m_outporth = data << 8;
-
- m_bit0 = (m_outportl >> 1) & 1;
- m_bit1 = (m_outportl >> 3) & 1;
- m_bit2 = (m_outportl >> 5) & 1;
- m_bit3 = (m_outportl >> 7) & 1;
- m_bit4 = data & 1;
- m_bit5 = (data >> 1) & 1;
-
- m_lamps[0] = m_bit5; /* Lamp 0 - START */
- m_lamps[1] = m_bit2; /* Lamp 1 - CANCEL */
- m_lamps[2] = m_bit0; /* Lamp 2 - STOP1 */
- m_lamps[3] = m_bit1; /* Lamp 3 - STOP2 */
- m_lamps[4] = m_bit0; /* Lamp 4 - STOP3 */
- m_lamps[5] = m_bit3; /* Lamp 5 - STOP4 */
- m_lamps[6] = m_bit4; /* Lamp 6 - STOP5 */
-}
-
-
-READ8_MEMBER(snookr10_state::port2000_8_r)
-{
-/*
- Ports 2000-2008 expect data, otherwise the program trigger
- a sort of service-text mode, sets 300000 points and starts
- to decrease the amount one by one, triggering a sound each
- time the amount is decremented.
-*/
- return 0xff;
-}
-
-/*************************
-* Memory map information *
-*************************/
-
-void snookr10_state::snookr10_map(address_map &map)
-{
- map(0x0000, 0x07ff).ram().share("nvram"); /* battery backed 6116 */
- map(0x1000, 0x1000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x3000, 0x3000).portr("IN0"); /* IN0 */
- map(0x3001, 0x3001).portr("IN1"); /* IN1 */
- map(0x3002, 0x3002).portr("IN2"); /* IN2 */
- map(0x3003, 0x3003).portr("SW1"); /* DS1 */
- map(0x3004, 0x3004).r(FUNC(snookr10_state::dsw_port_1_r)); /* complement of DS1, bit 7 */
- map(0x5000, 0x5000).w(FUNC(snookr10_state::output_port_0_w)); /* OUT0 */
- map(0x5001, 0x5001).w(FUNC(snookr10_state::output_port_1_w)); /* OUT1 */
- map(0x6000, 0x6fff).ram().w(FUNC(snookr10_state::snookr10_videoram_w)).share("videoram");
- map(0x7000, 0x7fff).ram().w(FUNC(snookr10_state::snookr10_colorram_w)).share("colorram");
- map(0x8000, 0xffff).rom();
-}
-
-void snookr10_state::tenballs_map(address_map &map)
-{
- map(0x0000, 0x07ff).ram().share("nvram"); /* battery backed 6116 */
- map(0x1000, 0x1000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x4000, 0x4000).portr("IN0"); /* IN0 */
- map(0x4001, 0x4001).portr("IN1"); /* IN1 */
- map(0x4002, 0x4002).portr("IN2"); /* IN2 */
- map(0x4003, 0x4003).portr("SW1"); /* DS1 */
- map(0x5000, 0x5000).w(FUNC(snookr10_state::output_port_0_w)); /* OUT0 */
- map(0x5001, 0x5001).w(FUNC(snookr10_state::output_port_1_w)); /* OUT1 */
- map(0x6000, 0x6fff).ram().w(FUNC(snookr10_state::snookr10_videoram_w)).share("videoram");
- map(0x7000, 0x7fff).ram().w(FUNC(snookr10_state::snookr10_colorram_w)).share("colorram");
- map(0x8000, 0xffff).rom();
-}
-
-void snookr10_state::crystalc_map(address_map &map)
-{
- map(0x0000, 0x07ff).ram().share("nvram"); /* battery backed 6116 */
- map(0x1000, 0x1000).w(FUNC(snookr10_state::output_port_0_w)); /* OUT0 */
- map(0x1001, 0x1001).w(FUNC(snookr10_state::output_port_1_w)); /* OUT1 */
- map(0x2000, 0x2008).r(FUNC(snookr10_state::port2000_8_r)); /* unknown... protection or data channels? */
- map(0x3000, 0x3000).portr("IN0"); /* IN0 */
- map(0x3001, 0x3001).portr("IN1"); /* IN1 */
- map(0x3002, 0x3002).portr("IN2"); /* IN2 */
- map(0x3003, 0x3003).portr("SW1"); /* DS1 */
- map(0x5000, 0x5000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x6000, 0x6fff).ram().w(FUNC(snookr10_state::snookr10_videoram_w)).share("videoram");
- map(0x7000, 0x7fff).ram().w(FUNC(snookr10_state::snookr10_colorram_w)).share("colorram");
- map(0x8000, 0xffff).rom();
-}
-
-
-/*************************
-* Input ports *
-*************************/
-
-/* Eliminated all PORT_IMPULSE limitations.
- All Hold & Cancel buttons have a rattle sound in the real PCB. */
-
-static INPUT_PORTS_START( snookr10 )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote x100") PORT_CODE(KEYCODE_Q)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1") /* Input Test in stats mode */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancella (Cancel) / Play / Bet")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start (Deal) / Raddoppio (Double-Up)")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Risk (Half Gamble) / Super Game")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Estatistica (Stats)")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("Management")
- 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_OTHER ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_T)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper")
- 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_PAYOUT ) PORT_NAME("Scarica (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("SW1")
- PORT_DIPNAME( 0x03, 0x00, "Pool Value" ) PORT_DIPLOCATION("SW1:7,8")
- PORT_DIPSETTING( 0x03, "100" )
- PORT_DIPSETTING( 0x02, "200" )
- PORT_DIPSETTING( 0x01, "500" )
- PORT_DIPSETTING( 0x00, "1000" )
- PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,6")
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin / 10 Credits" )
- PORT_DIPNAME( 0x10, 0x10, "Super Game Settings" ) PORT_DIPLOCATION("SW1:4")
- PORT_DIPSETTING( 0x10, "Play to Payout" )
- PORT_DIPSETTING( 0x00, "Direct Payout" )
- PORT_DIPNAME( 0x60, 0x60, "Super Game Payment Type" ) PORT_DIPLOCATION("SW1:3,2")
- PORT_DIPSETTING( 0x00, "Manual - User Choice" )
- PORT_DIPSETTING( 0x20, "Manual - Coins" )
- PORT_DIPSETTING( 0x40, "Manual - Tickets" )
- PORT_DIPSETTING( 0x60, "Automatic" )
- PORT_DIPNAME( 0x80, 0x80, "Super Game Button" ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x00, "PAYOUT button" )
- PORT_DIPSETTING( 0x80, "STOP 5 button" )
-INPUT_PORTS_END
-
-/* Eliminated all PORT_IMPULSE limitations.
- All Hold & Cancel buttons have a rattle sound in the real PCB. */
-
-static INPUT_PORTS_START( apple10 )
- PORT_INCLUDE( snookr10 )
-
- PORT_MODIFY("SW1")
- PORT_DIPNAME( 0x03, 0x00, "Pool Value" ) PORT_DIPLOCATION("SW1:7,8")
- PORT_DIPSETTING( 0x03, "100" )
- PORT_DIPSETTING( 0x02, "200" )
- PORT_DIPSETTING( 0x01, "500" )
- PORT_DIPSETTING( 0x00, "1000" )
- PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,6")
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin / 10 Credits" )
- PORT_DIPNAME( 0x10, 0x10, "Super Game Settings" ) PORT_DIPLOCATION("SW1:4")
- PORT_DIPSETTING( 0x10, "Play to Payout" )
- PORT_DIPSETTING( 0x00, "Direct Payout" )
- PORT_DIPNAME( 0x60, 0x60, "Super Game Payment Type" ) PORT_DIPLOCATION("SW1:3,2")
- PORT_DIPSETTING( 0x00, "Manual - Coins 1" )
- PORT_DIPSETTING( 0x20, "Manual - Coins 2" )
- PORT_DIPSETTING( 0x40, "Disable Payment/Game" )
- PORT_DIPSETTING( 0x60, "Automatic" )
- PORT_DIPNAME( 0x80, 0x80, "Super Game Button" ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x00, "PAYOUT button" )
- PORT_DIPSETTING( 0x80, "STOP 5 button" )
-INPUT_PORTS_END
-
-/* Eliminated all PORT_IMPULSE limitations.
- All Hold & Cancel buttons have a rattle sound in the real PCB. */
-
-static INPUT_PORTS_START( tenballs )
- PORT_INCLUDE( snookr10 )
-
- /* tenballs seems a prototype, most DIP
- switches seems to do nothing at all.
- */
- PORT_MODIFY("SW1")
- PORT_DIPNAME( 0x03, 0x00, "Pool Value" ) PORT_DIPLOCATION("SW1:7,8")
- PORT_DIPSETTING( 0x03, "100" )
- PORT_DIPSETTING( 0x02, "200" )
- PORT_DIPSETTING( 0x01, "500" )
- PORT_DIPSETTING( 0x00, "1000" )
- /* coinage is always 1 coin - 10 credits */
- 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 ) )
- /* always play Super Game to payout */
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- /* always manual payout */
- 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 ) )
- /* Super Game always 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( crystalc )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Remote x100") PORT_CODE(KEYCODE_Q)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Stop 1")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancella (Cancel) / Play / Bet")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start (Deal) / Raddoppio (Double-Up)")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Stop 5 / Risk (Half Gamble) / Super Game")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Statistica (Stats)")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("Management")
- 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_OTHER ) PORT_NAME("Ticket") PORT_CODE(KEYCODE_T)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) 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_PAYOUT ) PORT_NAME("Scarica (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 ) // SG vs real value in paytable.
- 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("SW1")
- PORT_DIPNAME( 0x03, 0x00, "Bull Value" ) PORT_DIPLOCATION("SW1:7,8")
- PORT_DIPSETTING( 0x03, "100" )
- PORT_DIPSETTING( 0x02, "200" )
- PORT_DIPSETTING( 0x01, "500" )
- PORT_DIPSETTING( 0x00, "1000" )
- 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, "Payment Type" ) PORT_DIPLOCATION("SW1:3,2")
- PORT_DIPSETTING( 0x00, "Ticket + Coins" )
- PORT_DIPSETTING( 0x20, "Ticket only" )
- PORT_DIPSETTING( 0x40, "Coins only" )
- PORT_DIPSETTING( 0x60, "Ticket + Coins" )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( crystalca )
- PORT_INCLUDE( crystalc )
-
- PORT_MODIFY("SW1")
- PORT_DIPNAME( 0x03, 0x00, "Pool Value" ) PORT_DIPLOCATION("SW1:7,8")
- PORT_DIPSETTING( 0x03, "100" )
- PORT_DIPSETTING( 0x02, "200" )
- PORT_DIPSETTING( 0x01, "500" )
- PORT_DIPSETTING( 0x00, "1000" )
-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 },
- { 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( gfx_snookr10 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout, 0, 16 )
-GFXDECODE_END
-
-
-/**************************
-* Machine Drivers *
-**************************/
-
-void snookr10_state::snookr10(machine_config &config)
-{
- /* basic machine hardware */
- M65SC02(config, m_maincpu, MASTER_CLOCK/8); /* 2 MHz (1.999 MHz measured) */
- m_maincpu->set_addrmap(AS_PROGRAM, &snookr10_state::snookr10_map);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- /* 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(96*4, 30*8);
- screen.set_visarea(0*4, 96*4-1, 0*8, 30*8-1);
- screen.set_screen_update(FUNC(snookr10_state::screen_update_snookr10));
- screen.set_palette("palette");
- screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI);
-
- GFXDECODE(config, m_gfxdecode, "palette", gfx_snookr10);
- PALETTE(config, "palette", FUNC(snookr10_state::snookr10_palette), 256);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- OKIM6295(config, "oki", MASTER_CLOCK/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.8); /* 1 MHz (995.5 kHz measured); pin7 checked HIGH on PCB */
-}
-
-void snookr10_state::apple10(machine_config &config)
-{
- snookr10(config);
-
- /* video hardware */
- subdevice<palette_device>("palette")->set_init(FUNC(snookr10_state::apple10_palette));
- MCFG_VIDEO_START_OVERRIDE(snookr10_state, apple10)
-}
-
-void snookr10_state::tenballs(machine_config &config)
-{
- snookr10(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &snookr10_state::tenballs_map);
-}
-
-void snookr10_state::crystalc(machine_config &config)
-{
- snookr10(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &snookr10_state::crystalc_map);
-
- subdevice<palette_device>("palette")->set_init(FUNC(snookr10_state::crystalc_palette));
- MCFG_VIDEO_START_OVERRIDE(snookr10_state, crystalc)
-}
-
-
-/*************************
-* Rom Load *
-*************************/
-
-ROM_START( snookr10 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "1.u2", 0x8000, 0x8000, CRC(216ccb2d) SHA1(d86270cd03a08f6fd3e7b327b8173f66da28e5e8) )
-
- ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "2.u22", 0x0000, 0x8000, CRC(a70d9c48) SHA1(3fa90190323526553866662afda4dbe1c94abeff) )
- ROM_LOAD( "3.u25", 0x8000, 0x8000, CRC(3009faaa) SHA1(d1cda455b270cb9afa65b9701735a3a1f2a48df2) )
-
- ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "4.u18", 0x00000, 0x40000, CRC(17090d56) SHA1(3a4c247f96c80f8cf4c1389b273880c5ea6fc39d) )
-
- ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */
- ROM_LOAD( "snooker_10_nvram.bin", 0x0000, 0x0800, CRC(d383363b) SHA1(88f0d9e53b0bd276d01cefd817f0edcd753322dc) )
-
- /* this should be changed because the palette is stored in a normal ROM instead of a color PROM */
- ROM_REGION( 0x8000, "proms", 0 )
- ROM_LOAD( "5.u27", 0x0000, 0x8000, CRC(f3d7d640) SHA1(f78060f4603e316fa3c2ec4ba6d7edf261cf6d8a) )
-ROM_END
-
-ROM_START( apple10 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "1.u2", 0x8000, 0x8000, CRC(7d538566) SHA1(2e805157010c366ab1f2313a2bedb071c1dde733) )
-
- ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "2.u22", 0x0000, 0x8000, CRC(42b016f4) SHA1(59d1b77f8cb706a3878813111c6a71514c413784) )
- ROM_LOAD( "3.u25", 0x8000, 0x8000, CRC(afc535dc) SHA1(ed2d65f3154c6d80b7b22bfef1f30232e4496128) )
-
- ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "4.u18", 0x00000, 0x40000, CRC(17090d56) SHA1(3a4c247f96c80f8cf4c1389b273880c5ea6fc39d) )
-
- ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */
- ROM_LOAD( "apple_10_nvram.bin", 0x0000, 0x0800, CRC(00069b55) SHA1(378ca25dc3173252548bc27e80909e1b2b4d58db) )
-
- /* this should be changed because the palette is stored in a normal ROM instead of a color PROM */
- ROM_REGION( 0x8000, "proms", 0 )
- ROM_LOAD( "5.u27", 0x0000, 0x8000, CRC(3510d705) SHA1(2190c8199d29bf89e3007eb771cc6b0e2b58f6cd) )
-ROM_END
-
-ROM_START( tenballs )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "4.u2", 0x8000, 0x8000, CRC(2f334862) SHA1(61d57995451b6bc7de23900c460c3e073993899c) )
-
- ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "3.u16", 0x0000, 0x8000, CRC(9eb88a08) SHA1(ab52924103e2b14c598a21c3d77b053da37a0212) )
- ROM_LOAD( "2.u15", 0x8000, 0x8000, CRC(a5091583) SHA1(c0775d9b77cb634d3702b6c08cdf73c867b6169a) )
-
- ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "1.u28", 0x00000, 0x40000, CRC(17090d56) SHA1(3a4c247f96c80f8cf4c1389b273880c5ea6fc39d) )
-
- ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */
- ROM_LOAD( "ten_balls_nvram.bin", 0x0000, 0x0800, CRC(42a5803f) SHA1(2c8c9ec0f26a947cf9cfa2e91e9127725becdef5) )
-
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "82s147.u17", 0x0000, 0x0200, CRC(20234dcc) SHA1(197937bbec0201888467e250bdba49e39aa4204a) )
-ROM_END
-
-/*
- Crystals Colours
-
- Ver 1.01
- The top left bonus is called "Pool"
-
- Ver 1.02
- The top left bonus is called "Bull"
- Minor differences against Ver 1.01
- (see code at 0x9da0 onward...)
-
- PROMs and ADPCM are identicals.
-
- Coinage seems to be fixed to:
- - Coin A: 10 credits per coin.
- - Coin B: 10 credits per coin.
- - Key In: 100 credits per coin.
-
-*/
-ROM_START( crystalc )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "crystals_colours_1__,1.02.u2", 0x8000, 0x8000, CRC(a803d857) SHA1(8eb34f6b4f820776459d92f9c589794bec7547ea) )
-
- ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "crystals_colours_2_l.425.u16", 0x0000, 0x8000, CRC(834aba76) SHA1(86c1f282c11a4bb058ab702c237b76a620b99cc7) )
- ROM_LOAD( "crystals_colours_3_l.425.u15", 0x8000, 0x8000, CRC(7f14f66a) SHA1(daba9a687b8985edfb61e21ba010544f97523bdc) )
-
- ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "crystals_colours_4.u28", 0x00000, 0x40000, CRC(ecc6b575) SHA1(f6032e89b30aebeab9ad721608277430084256bc) )
-
- ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */
- ROM_LOAD( "crystals_colours_1.02_nvram.bin", 0x0000, 0x0800, CRC(20456301) SHA1(224da8fd8ea0997741bd5a7d51c8ca7f264d2302) )
-
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "am27s29pc.u17", 0x0000, 0x0200, CRC(1af53eab) SHA1(1cac837aed75a77a0b93a294b07f2a8de6fcffef) )
-ROM_END
-
-ROM_START( crystalca )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "crystals_colours_1__,1.01.u2", 0x8000, 0x8000, CRC(ee7a6f62) SHA1(bb3f438ca563eeb4b365d344066b10b9aedb77bb) )
-
- ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "crystals_colours_2.u16", 0x0000, 0x8000, CRC(527c07f6) SHA1(53ceb1d0267e1d76fa1a9325c9a1d2e8e034958d) )
- ROM_LOAD( "crystals_colours_3.u15", 0x8000, 0x8000, CRC(e1003ab7) SHA1(a78bb2e1dc9d578d6a38072e2087f382cffa9f99) )
-
- ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "crystals_colours_4.u28", 0x00000, 0x40000, CRC(ecc6b575) SHA1(f6032e89b30aebeab9ad721608277430084256bc) )
-
- ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */
- ROM_LOAD( "crystals_colours_1.01_nvram.bin", 0x0000, 0x0800, CRC(907d8828) SHA1(ffd302996bee81277c2280fc212d910e0801d81d) )
-
- ROM_REGION( 0x0200, "proms", 0 )
- ROM_LOAD( "am27s29pc.u17", 0x0000, 0x0200, CRC(1af53eab) SHA1(1cac837aed75a77a0b93a294b07f2a8de6fcffef) )
-ROM_END
-
-
-/*************************
-* Game Drivers *
-*************************/
-
-/* YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
-GAMEL( 1998, snookr10, 0, snookr10, snookr10, snookr10_state, empty_init, ROT0, "Sandii'", "Snooker 10 (Ver 1.11)", 0, layout_snookr10 )
-GAMEL( 1998, apple10, 0, apple10, apple10, snookr10_state, empty_init, ROT0, "Sandii'", "Apple 10 (Ver 1.21)", 0, layout_snookr10 )
-GAMEL( 1997, tenballs, snookr10, tenballs, tenballs, snookr10_state, empty_init, ROT0, "<unknown>", "Ten Balls (Ver 1.05)", 0, layout_snookr10 )
-GAMEL( 1998, crystalc, 0, crystalc, crystalc, snookr10_state, empty_init, ROT0, "JCD srl", "Crystals Colours (Ver 1.02)", 0, layout_snookr10 )
-GAMEL( 1998, crystalca, crystalc, crystalc, crystalca, snookr10_state, empty_init, ROT0, "JCD srl", "Crystals Colours (Ver 1.01)", 0, layout_snookr10 )