wallc.cpp: added preliminary inputs to unkitpkr, game still not playable due to corrupted card GFX (nw)

This commit is contained in:
Ivan Vangelista 2017-08-28 11:17:43 +02:00 committed by GitHub
parent 84217b1b97
commit 4a92d8bab0

View File

@ -66,23 +66,29 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_videoram(*this, "videoram") { }
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(wallc_coin_counter_w);
DECLARE_WRITE8_MEMBER(unkitpkr_coin_counter_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_PALETTE_INIT(wallc);
DECLARE_DRIVER_INIT(wallc);
DECLARE_DRIVER_INIT(wallca);
DECLARE_DRIVER_INIT(sidam);
DECLARE_DRIVER_INIT(unkitpkr);
protected:
virtual void video_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<uint8_t> m_videoram;
tilemap_t *m_bg_tilemap;
DECLARE_WRITE8_MEMBER(wallc_videoram_w);
DECLARE_WRITE8_MEMBER(wallc_coin_counter_w);
DECLARE_DRIVER_INIT(wallc);
DECLARE_DRIVER_INIT(wallca);
DECLARE_DRIVER_INIT(sidam);
DECLARE_DRIVER_INIT(unkitpkr);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void video_start() override;
DECLARE_PALETTE_INIT(wallc);
uint32_t screen_update_wallc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
};
@ -149,7 +155,7 @@ PALETTE_INIT_MEMBER(wallc_state, wallc)
}
}
WRITE8_MEMBER(wallc_state::wallc_videoram_w)
WRITE8_MEMBER(wallc_state::videoram_w)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
@ -162,10 +168,10 @@ TILE_GET_INFO_MEMBER(wallc_state::get_bg_tile_info)
void wallc_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(wallc_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS_FLIP_Y, 8, 8, 32, 32);
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(wallc_state::get_bg_tile_info), this), TILEMAP_SCAN_COLS_FLIP_Y, 8, 8, 32, 32);
}
uint32_t wallc_state::screen_update_wallc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t wallc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
@ -173,12 +179,17 @@ uint32_t wallc_state::screen_update_wallc(screen_device &screen, bitmap_ind16 &b
WRITE8_MEMBER(wallc_state::wallc_coin_counter_w)
{
machine().bookkeeping().coin_counter_w(0,data & 2);
machine().bookkeeping().coin_counter_w(0, data & 2);
}
WRITE8_MEMBER(wallc_state::unkitpkr_coin_counter_w)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 4));
}
static ADDRESS_MAP_START( wallc_map, AS_PROGRAM, 8, wallc_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(wallc_videoram_w) AM_MIRROR(0xc00) AM_SHARE("videoram") /* 2114, 2114 */
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(videoram_w) AM_MIRROR(0xc00) AM_SHARE("videoram") /* 2114, 2114 */
AM_RANGE(0xa000, 0xa3ff) AM_RAM /* 2114, 2114 */
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1")
@ -193,6 +204,22 @@ static ADDRESS_MAP_START( wallc_map, AS_PROGRAM, 8, wallc_state )
AM_RANGE(0xb600, 0xb600) AM_DEVWRITE("aysnd", ay8912_device, data_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( unkitpkr_map, AS_PROGRAM, 8, wallc_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(videoram_w) AM_MIRROR(0xc00) AM_SHARE("videoram") /* 2114, 2114 */
AM_RANGE(0xa000, 0xa3ff) AM_RAM /* 2114, 2114 */
AM_RANGE(0xb100, 0xb100) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb200, 0xb200) AM_READ_PORT("IN0")
AM_RANGE(0xb300, 0xb300) AM_READ_PORT("IN1")
AM_RANGE(0xb600, 0xb600) AM_READ_PORT("DSW")
AM_RANGE(0xb000, 0xb000) AM_WRITENOP
AM_RANGE(0xb100, 0xb100) AM_WRITE(unkitpkr_coin_counter_w)
AM_RANGE(0xb200, 0xb200) AM_WRITENOP
AM_RANGE(0xb500, 0xb500) AM_DEVWRITE("aysnd", ay8912_device, address_w)
AM_RANGE(0xb600, 0xb600) AM_DEVWRITE("aysnd", ay8912_device, data_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( wallc )
PORT_START("SYSTEM") /* b200 */
@ -251,7 +278,56 @@ static INPUT_PORTS_START( wallc )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Shown as "Unused" in the manual */
INPUT_PORTS_END
static INPUT_PORTS_START( unkitpkr )
PORT_START("SYSTEM") /* b100 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // coin clear?
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_START("IN0") /* b200 */
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_POKER_HOLD1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
PORT_START("IN1") /* b300 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) // ok?
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("DSW") /* b600 */
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2") // ok
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x03, "1 Coin/10 Credits" )
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:3,4") // ok
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0c, "1 Coin/10 Credits" )
PORT_DIPNAME( 0x30, 0x00, "Coin C" ) PORT_DIPLOCATION("SW2:5,6") // ok
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x30, "1 Coin/10 Credits" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
INPUT_PORTS_END
static const gfx_layout charlayout =
{
@ -268,7 +344,7 @@ static GFXDECODE_START( wallc )
GFXDECODE_ENTRY( "gfx1", 0 , charlayout, 0, 4 )
GFXDECODE_END
DRIVER_INIT_MEMBER(wallc_state,wallc)
DRIVER_INIT_MEMBER(wallc_state, wallc)
{
uint8_t c;
uint32_t i;
@ -283,7 +359,7 @@ DRIVER_INIT_MEMBER(wallc_state,wallc)
}
}
DRIVER_INIT_MEMBER(wallc_state,wallca)
DRIVER_INIT_MEMBER(wallc_state, wallca)
{
uint8_t c;
uint32_t i;
@ -313,7 +389,7 @@ static MACHINE_CONFIG_START( wallc )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 12288000 / 4) /* 3.072 MHz ? */
MCFG_CPU_PROGRAM_MAP(wallc_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", wallc_state, irq0_line_hold)
MCFG_CPU_VBLANK_INT_DRIVER("screen", wallc_state, irq0_line_hold)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -321,7 +397,7 @@ static MACHINE_CONFIG_START( wallc )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_DRIVER(wallc_state, screen_update_wallc)
MCFG_SCREEN_UPDATE_DRIVER(wallc_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", wallc)
@ -334,6 +410,11 @@ static MACHINE_CONFIG_START( wallc )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( unkitpkr, wallc )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(unkitpkr_map)
MACHINE_CONFIG_END
/***************************************************************************
Game driver(s)
@ -402,7 +483,7 @@ Inside the brick there are:
-negate A15 to feed 74245 /EN ALWAYS
The 74245 let pass the data unmodifyed if A15 is high (like wallc)
The 74245 let pass the data unmodified if A15 is high (like wallc)
If A15 is low a Pal16r4 kick in
this chip can modify D2,D3,D4,D5,D6,D7
@ -446,7 +527,7 @@ ROM_START( sidampkr )
ROM_LOAD( "11607-74.288", 0x0000, 0x0020, CRC(e14bf545) SHA1(5e8c5a9ea6e4842f27a47c1d7224ed294bbaa40b) )
ROM_END
DRIVER_INIT_MEMBER(wallc_state,sidam)
DRIVER_INIT_MEMBER(wallc_state, sidam)
{
uint8_t c;
uint32_t i;
@ -507,7 +588,7 @@ ROM_START( unkitpkr )
ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) BAD_DUMP ) // from wallc; not dumped yet
ROM_END
DRIVER_INIT_MEMBER(wallc_state,unkitpkr)
DRIVER_INIT_MEMBER(wallc_state, unkitpkr)
{
// annoying line swapping
uint8_t buffer[0x400];
@ -520,9 +601,9 @@ DRIVER_INIT_MEMBER(wallc_state,unkitpkr)
}
}
GAME( 1984, wallc, 0, wallc, wallc, wallc_state, wallc, ROT0, "Midcoin", "Wall Crash (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, wallca, wallc, wallc, wallc, wallc_state, wallca, ROT0, "Midcoin", "Wall Crash (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, brkblast, wallc, wallc, wallc, wallc_state, wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", MACHINE_SUPPORTS_SAVE ) // Spanish bootleg board, Fadesa stickers / text on various components
GAME( 1984, wallc, 0, wallc, wallc, wallc_state, wallc, ROT0, "Midcoin", "Wall Crash (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, wallca, wallc, wallc, wallc, wallc_state, wallca, ROT0, "Midcoin", "Wall Crash (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, brkblast, wallc, wallc, wallc, wallc_state, wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", MACHINE_SUPPORTS_SAVE ) // Spanish bootleg board, Fadesa stickers / text on various components
GAME( 1984, sidampkr, 0, wallc, wallc, wallc_state, sidam, ROT270, "Sidam", "unknown Sidam Poker", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 198?, unkitpkr, 0, wallc, wallc, wallc_state, unkitpkr, ROT0, "<unknown>", "unknown Italian poker game", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1984, sidampkr, 0, wallc, wallc, wallc_state, sidam, ROT270, "Sidam", "unknown Sidam Poker", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 198?, unkitpkr, 0, unkitpkr, unkitpkr, wallc_state, unkitpkr, ROT0, "<unknown>", "unknown Italian poker game", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )