mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
Super Poker: Added the missing PPI's 8255 and routed the involved
inputs/outputs through them. 3super8 has PPi's initialization routines, but seems to be a leftover since it lacks of them. Also cleaned up the driver and added technical notes. [Roberto Fresca]
This commit is contained in:
parent
d4bfb8d78c
commit
73f7e9b720
@ -1,29 +1,34 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mirko Buffoni
|
||||
// copyright-holders:Mirko Buffoni, Roberto Fresca
|
||||
/***************************************************************************
|
||||
Super Poker (IGS)
|
||||
Driver by Mirko Buffoni
|
||||
|
||||
TODO:
|
||||
- Understand how to reset NVRAM
|
||||
- Map DSW (Operator mode doesn't help)
|
||||
- Map Leds and Coin counters
|
||||
- 3super8 randomly crashes
|
||||
- 3super8 doesn't have the 8x32 tilemap, change the video emulation accordingly
|
||||
Super Poker (IGS)
|
||||
Driver by Mirko Buffoni
|
||||
Additional work by Roberto Fresca.
|
||||
|
||||
TODO:
|
||||
- Understand how to reset NVRAM
|
||||
- Map DSW (Operator mode doesn't help)
|
||||
- Map Leds and Coin counters
|
||||
- 3super8 randomly crashes
|
||||
- 3super8 doesn't have the 8x32 tilemap, change the video emulation accordingly
|
||||
|
||||
****************************************************************************
|
||||
|
||||
Very similar to IGS009 driver, but without the reels stuff.
|
||||
Maybe both drivers can be merged at some point.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z180/z180.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/i8255.h"
|
||||
#include "sound/2413intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Video Hardware
|
||||
***************************************************************************/
|
||||
|
||||
class spoker_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -84,6 +89,11 @@ public:
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Video Hardware
|
||||
***************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(spoker_state::bg_tile_w)
|
||||
{
|
||||
m_bg_tile_ram[offset] = data;
|
||||
@ -129,8 +139,9 @@ UINT32 spoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Memory Maps
|
||||
Misc Handlers
|
||||
***************************************************************************/
|
||||
|
||||
CUSTOM_INPUT_MEMBER(spoker_state::hopper_r)
|
||||
@ -154,12 +165,12 @@ WRITE8_MEMBER(spoker_state::nmi_and_coins_w)
|
||||
// popmessage("%02x",data);
|
||||
}
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
|
||||
machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
|
||||
machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin out mech
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
|
||||
machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
|
||||
machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin out mech
|
||||
|
||||
output().set_led_value(6, data & 0x40); // led for coin out / hopper active
|
||||
output().set_led_value(6, data & 0x40); // led for coin out / hopper active
|
||||
|
||||
if(((m_nmi_ack & 0x80) == 0) && data & 0x80)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
@ -172,11 +183,11 @@ WRITE8_MEMBER(spoker_state::nmi_and_coins_w)
|
||||
|
||||
WRITE8_MEMBER(spoker_state::video_and_leds_w)
|
||||
{
|
||||
output().set_led_value(4, data & 0x01); // start?
|
||||
output().set_led_value(5, data & 0x04); // l_bet?
|
||||
output().set_led_value(4, data & 0x01); // start?
|
||||
output().set_led_value(5, data & 0x04); // l_bet?
|
||||
|
||||
m_video_enable = data & 0x40;
|
||||
m_hopper = (~data)& 0x80;
|
||||
m_video_enable = data & 0x40;
|
||||
m_hopper = (~data)& 0x80;
|
||||
|
||||
m_out[1] = data;
|
||||
show_out(machine(), m_out);
|
||||
@ -233,72 +244,55 @@ READ8_MEMBER(spoker_state::magic_r)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Memory Maps
|
||||
***************************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( spoker_map, AS_PROGRAM, 8, spoker_state )
|
||||
AM_RANGE( 0x00000, 0x0f3ff ) AM_ROM
|
||||
AM_RANGE( 0x0f400, 0x0ffff ) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x00000, 0x0f3ff) AM_ROM
|
||||
AM_RANGE(0x0f400, 0x0ffff) AM_RAM AM_SHARE("nvram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( spoker_portmap, AS_IO, 8, spoker_state )
|
||||
AM_RANGE( 0x0000, 0x003f ) AM_RAM // Z180 internal regs
|
||||
|
||||
AM_RANGE( 0x2000, 0x23ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE( 0x2400, 0x27ff ) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
|
||||
AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
|
||||
|
||||
AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
|
||||
|
||||
/* TODO: ppi #1 */
|
||||
AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(nmi_and_coins_w )
|
||||
AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
|
||||
AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
|
||||
|
||||
/* TODO: ppi #2 */
|
||||
AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
|
||||
AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(video_and_leds_w )
|
||||
AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(leds_w )
|
||||
|
||||
AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
|
||||
|
||||
AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE("ymsnd", ym2413_device, write)
|
||||
|
||||
AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
|
||||
|
||||
AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(magic_r, magic_w ) // DSW1-5
|
||||
|
||||
AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
|
||||
AM_RANGE(0x0000, 0x003f) AM_RAM // Z180 internal regs
|
||||
AM_RANGE(0x2000, 0x23ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x2400, 0x27ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
AM_RANGE(0x3000, 0x33ff) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
|
||||
AM_RANGE(0x5000, 0x5fff) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
|
||||
AM_RANGE(0x6480, 0x6483) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) /* NMI and coins (w), service (r), coins (r) */
|
||||
AM_RANGE(0x6490, 0x6493) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) /* buttons 1 (r), video and leds (w), leds (w) */
|
||||
AM_RANGE(0x64a0, 0x64a0) AM_READ_PORT( "BUTTONS2" )
|
||||
AM_RANGE(0x64b0, 0x64b1) AM_DEVWRITE("ymsnd", ym2413_device, write)
|
||||
AM_RANGE(0x64c0, 0x64c0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
|
||||
AM_RANGE(0x64d0, 0x64d1) AM_READWRITE(magic_r, magic_w ) // DSW1-5
|
||||
AM_RANGE(0x7000, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( 3super8_portmap, AS_IO, 8, spoker_state )
|
||||
// AM_RANGE( 0x1000, 0x1fff ) AM_WRITENOP
|
||||
// AM_RANGE(0x1000, 0x1fff) AM_WRITENOP
|
||||
AM_RANGE(0x2000, 0x27ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x2800, 0x2fff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
AM_RANGE(0x3000, 0x33ff) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
|
||||
AM_RANGE(0x4000, 0x4000) AM_READ_PORT( "DSW1" )
|
||||
AM_RANGE(0x4001, 0x4001) AM_READ_PORT( "DSW2" )
|
||||
AM_RANGE(0x4002, 0x4002) AM_READ_PORT( "DSW3" )
|
||||
AM_RANGE(0x4003, 0x4003) AM_READ_PORT( "DSW4" )
|
||||
AM_RANGE(0x4004, 0x4004) AM_READ_PORT( "DSW5" )
|
||||
// AM_RANGE(0x4000, 0x40ff) AM_WRITENOP
|
||||
AM_RANGE(0x5000, 0x5fff) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
|
||||
|
||||
AM_RANGE( 0x2000, 0x27ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE( 0x2800, 0x2fff ) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
// The following one (0x6480) should be output. At begining of code, there is a PPI initialization
|
||||
// setting O-I-I for ports ABC. Except these routines are just a leftover from the original game,
|
||||
// and now the I/O is handled by a CPLD or FPGA (as seen in goldstar and gp98).
|
||||
AM_RANGE(0x6480, 0x6480) AM_READ_PORT( "IN0" )
|
||||
AM_RANGE(0x6490, 0x6490) AM_READ_PORT( "IN1" )
|
||||
|
||||
AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
|
||||
|
||||
AM_RANGE( 0x4000, 0x4000 ) AM_READ_PORT( "DSW1" )
|
||||
AM_RANGE( 0x4001, 0x4001 ) AM_READ_PORT( "DSW2" )
|
||||
AM_RANGE( 0x4002, 0x4002 ) AM_READ_PORT( "DSW3" )
|
||||
AM_RANGE( 0x4003, 0x4003 ) AM_READ_PORT( "DSW4" )
|
||||
AM_RANGE( 0x4004, 0x4004 ) AM_READ_PORT( "DSW5" )
|
||||
|
||||
// AM_RANGE( 0x4000, 0x40ff ) AM_WRITENOP
|
||||
|
||||
AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
|
||||
|
||||
AM_RANGE( 0x6480, 0x6480 ) AM_READ_PORT( "IN0" )
|
||||
AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "IN1" )
|
||||
AM_RANGE( 0x6491, 0x6491 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
|
||||
AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "IN2" )
|
||||
AM_RANGE( 0x64b0, 0x64b0 ) AM_WRITE(leds_w )
|
||||
AM_RANGE( 0x64c0, 0x64c0 ) AM_READNOP //irq ack?
|
||||
|
||||
AM_RANGE( 0x64f0, 0x64f0 ) AM_WRITE(nmi_and_coins_w )
|
||||
|
||||
AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
|
||||
AM_RANGE(0x6491, 0x6491) AM_DEVREADWRITE("oki", okim6295_device, read, write)
|
||||
AM_RANGE(0x64a0, 0x64a0) AM_READ_PORT( "IN2" )
|
||||
AM_RANGE(0x64b0, 0x64b0) AM_WRITE(leds_w )
|
||||
AM_RANGE(0x64c0, 0x64c0) AM_READNOP //irq ack?
|
||||
AM_RANGE(0x64f0, 0x64f0) AM_WRITE(nmi_and_coins_w )
|
||||
AM_RANGE(0x7000, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -462,8 +456,9 @@ static INPUT_PORTS_START( 3super8 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Graphics Layout
|
||||
Graphics Layout & Graphics Decode
|
||||
***************************************************************************/
|
||||
|
||||
static const gfx_layout layout_8x8x6 =
|
||||
@ -471,9 +466,9 @@ static const gfx_layout layout_8x8x6 =
|
||||
8, 8,
|
||||
RGN_FRAC(1, 3),
|
||||
6,
|
||||
{ RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
|
||||
RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0,
|
||||
RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 },
|
||||
{ RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0,
|
||||
RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0,
|
||||
RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0 },
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,2*8) },
|
||||
8*8*2
|
||||
@ -484,9 +479,9 @@ static const gfx_layout layout_8x32x6 =
|
||||
8, 32,
|
||||
RGN_FRAC(1, 3),
|
||||
6,
|
||||
{ RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
|
||||
RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0,
|
||||
RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 },
|
||||
{ RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0,
|
||||
RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0,
|
||||
RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0 },
|
||||
{ STEP8(0,1) },
|
||||
{ STEP32(0,2*8) },
|
||||
8*32*2
|
||||
@ -498,30 +493,30 @@ static const gfx_layout layout3s8_8x8x6 =
|
||||
RGN_FRAC(1,3),
|
||||
6,
|
||||
{ RGN_FRAC(0,3)+2*8, RGN_FRAC(0,3)+0, RGN_FRAC(1,3)+2*8, RGN_FRAC(1,3)+0,RGN_FRAC(2,3)+2*8, RGN_FRAC(2,3)+0 },
|
||||
{ 0, 1,2,3,4,5,6,7 },
|
||||
{ 0*8, 1*8, 4*8, 5*8, 8*8, 9*8, 12*8, 13*8 },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 4*8, 5*8, 8*8, 9*8, 12*8, 13*8 },
|
||||
16*8
|
||||
};
|
||||
|
||||
static GFXDECODE_START( spoker )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x00000, layout_8x8x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x00000, layout_8x8x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( 3super8 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x00000, layout3s8_8x8x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x00000, layout3s8_8x8x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Machine Drivers
|
||||
Machine Start & Reset
|
||||
***************************************************************************/
|
||||
|
||||
void spoker_state::machine_start()
|
||||
@ -535,11 +530,16 @@ void spoker_state::machine_start()
|
||||
|
||||
void spoker_state::machine_reset()
|
||||
{
|
||||
m_nmi_ack = 0;
|
||||
m_hopper = 0;
|
||||
m_video_enable = 1;
|
||||
m_nmi_ack = 0;
|
||||
m_hopper = 0;
|
||||
m_video_enable = 1;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Machine Drivers
|
||||
***************************************************************************/
|
||||
|
||||
static MACHINE_CONFIG_START( spoker, spoker_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -548,9 +548,18 @@ static MACHINE_CONFIG_START( spoker, spoker_state )
|
||||
MCFG_CPU_IO_MAP(spoker_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", spoker_state, nmi_line_assert)
|
||||
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) // Control 0x8b --> A:out; B:input; C:input.
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(spoker_state, nmi_and_coins_w))
|
||||
MCFG_I8255_IN_PORTB_CB(IOPORT("SERVICE"))
|
||||
MCFG_I8255_IN_PORTC_CB(IOPORT("COINS"))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) // Control 0x90 --> A:input; B:out; C:out.
|
||||
MCFG_I8255_IN_PORTA_CB(IOPORT("BUTTONS1"))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(spoker_state, video_and_leds_w))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(spoker_state, leds_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -567,12 +576,13 @@ static MACHINE_CONFIG_START( spoker, spoker_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.4)
|
||||
|
||||
MCFG_OKIM6295_ADD("oki", XTAL_12MHz / 12, OKIM6295_PIN7_HIGH)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( 3super8, spoker )
|
||||
|
||||
MCFG_CPU_REPLACE("maincpu", Z80, XTAL_24MHz / 4) /* z840006, 24/4 MHz? */
|
||||
@ -582,26 +592,18 @@ static MACHINE_CONFIG_DERIVED( 3super8, spoker )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", spoker_state, nmi_line_assert)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(spoker_state, irq0_line_hold, 120) // this signal comes from the PIC
|
||||
|
||||
MCFG_DEVICE_REMOVE("ppi8255_0")
|
||||
MCFG_DEVICE_REMOVE("ppi8255_1")
|
||||
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", 3super8)
|
||||
|
||||
MCFG_DEVICE_REMOVE("ymsnd")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
DRIVER_INIT_MEMBER(spoker_state,spk116it)
|
||||
{
|
||||
int A;
|
||||
UINT8 *rom = memregion("maincpu")->base();
|
||||
|
||||
|
||||
for (A = 0;A < 0x10000;A++)
|
||||
{
|
||||
rom[A] ^= 0x02;
|
||||
if ((A & 0x0208) == 0x0208) rom[A] ^= 0x20;
|
||||
if ((A & 0x0228) == 0x0008) rom[A] ^= 0x20;
|
||||
if ((A & 0x04A0) == 0x04A0) rom[A] ^= 0x02;
|
||||
if ((A & 0x1208) == 0x1208) rom[A] ^= 0x01;
|
||||
}
|
||||
}
|
||||
/***************************************************************************
|
||||
ROMs load
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( spk116it )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
@ -767,7 +769,6 @@ Note
|
||||
//3.bin 1ST AND 2ND HALF IDENTICAL
|
||||
//sound.bin 1ST AND 2ND HALF IDENTICAL
|
||||
|
||||
|
||||
ROM_START( 3super8 )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "prgrom.bin", 0x00000, 0x20000, CRC(37c85dfe) SHA1(56bd2fb859b17dda1e675a385b6bcd6867ecceb0) )
|
||||
@ -794,7 +795,28 @@ ROM_START( 3super8 )
|
||||
ROM_LOAD( "sound.bin", 0x00000, 0x40000, BAD_DUMP CRC(230b31c3) SHA1(38c107325d3a4e9781912078b1317dc9ba3e1ced) )
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(spoker_state,3super8)
|
||||
|
||||
/***************************************************************************
|
||||
Driver Init
|
||||
***************************************************************************/
|
||||
|
||||
DRIVER_INIT_MEMBER(spoker_state, spk116it)
|
||||
{
|
||||
int A;
|
||||
UINT8 *rom = memregion("maincpu")->base();
|
||||
|
||||
|
||||
for (A = 0;A < 0x10000;A++)
|
||||
{
|
||||
rom[A] ^= 0x02;
|
||||
if ((A & 0x0208) == 0x0208) rom[A] ^= 0x20;
|
||||
if ((A & 0x0228) == 0x0008) rom[A] ^= 0x20;
|
||||
if ((A & 0x04A0) == 0x04A0) rom[A] ^= 0x02;
|
||||
if ((A & 0x1208) == 0x1208) rom[A] ^= 0x01;
|
||||
}
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(spoker_state, 3super8)
|
||||
{
|
||||
UINT8 *ROM = memregion("maincpu")->base();
|
||||
int i;
|
||||
@ -831,11 +853,17 @@ DRIVER_INIT_MEMBER(spoker_state,3super8)
|
||||
}
|
||||
}
|
||||
|
||||
GAME( 1993?, spk116it, 0, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v116IT)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1993?, spk115it, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v115IT)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk306us, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v306US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk205us, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v205US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk203us, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v203US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk200ua, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v200UA)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk102ua, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v102UA)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1993?, 3super8, spk116it, 3super8,3super8, spoker_state, 3super8, ROT0, "<unknown>", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //roms are badly dumped
|
||||
|
||||
/***************************************************************************
|
||||
Game Drivers
|
||||
***************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
|
||||
GAME( 1993?, spk116it, 0, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v116IT)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1993?, spk115it, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v115IT)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk306us, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v306US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk205us, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v205US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk203us, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v203US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk200ua, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v200UA)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, spk102ua, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v102UA)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1993?, 3super8, spk116it, 3super8, 3super8, spoker_state, 3super8, ROT0, "<unknown>", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //roms are badly dumped
|
||||
|
Loading…
Reference in New Issue
Block a user