diff options
author | 2025-02-24 04:04:17 +0100 | |
---|---|---|
committer | 2025-02-24 04:04:17 +0100 | |
commit | 8a31902316f124f6dec36e9d882bec181dcfeb92 (patch) | |
tree | 2cdfbd61ccab2c573b693f6d69cbdd1b4b5b7fa6 | |
parent | b9da31c7533696b99f79bde46a41ce9db72b5f62 (diff) |
Draw 80 Poker driver improvements: [Roberto Fresca, Grull Osgo]
- Added the DIP switch via AY8910.
- Battery sensor through T1 line.
- Rewrite the input system for players.
- Improved coin inputs.
- Added and documented the DIP switches fuctionalities.
- Lamps support.
- Mech Counters support.
- Added hopper device.
- Added default init for video memory.
- Fixed a bug in read NVRAM decode.
- Added AY-8910 callback for the DIP switch.
- Added support for Wild 1 cocktail mode.
- Added button-lamps clickable layout for both games.
- System is playable with almost complete functionality.
-rw-r--r-- | src/mame/igt/drw80pkr.cpp | 481 | ||||
-rw-r--r-- | src/mame/layout/drw80pkr.lay | 166 | ||||
-rw-r--r-- | src/mame/mame.lst | 2 |
3 files changed, 499 insertions, 150 deletions
diff --git a/src/mame/igt/drw80pkr.cpp b/src/mame/igt/drw80pkr.cpp index 08c3e347e4e..b9d984fc8e2 100644 --- a/src/mame/igt/drw80pkr.cpp +++ b/src/mame/igt/drw80pkr.cpp @@ -1,36 +1,124 @@ // license:BSD-3-Clause -// copyright-holders:Jim Stolis -/********************************************************************************** +// copyright-holders: Jim Stolis, Roberto Fresca, Grull Osgo +/******************************************************************************************************* + DRAW 80 POKER + Sircoma / IGT - DRAW 80 POKER + Driver by Jim Stolis, Roberto Fresca & Grull Osgo. - Driver by Jim Stolis. + --- Technical Notes --- - --- Technical Notes --- + Name: Draw 80 Poker + Company: IGT - International Game Technology + Year: 1982 - Name: Draw 80 Poker - Company: IGT - International Game Technology - Year: 1982 + Hardware: - Hardware: + CPU = INTEL 8039 ; Intel MCS-48 family of 8-bit microcontrollers + VIDEO = SYS 6545 ; CRTC M6845 compatible + SND = AY-3-8912 ; AY8910 compatible - CPU = INTEL 8039 ; I8039 compatible - VIDEO = SYS 6545 ; CRTC6845 compatible - SND = AY-3-8912 ; AY8910 compatible + History: - History: + This is one of the first video machines produced by IGT. Originally, the + company was called SIRCOMA and was founded in 1979. It became a public + company in 1981 and changed its name to IGT. - This is one of the first video machines produced by IGT. Originally, the - company was called SIRCOMA and was founded in 1979. It became a public - company in 1981 and changed its name to IGT. -***********************************************************************************/ + Coinage: + + DSW#3 OFF ON OFF ON + DSW#4 OFF OFF ON ON + + Coin1 1 3 5 10 + A/S/H 4+4 12+12 20+20 40+40 + G 20+4 60+12 100+20 200+40 + + +******************************************************************************************************** + + Notes by game: + ------------- + + * Draw 80 Poker: + + Draw 80 Poker challenges even the most skilled players with a computerized dealer. Each hand + offers players the choice to stand pat, discard, and draw from a reshuffled deck. Players can + wager one to eight coins or skill points per hand. + + Draw 80 Poker where excitement, reliability, and the potential for earnings come together + in a thrilling experience. + + Please note: The operation of these games and their features may be subject to state and local + laws or regulations. This content is not intended to solicit the sale or operation of these + games in jurisdictions where such activities are not legally permitted. + + + Features: + + - Available in 13" color screen or 19" b/w screen. + - Microprocessor based circuitry with back-up battery for memory. + - High security cash box system (optional). + - Multiply coin entry, single coin option. + - Keyed reset for anti-cheat override. + - Ticket or token dispenser (optional, check local law). + - Credit register. + - Cashbox door. + - Dual coin entry. + - Star-point button switches. + + + * Wild 1 (Quick Change Kit): + + The IGT Drop In Amusement is a compact, versatile video unit designed for easy installation + on bar tops, cocktail tables, or virtually any flat horizontal surface. It offers the exciting + benefit of having all the Quick Change games in a single unit. + + Servicing and game conversions can be done without removing the Drop In Amusement from its location, + making it incredibly convenient. Turn unused space into a profitable opportunity with this innovative + solution. + + +******************************************************************************************************** + + Updates [2025-02-24] + + - Added the DIP switch via AY8910. + - Battery sensor through T1 line. + - Rewrite the input system for players. + - Improved coin inputs. + - Added and documented the DIP switches fuctionalities. + - Lamps support. + - Mech Counters support. + - Added hopper device. + - Added default init for video memory. + - Fixed a bug in read NVRAM decode. + - Added AY-8910 callback for the DIP switch. + - Added support for Wild 1 cocktail mode. + - Added button-lamps clickable layout for both games. + - System is playable with almost complete functionality. + + + TODO: + + - Find the unknown remaining DIP switches. + - Fix the credits addition after each reset. + - Support for the IGT ABC type coin acceptor. + - Reversed and find the unknown port access via P1 and P2. + - Rewrite I/O handlers to simplify the if/then nested scheme toward switch statements. + - Find the coin lock line for documentation. + - Find if there is a diverter or weight sensor line. + - Fix the coin in line for drw80pkr. + + +*******************************************************************************************************/ #include "emu.h" #include "cpu/mcs48/mcs48.h" #include "machine/nvram.h" +#include "machine/ticket.h" #include "video/mc6845.h" #include "sound/ay8910.h" #include "emupal.h" @@ -38,6 +126,8 @@ #include "speaker.h" #include "tilemap.h" +#include "drw80pkr.lh" + namespace { @@ -50,10 +140,13 @@ public: m_gfxdecode(*this, "gfxdecode"), m_crtc(*this, "crtc"), m_aysnd(*this, "aysnd"), - m_mainbank(*this, "mainbank") + m_mainbank(*this, "mainbank"), + m_hopper(*this, "hopper"), + m_lamps(*this, "lamp%u", 0U) + { } - void init_drw80pkr(); + void init_drw80pkr(); void drw80pkr(machine_config &config); protected: @@ -71,14 +164,16 @@ private: uint8_t m_attract_mode; uint8_t m_active_bank; uint8_t m_pkr_io_ram[0x100]; - uint16_t m_video_ram[0x0400]; - uint8_t m_color_ram[0x0400]; + uint16_t m_video_ram[0x0400] = {}; + uint8_t m_color_ram[0x0400] = {}; required_device<i8039_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<mc6845_device> m_crtc; required_device<ay8912_device> m_aysnd; required_memory_bank m_mainbank; + required_device<ticket_dispenser_device> m_hopper; + output_finder<8> m_lamps; void p1_w(uint8_t data); void p2_w(uint8_t data); @@ -98,22 +193,29 @@ private: void io_map(address_map &map) ATTR_COLD; void map(address_map &map) ATTR_COLD; -}; +}; #define DATA_NVRAM_SIZE 0x100 +/*********************************** +* Machine Start * +***********************************/ + void drw80pkr_state::machine_start() { subdevice<nvram_device>("nvram")->set_base(m_pkr_io_ram, sizeof(m_pkr_io_ram)); m_active_bank = 0; + m_lamps.resolve(); + m_t1 = 1; // battery level sensor (1 = battery ok) } -/***************** -* Write Handlers * -******************/ + +/*********************************** +* Write Handlers * +***********************************/ void drw80pkr_state::p1_w(uint8_t data) { @@ -146,17 +248,20 @@ void drw80pkr_state::bus_w(uint8_t data) void drw80pkr_state::io_w(offs_t offset, uint8_t data) { uint16_t n_offs; - + if (m_p2 == 0x3f || m_p2 == 0x7f) { n_offs = ((m_p1 & 0xc0) << 2 ) + offset; if (m_p2 == 0x3f) { - m_video_ram[n_offs] = data; // low address - } else { - m_color_ram[n_offs] = data & 0x0f; // color palette - m_video_ram[n_offs] += ((data & 0xf0) << 4 ); // high address + m_video_ram[n_offs] = data; // low address + } + else + { + m_color_ram[n_offs] = data & 0x0f; // color palette + m_video_ram[n_offs] += ((data & 0xf0) << 4 ); // high address + } m_bg_tilemap->mark_tile_dirty(n_offs); @@ -168,20 +273,47 @@ void drw80pkr_state::io_w(offs_t offset, uint8_t data) if (m_p2 == 0xd7) m_crtc->register_w(data); - if (m_p2 == 0xfb) { + if (m_p2 == 0xfb) + { m_pkr_io_ram[offset] = data; } if (m_p2 == 0xff) { - if (m_p1 == 0xdf) + if (m_p1 == 0xdb || m_p1 == 0xef || m_p1 == 0xf7 || m_p1 == 0xfb) { - m_attract_mode = data; // Latch this for use in input reads (0x01 = attract mode, 0x00 = game in progress) + // unknown, most likely lamps, meters, hopper etc. } - if (m_p1 == 0xdb || m_p1 == 0xef || m_p1 == 0xf7 || m_p1 == 0xfb) + // rewrite output decoder + if (m_p1 == 0xf7 || m_p1 == 0xef || m_p1 == 0xdf) { - // unknown, most likely lamps, meters, hopper etc. + // to rewrite with switch + if(m_p1 == 0xf7) // /P1.3 + { + machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin in counter + machine().bookkeeping().coin_counter_w(1, data & 0x02); // credits paid + machine().bookkeeping().coin_counter_w(2, data & 0x04); // credits bet + machine().bookkeeping().coin_counter_w(3, data & 0x08); // coin out counter + m_hopper->motor_w(BIT(data, 4) && BIT(data, 5)); + } + + if(m_p1 == 0xef) // /P1.4 + { + m_lamps[0] = BIT(data, 0); // bet lamp + m_lamps[1] = BIT(data, 1); // start (deal/draw) + m_lamps[2] = BIT(data, 2); // hold + m_lamps[3] = BIT(data, 3); // hold + m_lamps[4] = BIT(data, 4); // hold + m_lamps[5] = BIT(data, 5); // hold + m_lamps[6] = BIT(data, 6); // hold + m_lamps[7] = BIT(data, 7); // unknown + } + + if(m_p1 == 0xdf) // /P1.5 + { + m_attract_mode = data; // latch this for use in input reads (0x01 = attract mode, 0x00 = game in progress) + } } // ay8910 control port @@ -194,9 +326,10 @@ void drw80pkr_state::io_w(offs_t offset, uint8_t data) } } -/**************** -* Read Handlers * -****************/ + +/*********************************** +* Read Handlers * +***********************************/ int drw80pkr_state::t0_r() { @@ -226,8 +359,7 @@ uint8_t drw80pkr_state::bus_r() uint8_t drw80pkr_state::io_r(offs_t offset) { uint8_t ret; - uint16_t kbdin; - + ret = 0x00; if (m_p2 == 0x3b) @@ -235,17 +367,13 @@ uint8_t drw80pkr_state::io_r(offs_t offset) // unknown } - if (m_p2 == 0x7b) - { - ret = m_pkr_io_ram[offset]; - } - if (m_p2 == 0xf7) { // unknown } - if (m_p2 == 0xfb) + if ((m_p2 == 0xfb) | (m_p2 == 0x7b)) // Some reads done with extra P2.7 low, but nvram access requires only P2.2 low.(some bug?) + // Writes don't have this behaviour. { ret = m_pkr_io_ram[offset]; } @@ -259,57 +387,49 @@ uint8_t drw80pkr_state::io_r(offs_t offset) if (m_p1 == 0xfe) { - // Dip switches tied to sound chip - // - // TODO: Unknown switch positions, but found the following flipping bits: - // SW.? = Double Up Option - // SW.? = Coin Denomination - // SW.4 = Payout Type (0=cash, 1=credit) - // SW.? = Use Joker in Deck - // - ret = 0x77; // double-up with credit payout + return m_aysnd->data_r(); + // DIP switches tied to sound chip } - + if ((m_attract_mode == 0x01 && m_p1 == 0xef) || m_p1 == 0xf7) { - // TODO: Get Input Port Values - kbdin = ((ioport("IN1")->read() & 0xaf ) << 8) + ioport("IN0")->read(); - - switch (kbdin) - { - // The following is very incorrect, but does allow you to - // play slightly with very messed up hold buttons etc. - // - // Open/Close the door with 'O' - // Press '5' (twice) with door open to play credit - // Press '1' to draw/deal - // - case 0x0000: ret = 0x00; break; - case 0x0001: ret = 0x01; break; /* Door */ - case 0x4000: ret = 0x00; break; - case 0x8000: ret = 0x00; break; /* Hand Pay */ - case 0x0002: ret = 0x00; break; /* Books */ - case 0x0004: ret = 0x0e; break; /* Coin In */ - case 0x0008: ret = 0x0d; break; /* Start */ - case 0x0010: ret = 0x00; break; /* Discard */ - case 0x0020: ret = 0x00; break; /* Cancel */ - case 0x0040: ret = 0x01; break; /* Hold 1 */ - case 0x0080: ret = 0x02; break; /* Hold 2 */ - case 0x0100: ret = 0x03; break; /* Hold 3 */ - case 0x0200: ret = 0x04; break; /* Hold 4 */ - case 0x0400: ret = 0x05; break; /* Hold 5 */ - case 0x0800: ret = 0x00; break; /* Bet */ + if(m_p1 == 0xef) + return ioport("IN1")->read(); + + if(m_p1 == 0xf7) + { + switch (ioport("IN2")->read()) + { + case 0x0000: ret = 0x80; break; + case 0x0001: ret = 0x81; break; // HOLD 4 P1 + case 0x0002: ret = 0x82; break; // HOLD 3 P1 + case 0x0004: ret = 0x83; break; // HOLD 2 P1 + case 0x0008: ret = 0x84; break; // HOLD 1 P1 + case 0x0010: ret = 0x85; break; // START P1 + case 0x0020: ret = 0x86; break; // BET P1 + case 0x0040: ret = 0x87; break; // HOLD 5 P1 + case 0x0080: ret = 0x88; break; // HOLD 4 P2 + case 0x0100: ret = 0x90; break; // HOLD 3 P2 + case 0x0200: ret = 0x98; break; // HOLD 2 P2 + case 0x0400: ret = 0xa0; break; // HOLD 1 P2 + case 0x0800: ret = 0xa8; break; // START P2 + case 0x1000: ret = 0xb0; break; // BET P2 + case 0x2000: ret = 0xb8; break; // HOLD P2 + case 0x4000: ret = 0x40; break; // Hopper coin out + case 0x8000: ret = 0x00; break; // Books/Door + } + return ret; } } + ret = 0x00; } - return ret; } -/**************************** -* Video/Character functions * -****************************/ +/*********************************** +* Video Hardware * +***********************************/ TILE_GET_INFO_MEMBER(drw80pkr_state::get_bg_tile_info) { @@ -355,15 +475,15 @@ void drw80pkr_state::drw80pkr_palette(palette_device &palette) const } -/************************* -* Graphics Layouts * -*************************/ +/***************************************** +* Graphics Layouts * +*****************************************/ static const gfx_layout charlayout = { - 8,8, /* 8x8 characters */ - RGN_FRAC(1,2), /* 512 characters */ - 2, /* 2 bitplanes */ + 8,8, // 8x8 characters + RGN_FRAC(1,2), // 512 characters + 2, // 2 bitplanes { 0, RGN_FRAC(1,2) }, { STEP8(0,1) }, { STEP8(0,8) }, @@ -371,18 +491,18 @@ static const gfx_layout charlayout = }; -/****************************** -* Graphics Decode Information * -******************************/ +/***************************************** +* Graphics Decode Information * +*****************************************/ static GFXDECODE_START( gfx_drw80pkr ) GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout, 0, 16 ) GFXDECODE_END -/************** -* Driver Init * -***************/ +/***************************************** +* Driver Init * +*****************************************/ void drw80pkr_state::init_drw80pkr() { @@ -390,9 +510,9 @@ void drw80pkr_state::init_drw80pkr() } -/************************* -* Memory map information * -*************************/ +/***************************************** +* Memory Map Information * +*****************************************/ void drw80pkr_state::map(address_map &map) { @@ -404,37 +524,95 @@ void drw80pkr_state::io_map(address_map &map) map(0x00, 0xff).rw(FUNC(drw80pkr_state::io_r), FUNC(drw80pkr_state::io_w)); } -/************************* -* Input ports * -*************************/ + +/***************************************** +* Input Ports * +*****************************************/ static INPUT_PORTS_START( drw80pkr ) - // Unknown at this time - // These are temporary buttons for testing only - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_GAMBLE_DOOR ) PORT_TOGGLE - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK ) PORT_NAME("Books") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Start") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Discard") PORT_CODE(KEYCODE_2) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_POKER_CANCEL ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POKER_HOLD1 ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_POKER_HOLD2 ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POKER_HOLD3 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_POKER_HOLD4 ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_POKER_HOLD5 ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Hopper") PORT_TOGGLE PORT_CODE(KEYCODE_H) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_GAMBLE_PAYOUT) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN1") //$EF + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // coin sequencer A + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // coin sequencer B + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // coin sequencer C + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN4 ) PORT_IMPULSE(2) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_IMPULSE(2) + + PORT_START("IN2") //$F7 + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_POKER_HOLD4 ) PORT_IMPULSE(2) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_POKER_HOLD3 ) PORT_IMPULSE(2) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_POKER_HOLD2 ) PORT_IMPULSE(2) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_POKER_HOLD1 ) PORT_IMPULSE(2) // Double -> YES / HIGH + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_GAMBLE_DEAL ) PORT_IMPULSE(2) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_GAMBLE_BET ) PORT_IMPULSE(2) PORT_NAME("Bet") // switch the control for cocktail mode. + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_POKER_HOLD5 ) PORT_IMPULSE(2) // Double -> NO / LOW + + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode hold 4 + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode hold 3 + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode hold 2 + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode hold 1 + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode deal/draw + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode bet + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNUSED ) // unsupported cocktail mode hold 5 + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x01, 0x01, "Pair of Aces" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x01, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x02, 0x02, "Joker Enable" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x02, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x04, "Enabled" ) + PORT_DIPSETTING( 0x00, "Disabled" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Payout Type" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x10, "Cash" ) + PORT_DIPSETTING( 0x00, "Credits" ) + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:3,2") + PORT_DIPSETTING( 0x60, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" ) + PORT_DIPNAME( 0x80, 0x00, "Coin Acceptor Type" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x80, "Type ABC" ) + PORT_DIPSETTING( 0x00, "Single Pulse" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( drw80wld ) + PORT_INCLUDE( drw80pkr ) + + PORT_MODIFY("IN1") //$EF + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) // coin sequencer A + PORT_BIT( 0x10, IP_ACTIVE_LOW , IPT_COIN2 ) // coin sequencer B + PORT_BIT( 0x20, IP_ACTIVE_LOW , IPT_COIN3 ) // coin sequencer C + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("0-8") PORT_CODE(KEYCODE_H) + + PORT_MODIFY("IN2") + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) PORT_NAME("Hold 4 (cocktail mode)") PORT_IMPULSE(2) // cocktail mode hold 4 + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) PORT_NAME("Hold 3 (cocktail mode)") PORT_IMPULSE(2) // cocktail mode hold 3 + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W) PORT_NAME("Hold 2 (cocktail mode)") PORT_IMPULSE(2) // cocktail mode hold 2 + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q) PORT_NAME("Hold 1 (cocktail mode)") PORT_IMPULSE(2) // cocktail mode hold 1 + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2) PORT_NAME("Deal (cocktail mode)") PORT_IMPULSE(2) // cocktail mode deal/draw + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) PORT_NAME("Bet") PORT_IMPULSE(2) // cocktail mode bet (switch the control for cocktail mode) + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Hold 5 (cocktail mode)") PORT_IMPULSE(2) // cocktail mode hold 5 INPUT_PORTS_END -/************************* -* Machine Driver * -*************************/ + +/***************************************** +* Machine Driver * +*****************************************/ void drw80pkr_state::drw80pkr(machine_config &config) { @@ -456,7 +634,7 @@ void drw80pkr_state::drw80pkr(machine_config &config) // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_raw(8_MHz_XTAL / 2, 256, 0, 192, 257, 0, 216); // 4 MHz? + screen.set_raw(8_MHz_XTAL / 2, 256, 0, 192, 257, 0, 216); // 4 MHz? screen.set_screen_update(FUNC(drw80pkr_state::screen_update)); screen.set_palette("palette"); @@ -464,7 +642,7 @@ void drw80pkr_state::drw80pkr(machine_config &config) PALETTE(config, "palette", FUNC(drw80pkr_state::drw80pkr_palette), 16 * 16); - MC6845(config, m_crtc, 8_MHz_XTAL / 16); // 0.5 MHz? + MC6845(config, m_crtc, 8_MHz_XTAL / 16); // 0.5 MHz? m_crtc->set_screen("screen"); m_crtc->set_show_border_area(false); m_crtc->set_char_width(8); @@ -474,33 +652,37 @@ void drw80pkr_state::drw80pkr(machine_config &config) SPEAKER(config, "mono").front_center(); AY8912(config, m_aysnd, 20000000/12).add_route(ALL_OUTPUTS, "mono", 0.75); + m_aysnd->port_a_read_callback().set_ioport("DSW1"); + + HOPPER(config, m_hopper, attotime::from_msec(150)); } -/************************* -* Rom Load * -*************************/ + +/***************************************** +* Rom Load * +*****************************************/ ROM_START( drw80pkr ) ROM_REGION( 0x2000, "maincpu", 0 ) - ROM_LOAD( "pm0.u81", 0x0000, 0x1000, CRC(73223555) SHA1(229999ec00a1353f0d4928c65c8975079060c5af) ) - ROM_LOAD( "pm1.u82", 0x1000, 0x1000, CRC(f8158f2b) SHA1(da3b30cfd49cd0e8a48d78fd3f82b2b4ab33670c) ) + ROM_LOAD( "pm0.u81", 0x0000, 0x1000, CRC(0f3e97d2) SHA1(aa9e4015246284f32435d7320de667e075412e5b) ) + ROM_LOAD( "pm1.u82", 0x1000, 0x1000, CRC(5a6ad467) SHA1(0128bd70b65244a0f68031d5f451bf115eeb7609) ) ROM_REGION( 0x002000, "gfx1", 0 ) - ROM_LOAD( "cg0-a.u74", 0x0000, 0x1000, CRC(0eefe598) SHA1(ed10aac345b10e35fb15babdd3ac30ebe2b8fc0f) ) - ROM_LOAD( "cg1-a.u76", 0x1000, 0x1000, CRC(522a96d0) SHA1(48f855a132413493353fbf6a44a1feb34ae6726d) ) + ROM_LOAD( "cg0-a.u74", 0x0000, 0x1000, CRC(97f5eb92) SHA1(f6c7bb42ccef8a78e8d56104ad942ae5b8e5b0df) ) + ROM_LOAD( "cg1-a.u76", 0x1000, 0x1000, CRC(2a3a750d) SHA1(db6183d11b2865b011c3748dc472cf5858dde78f) ) ROM_REGION( 0x100, "proms", 0 ) ROM_LOAD( "cap13.u92", 0x0000, 0x0100, CRC(be67a8d9) SHA1(24b8cd19a5ec09779a737f6fc8c07b44f1226c8f) ) ROM_END -ROM_START( drw80pk2 ) +ROM_START( drw80wld ) ROM_REGION( 0x2000, "maincpu", 0 ) - ROM_LOAD( "pm0.u81", 0x0000, 0x1000, CRC(0f3e97d2) SHA1(aa9e4015246284f32435d7320de667e075412e5b) ) - ROM_LOAD( "pm1.u82", 0x1000, 0x1000, CRC(5a6ad467) SHA1(0128bd70b65244a0f68031d5f451bf115eeb7609) ) + ROM_LOAD( "pm0.u81", 0x0000, 0x1000, CRC(73223555) SHA1(229999ec00a1353f0d4928c65c8975079060c5af) ) + ROM_LOAD( "pm1.u82", 0x1000, 0x1000, CRC(f8158f2b) SHA1(da3b30cfd49cd0e8a48d78fd3f82b2b4ab33670c) ) ROM_REGION( 0x002000, "gfx1", 0 ) - ROM_LOAD( "cg0-a.u74", 0x0000, 0x1000, CRC(97f5eb92) SHA1(f6c7bb42ccef8a78e8d56104ad942ae5b8e5b0df) ) - ROM_LOAD( "cg1-a.u76", 0x1000, 0x1000, CRC(2a3a750d) SHA1(db6183d11b2865b011c3748dc472cf5858dde78f) ) + ROM_LOAD( "cg0-a.u74", 0x0000, 0x1000, CRC(0eefe598) SHA1(ed10aac345b10e35fb15babdd3ac30ebe2b8fc0f) ) + ROM_LOAD( "cg1-a.u76", 0x1000, 0x1000, CRC(57d39a16) SHA1(c3d826c2d427bcaabed6a71c1c34d5411afdace8) ) ROM_REGION( 0x100, "proms", 0 ) ROM_LOAD( "cap13.u92", 0x0000, 0x0100, CRC(be67a8d9) SHA1(24b8cd19a5ec09779a737f6fc8c07b44f1226c8f) ) @@ -508,10 +690,11 @@ ROM_END } // Anonymous namespace -/************************* -* Game Drivers * -*************************/ -// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS -GAME( 1982, drw80pkr, 0, drw80pkr, drw80pkr, drw80pkr_state, init_drw80pkr, ROT0, "IGT - International Game Technology", "Draw 80 Poker", MACHINE_NOT_WORKING ) -GAME( 1983, drw80pk2, 0, drw80pkr, drw80pkr, drw80pkr_state, init_drw80pkr, ROT0, "IGT - International Game Technology", "Draw 80 Poker - Minn", MACHINE_NOT_WORKING ) +/***************************************** +* Game Drivers * +*****************************************/ + +// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT +GAMEL( 1983, drw80pkr, 0, drw80pkr, drw80pkr, drw80pkr_state, init_drw80pkr, ROT0, "IGT - International Game Technology", "Draw 80 Poker (Minn)", MACHINE_NOT_WORKING, layout_drw80pkr) +GAMEL( 1982, drw80wld, 0, drw80pkr, drw80wld, drw80pkr_state, init_drw80pkr, ROT0, "IGT - International Game Technology", "Wild 1 (Quick Change Kit)", MACHINE_NOT_WORKING, layout_drw80pkr) diff --git a/src/mame/layout/drw80pkr.lay b/src/mame/layout/drw80pkr.lay new file mode 100644 index 00000000000..e08a407e452 --- /dev/null +++ b/src/mame/layout/drw80pkr.lay @@ -0,0 +1,166 @@ +<?xml version="1.0"?> +<!-- +license:CC0-1.0 +copyright-holders: Roberto Fresca, Grull Osgo. + + Draw 80 Poker + Single player control panel + +--> +<mamelayout version="2"> + + <!-- define elements --> + + <element name="L0" defstate="0"> + <rect state="1"><color red="1.0" green="0.5" blue="0.0" /></rect> + <rect state="0"><color red="0.17" green="0.076" blue="0.0" /></rect> + <text string="HOLD 1"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + <element name="L1" defstate="0"> + <rect state="1"><color red="1.0" green="0.5" blue="0.0" /></rect> + <rect state="0"><color red="0.17" green="0.076" blue="0.0" /></rect> + <text string="HOLD 2"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + <element name="L2" defstate="0"> + <rect state="1"><color red="1.0" green="0.5" blue="0.0" /></rect> + <rect state="0"><color red="0.17" green="0.076" blue="0.0" /></rect> + <text string="HOLD 3"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + <element name="L3" defstate="0"> + <rect state="1"><color red="1.0" green="0.5" blue="0.0" /></rect> + <rect state="0"><color red="0.17" green="0.076" blue="0.0" /></rect> + <text string="HOLD 4"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + <element name="L4" defstate="0"> + <rect state="1"><color red="1.0" green="0.5" blue="0.0" /></rect> + <rect state="0"><color red="0.17" green="0.076" blue="0.0" /></rect> + <text string="HOLD 5"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + <element name="L5"> + <rect state="1"><color red="1.0" green="1.0" blue="1.0" /></rect> + <rect state="0"><color red="0.20" green="0.20" blue="0.20" /></rect> + <text string="BET"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + <element name="L6" defstate="0"> + <rect state="1"><color red="1.0" green="1.0" blue="1.0" /></rect> + <rect state="0"><color red="0.20" green="0.20" blue="0.20" /></rect> + <text string="DEAL"> + <color red="0.0" green="0.0" blue="0.0" /> + <bounds x="0.1" y="0.30" width="0.8" height="0.4" /> + </text> + </element> + + + <element name="LX"> + <rect><color red="0.00" green="0.0" blue="0.0" /></rect> + </element> + + + <element name="buttonedge_y" defstate="0"> + <rect state="1"><color red="0.7" green="0.35" blue="0.0" /></rect> + <rect state="0"><color red="0.12" green="0.04" blue="0.0" /></rect> + </element> + + <element name="buttonedge_w" defstate="0"> + <rect state="1"><color red="0.77" green="0.77" blue="0.77" /></rect> + <rect state="0"><color red="0.12" green="0.12" blue="0.12" /></rect> + </element> + + + <!-- define cpanel layout --> + + <view name="Button Lamps"> + <screen index="0"> + <bounds left="0" top="0" right="4" bottom="3" /> + </screen> + + <element ref="LX"> + <bounds x="0.0" y="3.00" width="0.01" height="0.90" /> + </element> + + <!-- define button-lamps --> + + <!-- Hold 1 button-lamp --> + <element name="lamp2" ref="buttonedge_y" inputtag="IN2" inputmask="0x0008"> + <bounds x="0.425" y="3.10" width="0.35" height="0.30" /> + </element> + <element name="lamp2" ref="L0" inputtag="IN2" inputmask="0x0008"> + <bounds x="0.445" y="3.12" width="0.31" height="0.26" /> + </element> + + <!-- Bet button-lamp --> + <element name="lamp0" ref="buttonedge_w" inputtag="IN2" inputmask="0x0020"> + <bounds x="0.775" y="3.50" width="0.35" height="0.30" /> + </element> + <element name="lamp0" ref="L5" inputtag="IN2" inputmask="0x0020"> + <bounds x="0.795" y="3.52" width="0.31" height="0.26" /> + </element> + + <!-- Hold 2 button-lamp --> + <element name="lamp3" ref="buttonedge_y" inputtag="IN2" inputmask="0x0004"> + <bounds x="1.125" y="3.10" width="0.35" height="0.30" /> + </element> + <element name="lamp3" ref="L1" inputtag="IN2" inputmask="0x0004"> + <bounds x="1.145" y="3.12" width="0.31" height="0.26" /> + </element> + + + <!-- Hold 3 button-lamp --> + <element name="lamp4" ref="buttonedge_y" inputtag="IN2" inputmask="0x0002"> + <bounds x="1.825" y="3.10" width="0.35" height="0.30" /> + </element> + <element name="lamp4" ref="L2" inputtag="IN2" inputmask="0x0002"> + <bounds x="1.845" y="3.12" width="0.31" height="0.26" /> + </element> + + + <!-- Hold 4 button-lamp --> + <element name="lamp5" ref="buttonedge_y" inputtag="IN2" inputmask="0x0001"> + <bounds x="2.525" y="3.10" width="0.35" height="0.30" /> + </element> + <element name="lamp5" ref="L3" inputtag="IN2" inputmask="0x0001"> + <bounds x="2.545" y="3.12" width="0.31" height="0.26" /> + </element> + + <!-- Deal/Draw button-lamp --> + <element name="lamp1" ref="buttonedge_w" inputtag="IN2" inputmask="0x0010"> + <bounds x="2.875" y="3.50" width="0.35" height="0.30" /> + </element> + <element name="lamp1" ref="L6" inputtag="IN2" inputmask="0x0010"> + <bounds x="2.895" y="3.52" width="0.31" height="0.26" /> + </element> + + <!-- Hold 5 button-lamp --> + <element name="lamp6" ref="buttonedge_y" inputtag="IN2" inputmask="0x0040"> + <bounds x="3.225" y="3.10" width="0.35" height="0.30" /> + </element> + <element name="lamp6" ref="L4" inputtag="IN2" inputmask="0x0040"> + <bounds x="3.245" y="3.12" width="0.31" height="0.26" /> + </element> + + </view> +</mamelayout> diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 2520b51b0f2..84d9bca4662 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20806,8 +20806,8 @@ spk205us spk306us @source:igt/drw80pkr.cpp -drw80pk2 drw80pkr +drw80wld @source:igt/fortune1.cpp babydad |