diff --git a/.gitattributes b/.gitattributes index 98c1fd07421..37315a5e04c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2474,8 +2474,10 @@ src/mame/layout/pe_schip.lay svneol=native#text/plain src/mame/layout/pe_slots.lay svneol=native#text/plain src/mame/layout/peplus.lay svneol=native#text/plain src/mame/layout/pmpoker.lay svneol=native#text/plain +src/mame/layout/poker41.lay svneol=native#text/plain src/mame/layout/pokio.lay svneol=native#text/plain src/mame/layout/pottnpkr.lay svneol=native#text/plain +src/mame/layout/pulltabs.lay svneol=native#text/plain src/mame/layout/pyramid.lay svneol=native#text/plain src/mame/layout/quintoon.lay svneol=native#text/plain src/mame/layout/rocknms.lay svneol=native#text/plain @@ -2909,6 +2911,7 @@ src/mame/video/galpanic.c svneol=native#text/plain src/mame/video/galspnbl.c svneol=native#text/plain src/mame/video/gameplan.c svneol=native#text/plain src/mame/video/gaplus.c svneol=native#text/plain +src/mame/video/gatron.c svneol=native#text/plain src/mame/video/gauntlet.c svneol=native#text/plain src/mame/video/gberet.c svneol=native#text/plain src/mame/video/gbusters.c svneol=native#text/plain diff --git a/src/mame/drivers/gatron.c b/src/mame/drivers/gatron.c index 5b71a6e1384..a0ad253518d 100644 --- a/src/mame/drivers/gatron.c +++ b/src/mame/drivers/gatron.c @@ -1,7 +1,7 @@ /****************************************************************************** - GAME-A-TRON gaming hardware - --------------------------- + GAME-A-TRON gambling hardware + ----------------------------- Driver by Roberto Fresca. @@ -12,10 +12,6 @@ * Pull Tabs, 1983, Game-A-Tron. - The names of both games are not confirmed. We are calling them "Poker 4-1" - and "Pull Tabs" till we can find some evidence of the real names. - - ******************************************************************************* @@ -73,10 +69,13 @@ U30 VRAM HM6116LP-3 (2Kx8) 1x 16MHz Crystal - 1x Duracell PX-2 I, 4.5V battery. + Identified the unknown writes as a init sequence for 1x PSG sound device. + The type/class is unknown due to almost all devices are plastic covered. + + ******************************************************************************* @@ -88,6 +87,9 @@ The first time the machine is turned on, will show the legend "DATA ERROR". You must to RESET (F3) the machine to initialize the NVRAM properly. + NOTE: These games are intended to be for amusement only. + There is not such a payout system, so...Dont ask about it! + * Poker 4-1: @@ -143,6 +145,7 @@ ******************************************************************************* + -------------------- *** Memory Map *** -------------------- @@ -150,8 +153,20 @@ 0x0000 - 0x5FFF ; ROM space. 0x6000 - 0x67FF ; Video RAM (only the first 0x300 bytes are used). 0x8000 - 0x87FF ; Main RAM. - 0xA000 - 0xA000 ; Unknown Writes. - 0xE000 - 0xE000 ; Unknown Writes (watchdog?). + 0xA000 - 0xA000 ; Sound (PSG). + 0xE000 - 0xE000 ; Output Port 0 (lamps). + + + * Z80 I/O ports * + + 0x00 - 0x03 ; PPI 8255 (ports A & B as input, port C as output). + + + * 8255 I/O ports * + + Port A (input) ; Input Port 0 (player buttons). + Port B (input) ; Input Port 1 (player & service buttons). + Port C (output) ; Output Port 1 (lamps & counters). ******************************************************************************* @@ -160,9 +175,23 @@ DRIVER UPDATES: + [2008-08-21] + + After an exhaustive analysis to the unknown writes, finally figured out the missing sound device. + + - Added sound support to "Poker 4-1" and "Pull Tabs". + - Figured out the output ports. Documented each bit accessed. + - Added button lamps support. Created layouts for both games. + - Switched the 8255 port C to be used as output port. + - Adjusted the coin pulse timing. + - Updated technical notes. + - Splitted the driver to driver + video. + - Final clean-up. + + [2008-05-31] - - Renamed the games to "Poker 4-1" and "Pull Tabs" + - Renamed the games to "Poker 4-1" and "Pull Tabs". as shown in the ROMs stickers. - Renamed the ROMs in each set according to their own stickers. - Moved the driver into gametron.a group. @@ -170,6 +199,7 @@ Poker41 and pulltabs don't make use of it, but is present in the Test/Setting Mode. - Updated technical notes. + [2008-05-10] - Initial release. @@ -183,8 +213,7 @@ TODO: - - Outputs. - - Sound. + - Nothing... :) *******************************************************************************/ @@ -193,54 +222,98 @@ #define MASTER_CLOCK XTAL_16MHz #include "driver.h" +#include "sound/sn76496.h" #include "machine/8255ppi.h" +#include "poker41.lh" +#include "pulltabs.lh" -/************************* -* Video Hardware * -*************************/ - -static tilemap *bg_tilemap; +/* from video */ +WRITE8_HANDLER( gat_videoram_w ); +PALETTE_INIT( gat ); +VIDEO_START( gat ); +VIDEO_UPDATE( gat ); -static WRITE8_HANDLER( gat_videoram_w ) +/**************************** +* Read/Write Handlers * +****************************/ + +static WRITE8_HANDLER( output_port_0_w ) { - videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); -} +/* --------------- + Pull Tabs lamps + --------------- + 0x00 - Default State. + 0x01 - Hold3. + 0x04 - Hold5. + 0x08 - Ante/Bet. -static TILE_GET_INFO( get_bg_tile_info ) -{ -/* - bits - + - bits - 7654 3210 - xxxx xxxx tiles code. + --------- + .... ...x ---> Hold3. + .... .x.. ---> Hold5. + .... x... ---> Ante/Bet. + + Tab1 = Hold1 + Tab2 = Hold3 + Tab3 = Hold5 + + + --------------- + Poker 4-1 lamps + --------------- + + 0x00 - Default State. + 0x01 - Hold3. + 0x02 - Hold4. + 0x04 - Hold5/DDown. + 0x08 - Ante/Bet. + 0x10 - Start. + 0x20 - Deal/Hit. + 0x40 - Stand/FreeBonusDraw. + + - bits - + 7654 3210 + --------- + .... ...x --> Hold3. + .... ..x. --> Hold4. + .... .x.. --> Hold5/DDown. + .... x... --> Ante/Bet. + ...x .... --> Start. + ..x. .... --> Deal/Hit. + .x.. .... --> Stand/FreeBonusDraw. - only one color code */ - - int code = videoram[tile_index]; - - SET_TILE_INFO(0, code, 0, 0); + output_set_lamp_value(0, (data) & 1); /* hold3 lamp */ + output_set_lamp_value(1, (data >> 1) & 1); /* hold4 lamp */ + output_set_lamp_value(2, (data >> 2) & 1); /* hold5 lamp */ + output_set_lamp_value(3, (data >> 3) & 1); /* ante/bet lamp */ + output_set_lamp_value(4, (data >> 4) & 1); /* start lamp */ + output_set_lamp_value(5, (data >> 5) & 1); /* deal/hit lamp */ + output_set_lamp_value(6, (data >> 6) & 1); /* stand/fbdraw lamp */ } -static VIDEO_START( gat ) +static WRITE8_HANDLER( output_port_1_w ) { - bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_cols, 8, 16, 48, 16); -} +/* ---------------- + Lamps & Counters + ---------------- + - bits - + 7654 3210 + --------- + .... ...x --> Hold2 lamp. + .... ..x. --> Hold1 lamp. + .x.. .... --> Coin counter (inverted). + x... .... --> Inverted pulse. Related to counters. -static VIDEO_UPDATE( gat ) -{ - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); - return 0; -} - - -static PALETTE_INIT( gat ) -{ - +*/ + output_set_lamp_value(7, (data) & 1); /* hold2 lamp */ + output_set_lamp_value(8, (data >> 1) & 1); /* hold1 lamp */ } @@ -250,12 +323,12 @@ static PALETTE_INIT( gat ) static const ppi8255_interface ppi8255_intf = { - input_port_0_r, /* Port A read */ - input_port_1_r, /* Port B read */ - input_port_2_r, /* Port C read */ - NULL, /* Port A write */ - NULL, /* Port B write */ - NULL, /* Port C write */ + input_port_0_r, /* Port A read */ + input_port_1_r, /* Port B read */ + NULL, /* Port C read */ + NULL, /* Port A write */ + NULL, /* Port B write */ + output_port_1_w, /* Port C write */ }; @@ -267,8 +340,8 @@ static ADDRESS_MAP_START( gat_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x5fff) AM_ROM AM_RANGE(0x6000, 0x63ff) AM_RAM_WRITE(gat_videoram_w) AM_BASE(&videoram) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) /* battery backed RAM */ - AM_RANGE(0xa000, 0xa000) AM_NOP /* unknown writes */ - AM_RANGE(0xe000, 0xe000) AM_NOP /* watchdog? */ + AM_RANGE(0xa000, 0xa000) AM_WRITE(sn76496_0_w) /* PSG */ + AM_RANGE(0xe000, 0xe000) AM_WRITE(output_port_0_w) /* lamps */ ADDRESS_MAP_END static ADDRESS_MAP_START( gat_portmap, ADDRESS_SPACE_IO, 8 ) @@ -276,27 +349,6 @@ static ADDRESS_MAP_START( gat_portmap, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w) ADDRESS_MAP_END -/* I/O byte R/W - - 0x0200 ;R ???! - - 0x9200 ;R - 0x9201 ;R - 0x9203 ;W (0x92) - - 0xC002 ;W (0xC0) - 0xC202 ;W (0xC2) - - 0xFF01 ;R - - ----------------- - - unknown writes: - - 0xA000 ;W (3 consecutive writes: 8x - Cx - 93) - 0xE000 ;W (0x04) - -*/ /************************* * Input Ports * @@ -305,12 +357,12 @@ ADDRESS_MAP_END static INPUT_PORTS_START( poker41 ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Discard 4") PORT_CODE(KEYCODE_V) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet/Ante") PORT_CODE(KEYCODE_N) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Deal/Hit") PORT_CODE(KEYCODE_2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Stand") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet / Ante") PORT_CODE(KEYCODE_N) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Deal / Hit") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) /* Coin A */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Free Bonus Draw / Stand") PORT_CODE(KEYCODE_3) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Start") PORT_CODE(KEYCODE_1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Discard 5") PORT_CODE(KEYCODE_B) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Discard 5 / High / Double Down") PORT_CODE(KEYCODE_B) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Discard 3") PORT_CODE(KEYCODE_C) PORT_START("IN1") @@ -321,17 +373,7 @@ static INPUT_PORTS_START( poker41 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service 1 (Test/Settings)") PORT_CODE(KEYCODE_9) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Discard 1") PORT_CODE(KEYCODE_Z) - - PORT_START("IN2") /* disabled */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Discard 1 / Low") PORT_CODE(KEYCODE_Z) INPUT_PORTS_END static INPUT_PORTS_START( pulltabs ) @@ -339,7 +381,7 @@ static INPUT_PORTS_START( pulltabs ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Ante") PORT_CODE(KEYCODE_1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) /* Coin A */ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Big Bar Ticket") PORT_CODE(KEYCODE_C) @@ -349,21 +391,11 @@ static INPUT_PORTS_START( pulltabs ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Service 2 (Test Mode Out / Coin Stuck)") PORT_CODE(KEYCODE_0) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Payout? */ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service 1 (Test/Settings)") PORT_CODE(KEYCODE_9) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Super Star Ticket") PORT_CODE(KEYCODE_Z) - - PORT_START("IN2") /* disabled */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -402,7 +434,7 @@ GFXDECODE_END static MACHINE_DRIVER_START( gat ) /* basic machine hardware */ - MDRV_CPU_ADD("main", Z80, MASTER_CLOCK/24) /* guess */ + MDRV_CPU_ADD("main", Z80, MASTER_CLOCK/24) /* 666.66 kHz, guess */ MDRV_CPU_PROGRAM_MAP(gat_map, 0) MDRV_CPU_IO_MAP(gat_portmap,0) MDRV_CPU_VBLANK_INT("main", nmi_line_pulse) @@ -421,13 +453,15 @@ static MACHINE_DRIVER_START( gat ) MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0*8, 16*16-1) MDRV_GFXDECODE(gat) - MDRV_PALETTE_INIT(gat) MDRV_PALETTE_LENGTH(8) - MDRV_VIDEO_START(gat) MDRV_VIDEO_UPDATE(gat) + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + MDRV_SOUND_ADD("sn1", SN76496, MASTER_CLOCK/8 ) /* 2 MHz, guess */ + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.00) MACHINE_DRIVER_END @@ -461,6 +495,6 @@ ROM_END * Game Drivers * *************************/ -/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */ -GAME( 1983, poker41, 0, gat, poker41, 0, ROT0, "Game-A-Tron", "Poker 4-1", GAME_NO_SOUND ) -GAME( 1983, pulltabs, 0, gat, pulltabs, 0, ROT0, "Game-A-Tron", "Pull Tabs", GAME_NO_SOUND ) +/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ +GAMEL( 1983, poker41, 0, gat, poker41, 0, ROT0, "Game-A-Tron", "Poker 4-1", 0, layout_poker41 ) +GAMEL( 1983, pulltabs, 0, gat, pulltabs, 0, ROT0, "Game-A-Tron", "Pull Tabs", 0, layout_pulltabs ) diff --git a/src/mame/layout/poker41.lay b/src/mame/layout/poker41.lay new file mode 100644 index 00000000000..7ed66c17300 --- /dev/null +++ b/src/mame/layout/poker41.lay @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/pulltabs.lay b/src/mame/layout/pulltabs.lay new file mode 100644 index 00000000000..1c9528b236b --- /dev/null +++ b/src/mame/layout/pulltabs.lay @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 54a4fb02fa5..2070d219081 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -742,7 +742,7 @@ $(MAMEOBJ)/gameplan.a: \ $(MAMEOBJ)/gametron.a: \ $(DRIVERS)/gotya.o $(AUDIO)/gotya.o $(VIDEO)/gotya.o \ $(DRIVERS)/sbugger.o $(VIDEO)/sbugger.o \ - $(DRIVERS)/gatron.o \ + $(DRIVERS)/gatron.o $(VIDEO)/gatron.o \ $(MAMEOBJ)/gottlieb.a: \ $(DRIVERS)/exterm.o $(VIDEO)/exterm.o \ @@ -1711,6 +1711,9 @@ $(DRIVERS)/firebeat.o: $(LAYOUT)/firebeat.lh $(DRIVERS)/funworld.o: $(LAYOUT)/funworld.lh +$(DRIVERS)/gatron.o: $(LAYOUT)/poker41.lh \ + $(LAYOUT)/pulltabs.lh + $(DRIVERS)/lazercmd.o: $(LAYOUT)/lazercmd.lh $(DRIVERS)/lucky74.o: $(LAYOUT)/lucky74.lh diff --git a/src/mame/video/gatron.c b/src/mame/video/gatron.c new file mode 100644 index 00000000000..46d50d68e12 --- /dev/null +++ b/src/mame/video/gatron.c @@ -0,0 +1,59 @@ +/****************************************************************************** + + GAME-A-TRON gambling hardware + ----------------------------- + + *** Video Hardware *** + + Written by Roberto Fresca. + + + Games running on this hardware: + + * Poker 4-1, 1983, Game-A-Tron. + * Pull Tabs, 1983, Game-A-Tron. + + +*******************************************************************************/ + + +#include "driver.h" + +static tilemap *bg_tilemap; + + +WRITE8_HANDLER( gat_videoram_w ) +{ + videoram[offset] = data; + tilemap_mark_tile_dirty(bg_tilemap, offset); +} + +static TILE_GET_INFO( get_bg_tile_info ) +{ +/* - bits - + 7654 3210 + xxxx xxxx tiles code. + + only one color code +*/ + + int code = videoram[tile_index]; + + SET_TILE_INFO(0, code, 0, 0); +} + +VIDEO_START( gat ) +{ + bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_cols, 8, 16, 48, 16); +} + +VIDEO_UPDATE( gat ) +{ + tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + return 0; +} + +PALETTE_INIT( gat ) +{ +} +