mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
forgot....
This commit is contained in:
parent
6c7ff97dac
commit
42ff929ce0
330
src/mame/drivers/pokerout.cpp
Normal file
330
src/mame/drivers/pokerout.cpp
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders: Roberto Fresca, Grull Osgo
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Potten's Poker stealth with Breakout front game.
|
||||||
|
Running in a PCB silkscreened "5981-A".
|
||||||
|
Unknown manufacturer & year.
|
||||||
|
|
||||||
|
Driver by Roberto Fresca & Grull Osgo.
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
Specs...
|
||||||
|
|
||||||
|
1x Z80A.
|
||||||
|
1x Z80ACTC.
|
||||||
|
1x AY-3-8910.
|
||||||
|
1x TI TMS9129NL (Video Display Processor).
|
||||||
|
1x Altera EP310-DC (EPLD).
|
||||||
|
|
||||||
|
2x 27128 EPROMS.
|
||||||
|
|
||||||
|
1x HM6116 2Kx8 SRAM.
|
||||||
|
2x TMS4416-15 16Kx4 DRAM (for VDP).
|
||||||
|
|
||||||
|
1x 8 DIP switches bank (Connected to AY8910 portA).
|
||||||
|
1x 10 DIP switches bank (Connected to EP310 EPLD. Not needed for the game).
|
||||||
|
|
||||||
|
1x 10.738 Xtal.
|
||||||
|
|
||||||
|
1x Empty socket between EPROMs and HM6116 RAM. />_<\
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
CTC connection...
|
||||||
|
|
||||||
|
.-----v-----.
|
||||||
|
| CLK/TRG0 |--------.
|
||||||
|
| ZC/TO0 |--(NC) |
|
||||||
|
| | |
|
||||||
|
| CLK/TRG1 |--------+---(74LS74,CLK/2)---> CLK AY8910.
|
||||||
|
| ZC/TO1 |--(NC) |
|
||||||
|
| | |
|
||||||
|
| CLK/TRG2 |--------'
|
||||||
|
| ZC/TO2 |--(NC) .------> 74LS244 (to be traced)
|
||||||
|
| | |
|
||||||
|
| CLK/TRG3 |------------+------> Z80 /NMI.
|
||||||
|
| |
|
||||||
|
| IEI |--------(1K RES)---> Z80 /BUSRQ.
|
||||||
|
| IEO |--(NC)
|
||||||
|
| /INT |-------------------> Z80 /INT.
|
||||||
|
'-----------'
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
Game notes...
|
||||||
|
|
||||||
|
This is a STEALTH game. It's a poker game hidden in another front game.
|
||||||
|
The goal is to have full operative gambling games in clandestine places
|
||||||
|
like bars, social clubs, and other locations where they are forbidden.
|
||||||
|
|
||||||
|
Obviously the front game is operative and pretends to be the main game.
|
||||||
|
But some inputs combinations trigger the real game hidden inside.
|
||||||
|
|
||||||
|
How to start:
|
||||||
|
|
||||||
|
At begining, this machine needs to be turned on keeping the joystick UP,
|
||||||
|
to initialize the dual game system, otherwise only could access the front game.
|
||||||
|
To do it in MAME, you need to RESET (F3) the game keeping UP pressed.
|
||||||
|
|
||||||
|
Then...
|
||||||
|
|
||||||
|
The game will boot in breakout mode. You can coin with key 5 as usual, start
|
||||||
|
the game with START 1 (key 1), use the arrows to drive the pad in all directions,
|
||||||
|
and play a 3-lives blockout game.
|
||||||
|
|
||||||
|
To enter the hidden poker game, you must coin through the hidden coin/notes
|
||||||
|
slot (key Q). Once you have credits, bet with START 2 (key 2) and then draw
|
||||||
|
the cards with START 1 (key 1).
|
||||||
|
|
||||||
|
Use the LEFT/RIGHT keys to move the cursor horizontally, and hold the desired
|
||||||
|
card using DOWN (you can cancel the held card using UP). Once finished, just
|
||||||
|
press START 1 again for deal/draw.
|
||||||
|
|
||||||
|
If you get a winning hand, the game will ask you if you want to double or take.
|
||||||
|
Use UP for double-up, and DOWN for take score.
|
||||||
|
|
||||||
|
The double-up feature will allow you to choose one between BIG/SMALL, on the
|
||||||
|
next card to draw. Use LEFT for BIG or RIGHT for SMALL, then press START 1 to
|
||||||
|
draw the card.
|
||||||
|
|
||||||
|
DIP switches could set the coinage and maximum bet.
|
||||||
|
|
||||||
|
As soon as you get out of credits or payout, the game will go to breakout mode.
|
||||||
|
You can payout only amounts of credits multiples of 10.
|
||||||
|
|
||||||
|
If you *still* have credits, resetting the machine (F3) alone will switch the
|
||||||
|
machine to blockout mode, and resetting with UP will switch to poker game mode.
|
||||||
|
|
||||||
|
Whilst you're in poker game mode, you have two service test buttons:
|
||||||
|
|
||||||
|
TEST 1 (key 9) will show you a sort of percentage screen, and using RIGHT, you
|
||||||
|
can see the bookkeeping and statistics. Press payout (key W) to exit.
|
||||||
|
Using LEFT you're entering in the TEST MODE (also TEST 2 key does the same).
|
||||||
|
|
||||||
|
TEST 2 (key 0) will enter the TEST MODE, where you can test the game buttons
|
||||||
|
and DIP switches. There are some inputs used by the code for unknown purposes
|
||||||
|
that are not present in this mode. Press START 2 (key 2) + UP to exit the mode.
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
|
||||||
|
- Trace/analysis of inputs out of test mode, but used by the code
|
||||||
|
(Port 90h D0-D3).
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "cpu/z80/z80.h"
|
||||||
|
#include "machine/z80daisy.h"
|
||||||
|
#include "machine/z80ctc.h"
|
||||||
|
#include "machine/nvram.h"
|
||||||
|
#include "sound/ay8910.h"
|
||||||
|
#include "video/tms9928a.h"
|
||||||
|
#include "screen.h"
|
||||||
|
#include "speaker.h"
|
||||||
|
|
||||||
|
#define MASTER_CLOCK XTAL(10'738'000)
|
||||||
|
#define VDP_CLOCK MASTER_CLOCK
|
||||||
|
#define CPU_CLOCK MASTER_CLOCK / 3
|
||||||
|
#define PSG_CLOCK MASTER_CLOCK / 3 / 2
|
||||||
|
|
||||||
|
#define VDP_MEM 0x4000 // 16k RAM, provided by 2x TMS4416.
|
||||||
|
|
||||||
|
|
||||||
|
class pokerout_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
pokerout_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
|
: driver_device(mconfig, type, tag)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokerout(machine_config &config);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_start() override;
|
||||||
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void mem_map(address_map &map);
|
||||||
|
void io_map(address_map &map);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* Memory Map / I/O *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
void pokerout_state::mem_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x7fff).rom().region("program", 0);
|
||||||
|
map(0xc000, 0xc7ff).ram().share("nvram"); // battery backed RAM
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokerout_state::io_map(address_map &map)
|
||||||
|
{
|
||||||
|
map.global_mask(0xff);
|
||||||
|
map(0x00, 0x00).rw("vdp", FUNC(tms9129_device::vram_read), FUNC(tms9129_device::vram_write));
|
||||||
|
map(0x01, 0x01).rw("vdp", FUNC(tms9129_device::register_read), FUNC(tms9129_device::register_write));
|
||||||
|
map(0x40, 0x41).w("psg", FUNC(ay8910_device::address_data_w));
|
||||||
|
map(0x42, 0x42).r("psg", FUNC(ay8910_device::data_r));
|
||||||
|
map(0x80, 0x80).portr("IN0");
|
||||||
|
map(0x90, 0x90).portr("IN1");
|
||||||
|
map(0xa0, 0xa0).portr("IN2");
|
||||||
|
map(0xc0, 0xc3).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
[:psg] warning: unmapped write 02 to AY-3-8910A PSG Port B (disconnected) ----> Hopper or counter pulse x10
|
||||||
|
[:maincpu] ':maincpu' (18EA): unmapped io memory write to 00B0 = 01 & FF ----> Hopper or counter pulse x10
|
||||||
|
[:maincpu] ':maincpu' (18F0): unmapped io memory write to 00B0 = 00 & FF
|
||||||
|
[:psg] warning: unmapped write 00 to AY-3-8910A PSG Port B (disconnected)
|
||||||
|
|
||||||
|
other writes found...
|
||||||
|
|
||||||
|
80 W ---> 07 0F 0B
|
||||||
|
90 W ---> 66 7F
|
||||||
|
A0 W ---> 00 01
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* Input Ports Definitions *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
static INPUT_PORTS_START(pokerout)
|
||||||
|
|
||||||
|
PORT_START("IN0") // 80h
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_NAME("Right / Small")
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_NAME("Down / Hold / Take")
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Spare C / Poker Credits") PORT_CODE(KEYCODE_Q)
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reserved") PORT_CODE(KEYCODE_R)
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Spare P / Poker Payout") PORT_CODE(KEYCODE_W)
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test 2") PORT_CODE(KEYCODE_0)
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start 1 / Draw")
|
||||||
|
|
||||||
|
PORT_START("IN1") // 90h
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN1-01") PORT_CODE(KEYCODE_A)
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN1-02") PORT_CODE(KEYCODE_S)
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN1-04") PORT_CODE(KEYCODE_D)
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN1-08") PORT_CODE(KEYCODE_F)
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_NAME("Up / Cancel / Double-Up")
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_NAME("Left / Big")
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Start 2 / Bet")
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test 1") PORT_CODE(KEYCODE_9)
|
||||||
|
|
||||||
|
PORT_START("IN2") // A0h
|
||||||
|
// Program does complex operations with this pull-up/down mask to boot the game.
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
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_UNKNOWN )
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("DSW") // PSG port A
|
||||||
|
PORT_DIPNAME(0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:1,2")
|
||||||
|
PORT_DIPSETTING(0x00, "10 Credits" )
|
||||||
|
PORT_DIPSETTING(0x01, "20 Credits" ) // code @ $2107 is ok, but this option isn't working...
|
||||||
|
PORT_DIPSETTING(0x02, "50 Credits" )
|
||||||
|
PORT_DIPSETTING(0x03, "100 Credits" )
|
||||||
|
PORT_DIPNAME(0x0c, 0x0c, "Maximum Bet" ) PORT_DIPLOCATION("DSW1:3,4")
|
||||||
|
PORT_DIPSETTING(0x0c, "10" )
|
||||||
|
PORT_DIPSETTING(0x08, "20" )
|
||||||
|
PORT_DIPSETTING(0x04, "50" )
|
||||||
|
PORT_DIPSETTING(0x00, "100" )
|
||||||
|
PORT_DIPNAME(0x10, 0x10, "Arcade Mode") PORT_DIPLOCATION("DSW1:5")
|
||||||
|
PORT_DIPSETTING(0x10, DEF_STR(Off))
|
||||||
|
PORT_DIPSETTING(0x00, DEF_STR(On))
|
||||||
|
PORT_DIPNAME(0x20, 0x20, DEF_STR(Unknown)) PORT_DIPLOCATION("DSW1:6")
|
||||||
|
PORT_DIPSETTING(0x20, DEF_STR(Off))
|
||||||
|
PORT_DIPSETTING(0x00, DEF_STR(On))
|
||||||
|
PORT_DIPNAME(0x40, 0x40, DEF_STR(Unknown)) PORT_DIPLOCATION("DSW1:7")
|
||||||
|
PORT_DIPSETTING(0x40, DEF_STR(Off))
|
||||||
|
PORT_DIPSETTING(0x00, DEF_STR(On))
|
||||||
|
PORT_DIPNAME(0x80, 0x80, DEF_STR(Unknown)) PORT_DIPLOCATION("DSW1:8")
|
||||||
|
PORT_DIPSETTING(0x80, DEF_STR(Off))
|
||||||
|
PORT_DIPSETTING(0x00, DEF_STR(On))
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* Machine Start & Reset Routines *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
void pokerout_state::machine_start()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokerout_state::machine_reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************
|
||||||
|
* Daisy Chain Interrupts Interface *
|
||||||
|
*********************************************/
|
||||||
|
|
||||||
|
static const z80_daisy_config daisy_chain[] =
|
||||||
|
{
|
||||||
|
{ "ctc" },
|
||||||
|
{ nullptr }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* Machine Config *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
void pokerout_state::pokerout(machine_config &config)
|
||||||
|
{
|
||||||
|
z80_device &maincpu(Z80(config, "maincpu", CPU_CLOCK));
|
||||||
|
maincpu.set_daisy_config(daisy_chain);
|
||||||
|
maincpu.set_addrmap(AS_PROGRAM, &pokerout_state::mem_map);
|
||||||
|
maincpu.set_addrmap(AS_IO, &pokerout_state::io_map);
|
||||||
|
|
||||||
|
z80ctc_device& ctc(Z80CTC(config, "ctc", CPU_CLOCK));
|
||||||
|
ctc.intr_callback().set_inputline(maincpu, INPUT_LINE_IRQ0);
|
||||||
|
|
||||||
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||||
|
|
||||||
|
/* video hardware */
|
||||||
|
tms9129_device &vdp(TMS9129(config, "vdp", VDP_CLOCK));
|
||||||
|
vdp.set_screen("screen");
|
||||||
|
vdp.set_vram_size(VDP_MEM);
|
||||||
|
// int line no connected, so no callback.
|
||||||
|
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
|
||||||
|
|
||||||
|
/* sound hardware */
|
||||||
|
SPEAKER(config, "mono").front_center();
|
||||||
|
ay8910_device &psg(AY8910(config, "psg", PSG_CLOCK));
|
||||||
|
psg.port_a_read_callback().set_ioport("DSW");
|
||||||
|
psg.add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* ROMs Loading *
|
||||||
|
*************************************************/
|
||||||
|
|
||||||
|
ROM_START(pokerout)
|
||||||
|
ROM_REGION(0x8000, "program", 0)
|
||||||
|
ROM_LOAD("brk01_tms128a.6f", 0x0000, 0x4000, CRC(ccf2e9d7) SHA1(b48630d1e6c223aacf4f785b2a70c5c3ed781a51))
|
||||||
|
ROM_LOAD("f_tms128a.8f", 0x4000, 0x4000, CRC(57a7bff2) SHA1(a466c881fcd2a339960936e21da7e2079e7d75ca))
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Game Drivers *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
|
||||||
|
GAME( 19??, pokerout, 0, pokerout, pokerout, pokerout_state, empty_init, ROT0, "<unknown>", "Potten's Poker stealth with Breakout front game", 0 )
|
Loading…
Reference in New Issue
Block a user