// license:BSD-3-Clause
// copyright-holders:Philip Bennett
/***************************************************************************
JPM IMPACT (aka System 6)
and
JPM IMPACT with Video hardware
driver by Phil Bennett
Games supported:
* Coronation Street Quiz Game
* Cluedo (3 sets)
* Hangman
* Scrabble
* Trivial Pursuit
ROMS wanted:
* Snakes and Ladders
Known issues:
* I/O documentation for lamps, reels, meters etc is possibly incorrect.
* DUART emulation is very simplistic, in progress.
* Digital volume control is not emulated.
* During the attract mode of Cluedo, just after the camera flash,
the camera colours go screwy and proceeding text is printed behind
the camera. Is it a TMS34010 emulation flaw or original game code bug?
For now, the MACHINE_IMPERFECT_GRAPHICS flag remains.
Mechanical games note:
Anything writing to 4800a0 within the first few instructions is guessed
to be an IMPACT game, some things could be misplaced, some could be
missing video roms, many are missing sound roms (or they're in the wrong
sets)
****************************************************************************
Memory map (preliminary)
****************************************************************************
========================================================================
Main CPU (68000)
========================================================================
000000-0FFFFF R xxxxxxxx xxxxxxxx Program ROM bank 1
100000-1FFFFF R xxxxxxxx xxxxxxxx Program ROM bank 2
400000-403FFF R/W xxxxxxxx xxxxxxxx Program RAM (battery-backed)
480000-48001F R/W -------- xxxxxxxx MC68681 DUART 1
480020-480033 R -------- xxxxxxxx Inputs
480041 R -xxxxxxx xxxxxxxx Reel optos
480060-480067 R/W -------- xxxxxxxx uPD71055C (NEC clone of 8255 PPI)
480080-480081 W -------- xxxxxxxx uPD7559 communications
480082-480083 W -------- xxxxxxxx Sound control
-------- -------x (uPD7759 reset)
-------- -----xx- (ROM A18-A17)
-------- ---x---- (X9C103 /INC)
-------- --x----- (X9C103 U/#D)
-------- -x------ (X9C103 /CS)
480084-480085 R -------- xxxxxxxx uPD7759 communications
4800A0-4800AF W xxxxxxxx xxxxxxxx Lamps?
4800E0-4800E1 W xxxxxxxx xxxxxxxx Reset and status LEDs?
4801DC-4801DD R -------- xxxxxxxx Unknown
4801DE-4801DF R -------- xxxxxxxx Unknown
4801E0-4801FF R/W -------- xxxxxxxx MC68681 DUART 2 (on ROM PCB)
800000-800007 R/W xxxxxxxx xxxxxxxx TMS34010 interface
C00000-CFFFFF R xxxxxxxx xxxxxxxx Question ROM bank 1
D00000-DFFFFF R xxxxxxxx xxxxxxxx Question ROM bank 2
E00000-EFFFFF R xxxxxxxx xxxxxxxx Question ROM bank 3
F00000-FFFFFF R xxxxxxxx xxxxxxxx Question ROM bank 4
========================================================================
Interrupts:
IRQ2 = TMS34010
IRQ5 = MC68681 1
IRQ6 = Watchdog?
IRQ7 = Power failure detect
========================================================================
========================================================================
Video CPU (TMS34010, all addresses are in bits)
========================================================================
-----000 00xxxxxx xxxxxxxx xxxxxxxx Video RAM
-----000 1xxxxxxx xxxxxxxx xxxxxxxx ROM
-----010 0xxxxxxx xxxxxxxx xxxxxxxx ROM
-----001 0------- -------- --xxxxxx Bt477 RAMDAC
-----111 1-xxxxxx xxxxxxxx xxxxxxxx RAM
****************************************************************************/
/**************************************************************************
IMPACT Games
IMPACT apparently stands for Interactive Moving Picture Amusement Control
Technology, and is intended as a replacement for the JPM System 5 board.
Large sections of the processing were moved to two identical custom ASICs
(U1 and U2), only half of each is used.
Thanks to Tony Friery and JPeMU for I/O routines and documentation.
***************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "includes/jpmimpct.h"
#include "machine/nvram.h"
#include "jpmimpct.lh"
#include "video/awpvid.h"
#include "machine/i8255.h"
/*************************************
*
* MC68681 DUART (TODO)
*
*************************************/
#define MC68681_1_CLOCK 3686400
#define MC68681_2_CLOCK 3686400
/*************************************
*
* 68000 IRQ handling
*
*************************************/
void jpmimpct_state::update_irqs()
{
m_maincpu->set_input_line(2, m_tms_irq ? ASSERT_LINE : CLEAR_LINE);
m_maincpu->set_input_line(5, m_duart_1_irq ? ASSERT_LINE : CLEAR_LINE);
}
/*************************************
*
* Initialisation
*
*************************************/
MACHINE_START_MEMBER(jpmimpct_state,jpmimpct)
{
save_item(NAME(m_tms_irq));
save_item(NAME(m_duart_1_irq));
save_item(NAME(m_touch_cnt));
save_item(NAME(m_touch_data));
/* TODO! */
save_item(NAME(m_duart_1.ISR));
save_item(NAME(m_duart_1.IMR));
save_item(NAME(m_duart_1.CT));
}
MACHINE_RESET_MEMBER(jpmimpct_state,jpmimpct)
{
memset(&m_duart_1, 0, sizeof(m_duart_1));
/* Reset states */
m_duart_1_irq = m_tms_irq = 0;
m_touch_cnt = 0;
// m_duart_1.IVR=0x0f;
}
/*************************************
*
* MC68681 DUART 1
*
*************************************/
/*
* IP0: MC1489P U7 pin 8
* IP1: MC1489P U12 pin 6
* IP2: MC1489P U7 pin 11
* IP3: MC1489P U12 pin 3
* IP4: LM393N U2 pin 1
* - Coin meter sense (0 = meter active)
* IP5: TEST/DEMO PCB push switch
*
* OP0: SN75188 U6 pins 9 & 10 -> SERIAL PORT pin 6
* OP1:
* OP2:
* OP3: DM7406N U4 pin 3 -> J7 pin 7 (COIN MECH)
* OP4: DM7406N U4 pin 5
* OP5: DM7406N U4 pin 9 -> J7 pin 5 (COIN MECH)
* OP6: DM7406N U4 pin 12
* OP7: DM7406N U4 pin 13 -> J7 pin ? (COIN MECH)
*
* TxDA/RxDA: Auxillary serial port
* TxDB/TxDB: Data retrieval unit
*/
TIMER_DEVICE_CALLBACK_MEMBER(jpmimpct_state::duart_1_timer_event)
{
m_duart_1.tc = 0;
m_duart_1.ISR |= 0x08;
m_duart_1_irq = 1;
update_irqs();
}
READ16_MEMBER(jpmimpct_state::duart_1_r)
{
struct duart_t &duart_1 = m_duart_1;
UINT16 val = 0xffff;
switch (offset)
{
case 0x1:
{
/* RxDA ready */
val = 0x04;
break;
}
case 0x2:
{
val = 0x00;
break;
}
case 0x3:
{
val = duart_1.RBA;
duart_1.ISR &= ~0x02;
duart_1.SRA &= ~0x03;
break;
}
case 0x4:
{
val = duart_1.IPCR;
duart_1.ISR &= ~0x80;
break;
}
case 0x5:
{
val = duart_1.ISR;
break;
}
case 0x9:
{
/* RxDB ready */
val = 0x04;
break;
}
case 0xd:
{
val = ioport("TEST/DEMO")->read();
break;
}
case 0xe:
{
attotime rate = attotime::from_hz(MC68681_1_CLOCK) * (16 * duart_1.CT);
timer_device *duart_timer = machine().device<timer_device>("duart_1_timer");
duart_timer->adjust(rate, 0, rate);
break;
}
case 0xf:
{
m_duart_1_irq = 0;
update_irqs();
duart_1.ISR |= ~0x8;
break;
}
}
return val;
}
WRITE16_MEMBER(jpmimpct_state::duart_1_w)
{
struct duart_t &duart_1 = m_duart_1;
//int old_val;
switch (offset)
{
case 0x1:
{
duart_1.CSRA = data;
break;
}
case 0x3:
{
//osd_printf_debug("%c", data);
break;
}
case 0x4:
{
duart_1.ACR = data;
/* Only handle counter mode, XTAL divide by 16 */
if (((data >> 4) & 7) != 0x7)
{
logerror("DUART 1: Unhandled counter mode: %x\n", data);
}
break;
}
case 0x5:
{
duart_1.IMR = data;
break;
}
case 0x6:
{
duart_1.CTUR = data;
break;
}
case 0x7:
{
duart_1.CTLR = data;
break;
}
case 0xb:
{
//osd_printf_debug("%c",data);
break;
}
case 0xc:
{
duart_1.IVR = data;
break;
}
case 0xd:
{
duart_1.OPCR = data;
break;
}
case 0xe:
{
//old_val = duart_1.OPR;
duart_1.OPR = duart_1.OPR | data;
duart_1.OP = ~duart_1.OPR;
/* Output port bit set */
break;
}
case 0xf:
{
//old_val = duart_1.OPR;
duart_1.OPR = duart_1.OPR &~data;
duart_1.OP = ~duart_1.OPR;
/* Output port bit reset */
break;
}
}
}
/*************************************
*
* MC68681 DUART 2
*
*************************************/
/*
Communication with a touchscreen interface PCB
is handled via UART B.
*/
READ16_MEMBER(jpmimpct_state::duart_2_r)
{
switch (offset)
{
case 0x9:
{
if (m_touch_cnt == 0)
{
if ( ioport("TOUCH")->read() & 0x1 )
{
m_touch_data[0] = 0x2a;
m_touch_data[1] = 0x7 - (ioport("TOUCH_Y")->read() >> 5) + 0x30;
m_touch_data[2] = (ioport("TOUCH_X")->read() >> 5) + 0x30;
/* Return RXRDY */
return 0x1;
}
return 0;
}
else
{
return 1;
}
}
case 0xb:
{
UINT16 val = m_touch_data[m_touch_cnt];
if (m_touch_cnt++ == 3)
m_touch_cnt = 0;
return val;
}
default:
return 0;
}
}
/*
Nothing important here?
*/
WRITE16_MEMBER(jpmimpct_state::duart_2_w)
{
}
/*************************************
*
* I/O handlers
*
*************************************/
/*
* 0: DIP switches
* 1: Percentage key
* 2: Lamps + switches (J10)
* 3: Lamps + switches (J10)
* 4: Lamps + switches (J10)
* ---- ---x Back door
* ---- --x- Cash door
* ---- -x-- Refill key
* 5: Lamps + switches (J9)
* 6: Lamps + switches (J9)
* 7: Lamps + switches (J9)
* 8: Payslides
* 9: Coin mechanism
*/
READ16_MEMBER(jpmimpct_state::inputs1_r)
{
UINT16 val = 0x00ff;
switch (offset)
{
case 0:
{
val = ioport("DSW")->read();
break;
}
case 2:
{
val = ioport("SW2")->read();
break;
}
case 4:
{
val = ioport("SW1")->read();
break;
}
case 9:
{
val = ioport("COINS")->read();
break;
}
}
return val;
}
/*************************************
*
* Sound control
*
*************************************/
WRITE16_MEMBER(jpmimpct_state::volume_w)
{
if (ACCESSING_BITS_0_7)
{
m_upd7759->set_bank_base(0x20000 * ((data >> 1) & 3));
m_upd7759->reset_w(data & 0x01);
}
}
WRITE16_MEMBER(jpmimpct_state::upd7759_w)
{
if (ACCESSING_BITS_0_7)
{
m_upd7759->port_w(space, 0, data);
m_upd7759->start_w(0);
m_upd7759->start_w(1);
}
}
READ16_MEMBER(jpmimpct_state::upd7759_r)
{
if (ACCESSING_BITS_0_7)
{
return m_upd7759->busy_r();
}
return 0xffff;
}
/*************************************
*
* Mysterious stuff
*
*************************************/
READ16_MEMBER(jpmimpct_state::unk_r)
{
return 0xffff;
}
WRITE16_MEMBER(jpmimpct_state::unk_w)
{
}
void jpmimpct_state::jpm_draw_lamps(int data, int lamp_strobe)
{
int i;
for (i=0; i<16; i++)
{
m_Lamps[16*(m_lamp_strobe+i)] = data & 1;
output().set_lamp_value((16*lamp_strobe)+i, (m_Lamps[(16*lamp_strobe)+i]));
data = data >> 1;
}
}
READ16_MEMBER(jpmimpct_state::jpmio_r)
{
return 0xffff;
}
WRITE16_MEMBER(jpmimpct_state::jpmio_w)
{
switch (offset)
{
case 0x02:
{
//reel 1
break;
}
case 0x04:
{
//reel 2
break;
}
case 0x06:
{
if ( data & 0x10 )
{ // PAYEN ?
if ( data & 0xf )
{
// slide = 1;
}
else
{
// slide = 0;
}
}
else
// slide = 0;
m_meters->update(0, data >> 10);
m_duart_1.IP &= ~0x10;
break;
}
case 0x08:
{
jpm_draw_lamps(data, m_lamp_strobe);
break;
}
case 0x0b:
{
output().set_digit_value(m_lamp_strobe,data);
break;
}
case 0x0f:
{
if (data & 0x10)
{
m_lamp_strobe = (data +1) & 0x0f;
}
break;
}
}
}
/*************************************
*
* Main CPU memory handlers
*
*************************************/
static ADDRESS_MAP_START( m68k_program_map, AS_PROGRAM, 16, jpmimpct_state )
AM_RANGE(0x00000000, 0x000fffff) AM_ROM
AM_RANGE(0x00100000, 0x001fffff) AM_ROM
AM_RANGE(0x00400000, 0x00403fff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x00480000, 0x0048001f) AM_READWRITE(duart_1_r, duart_1_w)
AM_RANGE(0x00480020, 0x00480033) AM_READ(inputs1_r)
AM_RANGE(0x00480034, 0x00480035) AM_READ(unk_r)
AM_RANGE(0x00480060, 0x00480067) AM_READWRITE(unk_r, unk_w)//PPI
AM_RANGE(0x004800a0, 0x004800af) AM_READWRITE(jpmio_r, jpmio_w)
AM_RANGE(0x004800e0, 0x004800e1) AM_WRITE(unk_w)
AM_RANGE(0x004801dc, 0x004801dd) AM_READ(unk_r)
AM_RANGE(0x004801de, 0x004801df) AM_READ(unk_r)
AM_RANGE(0x00480080, 0x00480081) AM_WRITE(upd7759_w)
AM_RANGE(0x00480082, 0x00480083) AM_WRITE(volume_w)
AM_RANGE(0x00480084, 0x00480085) AM_READ(upd7759_r)
AM_RANGE(0x004801e0, 0x004801ff) AM_READWRITE(duart_2_r, duart_2_w)
AM_RANGE(0x00800000, 0x00800007) AM_DEVREADWRITE("dsp", tms34010_device, host_r, host_w)
AM_RANGE(0x00c00000, 0x00cfffff) AM_ROM
AM_RANGE(0x00d00000, 0x00dfffff) AM_ROM
AM_RANGE(0x00e00000, 0x00efffff) AM_ROM
AM_RANGE(0x00f00000, 0x00ffffff) AM_ROM
ADDRESS_MAP_END
/*************************************
*
* Main CPU memory handlers
*
*************************************/
static ADDRESS_MAP_START( awp68k_program_map, AS_PROGRAM, 16, jpmimpct_state )
AM_RANGE(0x00000000, 0x000fffff) AM_ROM // most games are 0x00000000 - 0x0003ffff, but some QPS ones go up to fffff, check for any mirroring etc.
AM_RANGE(0x00400000, 0x00403fff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x00480000, 0x0048001f) AM_READWRITE(duart_1_r, duart_1_w)
AM_RANGE(0x00480020, 0x00480033) AM_READ(inputs1awp_r)
AM_RANGE(0x00480034, 0x00480035) AM_READ(ump_r)
AM_RANGE(0x00480040, 0x00480041) AM_READ(optos_r)
AM_RANGE(0x00480060, 0x00480067) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write,0x00ff)
AM_RANGE(0x00480080, 0x00480081) AM_WRITE(upd7759_w)
AM_RANGE(0x00480082, 0x00480083) AM_WRITE(volume_w)
AM_RANGE(0x00480084, 0x00480085) AM_READ(upd7759_r)
AM_RANGE(0x00480086, 0x0048009f) AM_READ(prot_1_r)
AM_RANGE(0x004800a0, 0x004800af) AM_READWRITE(jpmio_r, jpmioawp_w)
// AM_RANGE(0x004800b0, 0x004800df) AM_READ(prot_1_r)
// AM_RANGE(0x004800e0, 0x004800e1) AM_WRITE(unk_w)
// AM_RANGE(0x00480086, 0x006576ff) AM_READ(prot_1_r)
AM_RANGE(0x004801dc, 0x004801dd) AM_READ(prot_1_r)
AM_RANGE(0x004801de, 0x006575ff) AM_READ(prot_1_r)
AM_RANGE(0x00657600, 0x00657601) AM_READ(prot_0_r)
AM_RANGE(0x00657602, 0x00ffffff) AM_READ(prot_1_r)
// AM_RANGE(0x004801dc, 0x004801dd) AM_READ(unk_r)
// AM_RANGE(0x004801de, 0x004801df) AM_READ(unk_r)
//AM_RANGE(0x00657602, 0x00bfffff) AM_READ(prot_1_r)
// AM_RANGE(0x004801e0, 0x004801ff) AM_READWRITE(duart_2_r, duart_2_w)
// AM_RANGE(0x00c00000, 0x00cfffff) AM_ROM
// AM_RANGE(0x00d00000, 0x00dfffff) AM_ROM
// AM_RANGE(0x00e00000, 0x00efffff) AM_ROM
// AM_RANGE(0x00f00000, 0x00ffffff) AM_ROM
ADDRESS_MAP_END
/*************************************
*
* Video CPU memory handlers
*
*************************************/
static ADDRESS_MAP_START( tms_program_map, AS_PROGRAM, 16, jpmimpct_state )
AM_RANGE(0xc0000000, 0xc00001ff) AM_DEVREADWRITE("dsp", tms34010_device, io_register_r, io_register_w)
AM_RANGE(0x00000000, 0x003fffff) AM_MIRROR(0xf8000000) AM_RAM AM_SHARE("vram")
AM_RANGE(0x00800000, 0x00ffffff) AM_MIRROR(0xf8000000) AM_ROM AM_REGION("user1", 0x100000)
AM_RANGE(0x02000000, 0x027fffff) AM_MIRROR(0xf8000000) AM_ROM AM_REGION("user1", 0)
// AM_RANGE(0x01000000, 0x0100003f) AM_MIRROR(0xf87fffc0) AM_READWRITE(jpmimpct_bt477_r, jpmimpct_bt477_w)
AM_RANGE(0x01000000, 0x017fffff) AM_MIRROR(0xf8000000) AM_MASK(0x1f) AM_READWRITE(jpmimpct_bt477_r, jpmimpct_bt477_w)
AM_RANGE(0x07800000, 0x07bfffff) AM_MIRROR(0xf8400000) AM_RAM
ADDRESS_MAP_END
/*************************************
*
* Input definitions
*
*************************************/
static INPUT_PORTS_START( common )
PORT_START("DSW")
PORT_DIPNAME( 0x01, 0x01, "DSW 0 (toggle to stop alarm)")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "DSW 1")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "DSW 2")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "DSW 3")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "DSW 4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "DSW 5")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "DSW 6")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "DSW 7")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("SW1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_TOGGLE PORT_NAME( "Back Door" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_TOGGLE PORT_NAME( "Cash Door" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_TOGGLE PORT_NAME( "Refill Key" )
PORT_START("TEST/DEMO")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME( "Test/Demo" )
INPUT_PORTS_END
static INPUT_PORTS_START( touchscreen )
PORT_START("TOUCH")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_IMPULSE(1) PORT_NAME( "Touch screen" )
PORT_START("TOUCH_X")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
PORT_START("TOUCH_Y")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
INPUT_PORTS_END
static INPUT_PORTS_START( hngmnjpm )
PORT_INCLUDE( common )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 1 pound" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 50p" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 20p" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 10p" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_IMPULSE(1) PORT_NAME( "Token: 20" )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN6 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 5p" )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SW2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Collect" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "'3'" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "'2'" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "'1'" )
INPUT_PORTS_END
static INPUT_PORTS_START( coronatn )
PORT_INCLUDE( common )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 1 pound" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 50p" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 20p" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 10p" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_IMPULSE(1) PORT_NAME( "Token: 20" )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN6 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 5p" )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SW2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Ask Ken" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "Collect" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "'1'" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "'2'" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME( "'3'" )
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( cluedo )
PORT_INCLUDE( common )
PORT_INCLUDE( touchscreen )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 1 pound" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 50p" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 20p" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 10p" )
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_LOW, IPT_UNKNOWN )
PORT_START("SW2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( trivialp )
PORT_INCLUDE( common )
PORT_INCLUDE( touchscreen )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 1 pound" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 50p" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 20p" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 10p" )
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_LOW, IPT_UNKNOWN )
PORT_START("SW2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "Pass" )
PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( scrabble )
PORT_INCLUDE( common )
PORT_INCLUDE( touchscreen )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 1 pound" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 50p" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 20p" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 10p" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN6 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 5p" )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SW2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/*************************************
*
* TMS34010 configuration
*
*************************************/
WRITE_LINE_MEMBER(jpmimpct_state::tms_irq)
{
m_tms_irq = state;
update_irqs();
}
/*************************************
*
* Machine driver
*
*************************************/
static MACHINE_CONFIG_START( jpmimpct, jpmimpct_state )
MCFG_CPU_ADD("maincpu", M68000, 8000000)
MCFG_CPU_PROGRAM_MAP(m68k_program_map)
MCFG_CPU_ADD("dsp", TMS34010, 40000000)
MCFG_CPU_PROGRAM_MAP(tms_program_map)
MCFG_TMS340X0_HALT_ON_RESET(TRUE) /* halt on reset */
MCFG_TMS340X0_PIXEL_CLOCK(40000000/16) /* pixel clock */
MCFG_TMS340X0_PIXELS_PER_CLOCK(4) /* pixels per clock */
MCFG_TMS340X0_SCANLINE_RGB32_CB(jpmimpct_state, scanline_update) /* scanline updater (rgb32) */
MCFG_TMS340X0_OUTPUT_INT_CB(WRITELINE(jpmimpct_state, tms_irq))
MCFG_TMS340X0_TO_SHIFTREG_CB(jpmimpct_state, to_shiftreg) /* write to shiftreg function */
MCFG_TMS340X0_FROM_SHIFTREG_CB(jpmimpct_state, from_shiftreg) /* read from shiftreg function */
MCFG_QUANTUM_TIME(attotime::from_hz(30000))
MCFG_MACHINE_START_OVERRIDE(jpmimpct_state,jpmimpct)
MCFG_MACHINE_RESET_OVERRIDE(jpmimpct_state,jpmimpct)
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_TIMER_DRIVER_ADD("duart_1_timer", jpmimpct_state, duart_1_timer_event)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(40000000/4, 156*4, 0, 100*4, 328, 0, 300)
MCFG_SCREEN_UPDATE_DEVICE("dsp", tms34010_device, tms340x0_rgb32)
MCFG_PALETTE_ADD("palette", 256)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_VIDEO_START_OVERRIDE(jpmimpct_state,jpmimpct)
MCFG_DEVICE_ADD("meters", METERS, 0)
MCFG_METERS_NUMBER(5)
MACHINE_CONFIG_END
/*************************************
*
* Initialisation
*
*************************************/
READ8_MEMBER(jpmimpct_state::hopper_b_r)
{
int retval;
// B0 = 100p Hopper Out Verif
// B1 = Hopper High
// B2 = Hopper Low
// B3 = 20p Hopper Opto
// Always return hoppers full
retval=0xed; // 1110 1101
if (!m_hopinhibit)//if inhibited, we don't change these flags
{
if (m_hopper[0] && m_motor[0]) //&& ((m_hopflag1 & 0x20)==0x20))
{//100p
retval &= ~0x01;
}
if (((m_hopper[1] && m_motor[1]) || (m_hopper[2] && m_slidesout))) //&& ((m_hopflag2 & 0x20)==0x20))
{
retval &= ~0x08;
}
}
return retval;
}
READ8_MEMBER(jpmimpct_state::hopper_c_r)
{
int retval;
// C0-C2 = Alpha
// C3
// C4 = 20p Hopper Detect
// C5 = Hopper Top-Up
// C6 = 100p Hopper Detect
// C7 = Payout Verif (Slides)
retval=0xf0; //1111 0000
// if (StatBtns & 0x20) // Top Up switch
// retval &= ~0x20;
// Which hoppers are present
if (m_hopper[0])
{
retval &= ~0x40;
}
if (m_hopper[1])
{
retval &= ~0x10;
}
if (!m_hopinhibit)
{
if ((m_slidesout==1) && ((m_hopper[2]==0)))
{
m_slidesout=0;
retval &= ~0x80;
}
}
return retval;
}
WRITE8_MEMBER(jpmimpct_state::payen_a_w)
{
m_motor[0] = (data & 0x01);
m_payen = (data & 0x10);
m_slidesout = (data & 0x10);
m_motor[1] = (data & 0x40);
m_hopinhibit = (data & 0x80);
}
WRITE8_MEMBER(jpmimpct_state::display_c_w)
{
//Reset 0x04, data 0x02, clock 0x01
m_vfd->por(data & 0x04);
m_vfd->data(data & 0x02);
m_vfd->sclk(data & 0x01);
}
MACHINE_START_MEMBER(jpmimpct_state,impctawp)
{
save_item(NAME(m_duart_1_irq));
save_item(NAME(m_touch_cnt));
save_item(NAME(m_touch_data));
/* TODO! */
save_item(NAME(m_duart_1.ISR));
save_item(NAME(m_duart_1.IMR));
save_item(NAME(m_duart_1.CT));
}
MACHINE_RESET_MEMBER(jpmimpct_state,impctawp)
{
memset(&m_duart_1, 0, sizeof(m_duart_1));
/* Reset states */
m_duart_1_irq = 0;
m_vfd->reset();
}
/*************************************
*
* I/O handlers
*
*************************************/
/*
* 0: DIP switches
* 1: Percentage key
* 2: Lamps + switches (J10)
* 3: Lamps + switches (J10)
* 4: Lamps + switches (J10)
* ---- ---x Back door
* ---- --x- Cash door
* ---- -x-- Refill key
* 5: Lamps + switches (J9)
* 6: Lamps + switches (J9)
* 7: Lamps + switches (J9)
* 8: Payslides
* 9: Coin mechanism
*/
READ16_MEMBER(jpmimpct_state::inputs1awp_r)
{
UINT16 val = 0x00;
{
switch (offset)
{
case 0:
{
val = ioport("DSW")->read();
break;
}
case 1:
{
val = ioport("PERCENT")->read();
break;
}
case 2:
{
val = ioport("KEYS")->read();
break;
}
case 3:
{
val = ioport("SW2")->read();
break;
}
case 4:
{
val = ioport("SW1")->read();
break;
}
case 5:
{
val = (ioport("SW3")->read() );
break;
}
case 6:
{
val = (ioport("SW4")->read() );
break;
}
case 7://5
{
val = (ioport("SW5")->read() );
break;
}
case 9:
{
val = ioport("COINS")->read();
break;
}
}
return val & 0xff00;
}
}
READ16_MEMBER(jpmimpct_state::optos_r)
{
return m_optic_pattern;
}
READ16_MEMBER(jpmimpct_state::prot_1_r)
{
return 0x01;
}
READ16_MEMBER(jpmimpct_state::prot_0_r)
{
return 0x00;
}
WRITE16_MEMBER(jpmimpct_state::jpmioawp_w)
{
int i,metno;
switch (offset)
{
case 0x00:
{
output().set_value("PWRLED",!(data&0x100));
output().set_value("STATLED",!(data&0x200));
break;
}
case 0x02:
{
m_reel0->update((data >> 0)& 0x0F);
m_reel1->update((data >> 1)& 0x0F);
m_reel2->update((data >> 2)& 0x0F);
m_reel3->update((data >> 3)& 0x0F);
awp_draw_reel(machine(),"reel1", m_reel0);
awp_draw_reel(machine(),"reel2", m_reel1);
awp_draw_reel(machine(),"reel3", m_reel2);
awp_draw_reel(machine(),"reel4", m_reel3);
break;
}
case 0x04:
{
m_reel4->update((data >> 4)& 0x0F);
m_reel5->update((data >> 5)& 0x0F);
awp_draw_reel(machine(),"reel5", m_reel4);
awp_draw_reel(machine(),"reel6", m_reel5);
break;
}
case 0x06:
{
//Slides
if ((data & 0xff)!=0x00)
{
m_slidesout=2;
}
if (((data & 0xff)==0x00) && (m_slidesout==2))
{
m_slidesout=1;
}
// Meters
metno=(data >>8) & 0xff;
{
switch (metno)
{
case 0x00:
{
for (i=0; i<5; i++)
{
m_meters->update(i, 0);
}
break;
}
default:
{
m_meters->update(((metno <<2) - 1), 1);
}
break;
}
}
int combined_meter = m_meters->GetActivity(0) | m_meters->GetActivity(1) |
m_meters->GetActivity(2) | m_meters->GetActivity(3) |
m_meters->GetActivity(4);
if(combined_meter)
{
m_duart_1.IP &= ~0x10;
}
else
{
m_duart_1.IP |= 0x10;
}
break;
}
case 0x08:
{
jpm_draw_lamps(data, m_lamp_strobe);
break;
}
case 0x0b:
{
output().set_digit_value(m_lamp_strobe,data);
break;
}
case 0x0f:
{
if (data & 0x10)
{
m_lamp_strobe = (data & 0x0f);
}
break;
}
}
}
READ16_MEMBER(jpmimpct_state::ump_r)
{
return 0xff;//0xffff;
}
INPUT_PORTS_START( tbirds )
PORT_START("DSW")
PORT_DIPNAME( 0x01, 0x01, "DSW 0 (toggle to stop alarm)")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "DSW 1")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "DSW 2")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "DSW 3")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "DSW 4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "DSW 5")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "DSW 6")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "DSW 7")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("PERCENT")
PORT_CONFNAME( 0x0F, 0x00, "Percentage Key" )
PORT_CONFSETTING( 0x00, "Not fitted / 68% (Invalid for UK Games)" )
PORT_CONFSETTING( 0x01, "70" )
PORT_CONFSETTING( 0x02, "72" )
PORT_CONFSETTING( 0x03, "74" )
PORT_CONFSETTING( 0x04, "76" )
PORT_CONFSETTING( 0x05, "78" )
PORT_CONFSETTING( 0x06, "80" )
PORT_CONFSETTING( 0x07, "82" )
PORT_CONFSETTING( 0x08, "84" )
PORT_CONFSETTING( 0x09, "86" )
PORT_CONFSETTING( 0x0A, "88" )
PORT_CONFSETTING( 0x0B, "90" )
PORT_CONFSETTING( 0x0C, "92" )
PORT_CONFSETTING( 0x0D, "94" )
PORT_CONFSETTING( 0x0E, "96" )
PORT_CONFSETTING( 0x0F, "98" )
PORT_START("KEYS")
PORT_CONFNAME( 0x0F, 0x0F, "Jackpot / Prize Key" )
PORT_CONFSETTING( 0x0F, "Not fitted" )
PORT_CONFSETTING( 0x0E, "3 GBP" )
PORT_CONFSETTING( 0x0D, "4 GBP" )
PORT_CONFSETTING( 0x0C, "5 GBP" )
PORT_CONFSETTING( 0x0B, "6 GBP" )
PORT_CONFSETTING( 0x0A, "6 GBP Token" )
PORT_CONFSETTING( 0x09, "8 GBP" )
PORT_CONFSETTING( 0x08, "8 GBP Token" )
PORT_CONFSETTING( 0x07, "10 GBP" )
PORT_CONFSETTING( 0x06, "15 GBP" )
PORT_CONFSETTING( 0x05, "25 GBP" )
PORT_CONFSETTING( 0x04, "25 GBP (Licensed Betting Office Profile)" )
PORT_CONFSETTING( 0x03, "35 GBP" )
PORT_CONFSETTING( 0x02, "70 GBP" )
PORT_CONFSETTING( 0x01, "Reserved" )
PORT_CONFSETTING( 0x00, "Reserved" )
PORT_CONFNAME( 0xF0, 0x00, "Stake Key" )
PORT_CONFSETTING( 0x00, "Not fitted / 5p" )
PORT_CONFSETTING( 0x80, "10p" )
PORT_CONFSETTING( 0x40, "20p" )
PORT_CONFSETTING( 0xC0, "25p" )
PORT_CONFSETTING( 0x20, "30p" )
// PORT_CONFSETTING( 0x20, "40p" )
PORT_CONFSETTING( 0x60, "50p" )
PORT_CONFSETTING( 0xE0, "1 GBP" )
PORT_START("SW5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Collect" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "'3'" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "'2'" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "'1'" )
PORT_START("SW4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Collect" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "'3'" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "'2'" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "'1'" )
PORT_START("SW3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Collect" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "'3'" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "'2'" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "'1'" )
PORT_START("SW2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME( "Collect" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "'3'" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "'2'" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME( "'1'" )
PORT_START("SW1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_TOGGLE PORT_NAME( "Back Door" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_TOGGLE PORT_NAME( "Cash Door" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_TOGGLE PORT_NAME( "Refill Key" )
PORT_START("TEST/DEMO")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME( "Test/Demo" )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 1 pound" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 50p" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 20p" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 10p" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_IMPULSE(1) PORT_NAME( "Token: 20" )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN6 ) PORT_IMPULSE(1) PORT_NAME( "Coin: 5p" )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/*************************************
*
* Machine driver
*
*************************************/
MACHINE_CONFIG_START( impctawp, jpmimpct_state )
MCFG_CPU_ADD("maincpu",M68000, 8000000)
MCFG_CPU_PROGRAM_MAP(awp68k_program_map)
MCFG_QUANTUM_TIME(attotime::from_hz(30000))
MCFG_S16LF01_ADD("vfd",0)
MCFG_MACHINE_START_OVERRIDE(jpmimpct_state,impctawp)
MCFG_MACHINE_RESET_OVERRIDE(jpmimpct_state,impctawp)
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_DEVICE_ADD("ppi8255", I8255, 0)
MCFG_I8255_OUT_PORTA_CB(WRITE8(jpmimpct_state, payen_a_w))
MCFG_I8255_IN_PORTB_CB(READ8(jpmimpct_state, hopper_b_r))
MCFG_I8255_IN_PORTC_CB(READ8(jpmimpct_state, hopper_c_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(jpmimpct_state, display_c_w))
MCFG_TIMER_DRIVER_ADD("duart_1_timer", jpmimpct_state, duart_1_timer_event)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("upd",UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_DEFAULT_LAYOUT(layout_jpmimpct)
MCFG_STARPOINT_48STEP_ADD("reel0")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel0_optic_cb))
MCFG_STARPOINT_48STEP_ADD("reel1")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel1_optic_cb))
MCFG_STARPOINT_48STEP_ADD("reel2")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel2_optic_cb))
MCFG_STARPOINT_48STEP_ADD("reel3")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel3_optic_cb))
MCFG_STARPOINT_48STEP_ADD("reel4")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel4_optic_cb))
MCFG_STARPOINT_48STEP_ADD("reel5")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel5_optic_cb))
MCFG_DEVICE_ADD("meters", METERS, 0)
MCFG_METERS_NUMBER(5)
MACHINE_CONFIG_END
/*************************************
*
* ROM definition(s)
*
*************************************/
ROM_START( cluedo )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "7322.bin", 0x000000, 0x080000, CRC(049ad02d) SHA1(10297dd466d0019e8d6c162028a23dd235494fb4) )
ROM_LOAD16_BYTE( "7323.bin", 0x000001, 0x080000, CRC(47ce9c40) SHA1(596a1628142d3c81f2c4ab11ed421f27d082d5f6) )
ROM_LOAD16_BYTE( "7324.bin", 0x100000, 0x080000, CRC(5946bd75) SHA1(cc4ffa1e4c3628de6b60027d95df413b6d94e669) )
ROM_LOAD16_BYTE( "7325.bin", 0x100001, 0x080000, CRC(416843ab) SHA1(0d758f7df96384a04596366b1864d5005ca540ee) )
ROM_LOAD16_BYTE( "6977.bin", 0xc00000, 0x080000, CRC(6030dfc1) SHA1(8746909b0b7f7eb99cf5388ac85db6addb6deee3) )
ROM_LOAD16_BYTE( "6978.bin", 0xc00001, 0x080000, CRC(21e30e06) SHA1(4e97baa9e39663b662dd202bbaf34be0e29930de) )
ROM_LOAD16_BYTE( "6979.bin", 0xd00000, 0x080000, CRC(5575162a) SHA1(27f7b5f4ee7d95319b03e2414a25d5b1a6c54fc7) )
ROM_LOAD16_BYTE( "6980.bin", 0xd00001, 0x080000, CRC(968224df) SHA1(726c278622681206a7f34bafe1b5bb4421232cc4) )
ROM_LOAD16_BYTE( "6981.bin", 0xe00000, 0x080000, CRC(2ad3ee20) SHA1(9370dab84a255864f40254772199211884d8557b) )
ROM_LOAD16_BYTE( "6982.bin", 0xe00001, 0x080000, CRC(7478e91b) SHA1(158b473b46aeccf011669cb58dc3a1596370d8f1) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "clugrb1", 0x000000, 0x80000, CRC(176ae2df) SHA1(135fd2640c255e5321b1a6ba35f72fa2ba8f04b8) )
ROM_LOAD16_BYTE( "clugrb2", 0x000001, 0x80000, CRC(06ab2f78) SHA1(4325fd9096e73956310e97e244c7fe1ee8d27f5c) )
ROM_COPY( "user1", 0x00000, 0x100000, 0x100000 )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "1214.bin", 0x000000, 0x80000, CRC(fe43aeae) SHA1(017a471af5766ef41fa46982c02941fb4fc35174) )
ROM_END
ROM_START( cluedod )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "7326.bin", 0x000000, 0x080000, CRC(6c6b523e) SHA1(3a140aff92c00da45433698c3c946fc0134b4863) )
ROM_LOAD16_BYTE( "7323.bin", 0x000001, 0x080000, CRC(47ce9c40) SHA1(596a1628142d3c81f2c4ab11ed421f27d082d5f6) )
ROM_LOAD16_BYTE( "7324.bin", 0x100000, 0x080000, CRC(5946bd75) SHA1(cc4ffa1e4c3628de6b60027d95df413b6d94e669) )
ROM_LOAD16_BYTE( "7325.bin", 0x100001, 0x080000, CRC(416843ab) SHA1(0d758f7df96384a04596366b1864d5005ca540ee) )
ROM_LOAD16_BYTE( "6977.bin", 0xc00000, 0x080000, CRC(6030dfc1) SHA1(8746909b0b7f7eb99cf5388ac85db6addb6deee3) )
ROM_LOAD16_BYTE( "6978.bin", 0xc00001, 0x080000, CRC(21e30e06) SHA1(4e97baa9e39663b662dd202bbaf34be0e29930de) )
ROM_LOAD16_BYTE( "6979.bin", 0xd00000, 0x080000, CRC(5575162a) SHA1(27f7b5f4ee7d95319b03e2414a25d5b1a6c54fc7) )
ROM_LOAD16_BYTE( "6980.bin", 0xd00001, 0x080000, CRC(968224df) SHA1(726c278622681206a7f34bafe1b5bb4421232cc4) )
ROM_LOAD16_BYTE( "6981.bin", 0xe00000, 0x080000, CRC(2ad3ee20) SHA1(9370dab84a255864f40254772199211884d8557b) )
ROM_LOAD16_BYTE( "6982.bin", 0xe00001, 0x080000, CRC(7478e91b) SHA1(158b473b46aeccf011669cb58dc3a1596370d8f1) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "clugrb1", 0x000000, 0x80000, CRC(176ae2df) SHA1(135fd2640c255e5321b1a6ba35f72fa2ba8f04b8) )
ROM_LOAD16_BYTE( "clugrb2", 0x000001, 0x80000, CRC(06ab2f78) SHA1(4325fd9096e73956310e97e244c7fe1ee8d27f5c) )
ROM_COPY( "user1", 0x00000, 0x100000, 0x100000 )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "1214.bin", 0x000000, 0x80000, CRC(fe43aeae) SHA1(017a471af5766ef41fa46982c02941fb4fc35174) )
ROM_END
ROM_START( cluedo2c )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "clu2c1.bin", 0x000000, 0x080000, CRC(bf94a3c0) SHA1(e5a0d17136691642aba339f574aec7c27ed90848) )
ROM_LOAD16_BYTE( "clu2c2.bin", 0x000001, 0x080000, CRC(960cda80) SHA1(6b5946ed1241bc673f42991f57e0c74753085b63) )
ROM_LOAD16_BYTE( "clu2c3.bin", 0x100000, 0x080000, CRC(9d61b28d) SHA1(41c0e17b3933686a2e6f343cd39f90e5663c7787) )
ROM_LOAD16_BYTE( "clu2c4.bin", 0x100001, 0x080000, CRC(a427d67b) SHA1(a8944e1d86548911a65b398245a0f8f236491644) )
ROM_LOAD16_BYTE( "6977.bin", 0xc00000, 0x080000, CRC(6030dfc1) SHA1(8746909b0b7f7eb99cf5388ac85db6addb6deee3) )
ROM_LOAD16_BYTE( "6978.bin", 0xc00001, 0x080000, CRC(21e30e06) SHA1(4e97baa9e39663b662dd202bbaf34be0e29930de) )
ROM_LOAD16_BYTE( "6979.bin", 0xd00000, 0x080000, CRC(5575162a) SHA1(27f7b5f4ee7d95319b03e2414a25d5b1a6c54fc7) )
ROM_LOAD16_BYTE( "6980.bin", 0xd00001, 0x080000, CRC(968224df) SHA1(726c278622681206a7f34bafe1b5bb4421232cc4) )
ROM_LOAD16_BYTE( "6981.bin", 0xe00000, 0x080000, CRC(2ad3ee20) SHA1(9370dab84a255864f40254772199211884d8557b) )
ROM_LOAD16_BYTE( "6982.bin", 0xe00001, 0x080000, CRC(7478e91b) SHA1(158b473b46aeccf011669cb58dc3a1596370d8f1) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "clugrb1", 0x000000, 0x80000, CRC(176ae2df) SHA1(135fd2640c255e5321b1a6ba35f72fa2ba8f04b8) )
ROM_LOAD16_BYTE( "clugrb2", 0x000001, 0x80000, CRC(06ab2f78) SHA1(4325fd9096e73956310e97e244c7fe1ee8d27f5c) )
ROM_COPY( "user1", 0x00000, 0x100000, 0x100000 )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "1214.bin", 0x000000, 0x80000, CRC(fe43aeae) SHA1(017a471af5766ef41fa46982c02941fb4fc35174) )
ROM_END
ROM_START( cluedo2 )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "clu21.bin", 0x000000, 0x080000, CRC(b1aa0103)SHA1(52d10a428710cd04313a2638fc3c23fb9d0ab6db))
ROM_LOAD16_BYTE( "clu22.bin", 0x000001, 0x080000, CRC(90d8dd28)SHA1(3124a8313c6b362176283e145c4af27f5deac683))
ROM_LOAD16_BYTE( "clu23.bin", 0x100000, 0x080000, CRC(196bd993)SHA1(50920441707fc6cae9d36961d92ce213e53c4238))
ROM_LOAD16_BYTE( "clu24.bin", 0x100001, 0x080000, CRC(3f5c1259)SHA1(dfdbb66a81716a0ced7510e277f6f321516f57af))
ROM_LOAD16_BYTE( "6977.bin", 0xc00000, 0x080000, CRC(6030dfc1) SHA1(8746909b0b7f7eb99cf5388ac85db6addb6deee3) )
ROM_LOAD16_BYTE( "6978.bin", 0xc00001, 0x080000, CRC(21e30e06) SHA1(4e97baa9e39663b662dd202bbaf34be0e29930de) )
ROM_LOAD16_BYTE( "6979.bin", 0xd00000, 0x080000, CRC(5575162a) SHA1(27f7b5f4ee7d95319b03e2414a25d5b1a6c54fc7) )
ROM_LOAD16_BYTE( "6980.bin", 0xd00001, 0x080000, CRC(968224df) SHA1(726c278622681206a7f34bafe1b5bb4421232cc4) )
ROM_LOAD16_BYTE( "6981.bin", 0xe00000, 0x080000, CRC(2ad3ee20) SHA1(9370dab84a255864f40254772199211884d8557b) )
ROM_LOAD16_BYTE( "6982.bin", 0xe00001, 0x080000, CRC(7478e91b) SHA1(158b473b46aeccf011669cb58dc3a1596370d8f1) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "clugrb1", 0x000000, 0x80000, CRC(176ae2df) SHA1(135fd2640c255e5321b1a6ba35f72fa2ba8f04b8) )
ROM_LOAD16_BYTE( "clugrb2", 0x000001, 0x80000, CRC(06ab2f78) SHA1(4325fd9096e73956310e97e244c7fe1ee8d27f5c) )
ROM_COPY( "user1", 0x00000, 0x100000, 0x100000 )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "clue2as1.bin", 0x000000, 0x80000, CRC(16b2bc45) SHA1(56963f5d63b5a091b89b96f4ca9327010006c024) )
ROM_END
ROM_START( trivialp )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "1422.bin", 0x000000, 0x080000, CRC(5e39c946) SHA1(bae7f572a32e90d716813271f03e7868be603086) )
ROM_LOAD16_BYTE( "1423.bin", 0x000001, 0x080000, CRC(bb48c225) SHA1(b479f0bdb69ad11af17b5457c02a9d9618ede455) )
ROM_LOAD16_BYTE( "1424.bin", 0x100000, 0x080000, CRC(c37d045b) SHA1(3c127b14e1dc1e453fb08c741847c712d1fea78b) )
ROM_LOAD16_BYTE( "1425.bin", 0x100001, 0x080000, CRC(8d209f61) SHA1(3e16ee4c43a31da2e6773a938a20c616a5e6179b) )
ROM_LOAD16_BYTE( "tp-q1.bin", 0xc00000, 0x080000, CRC(98d42cfd) SHA1(67a6745d55493034128f767b518d86dedc9c22a6) )
ROM_LOAD16_BYTE( "tp-q2.bin", 0xc00001, 0x080000, CRC(8a670ee8) SHA1(33628b34f4a0413f2f39e26520169d0eff9942c5) )
ROM_LOAD16_BYTE( "tp-q3.bin", 0xd00000, 0x080000, CRC(eb47f94e) SHA1(957812b63de4532b9175214db7947c96264a48f1) )
ROM_LOAD16_BYTE( "tp-q4.bin", 0xd00001, 0x080000, CRC(23c01c99) SHA1(187c3448ae1cb44ca6a4a829e64b860ee7548ac5) )
ROM_LOAD16_BYTE( "tp-q5.bin", 0xe00000, 0x080000, CRC(1c9f4f8a) SHA1(7541d518d24e59140d62a869b27bcc15b205054d) )
ROM_LOAD16_BYTE( "tp-q6.bin", 0xe00001, 0x080000, CRC(df9da57d) SHA1(a3e29cb03bd780de2c5454c86d6dc48e1c6c63bc) )
ROM_LOAD16_BYTE( "tp-q7.bin", 0xf00000, 0x080000, CRC(e075e5d7) SHA1(3490730c569678d48fb2d810484de063882f71a5) )
ROM_LOAD16_BYTE( "tp-q8.bin", 0xf00001, 0x080000, CRC(12f90e74) SHA1(a39a1cee6107d1e83954e3cabf191fd5c89777f8) )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "tp-gr1.bin", 0x000000, 0x100000, CRC(7fa955f7) SHA1(9ecae4c8c26bfa1701c39148099bf0f8b5974ac8) )
ROM_LOAD16_BYTE( "tp-gr2.bin", 0x000001, 0x100000, CRC(2495d785) SHA1(eb89eb299a7000364a0a0f59459d1ec27755fca1) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "tp-snd.bin", 0x000000, 0x80000, CRC(7e2cb00a) SHA1(670ee5dd5c60313676b9271901b4df9e6ebd5955) )
ROM_END
ROM_START( trivialpd )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "1426.bin", 0x000000, 0x080000, CRC(36c84b55) SHA1(c01dc797bd578dfe5979f39a6acfdb3c5744b298) ) //was labelled 1424, typo?
ROM_LOAD16_BYTE( "1423.bin", 0x000001, 0x080000, CRC(bb48c225) SHA1(b479f0bdb69ad11af17b5457c02a9d9618ede455) )
ROM_LOAD16_BYTE( "1424.bin", 0x100000, 0x080000, CRC(c37d045b) SHA1(3c127b14e1dc1e453fb08c741847c712d1fea78b) )
ROM_LOAD16_BYTE( "1425.bin", 0x100001, 0x080000, CRC(8d209f61) SHA1(3e16ee4c43a31da2e6773a938a20c616a5e6179b) )
ROM_LOAD16_BYTE( "tp-q1.bin", 0xc00000, 0x080000, CRC(98d42cfd) SHA1(67a6745d55493034128f767b518d86dedc9c22a6) )
ROM_LOAD16_BYTE( "tp-q2.bin", 0xc00001, 0x080000, CRC(8a670ee8) SHA1(33628b34f4a0413f2f39e26520169d0eff9942c5) )
ROM_LOAD16_BYTE( "tp-q3.bin", 0xd00000, 0x080000, CRC(eb47f94e) SHA1(957812b63de4532b9175214db7947c96264a48f1) )
ROM_LOAD16_BYTE( "tp-q4.bin", 0xd00001, 0x080000, CRC(23c01c99) SHA1(187c3448ae1cb44ca6a4a829e64b860ee7548ac5) )
ROM_LOAD16_BYTE( "tp-q5.bin", 0xe00000, 0x080000, CRC(1c9f4f8a) SHA1(7541d518d24e59140d62a869b27bcc15b205054d) )
ROM_LOAD16_BYTE( "tp-q6.bin", 0xe00001, 0x080000, CRC(df9da57d) SHA1(a3e29cb03bd780de2c5454c86d6dc48e1c6c63bc) )
ROM_LOAD16_BYTE( "tp-q7.bin", 0xf00000, 0x080000, CRC(e075e5d7) SHA1(3490730c569678d48fb2d810484de063882f71a5) )
ROM_LOAD16_BYTE( "tp-q8.bin", 0xf00001, 0x080000, CRC(12f90e74) SHA1(a39a1cee6107d1e83954e3cabf191fd5c89777f8) )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "tp-gr1.bin", 0x000000, 0x100000, CRC(7fa955f7) SHA1(9ecae4c8c26bfa1701c39148099bf0f8b5974ac8) )
ROM_LOAD16_BYTE( "tp-gr2.bin", 0x000001, 0x100000, CRC(2495d785) SHA1(eb89eb299a7000364a0a0f59459d1ec27755fca1) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "tp-snd.bin", 0x000000, 0x80000, CRC(7e2cb00a) SHA1(670ee5dd5c60313676b9271901b4df9e6ebd5955) )
ROM_END
ROM_START( trivialpo )
ROM_REGION( 0x1000000, "maincpu", 0 )
// set only contained these 2 roms.. others are assumed to be the same for now
ROM_LOAD16_BYTE( "tpswpp1", 0x000000, 0x080000, CRC(9d3cb9b7) SHA1(959cc0e2254aa3a3a4e9f5814ca6ee2b0e486fb3) )
ROM_LOAD16_BYTE( "tpswpp2", 0x000001, 0x080000, CRC(4a2f1476) SHA1(c08a5c99b44ee3e5457cb26a29405b2f01fd5a27) )
ROM_LOAD16_BYTE( "1424.bin", 0x100000, 0x080000, CRC(c37d045b) SHA1(3c127b14e1dc1e453fb08c741847c712d1fea78b) )
ROM_LOAD16_BYTE( "1425.bin", 0x100001, 0x080000, CRC(8d209f61) SHA1(3e16ee4c43a31da2e6773a938a20c616a5e6179b) )
ROM_LOAD16_BYTE( "tp-q1.bin", 0xc00000, 0x080000, CRC(98d42cfd) SHA1(67a6745d55493034128f767b518d86dedc9c22a6) )
ROM_LOAD16_BYTE( "tp-q2.bin", 0xc00001, 0x080000, CRC(8a670ee8) SHA1(33628b34f4a0413f2f39e26520169d0eff9942c5) )
ROM_LOAD16_BYTE( "tp-q3.bin", 0xd00000, 0x080000, CRC(eb47f94e) SHA1(957812b63de4532b9175214db7947c96264a48f1) )
ROM_LOAD16_BYTE( "tp-q4.bin", 0xd00001, 0x080000, CRC(23c01c99) SHA1(187c3448ae1cb44ca6a4a829e64b860ee7548ac5) )
ROM_LOAD16_BYTE( "tp-q5.bin", 0xe00000, 0x080000, CRC(1c9f4f8a) SHA1(7541d518d24e59140d62a869b27bcc15b205054d) )
ROM_LOAD16_BYTE( "tp-q6.bin", 0xe00001, 0x080000, CRC(df9da57d) SHA1(a3e29cb03bd780de2c5454c86d6dc48e1c6c63bc) )
ROM_LOAD16_BYTE( "tp-q7.bin", 0xf00000, 0x080000, CRC(e075e5d7) SHA1(3490730c569678d48fb2d810484de063882f71a5) )
ROM_LOAD16_BYTE( "tp-q8.bin", 0xf00001, 0x080000, CRC(12f90e74) SHA1(a39a1cee6107d1e83954e3cabf191fd5c89777f8) )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "tp-gr1.bin", 0x000000, 0x100000, CRC(7fa955f7) SHA1(9ecae4c8c26bfa1701c39148099bf0f8b5974ac8) )
ROM_LOAD16_BYTE( "tp-gr2.bin", 0x000001, 0x100000, CRC(2495d785) SHA1(eb89eb299a7000364a0a0f59459d1ec27755fca1) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "tp-snd.bin", 0x000000, 0x80000, CRC(7e2cb00a) SHA1(670ee5dd5c60313676b9271901b4df9e6ebd5955) )
ROM_END
ROM_START( scrabble )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "1562.bin", 0x000000, 0x080000, CRC(d7303b98) SHA1(46e8ed04c8fdc092b7d8910d3e3f6cc62f691646) )
ROM_LOAD16_BYTE( "1563.bin", 0x000001, 0x080000, CRC(77f61ba1) SHA1(276dc8b2c23880740309c456d4e4b2eae249cdde) )
ROM_FILL( 0x100000, 0x100000, 0xff )
ROM_LOAD16_BYTE( "scra-q1.bin", 0xc00000, 0x080000, CRC(bcbc6328) SHA1(cbf8901e80e7bc1f82f6f7d4d5f6a658af98a6f9) )
ROM_LOAD16_BYTE( "scra-q2.bin", 0xc00001, 0x080000, CRC(c2147999) SHA1(f21dc0f3f4ba0d6304801bc492a759534447d747) )
ROM_LOAD16_BYTE( "scra-q3.bin", 0xd00000, 0x080000, CRC(622cebb9) SHA1(9b7c2204462d4912462bad6c4dcf096abe1381bb) )
ROM_LOAD16_BYTE( "scra-q4.bin", 0xd00001, 0x080000, CRC(fd4b587b) SHA1(e29512a075fbc511271d6902c8900a9b0261355c) )
ROM_LOAD16_BYTE( "scra-q5.bin", 0xe00000, 0x080000, CRC(fbc28978) SHA1(ce2549da858888d49677ec982ab3c21cf292939b) )
ROM_LOAD16_BYTE( "scra-q6.bin", 0xe00001, 0x080000, CRC(8b792c9c) SHA1(9a5cc6c4d7e807cbabd174ab7454cdaa93dc3cec) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "scra-g1.bin", 0x000000, 0x100000, CRC(04a17df9) SHA1(c215c90d8add3ff608c24aac242369874f6bf9d7) )
ROM_LOAD16_BYTE( "scra-g2.bin", 0x000001, 0x100000, CRC(724375e6) SHA1(709211a2d7b86f4e83c94a37010fe61ef9a734de) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "scra-snd.bin", 0x000000, 0x80000, CRC(287759ef) SHA1(bd37500689b7b2fb4fbc65056e92486c0c00ff61) )
ROM_END
ROM_START( scrabbled )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "1564.bin", 0x000000, 0x080000, CRC(bfc1b98b) SHA1(09278f06efa18c1578f61e9b1bfed0f4f6657cb6) )
ROM_LOAD16_BYTE( "1563.bin", 0x000001, 0x080000, CRC(77f61ba1) SHA1(276dc8b2c23880740309c456d4e4b2eae249cdde) )
ROM_FILL( 0x100000, 0x100000, 0xff )
ROM_LOAD16_BYTE( "scra-q1.bin", 0xc00000, 0x080000, CRC(bcbc6328) SHA1(cbf8901e80e7bc1f82f6f7d4d5f6a658af98a6f9) )
ROM_LOAD16_BYTE( "scra-q2.bin", 0xc00001, 0x080000, CRC(c2147999) SHA1(f21dc0f3f4ba0d6304801bc492a759534447d747) )
ROM_LOAD16_BYTE( "scra-q3.bin", 0xd00000, 0x080000, CRC(622cebb9) SHA1(9b7c2204462d4912462bad6c4dcf096abe1381bb) )
ROM_LOAD16_BYTE( "scra-q4.bin", 0xd00001, 0x080000, CRC(fd4b587b) SHA1(e29512a075fbc511271d6902c8900a9b0261355c) )
ROM_LOAD16_BYTE( "scra-q5.bin", 0xe00000, 0x080000, CRC(fbc28978) SHA1(ce2549da858888d49677ec982ab3c21cf292939b) )
ROM_LOAD16_BYTE( "scra-q6.bin", 0xe00001, 0x080000, CRC(8b792c9c) SHA1(9a5cc6c4d7e807cbabd174ab7454cdaa93dc3cec) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "scra-g1.bin", 0x000000, 0x100000, CRC(04a17df9) SHA1(c215c90d8add3ff608c24aac242369874f6bf9d7) )
ROM_LOAD16_BYTE( "scra-g2.bin", 0x000001, 0x100000, CRC(724375e6) SHA1(709211a2d7b86f4e83c94a37010fe61ef9a734de) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "scra-snd.bin", 0x000000, 0x80000, CRC(287759ef) SHA1(bd37500689b7b2fb4fbc65056e92486c0c00ff61) )
ROM_END
ROM_START( hngmnjpm )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "20264.bin", 0x000000, 0x080000, CRC(50074528) SHA1(8128b2270518af873df4b94d50c5c9849dda3e42) )
ROM_LOAD16_BYTE( "20265.bin", 0x000001, 0x080000, CRC(a0a6985c) SHA1(ed960e6e88df111aebf208d7105dc241aa916684) )
ROM_FILL( 0x100000, 0x100000, 0xff )
ROM_LOAD16_BYTE( "hang-q1.bin", 0xc00000, 0x080000, CRC(0be99a57) SHA1(49fe7faeccd3f9608927ff333fd5783e3cd7d266) )
ROM_LOAD16_BYTE( "hang-q2.bin", 0xc00001, 0x080000, CRC(71328f71) SHA1(59481b27dbcad109070cc4fd5c9c93f948991f03) )
ROM_LOAD16_BYTE( "hang-q3.bin", 0xd00000, 0x080000, CRC(3fabeb81) SHA1(67b4561ec4ac8c00728c86e2bce66f432c5f1e86) )
ROM_LOAD16_BYTE( "hang-q4.bin", 0xd00001, 0x080000, CRC(64fbf56b) SHA1(c5077f9995b890925ef608742ba77ef995de5a3b) )
ROM_LOAD16_BYTE( "hang-q5.bin", 0xe00000, 0x080000, CRC(283e0c7f) SHA1(64ed626e181d851d3ffd4a1c0e613cd769e0ae31) )
ROM_LOAD16_BYTE( "hang-q6.bin", 0xe00001, 0x080000, CRC(9a6d3667) SHA1(b4706d77dcd43e6f75e3e5e8bd1fbeebe84b8f60) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "hang-gr1.bin", 0x000000, 0x100000, CRC(5919344c) SHA1(b5c1f98ebfc65743fa2f6c264179ed7115532a6b) )
ROM_LOAD16_BYTE( "hang-gr2.bin", 0x000001, 0x100000, CRC(3194c6d4) SHA1(11d5e7bfe60912b0eab2a1d06d1a74853ec23567) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "hang-so1.bin", 0x000000, 0x80000, CRC(5efe1712) SHA1(e4e7a73a1b1897ed6e96306f99d234fb3b47c59b) )
/* Likely to be the same for the other games */
ROM_REGION( 0x0a00, "plds", 0 )
ROM_LOAD( "s60-3.bin", 0x000000, 0x0117, CRC(19e1d28b) SHA1(12dff4bea16b95807f1a9455b6785468ca5de858) )
ROM_LOAD( "s61-6.bin", 0x000000, 0x0117, CRC(c72cec0e) SHA1(9d6e5510600987f9359af9ecc3e95f5bd8444bcd) )
ROM_LOAD( "ig1.1.bin", 0x000000, 0x02DD, CRC(4e11fa4e) SHA1(ded2d2086c4360708462024054e5409962ea8589) )
ROM_LOAD( "ig2.1.bin", 0x000000, 0x0157, CRC(2365878b) SHA1(d91d9906aadcfd8cff7ee6b92449c522f73a29e1) )
ROM_LOAD( "ig3.2.bin", 0x000000, 0x0117, CRC(4970dad7) SHA1(c5931db3d66c7d1027a762be10f9e3d9e321b70f) )
ROM_LOAD( "jpms6.bin", 0x000000, 0x0117, CRC(1fba3b6f) SHA1(0e33e49cbf24e836deb1ef16385ff20549ef188e) )
ROM_LOAD( "mem-2.bin", 0x000000, 0x0157, CRC(92832445) SHA1(b6edcc6d4f721f0e91e9fcf322163db017afaee1) )
ROM_END
ROM_START( hngmnjpmd )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "20266.bin", 0x000000, 0x080000, CRC(38f6c73b) SHA1(71bdeee0656686bd420d9cf1928a8118372c57e4) )
ROM_LOAD16_BYTE( "20265.bin", 0x000001, 0x080000, CRC(a0a6985c) SHA1(ed960e6e88df111aebf208d7105dc241aa916684) )
ROM_FILL( 0x100000, 0x100000, 0xff )
ROM_LOAD16_BYTE( "hang-q1.bin", 0xc00000, 0x080000, CRC(0be99a57) SHA1(49fe7faeccd3f9608927ff333fd5783e3cd7d266) )
ROM_LOAD16_BYTE( "hang-q2.bin", 0xc00001, 0x080000, CRC(71328f71) SHA1(59481b27dbcad109070cc4fd5c9c93f948991f03) )
ROM_LOAD16_BYTE( "hang-q3.bin", 0xd00000, 0x080000, CRC(3fabeb81) SHA1(67b4561ec4ac8c00728c86e2bce66f432c5f1e86) )
ROM_LOAD16_BYTE( "hang-q4.bin", 0xd00001, 0x080000, CRC(64fbf56b) SHA1(c5077f9995b890925ef608742ba77ef995de5a3b) )
ROM_LOAD16_BYTE( "hang-q5.bin", 0xe00000, 0x080000, CRC(283e0c7f) SHA1(64ed626e181d851d3ffd4a1c0e613cd769e0ae31) )
ROM_LOAD16_BYTE( "hang-q6.bin", 0xe00001, 0x080000, CRC(9a6d3667) SHA1(b4706d77dcd43e6f75e3e5e8bd1fbeebe84b8f60) )
ROM_FILL( 0xf00000, 0x100000, 0xff )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "hang-gr1.bin", 0x000000, 0x100000, CRC(5919344c) SHA1(b5c1f98ebfc65743fa2f6c264179ed7115532a6b) )
ROM_LOAD16_BYTE( "hang-gr2.bin", 0x000001, 0x100000, CRC(3194c6d4) SHA1(11d5e7bfe60912b0eab2a1d06d1a74853ec23567) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "hang-so1.bin", 0x000000, 0x80000, CRC(5efe1712) SHA1(e4e7a73a1b1897ed6e96306f99d234fb3b47c59b) )
/* Likely to be the same for the other games */
ROM_REGION( 0x0a00, "plds", 0 )
ROM_LOAD( "s60-3.bin", 0x000000, 0x0117, CRC(19e1d28b) SHA1(12dff4bea16b95807f1a9455b6785468ca5de858) )
ROM_LOAD( "s61-6.bin", 0x000000, 0x0117, CRC(c72cec0e) SHA1(9d6e5510600987f9359af9ecc3e95f5bd8444bcd) )
ROM_LOAD( "ig1.1.bin", 0x000000, 0x02DD, CRC(4e11fa4e) SHA1(ded2d2086c4360708462024054e5409962ea8589) )
ROM_LOAD( "ig2.1.bin", 0x000000, 0x0157, CRC(2365878b) SHA1(d91d9906aadcfd8cff7ee6b92449c522f73a29e1) )
ROM_LOAD( "ig3.2.bin", 0x000000, 0x0117, CRC(4970dad7) SHA1(c5931db3d66c7d1027a762be10f9e3d9e321b70f) )
ROM_LOAD( "jpms6.bin", 0x000000, 0x0117, CRC(1fba3b6f) SHA1(0e33e49cbf24e836deb1ef16385ff20549ef188e) )
ROM_LOAD( "mem-2.bin", 0x000000, 0x0157, CRC(92832445) SHA1(b6edcc6d4f721f0e91e9fcf322163db017afaee1) )
ROM_END
ROM_START( coronatn )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "20824.bin", 0x000000, 0x080000, CRC(f5cc07cb) SHA1(45b83829ba9bd5f22c2978bbde9c0e25c476e719) )
ROM_LOAD16_BYTE( "20825.bin", 0x000001, 0x080000, CRC(2e749edf) SHA1(12b24836a71085aef8ca1bc61e6671f8d6e1908c) )
ROM_FILL( 0x100000, 0x100000, 0xff )
ROM_LOAD16_BYTE( "cs-q1.bin", 0xc00000, 0x080000, CRC(beef496a) SHA1(6089ee8b0821d5b8cb8f724748888a0915083622) )
ROM_LOAD16_BYTE( "cs-q2.bin", 0xc00001, 0x080000, CRC(16f88f36) SHA1(78c829d837cc09fdd1119ba73168d272843f7f50) )
ROM_LOAD16_BYTE( "cs-q3.bin", 0xd00000, 0x080000, CRC(1d412b03) SHA1(2400fa776effeb2ab21234a6ecf183ed0cffa92e) )
ROM_LOAD16_BYTE( "cs-q4.bin", 0xd00001, 0x080000, CRC(55c23ab9) SHA1(0eaa8c88315ef4544f1d1ef2fec2c6edc3589db3) )
ROM_LOAD16_BYTE( "cs-q5.bin", 0xe00000, 0x080000, CRC(289f4db0) SHA1(8eca9df9e278bf77be4b2aad4c80ea6a1880fe96) )
ROM_LOAD16_BYTE( "cs-q6.bin", 0xe00001, 0x080000, CRC(791d9d39) SHA1(44f3dcbfe8523118d52785844e103a480e8e13b5) )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "cs-ag1.bin", 0x000000, 0x100000, CRC(7ce449cc) SHA1(408e1405c80e623ee120cea65760ca9a8554cc29) )
ROM_LOAD16_BYTE( "cs-ag2.bin", 0x000001, 0x100000, CRC(7026df0c) SHA1(a000d72c06ad37879673324880fb0e715f55788e) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "cs-sound.bin", 0x000000, 0x80000, CRC(96ea4e9f) SHA1(a5443d893f38f3e279f2eb9f4500547e7b8efa37) )
ROM_END
ROM_START( coronatnd )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "20826.bin", 0x000000, 0x080000, CRC(9d3d85d8) SHA1(a6ab622fac9ece04f9b255e10eac7812549afb8a) )
ROM_LOAD16_BYTE( "20825.bin", 0x000001, 0x080000, CRC(2e749edf) SHA1(12b24836a71085aef8ca1bc61e6671f8d6e1908c) )
ROM_FILL( 0x100000, 0x100000, 0xff )
ROM_LOAD16_BYTE( "cs-q1.bin", 0xc00000, 0x080000, CRC(beef496a) SHA1(6089ee8b0821d5b8cb8f724748888a0915083622) )
ROM_LOAD16_BYTE( "cs-q2.bin", 0xc00001, 0x080000, CRC(16f88f36) SHA1(78c829d837cc09fdd1119ba73168d272843f7f50) )
ROM_LOAD16_BYTE( "cs-q3.bin", 0xd00000, 0x080000, CRC(1d412b03) SHA1(2400fa776effeb2ab21234a6ecf183ed0cffa92e) )
ROM_LOAD16_BYTE( "cs-q4.bin", 0xd00001, 0x080000, CRC(55c23ab9) SHA1(0eaa8c88315ef4544f1d1ef2fec2c6edc3589db3) )
ROM_LOAD16_BYTE( "cs-q5.bin", 0xe00000, 0x080000, CRC(289f4db0) SHA1(8eca9df9e278bf77be4b2aad4c80ea6a1880fe96) )
ROM_LOAD16_BYTE( "cs-q6.bin", 0xe00001, 0x080000, CRC(791d9d39) SHA1(44f3dcbfe8523118d52785844e103a480e8e13b5) )
ROM_REGION16_LE( 0x200000, "user1", 0 )
ROM_LOAD16_BYTE( "cs-ag1.bin", 0x000000, 0x100000, CRC(7ce449cc) SHA1(408e1405c80e623ee120cea65760ca9a8554cc29) )
ROM_LOAD16_BYTE( "cs-ag2.bin", 0x000001, 0x100000, CRC(7026df0c) SHA1(a000d72c06ad37879673324880fb0e715f55788e) )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "cs-sound.bin", 0x000000, 0x80000, CRC(96ea4e9f) SHA1(a5443d893f38f3e279f2eb9f4500547e7b8efa37) )
ROM_END
ROM_START( tqst ) // this looks like a video game.. but probably incomplete
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "prom1n.bin",0x000000, 0x080000, CRC(a9cacb88) SHA1(2cc565e8083926acab8c8b14ad90bd50f7597038) )
ROM_LOAD16_BYTE( "prom2.bin", 0x000001, 0x080000, CRC(a665e72e) SHA1(76440ae69f61eac1c6fe59dae295826a145bc940) )
ROM_LOAD16_BYTE( "u16.bin", 0x100000, 0x080000, CRC(ae9b6829) SHA1(2c8ed5060d751bca0af54305164512fae8ff88e9) )
ROM_LOAD16_BYTE( "u17.bin", 0x100001, 0x080000, CRC(7786340d) SHA1(96ded0af403fa3f0e7604f9ae0952036b3652665) )
ROM_REGION( 0x1000000, "altrevs", 0 )
ROM_LOAD16_BYTE( "prom1p.bin", 0x0000, 0x080000, CRC(c13b499b) SHA1(e8389568e5bec6462e02b69949691b14e29d7d8e) )
ROM_REGION16_LE( 0x200000, "user1", ROMREGION_ERASEFF )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "025rs1-0.bin", 0x0000, 0x080000, CRC(c4dbff24) SHA1(2e4d1d1905b9cd8254989d1653beb6756664839e) )
ROM_END
ROM_START( snlad ) // probably incomplete
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "8718.bin", 0x00000, 0x080000, CRC(599ca023) SHA1(fe6792ac97d18e2a04dbe8700d9f16b95be0f486) )
ROM_LOAD16_BYTE( "8719.bin", 0x00001, 0x080000, CRC(155156dc) SHA1(7f43d52413c31c5f44907ebb9eb419ccb8047c68) )
ROM_REGION( 0x1000000, "altrevs", 0 )
ROM_LOAD16_BYTE( "8720.bin", 0x0000, 0x080000, CRC(316d2230) SHA1(f2e330bcbc55dc0a47571f10d8c31e0e272ef8a9) )
ROM_REGION16_LE( 0x200000, "user1", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "gr1.bin", 0x000000, 0x100000, NO_DUMP )
ROM_LOAD16_BYTE( "gr2.bin", 0x000001, 0x100000, NO_DUMP )
ROM_REGION( 0x80000, "upd", 0 )
ROM_LOAD( "slswpsnd.bin", 0x0000, 0x080000, CRC(9a48b772) SHA1(d8fbaa60f09a1d31cf6c61c6dd02ad1bd7b7ffc9) )
ROM_END
ROM_START( buzzundr )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "prom1n.bin", 0x000000, 0x080000, CRC(2b47efd8) SHA1(bc96a5ea2511081f73a120e025249018c517c638) )
ROM_LOAD16_BYTE( "prom2.bin", 0x000001, 0x080000, CRC(3a1c38a3) SHA1(cb85e1a9535ba646724db5e3dfbdb81384ada918) )
ROM_REGION16_LE( 0x200000, "user1", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "gr1.bin", 0x000000, 0x100000, NO_DUMP )
ROM_LOAD16_BYTE( "gr2.bin", 0x000001, 0x100000, NO_DUMP )
ROM_REGION( 0x80000, "upd", ROMREGION_ERASE00 )
/* missing? */
ROM_END
ROM_START( monspdr )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_LOAD16_BYTE( "msp10dsk.1", 0x000000, 0x080000, CRC(892aa085) SHA1(cfb8d4edbf22a88906b3b1fa52156be201d81b44) )
ROM_LOAD16_BYTE( "msp10.2", 0x000001, 0x080000, CRC(3db5e13e) SHA1(79eb1f17a8e1b3220cd7c5f46212b8a2e1a112cb) )
ROM_REGION16_LE( 0x200000, "user1", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "gr1.bin", 0x000000, 0x100000, NO_DUMP )
ROM_LOAD16_BYTE( "gr2.bin", 0x000001, 0x100000, NO_DUMP )
ROM_REGION( 0x80000, "upd", ROMREGION_ERASE00 )
/* missing? */
ROM_END
/************************************
*
* Game driver(s)
*
*************************************/
/* Video */
GAME( 1995, cluedo, 0, jpmimpct, cluedo, driver_device, 0, ROT0, "JPM", "Cluedo (prod. 2D)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1995, cluedod, cluedo, jpmimpct, cluedo, driver_device, 0, ROT0, "JPM", "Cluedo (prod. 2D) (Protocol)",MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1995, cluedo2c, cluedo, jpmimpct, cluedo, driver_device, 0, ROT0, "JPM", "Cluedo (prod. 2C)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1995, cluedo2, cluedo, jpmimpct, cluedo, driver_device, 0, ROT0, "JPM", "Cluedo (prod. 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1996, trivialp, 0, jpmimpct, trivialp, driver_device, 0, ROT0, "JPM", "Trivial Pursuit (New Edition) (prod. 1D)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, trivialpd,trivialp,jpmimpct, trivialp, driver_device, 0, ROT0, "JPM", "Trivial Pursuit (New Edition) (prod. 1D) (Protocol)",MACHINE_SUPPORTS_SAVE )
GAME( 1996, trivialpo,trivialp,jpmimpct, trivialp, driver_device, 0, ROT0, "JPM", "Trivial Pursuit", MACHINE_SUPPORTS_SAVE )
GAME( 1997, scrabble, 0, jpmimpct, scrabble, driver_device, 0, ROT0, "JPM", "Scrabble (rev. F)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, scrabbled,scrabble,jpmimpct, scrabble, driver_device, 0, ROT0, "JPM", "Scrabble (rev. F) (Protocol)",MACHINE_SUPPORTS_SAVE )
GAME( 1998, hngmnjpm, 0, jpmimpct, hngmnjpm, driver_device, 0, ROT0, "JPM", "Hangman (JPM)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, hngmnjpmd,hngmnjpm,jpmimpct, hngmnjpm, driver_device, 0, ROT0, "JPM", "Hangman (JPM) (Protocol)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, coronatn, 0, jpmimpct, coronatn, driver_device, 0, ROT0, "JPM", "Coronation Street Quiz Game", MACHINE_SUPPORTS_SAVE )
GAME( 1999, coronatnd,coronatn,jpmimpct, coronatn, driver_device, 0, ROT0, "JPM", "Coronation Street Quiz Game (Protocol)", MACHINE_SUPPORTS_SAVE )
GAME( 199?, tqst, 0, jpmimpct, cluedo , driver_device, 0, ROT0, "JPM", "Treasure Quest" , MACHINE_NOT_WORKING) // incomplete (ACE?)
GAME( 199?, snlad, 0, jpmimpct, cluedo , driver_device, 0, ROT0, "JPM", "Snake & Ladders" , MACHINE_NOT_WORKING) // incomplete
GAME( 199?, buzzundr, 0, jpmimpct, cluedo , driver_device, 0, ROT0, "Ace", "Buzzundrum (Ace)", MACHINE_NOT_WORKING )
GAME( 199?, monspdr , 0, jpmimpct, cluedo , driver_device, 0, ROT0, "Ace", "Money Spider (Ace)", MACHINE_NOT_WORKING )