Machines promoted to WORKING

* Poker Genius [AJR]
This commit is contained in:
AJR 2017-05-03 16:17:25 -04:00
parent 31146b1c9a
commit 323a35f967

View File

@ -1,9 +1,10 @@
// license:BSD-3-Clause
// copyright-holders:Ivan Vangelista
// copyright-holders:AJR
/*
Poker game (unknown name) by Chain Leisure
Main CPU ROM contains the following string:
Poker Genius (misspelled "Genuis" on title screen) by Chain Leisure
The following string is copied from the main CPU ROM into NVRAM:
"CLPOK GAME designed by FULL-LIFE at 02-01-1994"
@ -40,6 +41,7 @@ public:
clpoker_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_gfxdecode(*this, "gfxdecode")
, m_videoram(*this, "videoram")
{
}
@ -48,16 +50,31 @@ public:
DECLARE_WRITE8_MEMBER(output_b_w);
DECLARE_WRITE8_MEMBER(output_c_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE_LINE_MEMBER(vblank_w);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
protected:
virtual void video_start() override;
private:
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<u8> m_videoram;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
bool m_nmi_enable;
};
static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, clpoker_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("videoram")
AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("ramdac", ramdac_device, index_w)
AM_RANGE(0xf001, 0xf001) AM_DEVWRITE("ramdac", ramdac_device, pal_w)
@ -88,16 +105,19 @@ WRITE8_MEMBER(clpoker_state::output_b_w)
WRITE8_MEMBER(clpoker_state::output_c_w)
{
m_nmi_enable = BIT(data, 1);
if (!m_nmi_enable)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
static INPUT_PORTS_START( clpoker )
PORT_START("INA")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
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( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -112,14 +132,14 @@ static INPUT_PORTS_START( clpoker )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("INC")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Double Up")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Bet / Hold 5")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Cancel / Take Score")
PORT_START("DSW1")
PORT_DIPUNKNOWN( 0x01, 0x01 )
@ -142,8 +162,45 @@ static INPUT_PORTS_START( clpoker )
PORT_DIPUNKNOWN( 0x80, 0x80 )
INPUT_PORTS_END
TILE_GET_INFO_MEMBER(clpoker_state::get_bg_tile_info)
{
u16 tileno = (m_videoram[tile_index] << 8) | m_videoram[tile_index + 0x0800];
SET_TILE_INFO_MEMBER(0, tileno, 0, 0);
}
TILE_GET_INFO_MEMBER(clpoker_state::get_fg_tile_info)
{
u16 tileno = (m_videoram[tile_index + 0x1000] << 8) | m_videoram[tile_index + 0x1800];
SET_TILE_INFO_MEMBER(0, tileno, 0, 0);
}
WRITE8_MEMBER(clpoker_state::videoram_w)
{
m_videoram[offset] = data;
(BIT(offset, 12) ? m_fg_tilemap : m_bg_tilemap)->mark_tile_dirty(offset & 0x07ff);
}
void clpoker_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(clpoker_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(clpoker_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap->set_transparent_pen(0);
m_nmi_enable = false;
save_item(NAME(m_nmi_enable));
}
WRITE_LINE_MEMBER(clpoker_state::vblank_w)
{
if (m_nmi_enable)
m_maincpu->set_input_line(INPUT_LINE_NMI, state);
}
u32 clpoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
@ -190,7 +247,7 @@ static MACHINE_CONFIG_START( clpoker, clpoker_state )
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1) // probably right
MCFG_SCREEN_UPDATE_DRIVER(clpoker_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(clpoker_state, vblank_w))
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HM86171
@ -225,4 +282,4 @@ ROM_START( clpoker )
ROM_END
GAME( 1994, clpoker, 0, clpoker, clpoker, driver_device, 0, ROT0, "Chain Leisure", "Unknown Poker Game", MACHINE_IS_SKELETON ) // Year taken from string in main CPU ROM
GAME( 1994, clpoker, 0, clpoker, clpoker, driver_device, 0, ROT0, "Chain Leisure", "Poker Genius", MACHINE_SUPPORTS_SAVE ) // Year taken from string in main CPU ROM