diff options
author | Brian Troha <briantro@users.noreply.github.com> | 2008-01-01 22:15:01 +0000 |
---|---|---|
committer | Brian Troha <briantro@users.noreply.github.com> | 2008-01-01 22:15:01 +0000 |
commit | c2d269ced61bdb8465bdb1b8139c8b5872f88aed (patch) | |
tree | 69a0dcd961dfb0198b31d3d4824d4f2e8f2abf87 /src | |
parent | 0738d02527e8d38a6f5b09d171af47e22d17f37e (diff) |
Checking in Bryan McPhail's MAMETesters Challenge fixes
Fixes:
funkyjet055yel
liberate074u1gre
tokiu056gre
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/funkyjet.c | 6 | ||||
-rw-r--r-- | src/mame/drivers/toki.c | 16 | ||||
-rw-r--r-- | src/mame/machine/decoprot.c | 19 | ||||
-rw-r--r-- | src/mame/video/liberate.c | 69 |
4 files changed, 76 insertions, 34 deletions
diff --git a/src/mame/drivers/funkyjet.c b/src/mame/drivers/funkyjet.c index 47f4de79180..414faae2a24 100644 --- a/src/mame/drivers/funkyjet.c +++ b/src/mame/drivers/funkyjet.c @@ -467,6 +467,6 @@ static DRIVER_INIT( funkyjet ) /******************************************************************************/ -GAME( 1992, funkyjet, 0, funkyjet, funkyjet, funkyjet, ROT0, "[Data East] (Mitchell license)", "Funky Jet (World)", 0 ) -GAME( 1992, funkyjej, funkyjet, funkyjet, funkyjej, funkyjet, ROT0, "Data East Corporation", "Funky Jet (Japan)", 0 ) -GAME( 1995, sotsugyo, 0, funkyjet, sotsugyo, funkyjet, ROT0, "Mitchell (Atlus license)", "Sotsugyo Shousho", 0 ) +GAME( 1992, funkyjet, 0, funkyjet, funkyjet, funkyjet, ROT0, "[Data East] (Mitchell license)", "Funky Jet (World)", GAME_SUPPORTS_SAVE ) +GAME( 1992, funkyjej, funkyjet, funkyjet, funkyjej, funkyjet, ROT0, "Data East Corporation", "Funky Jet (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1995, sotsugyo, 0, funkyjet, sotsugyo, funkyjet, ROT0, "Mitchell (Atlus license)", "Sotsugyo Shousho", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/toki.c b/src/mame/drivers/toki.c index 2ba24b5ca88..380a40a6069 100644 --- a/src/mame/drivers/toki.c +++ b/src/mame/drivers/toki.c @@ -8,6 +8,22 @@ driver by Jarek Parchanski Coin inputs are handled by the sound CPU, so they don't work with sound disabled. Use the service switch instead. +-- +Mametesters bug tokiu056gre - "tokiu: "0000000" is always displayed as the top hiscore during gameplay, +regardless of what it actually is. This does not happen in the other Toki sets." + +Notes by bmcphail@vcmame.net, 1/1/2008 + +Toki stores high score at $60008 in main ram (init code at $ADA, compared with player score at $1A1BA) +Tokiu stores high score at $60010 instead (init code at $B16, equivalent compare code at $1a204), $60008 +is used for different purposes in many parts of the code. + +Both games feature a common routine ($1cba2 in toki, $1cbfa in tokiu) that prints the high score to screen, +the problem is that the version in Tokiu has not been adjusted for the different high score location and +it reads from the $68008 location instead of $680010. From analysing the code I'm certain this is a bug +in the original USA version code and not an emulation bug. + + TODO ---- diff --git a/src/mame/machine/decoprot.c b/src/mame/machine/decoprot.c index 4acf0a102c6..4280aae7701 100644 --- a/src/mame/machine/decoprot.c +++ b/src/mame/machine/decoprot.c @@ -701,15 +701,25 @@ READ16_HANDLER( deco16_146_funkyjet_prot_r ) return deco16_prot_ram[0x104>>1]; case 0x3a8 >> 1: /* See 93e4/9376 */ return deco16_prot_ram[0x500>>1]; - case 0x3e8 >> 1: + + // The top byte of 0x50c is used as a bitmask of completed levels, + // checked at end of each (0x0100 = level 1 completed, + // 0x3000 = levels 5 & 6 completed, 0x3f00 = levels 1-6 completed, etc) + case 0x56c >> 1: return deco16_prot_ram[0x50c>>1]; + // The game compares $ffc0 to check for all 6 basic levels + // being completed. (which is 0x3f00 inverted and shifted) + // If wrong value is returned here the level select screen is + // incorrectly shown and leads to a crash as that screen + // cannot cope with all levels being already completed. + case 0x3e8 >> 1: + return (deco16_prot_ram[0x50c>>1] >> 8) ^ 0xffff; + case 0x4e4 >> 1: return deco16_prot_ram[0x702>>1]; case 0x562 >> 1: return deco16_prot_ram[0x18e>>1]; - case 0x56c >> 1: - return deco16_prot_ram[0x50c>>1]; case 0x688 >> 1: return deco16_prot_ram[0x300>>1]; @@ -737,7 +747,8 @@ READ16_HANDLER( deco16_146_funkyjet_prot_r ) return (readinputport(3) + (readinputport(4) << 8)); } - if (activecpu_get_pc()!=0xc0ea) logerror("CPU #0 PC %06x: warning - read unmapped control address %06x\n",activecpu_get_pc(),offset<<1); + if (activecpu_get_pc()!=0xc0ea) + logerror("CPU #0 PC %06x: warning - read unmapped control address %06x (ctrl %04x)\n",activecpu_get_pc(),offset<<1, readinputport(0)); return 0; } diff --git a/src/mame/video/liberate.c b/src/mame/video/liberate.c index 1815baa2bd1..22f88a7c364 100644 --- a/src/mame/video/liberate.c +++ b/src/mame/video/liberate.c @@ -190,45 +190,60 @@ static void liberate_draw_sprites(running_machine *machine, mame_bitmap *bitmap, { int multi,fx,fy,sx,sy,sy2,code,color; - code = spriteram[offs+1] + ( ( spriteram[offs+0] & 0x60 ) << 3 ); - sx = (240 - spriteram[offs+3]); - //if (sx < -7) sx += 256; - - sy = 240-spriteram[offs+2]; - color = 0;//(spriteram[offs+1] & 0x03);// + ((spriteram[offs+1] & 0x08) >> 1); - -// if (pri==0 && color!=0) continue; -// if (pri==1 && color==0) continue; + /* + Byte 0: 0x01 - ? + 0x02 - Y flip + 0x04 - X flip + 0x08 - Colour? + 0x10 - Multi sprite set + 0x60 - Tile (high bits) + 0x80 - ? + Byte 1: 0xff - Tile (low bits) + Byte 2: 0xff - Y position + Byte 3: 0xff - X position + */ + + code = spriteram[offs+1] + ((spriteram[offs+0] & 0x60) << 3); + sx = 240 - spriteram[offs+3]; + sy = 240 - spriteram[offs+2]; + color = ((spriteram[offs+1] & 0x08) >> 3); // ? fx = spriteram[offs+0] & 0x04; - fy = spriteram[offs+0] & 0x08; // or 0x02 ? + fy = spriteram[offs+0] & 0x02; multi = spriteram[offs+0] & 0x10; - - if (multi) sy-=16; + if (multi && fy==0) sy-=16; if (flip_screen) { sy=240-sy; sx=240-sx; + if (fy) + sy2=sy+16; + else + sy2=sy-16; if (fx) fx=0; else fx=1; if (fy) fy=0; else fy=1; - sy2=sy-16; } - else sy2=sy+16; + else { + if (fy) + sy2=sy-16; + else + sy2=sy+16; + } - drawgfx(bitmap,machine->gfx[1], - code, - color, - fx,fy, - sx,sy, - cliprect,TRANSPARENCY_PEN,0); - if (multi) - drawgfx(bitmap,machine->gfx[1], - code+1, - color, - fx,fy, - sx,sy2, - cliprect,TRANSPARENCY_PEN,0); + drawgfx(bitmap,machine->gfx[1], + code, + color, + fx,fy, + sx,sy, + cliprect,TRANSPARENCY_PEN,0); + if (multi) + drawgfx(bitmap,machine->gfx[1], + code+1, + color, + fx,fy, + sx,sy2, + cliprect,TRANSPARENCY_PEN,0); } } |