summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/lvcards.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/lvcards.c')
-rw-r--r--src/mame/drivers/lvcards.c589
1 files changed, 589 insertions, 0 deletions
diff --git a/src/mame/drivers/lvcards.c b/src/mame/drivers/lvcards.c
new file mode 100644
index 00000000000..ca9d5358ecb
--- /dev/null
+++ b/src/mame/drivers/lvcards.c
@@ -0,0 +1,589 @@
+/***************************************************************************
+Lovely Poker/Pontoon driver, updated by El Condor from work by Uki and Zsolt Vasvari respectively.
+Later cleaned up by Curt Coder and Scott Yellig.
+
+Lovely Cards also runs on this hardware, but is not a gambling game.
+
+Any fixes for this driver should be forwarded to the AGEMAME forum at (http://www.mameworld.info),
+or to MAME, if they affect Lovely Cards.
+
+---
+
+Lovely Poker by Uki/El Condor
+Enter switch test mode by pressing the Deal key twice when the
+crosshatch pattern comes up.
+
+After you get into Check Mode (F2), press the Deal key to switch pages.
+
+Memory Mapped:
+
+0000-5fff R ROM
+6000-67ff RW Battery Backed RAM
+9000-93ff RW Video RAM
+9400-97ff RW Color RAM
+ Bits 0-3 - color
+ Bits 4-5 - character bank
+ Bit 6 - flip x
+ Bit 7 - Is it used?
+a000 R Input Port 0
+a001 R Input Port 1
+a002 R Input Port 2
+a001 W Control Port 0
+a002 W Control Port 1
+
+I/O Ports:
+00 RW YM2149 Data Port
+ Port A - DSW #1
+ Port B - DSW #2
+01 W YM2149 Control Port
+
+---
+
+Pontoon Memory Map (preliminary)
+
+Pontoon driver by Zsolt Vasvari
+Enter switch test mode by pressing the Hit key twice when the
+crosshatch pattern comes up
+After you get into Check Mode (F2), press the Hit key to switch pages.
+
+Memory Mapped:
+
+0000-5fff R ROM
+6000-67ff RW Battery Backed RAM
+8000-83ff RW Video RAM
+8400-87ff RW Color RAM
+ Bits 0-3 - color
+ Bits 4-5 - character bank
+ Bit 6 - flip x
+ Bit 7 - Is it used?
+a000 R Input Port 0
+a001 R Input Port 1
+a002 R Input Port 2
+a001 W Control Port 0
+a002 W Control Port 1
+
+I/O Ports:
+00 RW YM2149 Data Port
+ Port A - DSW #1
+ Port B - DSW #2
+01 W YM2149 Control Port
+
+TODO:
+
+- What do the control ports do? Payout?
+- CPU speed/ YM2149 frequencies
+- Input ports need to be cleaned up
+- NVRAM does not work for lvcards?
+- AGEMAME marks lvpoker/ponttekh as GAME_SUPPORTS_SAVE, needs checking.
+
+***************************************************************************/
+
+#include "driver.h"
+#include "sound/ay8910.h"
+
+extern WRITE8_HANDLER( lvcards_videoram_w );
+extern WRITE8_HANDLER( lvcards_colorram_w );
+
+extern PALETTE_INIT( lvcards );
+extern PALETTE_INIT( ponttehk );
+extern VIDEO_START( lvcards );
+extern VIDEO_UPDATE( lvcards );
+
+static UINT8 payout;
+static UINT8 pulse;
+static UINT8 result;
+
+static MACHINE_START( lvpoker )
+{
+ state_save_register_global(payout);
+ state_save_register_global(pulse);
+ state_save_register_global(result);
+}
+
+static MACHINE_RESET( lvpoker )
+{
+payout = 0;
+pulse = 0;
+result = 0;
+}
+
+static WRITE8_HANDLER(control_port_2_w)
+{
+ switch (data)
+ {
+ case 0x60:
+ payout = 1;
+ break;
+ case 0xc0:
+ payout = 1;
+ break;
+ default:
+ payout = 0;
+ break;
+ }
+}
+
+static WRITE8_HANDLER(control_port_2a_w)
+{
+ switch (data)
+ {
+ case 0x60:
+ payout = 1;
+ break;
+ case 0x80:
+ payout = 1;
+ break;
+ default:
+ payout = 0;
+ break;
+ }
+}
+
+static READ8_HANDLER( payout_r )
+{
+ result = readinputport(2);
+
+ if (payout)
+ {
+ if ( pulse < 3 )
+ {
+ result = result | 0x40;
+ pulse++;
+ }
+ else
+ {
+ pulse = 0;
+ }
+ }
+ return result;
+}
+
+static ADDRESS_MAP_START( ponttehk_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM
+ AM_RANGE(0x6000, 0x67ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x8000, 0x83ff) AM_RAM AM_WRITE(lvcards_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x8400, 0x87ff) AM_RAM AM_WRITE(lvcards_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
+ AM_RANGE(0xa001, 0xa001) AM_READ(input_port_1_r) AM_WRITENOP // lamps
+ AM_RANGE(0xa002, 0xa002) AM_READ(payout_r) AM_WRITE(control_port_2a_w)//AM_WRITENOP // ???
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( lvcards_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM
+ AM_RANGE(0x6000, 0x67ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x9000, 0x93ff) AM_RAM AM_WRITE(lvcards_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x9400, 0x97ff) AM_RAM AM_WRITE(lvcards_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
+ AM_RANGE(0xa001, 0xa001) AM_READ(input_port_1_r) AM_WRITENOP
+ AM_RANGE(0xa002, 0xa002) AM_READ(input_port_2_r) AM_WRITENOP
+ AM_RANGE(0xc000, 0xdfff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( lvcards_io_map, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x00, 0x00) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
+ AM_RANGE(0x01, 0x01) AM_WRITE(AY8910_control_port_0_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( lvpoker_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM
+ AM_RANGE(0x6000, 0x67ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x9000, 0x93ff) AM_RAM AM_WRITE(lvcards_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x9400, 0x97ff) AM_RAM AM_WRITE(lvcards_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
+ AM_RANGE(0xa001, 0xa001) AM_READ(input_port_1_r) AM_WRITENOP // lamps
+ AM_RANGE(0xa002, 0xa002) AM_READ(payout_r) AM_WRITE(control_port_2_w)
+ AM_RANGE(0xc000, 0xdfff) AM_ROM
+ADDRESS_MAP_END
+
+static INPUT_PORTS_START( lvcards )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Analyzer") PORT_CODE(KEYCODE_0)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ 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_OTHER ) PORT_NAME("Red") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Black") PORT_CODE(KEYCODE_M)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hold 1") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hold 2") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hold 3") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hold 4") PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hold 5") PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Deal / Double") PORT_CODE(KEYCODE_LALT)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bet") PORT_CODE(KEYCODE_LCONTROL)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Cancel / Take Score") PORT_CODE(KEYCODE_SPACE)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3)
+ 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_TAG("DSW0")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Reset?" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x07, 0x07, "1 COIN =" )
+ PORT_DIPSETTING( 0x06, "5$" )
+ PORT_DIPSETTING( 0x05, "10$" )
+ PORT_DIPSETTING( 0x04, "15$" )
+ PORT_DIPSETTING( 0x03, "20$" )
+ PORT_DIPSETTING( 0x07, "25$" )
+ PORT_DIPSETTING( 0x02, "50$" )
+ PORT_DIPSETTING( 0x01, "75$" )
+ PORT_DIPSETTING( 0x00, "100$" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( lvpoker )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Analyzer") PORT_TOGGLE
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Memory Reset")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Clear Stats")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("Hopper Reset")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Red")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Black")
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_Z) PORT_NAME("Hold 1")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_X) PORT_NAME("Hold 2")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_C) PORT_NAME("Hold 3")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_V) PORT_NAME("Hold 4")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_B) PORT_NAME("Hold 5")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Deal/Double")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2) PORT_NAME("Bet")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Remove Credit as coins") PORT_CODE(KEYCODE_A)
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) // Token Drop
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Cancel / Take Score")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Overflow
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Token Out
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL)
+
+ PORT_START_TAG("DSW0")
+ PORT_DIPNAME( 0x07, 0x07, "Winning Percentage" )
+ PORT_DIPSETTING( 0x06, "70%" )
+ PORT_DIPSETTING( 0x05, "74%" )
+ PORT_DIPSETTING( 0x04, "78%" )
+ PORT_DIPSETTING( 0x03, "82%" )
+ PORT_DIPSETTING( 0x02, "86%" )
+ PORT_DIPSETTING( 0x07, "90%" )
+ PORT_DIPSETTING( 0x01, "94%" )
+ PORT_DIPSETTING( 0x00, "98%" )
+ PORT_DIPNAME( 0x08, 0x08, "Max. Payout Adjustment")
+ PORT_DIPSETTING( 0x08, "Free")
+ PORT_DIPSETTING( 0x00, "2000")
+ PORT_DIPNAME( 0x10, 0x10, "Bonus Game Difficulty")
+ PORT_DIPSETTING( 0x10, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x60, 0x20, "Payment Method" )
+ PORT_DIPSETTING( 0x00, "Credit In/Coin Out")
+ PORT_DIPSETTING( 0x20, "Credit In/Credit Out")
+ PORT_DIPSETTING( 0x40, "Coin In/Coin Out")
+ //PORT_DIPSETTING( 0x60, "Credit In/Coin Out") Again, clearly no Coin in, Credit out
+ PORT_DIPNAME( 0x80, 0x80, "Memory Reset Switch" )
+ PORT_DIPSETTING( 0x80, "Disabled" )
+ PORT_DIPSETTING( 0x00, "Enabled" )
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x07, 0x06, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x38, 0x30, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x28, DEF_STR( 2C_2C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x38, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
+ PORT_DIPNAME( 0x40, 0x40, "Coin C (Service Switch)" )
+ PORT_DIPSETTING( 0x40, "1 Push/1 Credit" )
+ PORT_DIPSETTING( 0x00, "1 Push/10 Credits" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ponttehk )
+ PORT_START_TAG("IN0")
+ PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Reset All")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Clear Stats")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U) PORT_NAME("Call Attendant")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("Hopper Reset")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Bonus Game")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Stand")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Hit")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Use Credit") PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Remove Credit as coins") PORT_CODE(KEYCODE_A)
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL )// Token Drop
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Overflow optometric switch - reversed logic
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3) PORT_NAME("Coinout Sensor") //Token Out
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL )//Motor On?
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x07, 0x07, "Winning Percentage" )
+ PORT_DIPSETTING( 0x06, "70%" )
+ PORT_DIPSETTING( 0x05, "74%" )
+ PORT_DIPSETTING( 0x04, "78%" )
+ PORT_DIPSETTING( 0x03, "82%" )
+ PORT_DIPSETTING( 0x02, "86%" )
+ PORT_DIPSETTING( 0x07, "90%" )
+ PORT_DIPSETTING( 0x01, "94%" )
+ PORT_DIPSETTING( 0x00, "98%" )
+ PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x60, 0x20, "Payment Method" )
+ PORT_DIPSETTING( 0x00, "Credit In/Coin Out" )
+ PORT_DIPSETTING( 0x20, "Coin In/Coin Out" )
+ PORT_DIPSETTING( 0x40, "Credit In/Credit Out" )
+ //PORT_DIPSETTING( 0x60, "Credit In/Coin Out" ) Again, clearly no Coin in, Credit out
+ PORT_DIPNAME( 0x80, 0x80, "Reset All Switch" )
+ PORT_DIPSETTING( 0x80, "Disabled" )
+ PORT_DIPSETTING( 0x00, "Enabled" )
+
+ PORT_START_TAG("DSW2")
+ PORT_DIPNAME( 0x07, 0x06, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x38, 0x30, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x28, DEF_STR( 2C_2C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x38, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
+ PORT_DIPNAME( 0x40, 0x40, "Coin C (Service Switch)" )
+ PORT_DIPSETTING( 0x40, "1 Push/1 Credit" )
+ PORT_DIPSETTING( 0x00, "1 Push/10 Credits" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static const gfx_layout charlayout =
+{
+ 8,8, /* 8*8 characters */
+ RGN_FRAC(1,1), /* 2048 characters */
+ 4, /* 4 bits per pixel */
+ {0,1,2,3},
+ {4,0,12,8,20,16,28,24},
+ {32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7},
+ 32*8
+};
+
+/* Graphics Decode Information */
+
+static GFXDECODE_START( lvcards )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 16 )
+GFXDECODE_END
+
+/* Sound Interfaces */
+
+static struct AY8910interface lcay8910_interface =
+{
+ input_port_3_r, //DSW0
+ input_port_4_r //DSW1
+};
+
+
+static MACHINE_DRIVER_START( lvcards )
+ // basic machine hardware
+ MDRV_CPU_ADD_TAG("main",Z80, 18432000/6) // 3.072 MHz ?
+
+ MDRV_CPU_PROGRAM_MAP(lvcards_map, 0)
+ MDRV_CPU_IO_MAP(lvcards_io_map, 0)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold, 1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION)
+
+ // video hardware
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(32*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(8*0, 32*8-1, 2*8, 30*8-1)
+ MDRV_GFXDECODE(lvcards)
+ MDRV_PALETTE_LENGTH(256)
+
+ MDRV_PALETTE_INIT(lvcards)
+ MDRV_VIDEO_START(lvcards)
+ MDRV_VIDEO_UPDATE(lvcards)
+
+ // sound hardware
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(AY8910, 18432000/12)
+ MDRV_SOUND_CONFIG(lcay8910_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( lvpoker )
+ MDRV_IMPORT_FROM( lvcards )
+
+ // basic machine hardware
+ MDRV_NVRAM_HANDLER(generic_1fill)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(lvpoker_map,0)
+ MDRV_MACHINE_START(lvpoker)
+ MDRV_MACHINE_RESET(lvpoker)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( ponttehk )
+ MDRV_IMPORT_FROM( lvcards )
+
+ // basic machine hardware
+ MDRV_NVRAM_HANDLER(generic_1fill)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(ponttehk_map,0)
+ MDRV_MACHINE_RESET(lvpoker)
+
+ // video hardware
+ MDRV_PALETTE_INIT(ponttehk)
+MACHINE_DRIVER_END
+
+ROM_START( lvpoker )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "lp1.bin", 0x0000, 0x4000, CRC(ecfefa91) SHA1(7f6e0f30a2c4299797a8066419bf247b2900e312) )
+ ROM_LOAD( "lp2.bin", 0x4000, 0x2000, CRC(06d5484f) SHA1(326756a03eaeefc944428c7e011fcdc128aa415a) )
+ ROM_LOAD( "lp3.bin", 0xc000, 0x2000, CRC(05e17de8) SHA1(76b38e414f225789de8af9ca0556008e17285ffe) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "lp4.bin", 0x0000, 0x2000, CRC(04fd2a6b) SHA1(33fb42f54646dc91f5aca1c55cfc932fa04f5d77) )
+ ROM_CONTINUE( 0x8000, 0x2000 )
+ ROM_LOAD( "lp5.bin", 0x2000, 0x2000, CRC(9b5b531c) SHA1(1ce700361ea39a15c9c62fc0fa61df0cda62a340) )
+ ROM_CONTINUE( 0xa000, 0x2000 )
+ ROM_LOAD( "lc6.bin", 0x4000, 0x2000, CRC(2991a6ec) SHA1(b2c32550884b7b708db48bb7f0854bbad504417d) )
+ ROM_RELOAD( 0xc000, 0x2000 )
+ ROM_LOAD( "lp7.bin", 0x6000, 0x2000, CRC(217e9cfb) SHA1(3e7d76db5195c599c2bf186ae6616b29bc0fd337) )
+ ROM_RELOAD( 0xe000, 0x2000 )
+
+ ROM_REGION( 0x0300, REGION_PROMS, 0 )
+ ROM_LOAD( "3.7c", 0x0000, 0x0100, CRC(0c2ead4a) SHA1(e8e29e21366622c9bf3ee5e807c83b5cd7da8e3e) )
+ ROM_LOAD( "2.7b", 0x0100, 0x0100, CRC(f4bc51e2) SHA1(38293c1117d6f3076081b6f2da3f42819558b04f) )
+ ROM_LOAD( "1.7a", 0x0200, 0x0100, CRC(e40f2363) SHA1(cea598b6ed037dd3b4306c2ca3b0b4d5197d42a4) )
+ROM_END
+
+ROM_START( lvcards )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "lc1.bin", 0x0000, 0x4000, CRC(0c5fbf05) SHA1(bf996bdccfc5748cee91d004f2b1da10bcd8e329) )
+ ROM_LOAD( "lc2.bin", 0x4000, 0x2000, CRC(deb54548) SHA1(a245898635c5cd3c26989c2bba89bb71edacd906) )
+ ROM_LOAD( "lc3.bin", 0xc000, 0x2000, CRC(45c2bea9) SHA1(3a33501824769656aa87649c3fd0a8b8a4d83f3c) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "lc4.bin", 0x0000, 0x2000, CRC(dd705389) SHA1(271c11c2bd9affd976d65e318fd9fb01dbdde040) )
+ ROM_CONTINUE( 0x8000, 0x2000 )
+ ROM_LOAD( "lc5.bin", 0x2000, 0x2000, CRC(ddd1e3e5) SHA1(b7e8ccaab318b61b91eae4eee9e04606f9717037) )
+ ROM_CONTINUE( 0xa000, 0x2000 )
+ ROM_LOAD( "lc6.bin", 0x4000, 0x2000, CRC(2991a6ec) SHA1(b2c32550884b7b708db48bb7f0854bbad504417d) )
+ ROM_RELOAD( 0xc000, 0x2000 )
+ ROM_LOAD( "lc7.bin", 0x6000, 0x2000, CRC(f1b84c56) SHA1(6834139400bf8aa8db17f65bfdcbdcb2433d5fdc) )
+ ROM_RELOAD( 0xe000, 0x2000 )
+
+ ROM_REGION( 0x0300, REGION_PROMS, 0 )
+ ROM_LOAD( "3.7c", 0x0000, 0x0100, CRC(0c2ead4a) SHA1(e8e29e21366622c9bf3ee5e807c83b5cd7da8e3e) )
+ ROM_LOAD( "2.7b", 0x0100, 0x0100, CRC(f4bc51e2) SHA1(38293c1117d6f3076081b6f2da3f42819558b04f) )
+ ROM_LOAD( "1.7a", 0x0200, 0x0100, CRC(e40f2363) SHA1(cea598b6ed037dd3b4306c2ca3b0b4d5197d42a4) )
+ROM_END
+
+ROM_START( ponttehk )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "ponttehk.001", 0x0000, 0x4000, CRC(1f8c1b38) SHA1(3776ddd695741223bd9ad41f74187bff31f2cd3b) )
+ ROM_LOAD( "ponttehk.002", 0x4000, 0x2000, CRC(befb4f48) SHA1(8ca146c8b52afab5deb6f0ff52bdbb2b1ff3ded7) )
+
+ ROM_REGION( 0x8000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "ponttehk.003", 0x0000, 0x2000, CRC(a6a91b3d) SHA1(d180eabe67efd3fd1205570b661a74acf7ed93b3) )
+ ROM_LOAD( "ponttehk.004", 0x2000, 0x2000, CRC(976ed924) SHA1(4d305694b3e157411068baf3052e3aac7d0b32d5) )
+ ROM_LOAD( "ponttehk.005", 0x4000, 0x2000, CRC(2b8e8ca7) SHA1(dd86d3b4fd1627bdaa0603ffd2f1bc2953bc51f8) )
+ ROM_LOAD( "ponttehk.006", 0x6000, 0x2000, CRC(6bc23965) SHA1(b73a584fc5b2dd9436bbb8bc1620f5a51d351aa8) )
+
+ ROM_REGION( 0x0300, REGION_PROMS, 0 )
+ ROM_LOAD( "pon24s10.003", 0x0000, 0x0100, CRC(4623b7f3) SHA1(55948753dec09d0a476b90ca75e7e092ce0f68ee) ) /* red component */
+ ROM_LOAD( "pon24s10.002", 0x0100, 0x0100, CRC(117e1b67) SHA1(b753137878fe5cd650722cf526cd4929821240a8) ) /* green component */
+ ROM_LOAD( "pon24s10.001", 0x0200, 0x0100, CRC(c64ecee8) SHA1(80c9ec21e135235f7f2d41ce7900cf3904123823) ) /* blue component */
+ROM_END
+
+GAME( 1985, lvcards, 0, lvcards, lvcards, 0, ROT0, "Tehkan", "Lovely Cards", 0 )
+GAME( 1985, lvpoker, lvcards, lvpoker, lvpoker, 0, ROT0, "Tehkan", "Lovely Poker [BET]", 0 )
+GAME( 1985, ponttehk, 0, ponttehk, ponttehk, 0, ROT0, "Tehkan", "Pontoon (Tehkan)", 0 )