diff options
Diffstat (limited to 'src/mame/drivers/gdrawpkr.c')
-rw-r--r-- | src/mame/drivers/gdrawpkr.c | 700 |
1 files changed, 700 insertions, 0 deletions
diff --git a/src/mame/drivers/gdrawpkr.c b/src/mame/drivers/gdrawpkr.c new file mode 100644 index 00000000000..b596317ad9b --- /dev/null +++ b/src/mame/drivers/gdrawpkr.c @@ -0,0 +1,700 @@ +/********************************************************************************** + + + GAMING DRAW POKER (CEI) + Driver by Roberto Fresca. + + + --- Technical Notes --- + + Name: Gaming Draw Poker. + Version: V23.9 SCH.07-0T 01/14/85 + Company: Cal Omega / Casino Electronics Inc. + Year: 1981-1985 + + Hardware: + + CPU = 1x SY6502 ; M6502 compatible. + CRCT = 1x SY6545 ; M6845 compatible mode. Doesn't seems that are using + ; the first 4 bits of register R03 (HSync width). + SND = 1x AY8912 ; AY8910 compatible. + I/O = 2x PIAs SY6520/6820 ; M6821 compatible. + Clk = 1x Xtal @10MHz + + +*********************************************************************************** + + + --- General Notes --- + + + Gaming Draw Poker: + + Gaming Draw Poker, formerly known as Jack Potten's poker, is an evolution of the + mentioned game. It was created by Cal Omega in 1981 for Casino Electronics Inc. + Cal Omega was bought out by CEI (Casino Electronics Inc.), and CEI was bought by UCMC. + + This game was made before the CEI 906iii system. + + The game use the same GFX set that Jack Potten's poker for cards and have similar + layout, but the game is different and the old discrete pitched sounds were replaced + with a better set of sounds through a AY8910/12 implementation. The empty socket in + the pcb is maybe for future upgrades instead of sound ROM, since sounds are hardcoded. + + Inputs are multiplexed and selected through PIA1, portB. + + In game, use "Stand" instead of "Deal/Draw" to conserve all cards without discards. + To enter to TEST MODE press F2. Press "Discard 1" + "Discard 2" + "Discard 3" to exit. + To enter the STATS MODE press "Show Stats". Press "Deal/Draw" to exit. + To pass coin and hopper errors press "Hopper SW". Also keep it pressed to see the status. + For payout, press "Manual Collect" an then "Payout" for each credit (manual mode). + + + El Grande - 5 Card Draw: + + This game was created by Tuni Electro Service and was licenced to E.T. Marketing,Inc. + This is the new version. The old one is still undumped, but looks like Golden Poker D-Up. + + Flyer: http://www.arcadeflyers.com/?page=thumbs&db=videodb&id=4542 + + The AY8912 is mapped to 0x840/0x841 but the game lacks of credits and bet sounds. + The rest of sounds are ok. Maybe the missing ones are generated by discrete circuitry. + + Inputs are multiplexed and selected through PIA1, portB. + + There aren't meter and stats modes. Only for amusement, so... no payout. + To clear credits press F2. + To enter to TEST MODE press F2 twice. Press "Hold 1" + "Hold 2" + "Hold 3" to exit. + + + +***********************************************************************************? + + + Dumper notes (old) + + + -- Gaming Draw Poker -------------------------------------------------------- + + Program roms are roms 23*.*, on the board, there is a number near each roms + looks to be the address of the rom : + + 23-91 1800 + 23-92 2000 + 23-93 2800 + 23-94 3000 + 23-9 3800 + + Graphics are in roms CG*.*, there is no type indication on these rams, i hope + i read them correctly. + + There is also 3 sets of switches on the board : + + SW1 1 300 SW2 1 OPT1 + 2 600 2 OPT2 + 3 1200 3 OPT3 + 4 2400 4 OPT4 + 5 4800 5 OPT5 + 6 9600 6 DIS + 7 - 7 +VPOL + 8 - 8 +HPOL + + SW3 no indications on the board + + The sound rom is missing on the board :( + + + -- El Grande 5 Card Draw ---------------------------------------------------- + + ROM text showed poker stuff and "TUNI" "1982" + + .u6 2716 + .u7 2516 + .u8 2516 + .u9 2516 + .u67 2516 + .u68 2516 + .u69 2716 + .u70 2716 + .u28 82s129 + + 6502 + HD46505 + AY-3-8912 + MC6821P x2 + TC5501 x2 + 10MHz Crystal + + empty socket at u5 + + +*********************************************************************************** + + + *** Memory Map *** + + + $0000 - $07FF NVRAM ; All registers and settings. + $0840 - $0840 AY-8912 (R/C) ; Read/Control. + $0841 - $0841 AY-8912 (W) ; Write. + $0880 - $0880 CRTC6845 (A) ; MC6845 adressing. + $0881 - $0881 CRTC6845 (R/W) ; MC6845 Read/Write. + $08C4 - $08C7 PIA0 ; I/O Ports 0, 1, 2, 3. + $08C8 - $08CB PIA1 ; I/O Port 4. + + $1000 - $13FF VideoRAM + $1400 - $17FF ColorRAM + + $D800 - $FFFF ROM (gdrawpkr) + + ----- + + $2000 - $3FFF ROM (elgrande) + $F800 - $FFFF ROM (elgrande) + + + + *** MC6545 Initialization *** + + ---------------------------------------------------------------------------------------------------------------------- + register: R00 R01 R02 R03 R04 R05 R06 R07 R08 R09 R10 R11 R12 R13 R14 R15 R16 R17 + ---------------------------------------------------------------------------------------------------------------------- + value: 0x27 0x20 0x23 0x03 0x1F 0x04 0x1F 0x1F 0x00 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00. + + + + *** MC6545 conditional change for elgrande if 0x8c4 (PIA0) has bit7 activated *** + + --------------------------------------------------------- + register: R00 R01 R02 R03 R04 R05 R06 R07 + --------------------------------------------------------- + value: 0x27 0x20 0x23 0x03 0x26 0x00 0x20 0x22 + + + +*********************************************************************************** + + + UPDATES + ------- + + + [2007-09-15] + + - Added sound support to "El Grande - 5 Card Draw". + - All crystals documented via #defines. + - All CPU and sound clocks derived from #defined crystal values. + - Splitted the driver to driver/video. + - Some minor input cleanups. + - Updated technical notes. + + + [2007-08-13] + + - Added "El Grande - 5 Card Draw" (new). + - Constructed a new memory map for this game. + - Reworked a whole set of inputs for this game. + - Patched some bad bits in GFX rom d1.u68 till a good dump appear. + - Updated technical notes. + + + [2007-07-23] + + - Cleaned up the inputs. + - Changed the hold buttons to "discard" since they are in fact discard buttons. + - Updated technical notes. + + + [2007-03-24 to 2007-04-27] + + - Rearranged GFX in two different banks. + - Decoded GFX properly. + - Rewrote the memory map based on program ROMs analysis. + - Hooked two SY6520/6280 (M6821) PIAs for I/O. + - Hooked the SY6545 (6845) CRT controller. + - Fixed size for screen total and visible area based on SY6545 CRTC registers. + - Added partial inputs through PIAs. + - Added proper sound through AY8910 (mapped at $0840-$0841). + - Fixed AY8910 volume to avoid clips. + - Proper colors through color PROM decode. + - Demuxed inputs (thanks to Dox that pointed me in the right direction!) + - Added some game-protection workaround. + - Added NVRAM support. + - Renamed driver, set and description to match the real game. + - Added technical notes. + + + TODO: + + - Fix lamps. + + +***********************************************************************************/ + + +#define MASTER_CLOCK 10000000 + +#include "driver.h" +#include "sound/ay8910.h" +#include "video/crtc6845.h" +#include "machine/6821pia.h" + +/* from video */ +extern WRITE8_HANDLER( gdrawpkr_videoram_w ); +extern WRITE8_HANDLER( gdrawpkr_colorram_w ); +extern PALETTE_INIT( gdrawpkr ); +extern VIDEO_START( gdrawpkr ); +extern VIDEO_UPDATE( gdrawpkr ); + + +/************************* +* Memory map information * +*************************/ + +static ADDRESS_MAP_START( gdrawpkr_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE(0x0840, 0x0840) AM_WRITE(AY8910_control_port_0_w) + AM_RANGE(0x0841, 0x0841) AM_WRITE(AY8910_write_port_0_w) + AM_RANGE(0x0880, 0x0880) AM_WRITE(crtc6845_address_w) + AM_RANGE(0x0881, 0x0881) AM_READWRITE(crtc6845_register_r, crtc6845_register_w) + AM_RANGE(0x08c4, 0x08c7) AM_READWRITE(pia_0_r, pia_0_w) + AM_RANGE(0x08c8, 0x08cb) AM_READWRITE(pia_1_r, pia_1_w) + AM_RANGE(0x1000, 0x13ff) AM_RAM AM_WRITE(gdrawpkr_videoram_w) AM_BASE(&videoram) + AM_RANGE(0x1400, 0x17ff) AM_RAM AM_WRITE(gdrawpkr_colorram_w) AM_BASE(&colorram) + AM_RANGE(0xd800, 0xffff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( elgrande_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE(0x0840, 0x0840) AM_WRITE(AY8910_control_port_0_w) + AM_RANGE(0x0841, 0x0841) AM_WRITE(AY8910_write_port_0_w) + AM_RANGE(0x0880, 0x0880) AM_WRITE(crtc6845_address_w) + AM_RANGE(0x0881, 0x0881) AM_READWRITE(crtc6845_register_r, crtc6845_register_w) + AM_RANGE(0x08c4, 0x08c7) AM_READWRITE(pia_0_r, pia_0_w) + AM_RANGE(0x08c8, 0x08cb) AM_READWRITE(pia_1_r, pia_1_w) + AM_RANGE(0x1000, 0x13ff) AM_RAM AM_WRITE(gdrawpkr_videoram_w) AM_BASE(&videoram) + AM_RANGE(0x1400, 0x17ff) AM_RAM AM_WRITE(gdrawpkr_colorram_w) AM_BASE(&colorram) + AM_RANGE(0x2000, 0x3fff) AM_ROM + AM_RANGE(0xf800, 0xffff) AM_ROM +ADDRESS_MAP_END + + +/************************* +* Input ports * +*************************/ + +static INPUT_PORTS_START( gdrawpkr ) + PORT_START_TAG("IN0-0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) /* credits */ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Manual Collect") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Double Up") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Deal/Draw") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Cancel Discards") PORT_CODE(KEYCODE_N) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_NAME("Stand") PORT_CODE(KEYCODE_E) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN0-1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Payout") PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service") PORT_CODE(KEYCODE_8) +// PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 3") PORT_CODE(KEYCODE_F) +// PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 4") PORT_CODE(KEYCODE_G) +// PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 5") PORT_CODE(KEYCODE_H) + PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Mode") PORT_CODE(KEYCODE_F2) /* should be splitted? */ + PORT_BIT( 0x14, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper SW") PORT_CODE(KEYCODE_9) /* should be splitted? */ + PORT_BIT( 0x24, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Show Stats") PORT_CODE(KEYCODE_0) /* should be splitted? */ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN0-2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Discard 1") PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Discard 2") PORT_CODE(KEYCODE_X) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_NAME("Discard 3") PORT_CODE(KEYCODE_C) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_NAME("Discard 4") PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_NAME("Discard 5") PORT_CODE(KEYCODE_B) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Small") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN0-3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet") PORT_CODE(KEYCODE_1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Take") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Big") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("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( 0xC0, 0x40, "Maximum Bet") + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x80, "40" ) + PORT_DIPSETTING( 0xC0, "80" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( elgrande ) + PORT_START_TAG("IN0-0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Double Up") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Deal/Draw") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Cancel Holds") PORT_CODE(KEYCODE_N) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("IN0-1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service") PORT_CODE(KEYCODE_8) + 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_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("IN0-2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Hold 1") PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Hold 2") PORT_CODE(KEYCODE_X) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_NAME("Hold 3") PORT_CODE(KEYCODE_C) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_NAME("Hold 4") PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_NAME("Hold 5") PORT_CODE(KEYCODE_B) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("IN0-3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Mode") PORT_CODE(KEYCODE_F2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet") PORT_CODE(KEYCODE_1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Take") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Odd") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Even") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("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( 0x30, 0x20, "Minimum Winning Hand") + PORT_DIPSETTING( 0x20, "Jacks or Better" ) + PORT_DIPSETTING( 0x30, "Queens or Better" ) + PORT_DIPSETTING( 0x00, "Kings or Better" ) + PORT_DIPSETTING( 0x10, "Aces or Better" ) + PORT_DIPNAME( 0xC0, 0x40, "Maximum Bet") + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x80, "20" ) + PORT_DIPSETTING( 0xC0, "50" ) +INPUT_PORTS_END + + +/************************* +* Graphics Layouts * +*************************/ + +static const gfx_layout charlayout = +{ + 8, 8, + RGN_FRAC(1,1), + 1, + { 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 +}; + +static const gfx_layout tilelayout = +{ + 8, 8, + RGN_FRAC(1,3), + 3, + { 0, RGN_FRAC(1,3), RGN_FRAC(2,3) }, /* bitplanes are separated */ + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 +}; + + +/****************************** +* Graphics Decode Information * +******************************/ + +static GFXDECODE_START( gdrawpkr ) + GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 16 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, tilelayout, (8 * 3) + 128, 16 ) +GFXDECODE_END + + +/*********************** +* Write Handlers * +***********************/ + +static int mux_data = 0; + +static READ8_HANDLER( mux_port_r ) +{ + switch( mux_data&0xf0 ) /* bits 4-7 */ + { + case 0x10: return input_port_0_r(0); + case 0x20: return input_port_1_r(0); + case 0x40: return input_port_2_r(0); + case 0x80: return input_port_3_r(0); + } + return 0xff; +} + +static WRITE8_HANDLER( mux_w ) +{ + mux_data = data ^ 0xff; /* inverted */ +} + + +/**** Lamps debug **** + + PIA0-B PIA1-A + + 0xff 0x7f = OFF + 0xfd 0x7f = Deal + 0xf1 0x7b = 12345 Holds + 0xef 0x7f = Double Up & Take + 0xff 0x7e = Big & Small + + 0xfe 0x7f = Hold 1 + 0xfd 0x7f = Hold 2 + 0xfb 0x7f = Hold 3 + 0xf7 0x7f = Hold 4 + 0xef 0x7f = Hold 5 + 0xff 0x7e = Cancel + 0xff 0x7d = Bet + 0xff 0x7b = Take + +*/ +static WRITE8_HANDLER( lamps_a_w ) +{ + output_set_lamp_value(0, 1-((data) & 1)); // 0 + output_set_lamp_value(1, 1-((data >> 1) & 1)); // 1 + output_set_lamp_value(2, 1-((data >> 2) & 1)); // 2 + output_set_lamp_value(3, 1-((data >> 3) & 1)); // 3 + output_set_lamp_value(4, 1-((data >> 4) & 1)); // 4 + output_set_lamp_value(5, 1-((data >> 5) & 1)); // 5 + output_set_lamp_value(6, 1-((data >> 6) & 1)); // 6 + output_set_lamp_value(7, 1-((data >> 7) & 1)); // 7 +} + +static WRITE8_HANDLER( lamps_b_w ) +{ + output_set_lamp_value(8, 1-((data) & 1)); // 0 + output_set_lamp_value(9, 1-((data >> 1) & 1)); // 1 + output_set_lamp_value(10, 1-((data >> 2) & 1)); // 2 + output_set_lamp_value(11, 1-((data >> 3) & 1)); // 3 + output_set_lamp_value(12, 1-((data >> 4) & 1)); // 4 + output_set_lamp_value(13, 1-((data >> 5) & 1)); // 5 + output_set_lamp_value(14, 1-((data >> 6) & 1)); // 6 + output_set_lamp_value(15, 1-((data >> 7) & 1)); // 7 +} + + +/*********************** +* PIA Interfaces * +***********************/ + +static const pia6821_interface pia0_intf = +{ + /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */ + mux_port_r, 0, 0, 0, 0, 0, + + /* PIA outputs: A, B, CA2, CB2 */ + 0, lamps_a_w, 0, 0, + + /* PIA IRQs: A, B */ + 0, 0 +}; + +static const pia6821_interface pia1_intf = +{ + /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */ + input_port_4_r, 0, 0, 0, 0, 0, /* 5 & 6 not tested */ + + /* PIA outputs: A, B, CA2, CB2 */ + + lamps_b_w, mux_w, 0, 0, + + /* PIA IRQs: A, B */ + 0, 0 +}; + + +/************************* +* Machine Driver * +*************************/ + +static MACHINE_DRIVER_START( gdrawpkr ) + // basic machine hardware + MDRV_CPU_ADD_TAG("main", M6502, MASTER_CLOCK/12) /* guessing... */ + MDRV_CPU_PROGRAM_MAP(gdrawpkr_map, 0) + MDRV_CPU_VBLANK_INT(irq0_line_hold, 1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + MDRV_NVRAM_HANDLER(generic_0fill) + + // video hardware + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE((39+1)*8, (31+1)*8) /* Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1) */ + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 31*8-1) /* Taken from MC6845 init, registers 01 & 06 */ + + MDRV_GFXDECODE(gdrawpkr) + MDRV_PALETTE_LENGTH(256) + MDRV_COLORTABLE_LENGTH(1024) + + MDRV_PALETTE_INIT(gdrawpkr) + MDRV_VIDEO_START(gdrawpkr) + MDRV_VIDEO_UPDATE(gdrawpkr) + + // sound hardware + MDRV_SPEAKER_STANDARD_MONO("mono") + MDRV_SOUND_ADD(AY8912, MASTER_CLOCK/12) /* guessing again... */ + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) + +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( elgrande ) + MDRV_IMPORT_FROM(gdrawpkr) + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(elgrande_map, 0) +MACHINE_DRIVER_END + + +/************************* +* Rom Load * +*************************/ + +ROM_START( gdrawpkr ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "23-91.u5", 0xd800, 0x0800, CRC(b49035e2) SHA1(b94a0245ca64d15b1496d1b272ffc0ce80f85526) ) + ROM_LOAD( "23-92.u6", 0xe000, 0x0800, CRC(d9ffaa73) SHA1(e39d10121e16f89cd8d30a5391a14dc3d4b13a46) ) + ROM_LOAD( "23-93.u7", 0xe800, 0x0800, CRC(f4e44280) SHA1(a03e5f03ed86c8ad7900fab0ef6a71c76eba3232) ) + ROM_LOAD( "23-94.u8", 0xf000, 0x0800, CRC(8372f4d0) SHA1(de289b65cbe30c92b46fa87b9262ff7f9cfa0431) ) + ROM_LOAD( "23-9.u9", 0xf800, 0x0800, CRC(bfcb934d) SHA1(b7cfa049bdd773368cb8326bcdfabbf474d15bb4) ) + + ROM_REGION( 0x0800, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "cg-0.u67", 0x0000, 0x0800, CRC(b626ad89) SHA1(551b75f4559d11a4f8f56e38982114a21c77d4e7) ) + + ROM_REGION( 0x1800, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "cg-2c.u70", 0x0000, 0x0800, CRC(f2f94661) SHA1(f37f7c0dff680fd02897dae64e13e297d0fdb3e7) ) + ROM_LOAD( "cg-2b.u69", 0x0800, 0x0800, CRC(6bbb1e2d) SHA1(51ee282219bf84218886ad11a24bc6a8e7337527) ) + ROM_LOAD( "cg-2a.u68", 0x1000, 0x0800, CRC(6e3e9b1d) SHA1(14eb8d14ce16719a6ad7d13db01e47c8f05955f0) ) + + ROM_REGION( 0x100, REGION_PROMS, 0 ) + ROM_LOAD( "82s129n.u28", 0x0000, 0x0100, CRC(6db5a344) SHA1(5f1a81ac02a2a74252decd3bb95a5436cc943930) ) +ROM_END + +ROM_START( elgrande ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "d1.u6", 0x2000, 0x0800, CRC(8b6b505c) SHA1(5f89bb1b50b9dfacf23c50e3016b9258b0e15084) ) + ROM_LOAD( "d1.u7", 0x2800, 0x0800, CRC(d803a978) SHA1(682b73c968ef57007397d3e5eb0e78a97722da5e) ) + ROM_LOAD( "d1.u8", 0x3000, 0x0800, CRC(291fa93b) SHA1(1d57f736b11ddc916effde78e2cd08c313a62901) ) + ROM_LOAD( "d1.u9", 0x3800, 0x0800, CRC(ec3309a7) SHA1(b8ab7f3f2edf2658ea633b2b557ea37517615399) ) + ROM_RELOAD( 0xf800, 0x0800 ) /* for vectors/pointers */ + + ROM_REGION( 0x0800, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "d1.u67", 0x0000, 0x0800, CRC(a8ac979d) SHA1(f7299d3f7c4aded028a65ae4365c174f0e953824) ) + + ROM_REGION( 0x1800, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "d1.u70", 0x0000, 0x0800, CRC(4f12d424) SHA1(c43f1df757ac7dd76875245e73d47451d1f7f6f2) ) + ROM_LOAD( "d1.u69", 0x0800, 0x0800, CRC(ed3c83b7) SHA1(93e2134de3d9f79a6cff0391c1a32fccd3840c3f) ) + ROM_LOAD( "d1.u68", 0x1000, 0x0800, BAD_DUMP CRC(3ab70570) SHA1(5ff84015a78d15a5207499f84ce637e49bca136f) ) /* bad bits */ + + ROM_REGION( 0x200, REGION_PROMS, 0 ) + ROM_LOAD( "d1.u28", 0x0000, 0x0200, CRC(a6d43709) SHA1(cbff2cb60137462dc0b7c7719a64574218d96c62) ) +ROM_END + + +/************************* +* Driver Init * +*************************/ + +static DRIVER_INIT( gdrawpkr ) +{ + /* Palette transformed by PLDs? */ + int x; + UINT8 *BPR = memory_region( REGION_PROMS ); + + for (x=0x0000;x<0x0100;x++) + { + if (BPR[x] == 0x07) + BPR[x] = 0x04; /* blue background */ + } + + /* Initializing PIAs... */ + pia_config(0, &pia0_intf); + pia_config(1, &pia1_intf); +} + +static DRIVER_INIT( elgrande ) +{ + int x; + UINT8 *BPR = memory_region( REGION_PROMS ); + UINT8 *ROM = memory_region( REGION_GFX2 ); + + /* Palette transformed by PLDs? */ + for (x=0x0000;x<0x0100;x++) + { + if (BPR[x] == 0x07) + BPR[x] = 0x00; /* black background */ + } + + /* Temporary patch to fix some bad bits in ROM d1.u68 */ + ROM[0x171c] = 0xff; + ROM[0x171d] = 0xff; + ROM[0x171e] = 0xff; + ROM[0x1737] = 0xff; + ROM[0x173d] = 0xff; + + /* Initializing PIAs... */ + pia_config(0, &pia0_intf); + pia_config(1, &pia1_intf); +} + + +/************************* +* Game Drivers * +*************************/ + +/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */ +GAME( 1981, gdrawpkr, 0, gdrawpkr, gdrawpkr, gdrawpkr, ROT0, "Cal Omega / Casino Electronics Inc.", "Gaming Draw Poker", 0 ) +GAME( 1982, elgrande, 0, elgrande, elgrande, elgrande, ROT0, "Tuni Electro Service / E.T. Marketing", "El Grande - 5 Card Draw (New)", 0 ) |