summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Roberto Fresca <robbie@robertofresca.com>2025-02-24 04:04:17 +0100
committer Roberto Fresca <robbie@robertofresca.com>2025-02-24 04:04:17 +0100
commit8a31902316f124f6dec36e9d882bec181dcfeb92 (patch)
tree2cdfbd61ccab2c573b693f6d69cbdd1b4b5b7fa6
parentb9da31c7533696b99f79bde46a41ce9db72b5f62 (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.cpp481
-rw-r--r--src/mame/layout/drw80pkr.lay166
-rw-r--r--src/mame/mame.lst2
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