From ba8e2e60ce7859798e76a8f951ac32a11404e5bd Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Sun, 27 Nov 2011 13:18:04 +0000 Subject: [PATCH] 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. --- src/mame/drivers/30test.c | 4 +- src/mame/drivers/pacman.c | 83 ++++++++++++++++++++++++++++++++++++++ src/mame/includes/pacman.h | 3 ++ src/mame/mame.lst | 1 + src/mame/video/pacman.c | 57 +++++++++++++++++++++----- 5 files changed, 135 insertions(+), 13 deletions(-) diff --git a/src/mame/drivers/30test.c b/src/mame/drivers/30test.c index d54d029cff6..44654350ee6 100644 --- a/src/mame/drivers/30test.c +++ b/src/mame/drivers/30test.c @@ -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) diff --git a/src/mame/drivers/pacman.c b/src/mame/drivers/pacman.c index f1a27970074..a75d3073cab 100644 --- a/src/mame/drivers/pacman.c +++ b/src/mame/drivers/pacman.c @@ -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 ) diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h index 354c985d60b..8a42268cd23 100644 --- a/src/mame/includes/pacman.h +++ b/src/mame/includes/pacman.h @@ -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 -----------*/ diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 67c3a49bad9..f5ba18f7624 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -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 diff --git a/src/mame/video/pacman.c b/src/mame/video/pacman.c index 19a6e3bdae4..1d01d4372fd 100644 --- a/src/mame/video/pacman.c +++ b/src/mame/video/pacman.c @@ -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(); + + 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(); @@ -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 );