mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2025-04-10 19:15:14 +00:00
- 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:
parent
fce3c7ad7c
commit
6b55cfb765
1407
Src/Games.cpp
1407
Src/Games.cpp
File diff suppressed because it is too large
Load diff
|
@ -52,6 +52,7 @@
|
||||||
#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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue