diff options
Diffstat (limited to 'trunk/src/mame/drivers/amaticmg.c')
-rw-r--r-- | trunk/src/mame/drivers/amaticmg.c | 783 |
1 files changed, 783 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..3f33222cc14 --- /dev/null +++ b/trunk/src/mame/drivers/amaticmg.c @@ -0,0 +1,783 @@ +/********************************************************************************** + + + AMATIC - MULTI GAME SYSTEM + -------------------------- + + Preliminary driver by Roberto Fresca. + + + Encrypted gambling hardware based on a custom CPU. + + +*********************************************************************************** + + + Hardware Notes + -------------- + + ------------------------------------------------ + Board #1 (unknown slots game) + ------------------------------------------------ + + 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 + ------------------------------------------------ + + 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 + ------------------------------------------------ + + 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 + ---------- + + $00000 - $FFFFF Still unknown... + + +*********************************************************************************** + + +------------------------------------------------------------------------------+ + | 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.... + + +*********************************************************************************** + + + [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 *** + + - Decrypt the program ROMs. + - Identify the CPU type. + - Memory map. + - Hook the remaining GFX bitplanes. + - CRTC + - Proper inputs. + - Color decode routines. + - Sound support. + + +***********************************************************************************/ + + +#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/8255ppi.h" +#include "sound/3812intf.h" +#include "sound/dac.h" + + +class amaticmg_state : public driver_device +{ +public: + amaticmg_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) { } + +}; + + +/************************************ +* Video Hardware * +************************************/ + +static VIDEO_START( amaticmg ) +{ +} + +static SCREEN_UPDATE( amaticmg ) +{ + return 0; +} + +static PALETTE_INIT( amaticmg ) +{ + 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; + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + bit0 = (color_prom[0] >> 3) & 0x01; + bit1 = (color_prom[0] >> 4) & 0x01; + bit2 = (color_prom[0] >> 5) & 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; + + palette_set_color(machine, i, MAKE_RGB(r, g, b)); + color_prom++; + } +} + + +static PALETTE_INIT( amaticmg3 ) +{ + 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 * +************************************/ + + + +/************************************ +* Memory Map Information * +************************************/ + +static ADDRESS_MAP_START( amaticmg_map, AS_PROGRAM, 8 ) + AM_RANGE(0x00000, 0x3ffff) AM_ROM +// AM_RANGE(0x0000, 0x0000) AM_RAM // AM_SHARE("nvram") +// AM_RANGE(0x0000, 0x0000) AM_DEVWRITE("crtc", mc6845_address_w) +// AM_RANGE(0x0000, 0x0000) AM_DEVREADWRITE("crtc", mc6845_register_r, mc6845_register_w) +// AM_RANGE(0x0000, 0x0000) AM_RAM_WRITE(amaticmg_videoram_w) AM_BASE(&amaticmg_videoram) +// AM_RANGE(0x0000, 0x0000) AM_RAM_WRITE(amaticmg_colorram_w) AM_BASE(&amaticmg_colorram) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( amaticmg_portmap, AS_IO, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0xff) +// AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) +// AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w) +// AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w) +// AM_RANGE(0x00, 0x00) AM_DEVWRITE("ymsnd", ym3812_w) +// AM_RANGE(0x00, 0x00) AM_DEVWRITE("dac1", dac_signed_w) +// AM_RANGE(0x00, 0x00) AM_DEVWRITE("dac2", dac_signed_w) + +ADDRESS_MAP_END + +/* + Unknown R/W + ----------- + + +*/ + + +/************************************ +* Input ports * +************************************/ + +static INPUT_PORTS_START( amaticmg ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-3") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-4") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-5") PORT_CODE(KEYCODE_5) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_6) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-8") PORT_CODE(KEYCODE_8) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-1") PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-2") PORT_CODE(KEYCODE_W) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-3") PORT_CODE(KEYCODE_E) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-6") PORT_CODE(KEYCODE_Y) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_U) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_I) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-1") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_D) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_F) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-5") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-6") PORT_CODE(KEYCODE_H) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-7") PORT_CODE(KEYCODE_J) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-8") PORT_CODE(KEYCODE_K) + + PORT_START("IN3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-1") PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-2") PORT_CODE(KEYCODE_X) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-3") PORT_CODE(KEYCODE_C) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-4") PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-5") PORT_CODE(KEYCODE_B) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-6") PORT_CODE(KEYCODE_N) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-7") PORT_CODE(KEYCODE_M) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-8") PORT_CODE(KEYCODE_L) + + PORT_START("SW1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + +/************************************ +* Graphics Layouts * +************************************/ + +static const gfx_layout charlayout_4bpp = +{ + 4,8, + RGN_FRAC(1,2), + 4, + { RGN_FRAC(0,2) + 0, RGN_FRAC(0,2) + 4, RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4 }, //TODO: rom order is unknown + { 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 +}; + +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, }, //TODO: rom order is unknown + { 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( amaticmg3 ) + GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout_6bpp, 0, 0x20 ) +GFXDECODE_END + +/************************************ +* Sound Interface * +************************************/ + +//static const ym3812_interface ym3812_config = +//{ +// sound_irq +//}; + + +/************************************ +* CRTC Interface * +************************************/ + +//static const mc6845_interface mc6845_intf = +//{ +// "screen", /* screen we are acting on */ +// 8, /* 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 const ppi8255_interface ppi8255_intf[3] = +//{ +// { /* (00-00) Mode X - Port X set as input */ +// DEVCB_NULL, /* Port A read */ +// DEVCB_NULL, /* Port B read */ +// DEVCB_NULL, /* Port C read */ +// DEVCB_NULL, /* Port A write */ +// DEVCB_NULL, /* Port B write */ +// DEVCB_NULL, /* Port C write */ +// }, +// { /* (00-00) Mode X - Port X set as input */ +// DEVCB_NULL, /* Port A read */ +// DEVCB_NULL, /* Port B read */ +// DEVCB_NULL, /* Port C read */ +// DEVCB_NULL, /* Port A write */ +// DEVCB_NULL, /* Port B write */ +// DEVCB_NULL, /* Port C write */ +// }, +// { /* (00-00) Mode X - Port X set as input */ +// DEVCB_NULL, /* Port A read */ +// DEVCB_NULL, /* Port B read */ +// DEVCB_NULL, /* Port C read */ +// DEVCB_NULL, /* Port A write */ +// DEVCB_NULL, /* Port B write */ +// DEVCB_NULL, /* Port C write */ +// } +//}; + +/************************************ +* 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", irq0_line_hold) + +// MCFG_NVRAM_ADD_0FILL("nvram") + + /* 3x 8255 */ +// MCFG_PPI8255_ADD( "ppi8255_0", ppi8255_intf[0] ) +// MCFG_PPI8255_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_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(512, 256) + MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) + MCFG_SCREEN_UPDATE(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) + + /* 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 MACHINE_CONFIG_DERIVED( amaticmg3, amaticmg ) + + MCFG_GFXDECODE(amaticmg3) + MCFG_PALETTE_INIT(amaticmg3) + MCFG_PALETTE_LENGTH(0x10000) +MACHINE_CONFIG_END + +/************************************ +* Rom Load * +************************************/ + +ROM_START( am_uslot ) + ROM_REGION( 0x40000, "maincpu", 0 ) /* encrypted program ROM...*/ + ROM_LOAD( "u3.bin", 0x00000, 0x20000, CRC(29bf4a95) SHA1(a73873f7cd1fdf5accc3e79f4619949f261400b8) ) + + ROM_REGION( 0x30000, "gfx1", 0 ) + ROM_LOAD( "u9.bin", 0x00000, 0x10000, CRC(823a736a) SHA1(a5227e3080367736aac1198d9dbb55efc4114624) ) + ROM_LOAD( "u10.bin", 0x10000, 0x10000, CRC(6a811c81) SHA1(af01cd9b1ce6aca92df71febb05fe216b18cf42a) ) + + 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", 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", 0x000000, 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", 0x100000, 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", 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", 0x000000, 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", 0x100000, 0x80000, CRC(36d4c0fa) SHA1(20352dbbb2ce2233be0f4f694ddf49b8f5d6a64f) ) + + ROM_REGION( 0x20000, "proms", 0 ) + ROM_LOAD( "v.bin", 0x00000, 0x20000, CRC(524767e2) SHA1(03a108494f42365c820fdfbcba9496bda86f3081) ) +ROM_END + + +/************************************ +* Driver Initialization * +************************************/ + +static DRIVER_INIT( amaticmg ) +{ + +} + + +/************************************ +* Game Drivers * +************************************/ + +/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */ +GAME( 1996, am_uslot, 0, amaticmg, amaticmg, amaticmg, ROT0, "Amatic Trading GmbH", "Amatic Unknown Slots Game", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING ) +GAME( 2000, am_mg24, 0, amaticmg3, amaticmg, amaticmg, 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, amaticmg3, amaticmg, amaticmg, 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 ) |