- 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

@ -18,13 +18,13 @@
** You should have received a copy of the GNU General Public License along ** You should have received a copy of the GNU General Public License along
** with Supermodel. If not, see <http://www.gnu.org/licenses/>. ** with Supermodel. If not, see <http://www.gnu.org/licenses/>.
**/ **/
/* /*
* Games.h * Games.h
* *
* Header file containing Model 3 game and ROM file information. * Header file containing Model 3 game and ROM file information.
*/ */
#ifndef INCLUDED_GAMES_H #ifndef INCLUDED_GAMES_H
#define INCLUDED_GAMES_H #define INCLUDED_GAMES_H
@ -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)
@ -75,7 +76,7 @@ struct GameInfo
unsigned sampleSize; // size of sample ROMS (8 or 16 MB; if 8 MB, will have to be mirrored) unsigned sampleSize; // size of sample ROMS (8 or 16 MB; if 8 MB, will have to be mirrored)
unsigned inputFlags; // game input types unsigned inputFlags; // game input types
int mpegBoard; // MPEG music board type: 0 = none, 1 = DSB1 (Z80), 2 = DSB2 (68K). int mpegBoard; // MPEG music board type: 0 = none, 1 = DSB1 (Z80), 2 = DSB2 (68K).
// ROM files // ROM files
struct ROMInfo ROM[48]; struct ROMInfo ROM[48];
}; };
@ -83,7 +84,7 @@ struct GameInfo
/****************************************************************************** /******************************************************************************
Model 3 Game List Model 3 Game List
All games supported by Supermodel. All ROMs are loaded according to their All games supported by Supermodel. All ROMs are loaded according to their
native endianness. That is, the PowerPC ROMs are loaded just as a real native endianness. That is, the PowerPC ROMs are loaded just as a real
PowerPC would see them. The emulator may reorder the bytes on its own for PowerPC would see them. The emulator may reorder the bytes on its own for
@ -93,4 +94,4 @@ struct GameInfo
extern const struct GameInfo Model3GameList[]; extern const struct GameInfo Model3GameList[];
#endif // INCLUDED_GAMES_H #endif // INCLUDED_GAMES_H

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();