diff --git a/src/mame/drivers/esd16.c b/src/mame/drivers/esd16.c index 46f295127a9..2f0742e2bc6 100644 --- a/src/mame/drivers/esd16.c +++ b/src/mame/drivers/esd16.c @@ -65,7 +65,7 @@ WRITE16_HANDLER( esd16_tilemap0_color_w ); VIDEO_START( esd16 ); VIDEO_UPDATE( esd16 ); VIDEO_UPDATE( hedpanic ); - +VIDEO_UPDATE( hedpanio ); static UINT16 *headpanic_platform_x; static UINT16 *headpanic_platform_y; @@ -645,6 +645,16 @@ static MACHINE_DRIVER_START( swatpolc ) MDRV_GFXDECODE(tangtang) MACHINE_DRIVER_END +static MACHINE_DRIVER_START( hedpanio ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(hedpanic) + + MDRV_VIDEO_UPDATE(hedpanio) +MACHINE_DRIVER_END + + + /*************************************************************************** @@ -966,26 +976,28 @@ ROM_START( hedpanif ) /* Story line in Japanese, game instructions in English */ ROM_END -ROM_START( hedpanio ) /* Story line & game instructions in English, copyright year is 1999 */ +ROM_START( hedpanio ) /* Story line & game instructions in English, copyright year is 1999 - uses older style sprites */ ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_BYTE( "esd2.rom", 0x000000, 0x040000, CRC(70b08424) SHA1(2ba4fb3b749e31db4239a9173b8509366400152f) ) ROM_LOAD16_BYTE( "esd1.rom", 0x000001, 0x040000, CRC(4e0682c5) SHA1(f4117f31b6426d7bf126a6c62c489b9347885b42) ) - ROM_REGION( 0x24000, "audiocpu", 0 ) /* Z80 Code */ + ROM_REGION( 0x44000, "audiocpu", 0 ) /* Z80 Code */ ROM_LOAD( "esd3.rom", 0x00000, 0x0c000, BAD_DUMP CRC(b72b761b) SHA1(9735e05ddc1db38bf81eac89a5312200fc008248) ) /* Should be twice the size, IE: 27C020 */ ROM_CONTINUE( 0x10000, 0x14000) - + //ROM_LOAD( "esd3.su06", 0x00000, 0x0c000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) /* AT27C020 mask rom */ + //ROM_CONTINUE( 0x10000, 0x34000) + ROM_REGION( 0x600000, "gfx1", ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ - ROM_LOAD( "ver615_esd6.ju01", 0x200000, 0x200000, BAD_DUMP CRC(5858372c) SHA1(dc96112587df681d53cf7449bd39477919978325) ) - ROM_LOAD( "ver615_esd7.ju02", 0x000000, 0x200000, BAD_DUMP CRC(055d525f) SHA1(85ad474691f96e47311a1904015d1c92d3b2d607) ) + ROM_LOAD( "sm1.bin", 0x000000, 0x200000, CRC(8083813f) SHA1(9492e7e844e45d59f0506f69d40c338b27bd3ce3) ) + ROM_LOAD( "sm2.bin", 0x200000, 0x200000, CRC(7a9610e4) SHA1(21ae3ec3fbddfc66416c109b091bd885d5ba0558) ) /* expand this to take up 0x200000 bytes too so we can decode it */ ROM_LOAD16_BYTE( "esd5.rom", 0x400000, 0x080000, CRC(82c5727f) SHA1(017f1d0c94475c51d17f12e24895f47a273a2dbb) ) ROM_FILL( 0x500000, 0x100000, 0 ) ROM_REGION( 0x400000, "gfx2", ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ - ROM_LOAD16_BYTE( "ver615_esd8.fu35", 0x000000, 0x200000, BAD_DUMP CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) ) - ROM_LOAD16_BYTE( "ver615_esd9.fu34", 0x000001, 0x200000, BAD_DUMP CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) - + ROM_LOAD16_BYTE( "sm3.bin", 0x000000, 0x200000, CRC(94dd4cfc) SHA1(a3f9c49611f0bc9d26166dafb44e2c5ebbb31127) ) + ROM_LOAD16_BYTE( "sm4.bin", 0x000001, 0x200000, CRC(6da0fb9e) SHA1(c4e7487953f45c5f6ce2ebe558b4c325f6ec54eb) ) + ROM_REGION( 0x20000, "oki", 0 ) /* Samples */ ROM_LOAD( "esd4.rom", 0x000000, 0x020000, CRC(d7ca6806) SHA1(8ad668bfb5b7561cc0f3e36dfc3c936b136a4274) ) ROM_END @@ -1160,7 +1172,7 @@ GAME( 2000, mchampdx, 0, mchampdx, hedpanic, 0, ROT0, "ESD", "Mul GAME( 1999, mchampda, mchampdx, mchampdx, hedpanic, 0, ROT0, "ESD", "Multi Champ Deluxe (ver. 1126, 26/11/1999)", 0 ) // 26/11/1999 ? GAME( 2000, hedpanic, 0, hedpanic, hedpanic, 0, ROT0, "ESD", "Head Panic (ver. 0117, 17/01/2000)", 0 ) // 17/01/2000 ? GAME( 2000, hedpanif, hedpanic, hedpanic, hedpanic, 0, ROT0, "ESD / Fuuki", "Head Panic (ver. 0315, 15/03/2000)", 0 ) // 15/03/2000 ? -GAME( 1999, hedpanio, hedpanic, hedpanic, hedpanic, 0, ROT0, "ESD", "Head Panic (ver. 0615, 15/06/1999)", GAME_NOT_WORKING ) // 15/06/1999 ? +GAME( 1999, hedpanio, hedpanic, hedpanio, hedpanic, 0, ROT0, "ESD", "Head Panic (ver. 0615, 15/06/1999)", GAME_NO_SOUND ) // 15/06/1999 ? /* ESD - This PCB looks identical to the ESD 08-26-1999 PCB */ GAME( 2000, tangtang, 0, tangtang, hedpanic, 0, ROT0, "ESD", "Tang Tang (ver. 0526, 26/05/2000)", 0 ) // 26/05/2000 ? diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 6fb779598a9..f6b2de0cb42 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -8870,7 +8870,36 @@ Other Sun games DRIVER( fb4d2 ) DRIVER( fb4v ) DRIVER( fb4v2 ) - DRIVER( fb4v3 ) + DRIVER( fb4v3 ) + DRIVER( fb5 ) + DRIVER( fb5c ) + DRIVER( fb5d ) + DRIVER( fb5v ) + DRIVER( fb6 ) + DRIVER( fb6v3 ) + DRIVER( fb6d2 ) + DRIVER( fb6s ) + DRIVER( fb6v ) + DRIVER( fb6d ) + DRIVER( fb6s2 ) + DRIVER( fb6v2 ) + DRIVER( fb6se ) + DRIVER( fb6sev ) + DRIVER( fb6sed ) + DRIVER( fb6sev2 ) + DRIVER( fb6sed2 ) + DRIVER( fb6sev3 ) + DRIVER( version4 ) + DRIVER( bugfever ) + DRIVER( bugfeverd ) + DRIVER( bugfeverv ) + DRIVER( bugfeverv2 ) + DRIVER( dvisland ) + DRIVER( funriver ) + DRIVER( funriverv ) + DRIVER( amclink ) + + DRIVER( act2000 ) DRIVER( act2000a ) DRIVER( act2000a2 ) diff --git a/src/mame/video/esd16.c b/src/mame/video/esd16.c index ae37edd8e4e..5526f25d849 100644 --- a/src/mame/video/esd16.c +++ b/src/mame/video/esd16.c @@ -195,6 +195,8 @@ VIDEO_START( esd16 ) - To Do: Flip X&Y ? They seem unused. + these are clearly the same as the tumble pop (bootleg?) sprites + ***************************************************************************/ static void esd16_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) @@ -215,13 +217,16 @@ static void esd16_draw_sprites(running_machine *machine, bitmap_t *bitmap, const int dimy = 1 << ((sy >> 9) & 3); - int flipx = attr & 0x0000; + int flipx = sy & 0x2000; int flipy = attr & 0x0000; - + int flash = sy & 0x1000; + int color = (sx >> 9) & 0xf; int pri_mask; + if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1)) continue; + if(sx & 0x8000) pri_mask = 0xfffe; // under "tilemap 1" else @@ -271,13 +276,17 @@ static void hedpanic_draw_sprites(running_machine *machine, bitmap_t *bitmap, co int dimy = 1 << ((sy >> 9) & 3); - int flipx = spriteram16[ offs + 0 ] & 0x2000; + int flipx = sy & 0x2000; int flipy = sy & 0x0000; + int flash = sy & 0x1000; int color = (sx >> 9) & 0xf; int pri_mask; + if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1)) continue; + + if(sx & 0x8000) pri_mask = 0xfffe; // under "tilemap 1" else @@ -412,3 +421,65 @@ if ( input_code_pressed(KEYCODE_Z) ) // popmessage("%04x %04x %04x %04x %04x",head_unknown1[0],head_layersize[0],head_unknown3[0],head_unknown4[0],head_unknown5[0]); return 0; } + +// uses older style sprites +VIDEO_UPDATE( hedpanio ) +{ + int layers_ctrl = -1; + + bitmap_fill(priority_bitmap,cliprect,0); + + +#ifdef MAME_DEBUG +if ( input_code_pressed(KEYCODE_Z) ) +{ int msk = 0; + if (input_code_pressed(KEYCODE_Q)) msk |= 1; + if (input_code_pressed(KEYCODE_W)) msk |= 2; + if (input_code_pressed(KEYCODE_A)) msk |= 4; + if (msk != 0) layers_ctrl &= msk; } +#endif + + if (layers_ctrl & 1) + { + if (head_layersize[0]&0x0001) + { + tilemap_set_scrollx(esdtilemap_0_16x16, 0, esd16_scroll_0[0]); + tilemap_set_scrolly(esdtilemap_0_16x16, 0, esd16_scroll_0[1]); + tilemap_draw(bitmap,cliprect,esdtilemap_0_16x16,0,0); + } + else + { + tilemap_set_scrollx(esdtilemap_0, 0, esd16_scroll_0[0]); + tilemap_set_scrolly(esdtilemap_0, 0, esd16_scroll_0[1]); + tilemap_draw(bitmap,cliprect,esdtilemap_0,0,0); + } + } + else + { + bitmap_fill(bitmap,cliprect,0); + } + + + if (layers_ctrl & 2) + { + if (head_layersize[0]&0x0002) + { + tilemap_set_scrollx(esdtilemap_1_16x16, 0, esd16_scroll_1[0]); + tilemap_set_scrolly(esdtilemap_1_16x16, 0, esd16_scroll_1[1]); + tilemap_draw(bitmap,cliprect,esdtilemap_1_16x16,0,1); + } + else + { + tilemap_set_scrollx(esdtilemap_1, 0, esd16_scroll_1[0]); + tilemap_set_scrolly(esdtilemap_1, 0, esd16_scroll_1[1]); + tilemap_draw(bitmap,cliprect,esdtilemap_1,0,1); + } + + } + + if (layers_ctrl & 4) esd16_draw_sprites(screen->machine,bitmap,cliprect); + + +// popmessage("%04x %04x %04x %04x %04x",head_unknown1[0],head_layersize[0],head_unknown3[0],head_unknown4[0],head_unknown5[0]); + return 0; +}