mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +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