summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
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
commitc2d269ced61bdb8465bdb1b8139c8b5872f88aed (patch)
tree69a0dcd961dfb0198b31d3d4824d4f2e8f2abf87 /src
parent0738d02527e8d38a6f5b09d171af47e22d17f37e (diff)
Checking in Bryan McPhail's MAMETesters Challenge fixes
Fixes: funkyjet055yel liberate074u1gre tokiu056gre
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/funkyjet.c6
-rw-r--r--src/mame/drivers/toki.c16
-rw-r--r--src/mame/machine/decoprot.c19
-rw-r--r--src/mame/video/liberate.c69
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);
}
}