summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/drivers/amaticmg.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/drivers/amaticmg.c')
-rw-r--r--trunk/src/mame/drivers/amaticmg.c1038
1 files changed, 1038 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/amaticmg.c b/trunk/src/mame/drivers/amaticmg.c
new file mode 100644
index 00000000000..b2665813a5c
--- /dev/null
+++ b/trunk/src/mame/drivers/amaticmg.c
@@ -0,0 +1,1038 @@
+/**********************************************************************************
+
+ AMA-8000-1 / AMA-8000-2 Multi Game System.
+ Amatic Trading GmbH.
+
+ Encrypted gambling hardware based on a custom CPU.
+
+ Driver by Roberto Fresca & Angelo Salese.
+
+
+***********************************************************************************
+
+ Hardware Notes
+ --------------
+
+ ------------------------------------------------
+ Board #1 (Super Stars) AMA-8000-1
+ ------------------------------------------------
+
+ 1x 40-pin custom CPU labeled:
+
+ 0288
+ 8012 (last digit is hard to read)
+ 11.12.96
+
+ 1x Unknown 40-pins IC (maybe 6845).
+ 1x Altera EPM5130LC (84-pins).
+ 1x KS82C55A (2x PPI).
+ 1x Unknown 40-pins IC (maybe another PPI).
+
+ 1x Dallas DS1236-10 (micro manager).
+ 1x Push button.
+
+ 1x Unknown 24-pin IC labeled SM64.
+ 1x Unknown 8-pin IC labeled SM65 (looks like a DAC).
+ 1x Unknown 8-pin IC no labeled (looks like a DAC).
+ 1x MC14538BCL (Dual precision monostable multivibrator).
+ 1x TDA2003 Audio Amp.
+ 1x Pot.
+
+ 1x HY6264ALP-10 (RAM).
+ 1x HY62256ALP-10 (RAM).
+
+ 1x 1mb ROM, near CPU.
+ 2x 27C512 ROMs.
+ 1x N82S147AN bipolar PROM.
+
+ 1x Xtal 16 MHz.
+ 1x DIP switches bank (x8).
+ 1x Battery.
+
+ 1x 2x17 male connector (like IDE ones).
+ 1x 2x8 contacts edge connector.
+ 1x 2x22 contacts edge connector.
+
+
+ ------------------------------------------------
+ Multi-Game I v2.4 (AMA-8000-2)
+ ------------------------------------------------
+
+ 1x 40-pin custom CPU labeled:
+
+ Amatic Trading GMBH
+ Lfnd. Nr. 1000
+ Type: 801 I
+ Datum: 12.02.96
+
+ 1x GoldStar 6845S.
+ 1x Altera EPM5130LC (84-pins).
+ 3x PPI 8255AC-2.
+
+ 1x Dallas DS1236-10 (micro manager).
+ 1x Push button.
+
+ 1x Unknown 24-pin IC labeled K-666 9330.
+ 1x Unknown 8-pin IC labeled K-664 9432 (looks like a DAC).
+ 1x LM358P (8-pin).
+ 1x MC14538BCL (Dual precision monostable multivibrator).
+ 1x TDA2003 Audio Amp.
+ 1x Pot.
+
+ 1x KM6264BL-7 (RAM).
+ 1x HY62256A-10 (RAM).
+
+ 1x 27C2001 ROM labeled MGI V GER 3.9/I/8201.
+ 1x 27C4000 ROM labeled Multi 2.4 ZG1.
+ 1x 27C4001 ROM labeled Multi 2.4 ZG2.
+ 1x 27C4001 ROM labeled Multi 2.4 ZG3.
+ 2x N82S147AN bipolar PROMs.
+
+ 1x Xtal 16 MHz.
+ 1x DIP switches bank (x8).
+ 1x Battery.
+
+ 1x 2x17 male connector (like IDE ones).
+ 1x 2x36 contacts edge connector.
+
+
+ PCB Layout:
+ ________________________________________________________________________
+ | | | | | | | | | | | | | | | | | | | | | | | | | |
+ __________| | | | | | | | | |36x2 edge connector | | | | | | | | | |__________
+ | ____ ____ |
+ | | ::::: | |
+ | |_________| DIP1 |
+ | __________ __________ __________ __________ |
+ ||ULN 2803A | |ULN 2803A | | 12345678 | |ULN 2803A | |
+ ||__________| |__________| |__________| |__________| |
+ | |
+ | __________________________ __________________________ __________________________ |
+ | | NEC JAPAN | | NEC JAPAN | | NEC JAPAN | |
+ | | D8255AC_2 | | D8255AC_2 | | D8255AC_2 | |
+ | | 9150xD006 | | 9150xD006 | | 9150xD006 | |
+ | | | | | | | |
+ | |__________________________| |__________________________| |__________________________| |
+ | |
+ | _________________________ |
+ | |AMATIC TRADING GMBH | __________ _______________ |
+ | |Lfnd. Nr. 1000 | | XTAL | | K_666 | |
+ | |Type: 80 / I | | 16 Mhz | | 9330 | |
+ | |Datum: 12.02.96 | |__________| | | |
+ | |_________________________| |_______________| |
+ | |
+ | ? ____ ___________________ __________________ __ |
+ | / \ |MGI V GER | | | |H | |
+ | | Batt | |3.9 / I / 8201 | | ALTERA | | | |
+ | | ery | |M27C2001 | | | |__| |
+ | \____/ |___________________| | EPM5130LC | |
+ | | I9542 | |
+ | __ _________________ | | __ ______ |
+ | | | |HY62256A | | | |G | /______\ |
+ | | | |LP_10 | | | | | |DALLAS | |
+ | |A | |9506C Korea | | | |__| |DS1994_F| |
+ | | | |_________________| | | |_______5| |
+ | | | |__________________| \______/ |
+ | |__| |
+ | _______________________ __ __ __ __ __ __ |
+ | | ::::::::::::::::: | | | | | | | | | | | | | |
+ | |___________ ___________| | | | | | | | | | | | | ____________ |
+ | |C | |B | |B | |B | |B | |B | | GD74HCT273 | |
+ | __________ _______ | | | | | | | | | | | | |____________| |
+ | |MC14538BCP| | | | | | | | | | | | | | | ____________ |
+ | |__________| |SEC | __ |__| |__| |__| |__| |__| |__| | N82S147AN | |
+ | | KOREA| | | |____________| |
+ | | | | | _______ _______ _______ |
+ | __ __ __ __ | 506Y| |E | | | | | | | |
+ | | | | | | | | | | | | | |MULTI | |MULTI | |MULTI | |
+ | |D | |D | |D | |D | |KM6264B| | | | 2.4| | 2.4| | 2.4| |
+ | | | | | | | | | |L_7 | |__| | | | | | | ____________ |
+ | | | | | | | | | | | | ZG1 | | ZG2 | | ZG3 | | GD74HCT273 | |
+ | |__| |__| |__| |__| |_______| | | | | | | |____________| |
+ | | | | | | | ____________ |
+ | ________________________ __ __ |27C4000| |27C4001| |27C4001| | N82S147AN | |
+ | | GOLDSTAR | | | | | | | | | | | |____________| |
+ | | GM68B45S | | | | | | | | | | | _________ |
+ | | 9512 | |F | |E | |_______| |_______| |_______| |GD74HC174| |
+ | | | | | | | |_________| |
+ | |________________________| | | | | _________ |
+ | | | | | |GD74HC174| |
+ | |__| |__| AMATIC AMA_8000_2 |_________| |
+ |______________________________________________________________________________________________|
+
+ A = Dallas / DS1236_10 / 9443A5
+ B = MALAYSIA 114CS / SN74LS194AN
+ C = MALAYSIA 544CS / SN74LS194AN
+ D = GS 9447 / GD74LS157
+ E = 53A9TKK / SN74HC374N
+ F = GS 9504 / GD74HC244
+ G = LM358P
+ H = K_664 / 9432
+
+
+ DIP1:
+ ___________________
+ | ON |
+ | _______________ |
+ | |_|_|_|_|_|_|_|_| |
+ | |#|#|#|#|#|#|#|#| |
+ | |_______________| |
+ | 1 2 3 4 5 6 7 8 |
+ |___________________|
+
+
+ ------------------------------------------------
+ Multi-Game III v3.5 (AMA-8000-2)
+ ------------------------------------------------
+
+ 1x 40-pin custom CPU labeled:
+
+ Amatic
+ Lfnd. Nr. 99/5070 467
+ Type: 80(1?) I
+ Datum: 10.01.00
+
+ 1x F68B45P.
+ 1x Altera EPM5130LC (84-pins).
+ 3x PPI NEC D71055C.
+
+ 1x Dallas DS1236-5 (micro manager).
+ 1x Push button.
+
+ 1x Yamaha YM3812.
+ 1x Yamaha Y3014B (DAC).
+ 1x LM358M (8-pin).
+ 1x MC14538 (Dual precision monostable multivibrator).
+ 1x TDA2003 (Audio Amp, Heatsinked).
+ 1x Pot.
+
+ 1x HY6264A (RAM).
+ 1x KM62256 (RAM).
+
+ 1x 27C2000 ROM labeled 'MG III VGer 3.5/I/8205'.
+ 1x 27C4000 ROM labeled 'MG III 51 ZG1'.
+ 1x 27C040 ROM labeled 'MG III 51 ZG2'.
+ 1x 27C040 ROM labeled 'MG III 51 ZG3'.
+ 1x 27C1024 labeled 'V'
+
+ 1x Xtal 16 MHz.
+ 1x DIP switches bank (x8).
+ 1x Battery.
+
+ 2x 2x17 male connector (like IDE ones).
+ 1x 2x36 contacts edge connector.
+
+
+***********************************************************************************
+
+
+ Memory Map
+ ----------
+
+ 0000-7FFF ROM Space.
+ 8000-9FFF NVRAM.
+ A000-AFFF Video RAM.
+ B000-BFFF RAM.
+ C000-FFFF ROM Banking
+
+ I/O
+
+ 00-03 PPI 8255 0
+ 20-23 PPI 8255 1
+ 40-41 YM3812 Sound device.
+ 60-60 MC6845 CRTC Address.
+ 61-61 MC6845 CRTC Register.
+ 80-80 unknown (W)
+ C0-C0 ROM Bank selector.
+ E6-E6 NMI Mask.
+
+
+***********************************************************************************
+
+ +------------------------------------------------------------------------------+
+ | AMATIC Standard Edge Connector (Videomat, Multigame) |
+ +----------------------------------------+-------------------------------------+
+ | Component Side | Solder Side |
+ +-------------------+---------------+----+----+---------------+----------------+
+ | Function | Direction | Nr | Nr | Direction | Function |
+ +-------------------+---------------+----+----+---------------+----------------+
+ | Lamp-HOLD3 | OUTPUT | 36 | r | ------ | N/C |
+ | REMOTE-PL | OUTPUT | 35 | p | OUTPUT | COIN-INVERTER |
+ | REMOTE-CLOCK | OUTPUT | 34 | n | OUTPUT | D-OUT |
+ | D-IN | INPUT | 33 | m | SUPPLY | +5V |
+ | REMOTE-SELECT | INPUT | 32 | l | INPUT | ??? |
+ | N/C | ------ | 31 | k | INPUT | ??? |
+ | Coin-INPUT4 | INPUT | 30 | j | INPUT | ??? |
+ | GND | SUPPLY | 29 | h | SUPPLY | GND |
+ | HOPPER-RELAIS | OUTPUT | 28 | f | INPUT | ANTENNE |
+ | N/C | ------ | 27 | e | ------ | N/C |
+ | TICKET-OUT | OUTPUT | 26 | d | ------ | N/C |
+ | N/C | ------ | 25 | c | ------ | N/C |
+ | KEY-DATA | TTLINPUT | 24 | b | TTLINPUT | KEY-DATA |
+ | N/C | ------ | 23 | a | INPUT | KEY-CONTACT |
+ | GND | SUPPLY | 22 | Z | SUPPLY | GND |
+ | GND | SUPPLY | 21 | Y | SUPPLY | GND |
+ | GND | SUPPLY | 20 | X | SUPPLY | GND |
+ | +5V | SUPPLY | 19 | W | SUPPLY | +5V |
+ | +12V | SUPPLY | 18 | V | SUPPLY | +12V |
+ | Lamp-HOLD1 | OUTPUT | 17 | U | OUTPUT | Lamp-START |
+ | Lamp-HOLD2 | OUTPUT | 16 | T | OUTPUT | Lamp-HOLD5 |
+ | Lamp-CANCEL | OUTPUT | 15 | S | OUTPUT | Lamp-HOLD4 |
+ | Coin-INPUT1 | INPUT | 14 | R | OUTPUT | HOPPER-OUT |
+ | Mech. Counter-IN | OUTPUT | 13 | P | INPUT | REMOTE |
+ | Mech. Counter-OUT | OUTPUT | 12 | N | INPUT | Button-HOLD1 |
+ | Mech. Counter-EXT | OUTPUT | 11 | M | INPUT | Button-CANCEL |
+ | Button-HOLD5 | INPUT | 10 | L | INPUT | Button-START |
+ | Bookkeeping 2 | INPUT | 09 | K | INPUT | Bookkeeping 1 |
+ | Button-HOLD2 | INPUT | 08 | J | INPUT | Button-HOLD4 |
+ | Button-HOPPER-OUT | INPUT | 07 | H | INPUT | Button-HOLD3 |
+ | HOPPER-COUNT | INPUT | 06 | F | ------ | N/C |
+ | Coin-INPUT3 | INPUT | 05 | E | INPUT | Coin-INPUT2 |
+ | Monitor-GREEN | TTLOUT-Analog | 04 | D | TTLOUT-Analog | Monitor-RED |
+ | Monitor-SYNC | TTLOUT-Analog | 03 | C | TTLOUT-Analog | Monitor-BLUE |
+ | SPEAKER | OUT-Analog | 02 | B | SUPPLY | Monitor-GND |
+ | CREDIT-CLEAR | INPUT | 01 | A | SUPPLY | SPEAKER-GND |
+ +-------------------+---------------+----+----+---------------+----------------+
+
+***********************************************************************************
+
+
+ Findings about the encryption scheme
+ ------------------------------------
+
+ The program ROM is encrypted, but... The programmers left the cow out...
+ They left some blank spaces that allow see some encryption patterns.
+
+
+ Example:
+
+
+ 1) A string of 4 consecutive values with relation between them, is repeated once.
+ Then the whole string is repeated again, but with bit 3 XOR'ed.
+
+ +------------ value1
+ | +--------- value2 = value1 ^ 0x88
+ | | +------ value3 = value1 ^ 0x22
+ | | | +--- value4 = value1 ^ 0x22 ^ 0x88
+ | | | |
+ | | | |
+
+ $E000: AF 27 8D 05 AF 27 8D 05 A7 2F 85 0D A7 2F 85 0D
+ +-----------+ +-----------+ | |
+ string1 string1 | |
+ +-------------------------+ +------------------------+
+ string2 string2 ^ 0x08
+ +----------------------------------------------------+
+ string3
+
+
+ 3) Then, all the E000-E00F range repeats in E010-E01F, but with bit 2 XOR'ed.
+
+ $E010: AB 23 89 01 AB 23 89 01 A3 2B 81 09 A3 2B 81 09
+ +-----------------------------------------------+
+ string3 ^ 0x04
+
+
+ 4) Then repeat all the E000-E01F range...
+
+ $E000: AF 27 8D 05 AF 27 8D 05 A7 2F 85 0D A7 2F 85 0D
+ $E010: AB 23 89 01 AB 23 89 01 A3 2B 81 09 A3 2B 81 09
+
+ $E020: AF 27 8D 05 AF 27 8D 05 A7 2F 85 0D A7 2F 85 0D
+ $E030: AB 23 89 01 AB 23 89 01 A3 2B 81 09 A3 2B 81 09
+
+
+ 5) Then the original value changes (0xAF -> 0x63), using the same algorithm
+ (steps 1-4) for the next 0x40 bytes...
+
+ $E040: 63 EB 41 C9 63 EB 41 C9 6B E3 49 C1 6B E3 49 C1
+ $E050: 67 EF 45 CD 67 EF 45 CD 6F E7 4D C5 6F E7 4D C5
+ $E060: 63 EB 41 C9 63 EB 41 C9 6B E3 49 C1 6B E3 49 C1
+ $E070: 67 EF 45 CD 67 EF 45 CD 6F E7 4D C5 6F E7 4D C5
+
+ Repeat step (5) ...till $E0FF.
+
+
+ The encryption pattern repeats for the next 0x100 bytes, so the E000-E0FF range is repeated
+ in E100-E1FF. Then the original values changes again, creating another block of 0x200 bytes.
+
+ And so on....
+
+
+***********************************************************************************
+
+
+ [2012/04/27]
+
+ - Reworked the decryption function.
+ - Added Multi Game III (V.Ger 3.64).
+
+ [2012/04/23]
+
+ - A lot of work on AMA-8000-1 machine and gfx.
+ - Identified the slots game as Super Stars.
+ - Changed am_uslot to suprstar.
+ - Reworked inputs from the scratch.
+ - Added support for outputs: lamps & counters.
+ - Added a button-lamps layout.
+ - Promoted the game to working state.
+ - Added technical notes.
+ - Renamed amaticmg3 to amaticmg2 since is the AMA-8000-2 system.
+ - Found the hopper motor signal. Mapped the hopper pay pulse to
+ key 'Q'. Now is possible to payout manually, avoiding the hang
+ for hopper empty or timeout.
+
+ [2009/09/11]
+
+ - Initial release.
+ - Added hardware specs from PCB pictures. Figured out some components.
+ - Added findings about the encryption scheme.
+ - Decoded 2 graphics bitplanes.
+ - Added pre-defined clocks.
+ - Added technical notes.
+
+
+ *** TO DO ***
+
+ - Super Stars: video garbage at first boot (doesn't happen if you soft-reset), btanb?
+ - Hook the remaining GFX bitplanes.
+ - Color decode routines.
+ - Remaining sound devices.
+ - Hopper as device... ;)
+
+
+***********************************************************************************/
+
+
+#define MASTER_CLOCK XTAL_16MHz
+#define CPU_CLOCK MASTER_CLOCK/4 /* guess */
+#define SND_CLOCK MASTER_CLOCK/4 /* guess */
+#define CRTC_CLOCK MASTER_CLOCK/8 /* guess */
+
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "video/mc6845.h"
+#include "machine/i8255.h"
+#include "sound/3812intf.h"
+#include "sound/dac.h"
+
+#include "suprstar.lh"
+
+
+class amaticmg_state : public driver_device
+{
+public:
+ amaticmg_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_attr(*this, "attr"),
+ m_vram(*this, "vram")
+ { }
+
+ required_shared_ptr<UINT8> m_attr;
+ required_shared_ptr<UINT8> m_vram;
+
+ DECLARE_WRITE8_MEMBER(rombank_w);
+ DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE8_MEMBER(unk80_w);
+
+ UINT8 m_nmi_mask;
+};
+
+
+/************************************
+* Video Hardware *
+************************************/
+
+static VIDEO_START( amaticmg )
+{
+}
+
+static SCREEN_UPDATE_IND16( amaticmg )
+{
+ amaticmg_state *state = screen.machine().driver_data<amaticmg_state>();
+ const gfx_element *gfx = screen.machine().gfx[0];
+ int y,x;
+ int count = 0;
+
+ for (y=0;y<32;y++)
+ {
+ for (x=0;x<96;x++)
+ {
+ UINT16 tile = state->m_vram[count];
+ UINT8 color;
+
+ tile += ((state->m_attr[count]&0x0f)<<8);
+ /* TODO: this looks so out of place ... */
+ color = (state->m_attr[count]&0xf0)>>3;
+
+ drawgfx_opaque(bitmap,cliprect,gfx,tile,color,0,0,x*4,y*8);
+ count++;
+ }
+ }
+
+ return 0;
+}
+
+static SCREEN_UPDATE_IND16( amaticmg2 )
+{
+ amaticmg_state *state = screen.machine().driver_data<amaticmg_state>();
+ const gfx_element *gfx = screen.machine().gfx[0];
+ int y,x;
+ int count = 0;
+
+ for (y=0;y<32;y++)
+ {
+ for (x=0;x<96;x++)
+ {
+ UINT16 tile = state->m_vram[count];
+ UINT8 color;
+
+ tile += ((state->m_attr[count]&0xff)<<8);
+ color = 0;
+
+ drawgfx_opaque(bitmap,cliprect,gfx,tile,color,0,0,x*4,y*8);
+ count++;
+ }
+ }
+
+ return 0;
+}
+
+static PALETTE_INIT( amaticmg )
+{
+ const UINT8 *color_prom = machine.root_device().memregion("proms")->base();
+ int bit0, bit1, bit2 , r, g, b;
+ int i;
+
+ for (i = 0; i < 0x200; ++i)
+ {
+ bit0 = 0;
+ bit1 = (color_prom[0] >> 6) & 0x01;
+ bit2 = (color_prom[0] >> 7) & 0x01;
+ g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ bit0 = (color_prom[0] >> 0) & 0x01;
+ bit1 = (color_prom[0] >> 1) & 0x01;
+ bit2 = (color_prom[0] >> 2) & 0x01;
+ r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ bit0 = (color_prom[0] >> 3) & 0x01;
+ bit1 = (color_prom[0] >> 4) & 0x01;
+ bit2 = (color_prom[0] >> 5) & 0x01;
+ b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+
+ palette_set_color(machine, i, MAKE_RGB(r, g, b));
+ color_prom++;
+ }
+}
+
+
+static PALETTE_INIT( amaticmg2 )
+{
+ const UINT8 *color_prom = machine.root_device().memregion("proms")->base();
+ int r, g, b;
+ int i;
+
+ for (i = 0; i < 0x20000; i+=2)
+ {
+ b = ((color_prom[1] & 0xf8) >> 3);
+ g = ((color_prom[0] & 0xc0) >> 6) | ((color_prom[1] & 0x7) << 2);
+ r = ((color_prom[0] & 0x3e) >> 1);
+
+ palette_set_color_rgb(machine, i >> 1, pal5bit(r), pal5bit(g), pal5bit(b));
+ color_prom+=2;
+ }
+}
+
+/************************************
+* Read/Write Handlers *
+************************************/
+
+WRITE8_MEMBER( amaticmg_state::rombank_w )
+{
+ membank("bank1")->set_entry(data & 0xf);
+}
+
+WRITE8_MEMBER( amaticmg_state::nmi_mask_w )
+{
+ m_nmi_mask = (data & 1) ^ 1;
+}
+
+static WRITE8_DEVICE_HANDLER(out_a_w)
+{
+/* LAMPS A:
+
+ 7654 3210
+ x--- -xxx (unknown)
+ ---- x--- START
+ ---x ---- BET
+ --x- ---- HOLD3
+ -x-- ---- HOLD4
+*/
+
+ output_set_lamp_value(0, (data >> 3) & 1); /* START */
+ output_set_lamp_value(1, (data >> 4) & 1); /* BET */
+ output_set_lamp_value(2, (data >> 5) & 1); /* HOLD3 */
+ output_set_lamp_value(3, (data >> 6) & 1); /* HOLD4 */
+
+ logerror("port A: %2X\n", data);
+}
+
+static WRITE8_DEVICE_HANDLER(out_c_w)
+{
+/* LAMPS B:
+
+ 7654 3210
+ ---- ---x Coin Out counter
+ ---- --x- HOLD1
+ ---- -x-- Coin In counter
+ ---x ---- HOLD2
+ -x-- ---- CANCEL
+ x--- ---- Hopper motor
+ --x- x--- (unknown)
+*/
+ output_set_lamp_value(4, (data >> 1) & 1); /* HOLD1 */
+ output_set_lamp_value(5, (data >> 4) & 1); /* HOLD2 */
+ output_set_lamp_value(6, (data >> 6) & 1); /* CANCEL */
+
+// coin_counter_w(machine(), 0, data & 0x04); /* Coin In */
+// coin_counter_w(machine(), 1, data & 0x01); /* Coin Out */
+
+ logerror("port C: %2X\n", data);
+}
+
+WRITE8_MEMBER( amaticmg_state::unk80_w )
+{
+// dac_data_w(machine().device("dac"), data & 0x01); /* Sound DAC */
+}
+
+
+
+/************************************
+* Memory Map Information *
+************************************/
+
+static ADDRESS_MAP_START( amaticmg_map, AS_PROGRAM, 8, amaticmg_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0x8000, 0x9fff) AM_RAM // AM_SHARE("nvram")
+ AM_RANGE(0xa000, 0xafff) AM_RAM AM_SHARE("vram")
+ AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("attr")
+ AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank1")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( amaticmg_portmap, AS_IO, 8, amaticmg_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
+ AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
+ AM_RANGE(0x40, 0x41) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w)
+ AM_RANGE(0x60, 0x60) AM_DEVWRITE("crtc", mc6845_device, address_w)
+ AM_RANGE(0x61, 0x61) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
+ AM_RANGE(0x80, 0x80) AM_WRITE(unk80_w)
+ AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w)
+// AM_RANGE(0x00, 0x00) AM_DEVREADWRITE_LEGACY("ppi8255_2", ppi8255_r, ppi8255_w)
+// AM_RANGE(0x00, 0x00) AM_DEVWRITE_LEGACY("dac1", dac_signed_w)
+// AM_RANGE(0x00, 0x00) AM_DEVWRITE_LEGACY("dac2", dac_signed_w)
+
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( amaticmg2_portmap, AS_IO, 8, amaticmg_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+// ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
+ AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
+ AM_RANGE(0x40, 0x41) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w)
+ AM_RANGE(0x60, 0x60) AM_DEVWRITE("crtc", mc6845_device, address_w) // 0e for mg_iii_vger_3.64_v_8309
+ AM_RANGE(0x61, 0x61) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) // 0f for mg_iii_vger_3.64_v_8309
+ AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w)
+ AM_RANGE(0xe6, 0xe6) AM_WRITE(nmi_mask_w)
+ADDRESS_MAP_END
+
+
+/*
+ Unknown R/W
+ -----------
+
+
+*/
+
+
+/************************************
+* Input ports *
+************************************/
+
+static INPUT_PORTS_START( amaticmg )
+ PORT_START("IN0")
+ 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_COIN1 ) PORT_NAME("Coin 1 (Muenze 1)") PORT_IMPULSE(3)
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Service B (Dienst B") PORT_CODE(KEYCODE_8) PORT_TOGGLE
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Coin 2 (Muenze 2)") PORT_IMPULSE(3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper Payout pulse") PORT_IMPULSE(3) PORT_CODE(KEYCODE_Q) // Hopper paying pulse
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_W) // 'Ausgegeben 0 - Hopper Leer' (spent 0 - hopper empty)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 (Halten 3)")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 (Halten 2)")
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Take (Loeschen)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 (Halten 1)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service A (Dienst A") PORT_CODE(KEYCODE_7) PORT_TOGGLE
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet (Setzen) / Half Take")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Service C (Dienst C") PORT_CODE(KEYCODE_9) PORT_TOGGLE
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service (Master)") PORT_CODE(KEYCODE_0)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 (Halten 4)")
+
+ PORT_START("IN3")
+ 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("SW1")
+ PORT_DIPNAME( 0x01, 0x01, "DIP1") PORT_DIPLOCATION("DIP:1")
+ PORT_DIPSETTING( 0x01, "Off (Aus)" )
+ PORT_DIPSETTING( 0x00, "On (Ein)" )
+ PORT_DIPNAME( 0x02, 0x02, "DIP2") PORT_DIPLOCATION("DIP:2")
+ PORT_DIPSETTING( 0x02, "Off (Aus)" )
+ PORT_DIPSETTING( 0x00, "On (Ein)" )
+ PORT_DIPNAME( 0x04, 0x04, "Coin 1 (Muenzen 1)" ) PORT_DIPLOCATION("DIP:3")
+ PORT_DIPSETTING( 0x04, "10" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x08, 0x08, "Coin 2 (Muenzen 2)" ) PORT_DIPLOCATION("DIP:4")
+ PORT_DIPSETTING( 0x08, "100" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x10, 0x10, "Jackpot") PORT_DIPLOCATION("DIP:5")
+ PORT_DIPSETTING( 0x10, "Jackpot KZB")
+ PORT_DIPSETTING( 0x00, "Jackpot LZB")
+ PORT_DIPNAME( 0x20, 0x20, "Fruechtebonus" ) PORT_DIPLOCATION("DIP:6")
+ PORT_DIPSETTING( 0x20, "Fruechtebonus Bleibt" )
+ PORT_DIPSETTING( 0x00, "Fruechtebonus Clear" )
+ PORT_DIPNAME( 0x40, 0x40, "DIP7") PORT_DIPLOCATION("DIP:7")
+ PORT_DIPSETTING( 0x40, "Off (Aus)" )
+ PORT_DIPSETTING( 0x00, "On (Ein)" )
+ PORT_DIPNAME( 0x80, 0x80, "BH") PORT_DIPLOCATION("DIP:8")
+ PORT_DIPSETTING( 0x80, "BH Dreifach")
+ PORT_DIPSETTING( 0x00, "BH Normal")
+INPUT_PORTS_END
+
+
+/************************************
+* Graphics Layouts *
+************************************/
+
+static const gfx_layout charlayout_4bpp =
+{
+ 4,8,
+ RGN_FRAC(1,2),
+ 4,
+ { RGN_FRAC(0,2), RGN_FRAC(0,2) + 4, RGN_FRAC(1,2), RGN_FRAC(1,2) + 4 },
+ { 3, 2, 1, 0 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*4*2
+};
+
+static const gfx_layout charlayout_6bpp =
+{
+ 4,8,
+ RGN_FRAC(1,3),
+ 6,
+ { RGN_FRAC(0,3) + 0, RGN_FRAC(0,3) + 4, RGN_FRAC(1,3) + 0, RGN_FRAC(1,3) + 4,RGN_FRAC(2,3) + 0, RGN_FRAC(2,3) + 4, },
+ { 3, 2, 1, 0 }, /* tiles are x-flipped */
+ { 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( amaticmg )
+ GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout_4bpp, 0, 0x20 )
+GFXDECODE_END
+
+static GFXDECODE_START( amaticmg2 )
+ GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout_6bpp, 0, 0x10000/0x40 )
+GFXDECODE_END
+
+/************************************
+* Sound Interface *
+************************************/
+
+static const ym3812_interface ym3812_config =
+{
+ 0
+};
+
+
+/************************************
+* CRTC Interface *
+************************************/
+
+static const mc6845_interface mc6845_intf =
+{
+ "screen", /* screen we are acting on */
+ 4, /* number of pixels per video memory address */
+ NULL, /* before pixel update callback */
+ NULL, /* row update callback */
+ NULL, /* after pixel update callback */
+ DEVCB_NULL, /* callback for display state changes */
+ DEVCB_NULL, /* callback for cursor state changes */
+ DEVCB_NULL, /* HSYNC callback */
+ DEVCB_NULL, /* VSYNC callback */
+ NULL /* update address callback */
+};
+
+
+/************************************
+* PPI 8255 (x3) Interface *
+************************************/
+
+static I8255A_INTERFACE( ppi8255_intf_0 )
+{
+ DEVCB_INPUT_PORT("IN0"), /* Port A read */
+ DEVCB_NULL, /* Port A write */
+ DEVCB_INPUT_PORT("IN1"), /* Port B read */
+ DEVCB_NULL, /* Port B write */
+ DEVCB_INPUT_PORT("IN2"), /* Port C read */
+ DEVCB_NULL /* Port C write */
+};
+
+static I8255A_INTERFACE( ppi8255_intf_1 )
+{
+ DEVCB_NULL, /* Port A read */
+ DEVCB_HANDLER(out_a_w), /* Port A write */
+ DEVCB_INPUT_PORT("SW1"), /* Port B read */
+ DEVCB_NULL, /* Port B write */
+ DEVCB_NULL, /* Port C read */
+ DEVCB_HANDLER(out_c_w) /* Port C write */
+};
+
+static MACHINE_START( amaticmg )
+{
+ UINT8 *rombank = machine.root_device().memregion("maincpu")->base();
+
+ machine.root_device().membank("bank1")->configure_entries(0, 0x10, &rombank[0x8000], 0x4000);
+}
+
+static MACHINE_RESET( amaticmg )
+{
+ amaticmg_state *state = machine.driver_data<amaticmg_state>();
+
+ state->membank("bank1")->set_entry(0);
+ state->m_nmi_mask = 0;
+}
+
+/************************************
+* Machine Drivers *
+************************************/
+
+static MACHINE_CONFIG_START( amaticmg, amaticmg_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) /* WRONG! */
+ MCFG_CPU_PROGRAM_MAP(amaticmg_map)
+ MCFG_CPU_IO_MAP(amaticmg_portmap)
+ MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse) // no NMI mask?
+
+// MCFG_NVRAM_ADD_0FILL("nvram")
+
+ /* 3x 8255 */
+ MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf_0 )
+ MCFG_I8255A_ADD( "ppi8255_1", ppi8255_intf_1 )
+// MCFG_PPI8255_ADD( "ppi8255_2", ppi8255_intf[2] )
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_SIZE(512, 256)
+ MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
+ MCFG_SCREEN_UPDATE_STATIC(amaticmg)
+
+ MCFG_MC6845_ADD("crtc", MC6845, CRTC_CLOCK, mc6845_intf)
+
+ MCFG_GFXDECODE(amaticmg)
+
+ MCFG_PALETTE_INIT(amaticmg)
+ MCFG_PALETTE_LENGTH(0x200)
+ MCFG_VIDEO_START(amaticmg)
+
+ MCFG_MACHINE_START(amaticmg)
+ MCFG_MACHINE_RESET(amaticmg)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM3812, SND_CLOCK)
+ MCFG_SOUND_CONFIG(ym3812_config)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+// MCFG_SOUND_ADD("dac", DAC, 0) /* Y3014B */
+// MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+MACHINE_CONFIG_END
+
+
+static INTERRUPT_GEN( amaticmg2_irq )
+{
+ amaticmg_state *state = device->machine().driver_data<amaticmg_state>();
+
+ if(state->m_nmi_mask)
+ device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
+static MACHINE_CONFIG_DERIVED( amaticmg2, amaticmg )
+
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_IO_MAP(amaticmg2_portmap)
+ MCFG_CPU_VBLANK_INT("screen", amaticmg2_irq)
+
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_UPDATE_STATIC(amaticmg2)
+
+ MCFG_GFXDECODE(amaticmg2)
+ MCFG_PALETTE_INIT(amaticmg2)
+ MCFG_PALETTE_LENGTH(0x10000)
+MACHINE_CONFIG_END
+
+
+/************************************
+* Rom Load *
+************************************/
+
+ROM_START( suprstar )
+ ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 )
+
+ ROM_REGION( 0x20000, "mainprg", 0 ) /* encrypted program ROM...*/
+ ROM_LOAD( "u3.bin", 0x00000, 0x20000, CRC(29bf4a95) SHA1(a73873f7cd1fdf5accc3e79f4619949f261400b8) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "u10.bin", 0x00000, 0x08000, CRC(6a811c81) SHA1(af01cd9b1ce6aca92df71febb05fe216b18cf42a) )
+ ROM_CONTINUE( 0x00000, 0x08000 )
+ ROM_LOAD( "u9.bin", 0x08000, 0x08000, CRC(823a736a) SHA1(a5227e3080367736aac1198d9dbb55efc4114624) )
+ ROM_CONTINUE( 0x08000, 0x08000 )
+
+ ROM_REGION( 0x0200, "proms", 0 )
+ ROM_LOAD( "n82s147a.bin", 0x0000, 0x0200, CRC(dfeabd11) SHA1(21e8bbcf4aba5e4d672e5585890baf8c5bc77c98) )
+ROM_END
+
+
+ROM_START( am_mg24 )
+ ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 )
+
+ ROM_REGION( 0x40000, "mainprg", 0 ) /* encrypted program ROM...*/
+ ROM_LOAD( "mgi_vger_3.9-i-8201.i6.bin", 0x00000, 0x40000, CRC(9ce159f7) SHA1(101c277d579a69cb03f879288b2cecf838cf1741) )
+
+ ROM_REGION( 0x180000, "gfx1", 0 )
+ ROM_LOAD( "multi_2.4_zg1.i17.bin", 0x100000, 0x80000, CRC(4a60a718) SHA1(626991abee768da58e87c7cdfc4fcbae86c6ea2a) )
+ ROM_LOAD( "multi_2.4_zg2.i18.bin", 0x080000, 0x80000, CRC(b504e1b8) SHA1(ffa17a2c212eb2fffb89b131868e69430cb41203) )
+ ROM_LOAD( "multi_2.4_zg3.i33.bin", 0x000000, 0x80000, CRC(9b66bb4d) SHA1(64035d2028a9b68164c87475a1ec9754453ad572) )
+
+ ROM_REGION( 0x20000/*0x0400*/, "proms", 0 )
+ ROM_LOAD( "n82s147a_1.bin", 0x0000, 0x0200, NO_DUMP )
+ ROM_LOAD( "n82s147a_2.bin", 0x0200, 0x0200, NO_DUMP )
+ROM_END
+
+ROM_START( am_mg3 )
+ ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 )
+
+ ROM_REGION( 0x40000, "mainprg", 0 ) /* encrypted program ROM...*/
+ ROM_LOAD( "mg_iii_vger_3.5-i-8205.bin", 0x00000, 0x40000, CRC(21d64029) SHA1(d5c3fde02833a96dd7a43481a489bfc4a5c9609d) )
+
+ ROM_REGION( 0x180000, "gfx1", 0 )
+ ROM_LOAD( "mg_iii_51_zg1.bin", 0x100000, 0x80000, CRC(84f86874) SHA1(c483a50df6a9a71ddfdf8530a894135f9b852b89) )
+ ROM_LOAD( "mg_iii_51_zg2.bin", 0x080000, 0x80000, CRC(4425e535) SHA1(726c322c5d0b391b82e49dd1797ebf0abfa4a65a) )
+ ROM_LOAD( "mg_iii_51_zg3.bin", 0x000000, 0x80000, CRC(36d4c0fa) SHA1(20352dbbb2ce2233be0f4f694ddf49b8f5d6a64f) )
+
+ ROM_REGION( 0x20000, "proms", 0 )
+ ROM_LOAD( "v.bin", 0x00000, 0x20000, CRC(524767e2) SHA1(03a108494f42365c820fdfbcba9496bda86f3081) )
+ROM_END
+
+ROM_START( am_mg3a )
+ ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 )
+
+ ROM_REGION( 0x40000, "mainprg", 0 ) /* encrypted program ROM...*/
+ ROM_LOAD( "mg_iii_vger_3.64_v_8309.i16", 0x00000, 0x40000, CRC(c54f97c4) SHA1(d5ce91be7332ada304d18d07706e3b98ac0fa74b) )
+
+ ROM_REGION( 0x180000, "gfx1", 0 )
+ ROM_LOAD( "mg_iii_51_zg1.i17", 0x100000, 0x80000, CRC(84f86874) SHA1(c483a50df6a9a71ddfdf8530a894135f9b852b89) )
+ ROM_LOAD( "mg_iii_51_zg2.i18", 0x080000, 0x80000, CRC(4425e535) SHA1(726c322c5d0b391b82e49dd1797ebf0abfa4a65a) )
+ ROM_LOAD( "mg_iii_51_zg3.i19", 0x000000, 0x80000, CRC(36d4c0fa) SHA1(20352dbbb2ce2233be0f4f694ddf49b8f5d6a64f) )
+
+ ROM_REGION( 0x20000, "proms", 0 )
+ ROM_LOAD( "iv.i35", 0x00000, 0x20000, CRC(82af7296) SHA1(1a07d6481e0f8fd785be9f1b737182d7e0b84605) )
+ROM_END
+
+
+/************************************
+* Driver Initialization *
+************************************/
+
+static void encf(UINT8 ciphertext, int address, UINT8 &plaintext, int &newaddress)
+{
+ int aux = address & 0xfff;
+ aux = aux ^ (aux>>6);
+ aux = ((aux<<6) | (aux>>6)) & 0xfff;
+ UINT8 aux2 = BITSWAP8(aux, 9,10,4,1,6,0,7,3);
+ aux2 ^= aux2>>4;
+ aux2 = (aux2<<4) | (aux2>>4);
+ ciphertext ^= ciphertext<<4;
+ plaintext = (ciphertext<<4) | (ciphertext>>4);
+ plaintext ^= aux2;
+ newaddress = (address & ~0xfff) | aux;
+}
+
+static void decrypt(running_machine &machine, int key1, int key2)
+{
+ UINT8 plaintext;
+ int newaddress;
+
+ UINT8 *src = machine.root_device().memregion("mainprg")->base();
+ UINT8 *dest = machine.root_device().memregion("maincpu")->base();
+ int len = machine.root_device().memregion("mainprg")->bytes();
+
+ for (int i = 0; i < len; i++)
+ {
+ encf(src[i], i, plaintext, newaddress);
+ dest[newaddress^(key1^(key1>>6))] = plaintext^key2;
+ }
+}
+
+static DRIVER_INIT( ama8000_1_x )
+{
+ decrypt(machine, 0x4d1, 0xf5);
+}
+
+static DRIVER_INIT( ama8000_2_i )
+{
+ decrypt(machine, 0x436, 0x55);
+}
+
+static DRIVER_INIT( ama8000_2_v )
+{
+ decrypt(machine, 0x703, 0xaf);
+}
+
+
+/************************************
+* Game Drivers *
+************************************/
+
+/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
+GAMEL( 1996, suprstar, 0, amaticmg, amaticmg, ama8000_1_x, ROT90, "Amatic Trading GmbH", "Super Stars", GAME_IMPERFECT_SOUND, layout_suprstar )
+GAME( 2000, am_mg24, 0, amaticmg2, amaticmg, ama8000_2_i, ROT0, "Amatic Trading GmbH", "Multi Game I (V.Ger 2.4)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING )
+GAME( 2000, am_mg3, 0, amaticmg2, amaticmg, ama8000_2_i, ROT0, "Amatic Trading GmbH", "Multi Game III (V.Ger 3.5)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING )
+GAME( 2000, am_mg3a, 0, amaticmg2, amaticmg, ama8000_2_v, ROT0, "Amatic Trading GmbH", "Multi Game III (V.Ger 3.64)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING )