New WORKING game

--------------------
Birdiy [Alberto Grego, Corrado Tomaselli, Angelo Salese, The Dumping Union]

Out of whatsnew:
What about killing all of the interrupt_enable_w() instances? imho that should be a per-driver latch, not a core function.
This commit is contained in:
Angelo Salese 2011-11-27 13:18:04 +00:00
parent 49a2673fba
commit ba8e2e60ce
5 changed files with 135 additions and 13 deletions

View File

@ -16,8 +16,8 @@ cheats:
- [0xb0-0xb3] timer
lamps:
?OK???!! = really OK! (91+)
???????? = pretty good (80+)
?OK???!! = really OK! (91+) (0x81)
???????? = pretty good (80+) (0x82)
???~??? = not bad (70+) (0x84)
??? = normal (55+) (0x88)
????? = pretty bad (40+) (0x90)

View File

@ -903,6 +903,30 @@ ADDRESS_MAP_END
// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not
// exist on any Pacman or Puckman board I have seen. DW
static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_BASE_MEMBER(pacman_state, m_videoram)
AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_BASE_MEMBER(pacman_state, m_colorram)
// AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
// AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(interrupt_enable_w)
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", pacman_sound_enable_w)
// AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
// AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
// AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
AM_RANGE(0x5080, 0x509f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", pacman_sound_w)
AM_RANGE(0x50a0, 0x50af) AM_MIRROR(0xaf00) AM_WRITEONLY AM_BASE_GENERIC(spriteram2)
// AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
// AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP
AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_WRITE(watchdog_reset_w)
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") /* IN0 */
AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") /* IN1 */
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") /* DSW1 */
AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") /* DSW2 */
ADDRESS_MAP_END
static ADDRESS_MAP_START( mspacman_map, AS_PROGRAM, 8 )
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_BASE_MEMBER(pacman_state, m_videoram)
@ -3135,6 +3159,18 @@ static MACHINE_CONFIG_START( pacman, pacman_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( birdiy, pacman )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(birdiy_map)
MCFG_CPU_IO_MAP(0)
MCFG_VIDEO_START(birdiy)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( piranha, pacman )
@ -4522,6 +4558,52 @@ ROM_START( eyeszac )
ROM_LOAD( "82s126.3m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */
ROM_END
/*
Birdyi by Mama Top
Pcb marked Mama.Top MDK-13V-0 FCC Made in japan
1x 18.432mhz OSC
1x Z80 LH0080 by Sharp running at 3.069mhz (18.432mhz/6)
6x dynamic rams HN472114P-3 near the CPU
1x dipswitch
6x HN462732 eproms
4x 82s129N proms
1x DIL 18 pin chip with markings scratched out in position 7M
1x HA1386 amplifier
No sound chip, probably made of discrete logic?
Note: the marking MDK-xxV-x is sometimes found on Nanao manufactured pcbs for Irem, so it very
likely that the board was manufactured by Nanao
(example: Major Title and Gussun Oyoyo are marked MDK-311V-0, M92 and M107 pcbs are marked MDK-321-V0)
Board supplied by Alberto Grego
Dumped by Corrado Tomaselli
*/
ROM_START( birdiy )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "a6.bin", 0x0000, 0x001000, CRC(3a58f8ad) SHA1(39e990ad4ee1fdec248665149bdb1072c8c01a9a) )
ROM_LOAD( "c6.bin", 0x1000, 0x001000, CRC(fec61ea2) SHA1(f7ff528d2bcede2434d0a33ee0193b50113ef720) )
ROM_LOAD( "a4.bin", 0x2000, 0x001000, CRC(3392783b) SHA1(e477f4284fd5b6c9f3619bd35cee6dbe8a2456b8) )
ROM_LOAD( "c4.bin", 0x3000, 0x001000, CRC(2391d83d) SHA1(6933f1e11a7a84c26a3a45b240e55157a2400e9c) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "c1.bin", 0x0000, 0x001000, CRC(8f6bf54f) SHA1(6e09a9c2b143908766837529b174f97dd5058b53) )
ROM_LOAD( "c3.bin", 0x1000, 0x001000, CRC(10b55440) SHA1(4f3cf5d8954725cf791146abf8918c43138602e1) )
ROM_REGION( 0x0120, "proms", 0 )
ROM_LOAD( "82s123.7f", 0x0000, 0x0020, NO_DUMP )
ROM_LOAD( "82s126.4a", 0x0020, 0x0100, NO_DUMP )
ROM_REGION( 0x0200, "namco", 0 ) /* sound PROMs */
ROM_LOAD( "82s126.1m", 0x0000, 0x0100, NO_DUMP )
ROM_LOAD( "82s126.3m", 0x0100, 0x0100, NO_DUMP ) /* timing - not used */
ROM_END
ROM_START( mrtnt )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "tnt.1", 0x0000, 0x1000, CRC(0e836586) SHA1(5037b7c618f05bc3d6a33694729ae575b9aa7dbb) )
@ -5778,6 +5860,7 @@ GAME( 1982, ctrpllrp, puckman, pacman, pacman, 0, ROT90, "hack", "C
GAME( 1982, eyes, 0, pacman, eyes, eyes, ROT90, "Digitrex Techstar (Rock-Ola license)", "Eyes (Digitrex Techstar)", GAME_SUPPORTS_SAVE )
GAME( 1982, eyes2, eyes, pacman, eyes, eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (Techstar)", GAME_SUPPORTS_SAVE )
GAME( 1982, eyeszac, eyes, pacman, eyes, 0, ROT90, "bootleg (Zaccaria)", "Eyes (Zaccaria)", GAME_SUPPORTS_SAVE )
GAME( 1983, birdiy, 0, birdiy, pacman, 0, ROT270, "Mama Top", "Birdiy", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND | GAME_WRONG_COLORS ) // missing proms
GAME( 1983, mrtnt, 0, pacman, mrtnt, eyes, ROT90, "Techstar (Telko license)", "Mr. TNT", GAME_SUPPORTS_SAVE )
GAME( 1983, gorkans, mrtnt, pacman, mrtnt, 0, ROT90, "Techstar", "Gorkans", GAME_SUPPORTS_SAVE )
GAME( 1983, eggor, 0, pacman, mrtnt, eyes, ROT90, "Telko", "Eggor", GAME_WRONG_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

View File

@ -28,6 +28,7 @@ public:
UINT8 m_flipscreen;
UINT8 m_bgpriority;
int m_xoffsethack;
UINT8 m_inv_spr;
};
@ -67,6 +68,8 @@ WRITE8_HANDLER( jrpacman_spritebank_w );
WRITE8_HANDLER( jrpacman_scroll_w );
WRITE8_HANDLER( jrpacman_bgpriority_w );
VIDEO_START( birdiy );
/*----------- defined in machine/pacplus.c -----------*/

View File

@ -80,6 +80,7 @@ ctrpllrp // hack
eyes // (c) 1982 Digitrex Techstar + "Rockola presents"
eyes2 // (c) 1982 Techstar + "Rockola presents"
eyeszac // (c) 1982 Zaccaria / bootleg
birdiy // (c) 1983 Mama Top
mrtnt // (c) 1983 Telko
gorkans // (c) 1984 Techstar
eggor // (c) 1983 Telko

View File

@ -177,6 +177,7 @@ VIDEO_START( pacman )
state->m_colortablebank = 0;
state->m_flipscreen = 0;
state->m_bgpriority = 0;
state->m_inv_spr = 0;
/* In the Pac Man based games (NOT Pengo) the first two sprites must be offset */
/* one pixel to the left to get a more correct placement */
@ -188,6 +189,15 @@ VIDEO_START( pacman )
tilemap_set_scrolldy( state->m_bg_tilemap, 0, 264 - 224 );
}
VIDEO_START( birdiy )
{
pacman_state *state = machine.driver_data<pacman_state>();
VIDEO_START_CALL( pacman );
state->m_xoffsethack = 0;
state->m_inv_spr = 1; // sprites are mirrored in X-axis compared to normal behaviour
}
WRITE8_HANDLER( pacman_videoram_w )
{
pacman_state *state = space->machine().driver_data<pacman_state>();
@ -233,15 +243,28 @@ SCREEN_UPDATE( pacman )
{
int color;
int sx,sy;
UINT8 fx,fy;
if(state->m_inv_spr)
{
sx = spriteram_2[offs + 1];
sy = 240 - (spriteram_2[offs]);
}
else
{
sx = 272 - spriteram_2[offs + 1];
sy = spriteram_2[offs] - 31;
}
fx = (spriteram[offs] & 1) ^ state->m_inv_spr;
fy = (spriteram[offs] & 2) ^ ((state->m_inv_spr) << 1);
sx = 272 - spriteram_2[offs + 1];
sy = spriteram_2[offs] - 31;
color = ( spriteram[offs + 1] & 0x1f ) | (state->m_colortablebank << 5) | (state->m_palettebank << 6 );
drawgfx_transmask(bitmap,&spriteclip,screen->machine().gfx[1],
( spriteram[offs] >> 2 ) | (state->m_spritebank << 6),
color,
spriteram[offs] & 1,spriteram[offs] & 2,
fx,fy,
sx,sy,
colortable_get_transpen_mask(screen->machine().colortable, screen->machine().gfx[1], color & 0x3f, 0));
@ -249,7 +272,7 @@ SCREEN_UPDATE( pacman )
drawgfx_transmask(bitmap,&spriteclip,screen->machine().gfx[1],
( spriteram[offs] >> 2 ) | (state->m_spritebank << 6),
color,
spriteram[offs] & 1,spriteram[offs] & 2,
fx,fy,
sx - 256,sy,
colortable_get_transpen_mask(screen->machine().colortable, screen->machine().gfx[1], color & 0x3f, 0));
}
@ -259,15 +282,27 @@ SCREEN_UPDATE( pacman )
{
int color;
int sx,sy;
UINT8 fx,fy;
sx = 272 - spriteram_2[offs + 1];
sy = spriteram_2[offs] - 31;
if(state->m_inv_spr)
{
sx = spriteram_2[offs + 1];
sy = 240 - (spriteram_2[offs]);
}
else
{
sx = 272 - spriteram_2[offs + 1];
sy = spriteram_2[offs] - 31;
}
color = ( spriteram[offs + 1] & 0x1f ) | (state->m_colortablebank << 5) | (state->m_palettebank << 6 );
fx = (spriteram[offs] & 1) ^ state->m_inv_spr;
fy = (spriteram[offs] & 2) ^ ((state->m_inv_spr) << 1);
drawgfx_transmask(bitmap,&spriteclip,screen->machine().gfx[1],
( spriteram[offs] >> 2 ) | (state->m_spritebank << 6),
color,
spriteram[offs] & 1,spriteram[offs] & 2,
fx,fy,
sx,sy + state->m_xoffsethack,
colortable_get_transpen_mask(screen->machine().colortable, screen->machine().gfx[1], color & 0x3f, 0));
@ -275,7 +310,7 @@ SCREEN_UPDATE( pacman )
drawgfx_transmask(bitmap,&spriteclip,screen->machine().gfx[1],
( spriteram[offs] >> 2 ) | (state->m_spritebank << 6),
color,
spriteram[offs] & 2,spriteram[offs] & 1,
fy,fx, //FIXME: flipping bits are really supposed to be inverted here?
sx - 256,sy + state->m_xoffsethack,
colortable_get_transpen_mask(screen->machine().colortable, screen->machine().gfx[1], color & 0x3f, 0));
}
@ -304,7 +339,7 @@ VIDEO_START( pengo )
state->m_colortablebank = 0;
state->m_flipscreen = 0;
state->m_bgpriority = 0;
state->m_inv_spr = 0;
state->m_xoffsethack = 0;
state->m_bg_tilemap = tilemap_create( machine, pacman_get_tile_info, pacman_scan_rows, 8, 8, 36, 28 );
@ -375,7 +410,7 @@ VIDEO_START( s2650games )
state->m_colortablebank = 0;
state->m_flipscreen = 0;
state->m_bgpriority = 0;
state->m_inv_spr = 0;
state->m_xoffsethack = 1;
state->m_bg_tilemap = tilemap_create( machine, s2650_get_tile_info,tilemap_scan_rows,8,8,32,32 );
@ -556,7 +591,7 @@ VIDEO_START( jrpacman )
state->m_colortablebank = 0;
state->m_flipscreen = 0;
state->m_bgpriority = 0;
state->m_inv_spr = 0;
state->m_xoffsethack = 1;
state->m_bg_tilemap = tilemap_create( machine, jrpacman_get_tile_info,jrpacman_scan_rows,8,8,36,54 );