- krom added remaining ROM sets. Spikeout Final Edition disabled because it is a bad dump.

- Added patches for scuda and scudj.
- Added a TO-DO reminder in INIFile.cpp.
This commit is contained in:
Bart Trzynadlowski 2011-08-03 03:18:51 +00:00
parent fce3c7ad7c
commit 6b55cfb765
4 changed files with 1435 additions and 64 deletions

File diff suppressed because it is too large Load diff

View file

@ -37,20 +37,21 @@
******************************************************************************/ ******************************************************************************/
// Input flags // Input flags
#define GAME_INPUT_COMMON 0x0001 // game has common controls #define GAME_INPUT_COMMON 0x0001 // game has common controls
#define GAME_INPUT_VEHICLE 0x0002 // game has vehicle controls #define GAME_INPUT_VEHICLE 0x0002 // game has vehicle controls
#define GAME_INPUT_JOYSTICK1 0x0004 // game has joystick 1 #define GAME_INPUT_JOYSTICK1 0x0004 // game has joystick 1
#define GAME_INPUT_JOYSTICK2 0x0008 // game has joystick 2 #define GAME_INPUT_JOYSTICK2 0x0008 // game has joystick 2
#define GAME_INPUT_FIGHTING 0x0010 // game has fighting game controls #define GAME_INPUT_FIGHTING 0x0010 // game has fighting game controls
#define GAME_INPUT_VR 0x0020 // game has VR view buttons #define GAME_INPUT_VR 0x0020 // game has VR view buttons
#define GAME_INPUT_RALLY 0x0040 // game has rally car controls #define GAME_INPUT_RALLY 0x0040 // game has rally car controls
#define GAME_INPUT_GUN1 0x0080 // game has gun 1 #define GAME_INPUT_GUN1 0x0080 // game has gun 1
#define GAME_INPUT_GUN2 0x0100 // game has gun 2 #define GAME_INPUT_GUN2 0x0100 // game has gun 2
#define GAME_INPUT_SHIFT4 0x0200 // game has 4-speed shifter #define GAME_INPUT_SHIFT4 0x0200 // game has 4-speed shifter
#define GAME_INPUT_ANALOG_JOYSTICK 0x0400 // game has analog joystick #define GAME_INPUT_ANALOG_JOYSTICK 0x0400 // game has analog joystick
#define GAME_INPUT_TWIN_JOYSTICKS 0x0800 // game has twin joysticks #define GAME_INPUT_TWIN_JOYSTICKS 0x0800 // game has twin joysticks
#define GAME_INPUT_SOCCER 0x1000 // game has soccer controls #define GAME_INPUT_SOCCER 0x1000 // game has soccer controls
#define GAME_INPUT_ALL 0x1FFF #define GAME_INPUT_ALL 0x1FFF
/****************************************************************************** /******************************************************************************
Data Structures Data Structures
@ -64,7 +65,7 @@
struct GameInfo struct GameInfo
{ {
// Game information // Game information
const char id[9]; // 8-character game identifier (also serves as zip archive file name) const char id[10]; // 9-character game identifier (also serves as zip archive file name)
const char *title; // complete game title const char *title; // complete game title
const char *mfgName; // name of manufacturer const char *mfgName; // name of manufacturer
unsigned year; // year released (in decimal) unsigned year; // year released (in decimal)

View file

@ -26,6 +26,12 @@
* *
* To-Do List * To-Do List
* ---------- * ----------
* - Fix file writing. Null sections are not printed but it is currently
* possible to create a new INI, create a non-null section as the first one,
* and then create a null section. When the file is written, the null section
* header will not be output and all of its settings will be interpreted as
* a continuation of the previous section, which is incorrect. Can easily be
* fixed by always initializing with a null section.
* - Add boolean on/off, true/false keywords. * - Add boolean on/off, true/false keywords.
* - Allow a "default" section to be specified (other than ""). * - Allow a "default" section to be specified (other than "").
* - Note that linePtr does not necessarily correspond to actual lines in the * - Note that linePtr does not necessarily correspond to actual lines in the

View file

@ -2101,6 +2101,7 @@ void CModel3::RunMainBoardFrame(void)
{ {
// Run the PowerPC for a frame // Run the PowerPC for a frame
ppc_execute(ppcFrequency/60-10000); ppc_execute(ppcFrequency/60-10000);
//printf("PC=%08X LR=%08X\n", ppc_get_pc(), ppc_get_lr());
// VBlank // VBlank
TileGen.BeginFrame(); TileGen.BeginFrame();
@ -2108,6 +2109,7 @@ void CModel3::RunMainBoardFrame(void)
GPU.RenderFrame(); GPU.RenderFrame();
IRQ.Assert(0x02); IRQ.Assert(0x02);
ppc_execute(10000); // TO-DO: Vblank probably needs to be longer. Maybe that's why some games run too fast/slow ppc_execute(10000); // TO-DO: Vblank probably needs to be longer. Maybe that's why some games run too fast/slow
//printf("PC=%08X LR=%08X\n", ppc_get_pc(), ppc_get_lr());
/* /*
* Sound: * Sound:
@ -2142,6 +2144,7 @@ void CModel3::RunMainBoardFrame(void)
} }
} }
//printf("\t-- END --\n"); //printf("\t-- END --\n");
//printf("PC=%08X LR=%08X\n", ppc_get_pc(), ppc_get_lr());
// End frame // End frame
GPU.EndFrame(); GPU.EndFrame();
@ -2215,6 +2218,7 @@ void CModel3::Patch(void)
} }
else if (!strcmp(Game->id, "scud")) else if (!strcmp(Game->id, "scud"))
{ {
// Base offset of program in CROM: 0x710000
*(UINT32 *) &crom[0x712734] = 0x60000000; // skips some ridiculously slow delay loop during boot-up *(UINT32 *) &crom[0x712734] = 0x60000000; // skips some ridiculously slow delay loop during boot-up
*(UINT32 *) &crom[0x71AEBC] = 0x60000000; // waiting for some flag in RAM that never gets modified (IRQ problem? try emulating VBL on Real3D) *(UINT32 *) &crom[0x71AEBC] = 0x60000000; // waiting for some flag in RAM that never gets modified (IRQ problem? try emulating VBL on Real3D)
*(UINT32 *) &crom[0x712268] = 0x60000000; // this corrects the boot-up menu (but why?) *(UINT32 *) &crom[0x712268] = 0x60000000; // this corrects the boot-up menu (but why?)
@ -2224,6 +2228,14 @@ void CModel3::Patch(void)
//*(UINT32 *)&crom[0x799DE8] = 0x00050208; // debug menu //*(UINT32 *)&crom[0x799DE8] = 0x00050208; // debug menu
} }
else if (!strcmp(Game->id, "scuda"))
{
*(UINT32 *) &crom[0x712734] = 0x60000000; // skips some ridiculously slow delay loop during boot-up
}
else if (!strcmp(Game->id, "scudj"))
{
*(UINT32 *) &crom[0x7126C8] = 0x60000000; // skips some ridiculously slow delay loop during boot-up
}
else if (!strcmp(Game->id, "scudp")) else if (!strcmp(Game->id, "scudp"))
{ {
/* /*
@ -2343,6 +2355,13 @@ void CModel3::Patch(void)
*(UINT32 *) &crom[0x029A0] = 0x60000000; *(UINT32 *) &crom[0x029A0] = 0x60000000;
*(UINT32 *) &crom[0x02A0C] = 0x60000000; *(UINT32 *) &crom[0x02A0C] = 0x60000000;
} }
else if (!strcmp(Game->id, "swtrilgya"))
{
*(UINT32 *) &crom[0xF6DD0] = 0x60000000; // from MAME
//*(UINT32 *) &crom[0xF1128] = 0x60000000;
//*(UINT32 *) &crom[0xF10E0] = 0x60000000;
}
else if (!strcmp(Game->id, "eca")) else if (!strcmp(Game->id, "eca"))
{ {
*(UINT32 *) &crom[0x535580] = 0x60000000; *(UINT32 *) &crom[0x535580] = 0x60000000;
@ -2673,14 +2692,14 @@ CModel3::CModel3(void)
CModel3::~CModel3(void) CModel3::~CModel3(void)
{ {
// Dump some files first // Dump some files first
#if 0 //#if 0
Dump("ram", ram, 0x800000, TRUE, FALSE); Dump("ram", ram, 0x800000, TRUE, FALSE);
//Dump("vrom", vrom, 0x4000000, TRUE, FALSE); //Dump("vrom", vrom, 0x4000000, TRUE, FALSE);
Dump("crom", crom, 0x800000, TRUE, FALSE); Dump("crom", crom, 0x800000, TRUE, FALSE);
//Dump("bankedCrom", &crom[0x800000], 0x7000000, TRUE, FALSE); //Dump("bankedCrom", &crom[0x800000], 0x7000000, TRUE, FALSE);
//Dump("soundROM", soundROM, 0x80000, FALSE, TRUE); //Dump("soundROM", soundROM, 0x80000, FALSE, TRUE);
//Dump("sampleROM", sampleROM, 0x800000, FALSE, TRUE); //Dump("sampleROM", sampleROM, 0x800000, FALSE, TRUE);
#endif //#endif
// Stop all threads // Stop all threads
StopThreads(); StopThreads();