- 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
** with Supermodel. If not, see <http://www.gnu.org/licenses/>.
**/
/*
* Games.h
*
* Header file containing Model 3 game and ROM file information.
*/
#ifndef INCLUDED_GAMES_H
#define INCLUDED_GAMES_H
@ -37,20 +37,21 @@
******************************************************************************/
// Input flags
#define GAME_INPUT_COMMON 0x0001 // game has common controls
#define GAME_INPUT_VEHICLE 0x0002 // game has vehicle controls
#define GAME_INPUT_JOYSTICK1 0x0004 // game has joystick 1
#define GAME_INPUT_JOYSTICK2 0x0008 // game has joystick 2
#define GAME_INPUT_FIGHTING 0x0010 // game has fighting game controls
#define GAME_INPUT_VR 0x0020 // game has VR view buttons
#define GAME_INPUT_RALLY 0x0040 // game has rally car controls
#define GAME_INPUT_GUN1 0x0080 // game has gun 1
#define GAME_INPUT_GUN2 0x0100 // game has gun 2
#define GAME_INPUT_SHIFT4 0x0200 // game has 4-speed shifter
#define GAME_INPUT_COMMON 0x0001 // game has common controls
#define GAME_INPUT_VEHICLE 0x0002 // game has vehicle controls
#define GAME_INPUT_JOYSTICK1 0x0004 // game has joystick 1
#define GAME_INPUT_JOYSTICK2 0x0008 // game has joystick 2
#define GAME_INPUT_FIGHTING 0x0010 // game has fighting game controls
#define GAME_INPUT_VR 0x0020 // game has VR view buttons
#define GAME_INPUT_RALLY 0x0040 // game has rally car controls
#define GAME_INPUT_GUN1 0x0080 // game has gun 1
#define GAME_INPUT_GUN2 0x0100 // game has gun 2
#define GAME_INPUT_SHIFT4 0x0200 // game has 4-speed shifter
#define GAME_INPUT_ANALOG_JOYSTICK 0x0400 // game has analog joystick
#define GAME_INPUT_TWIN_JOYSTICKS 0x0800 // game has twin joysticks
#define GAME_INPUT_SOCCER 0x1000 // game has soccer controls
#define GAME_INPUT_ALL 0x1FFF
#define GAME_INPUT_SOCCER 0x1000 // game has soccer controls
#define GAME_INPUT_ALL 0x1FFF
/******************************************************************************
Data Structures
@ -64,7 +65,7 @@
struct GameInfo
{
// 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 *mfgName; // name of manufacturer
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 inputFlags; // game input types
int mpegBoard; // MPEG music board type: 0 = none, 1 = DSB1 (Z80), 2 = DSB2 (68K).
// ROM files
struct ROMInfo ROM[48];
};
@ -83,7 +84,7 @@ struct GameInfo
/******************************************************************************
Model 3 Game List
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
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[];
#endif // INCLUDED_GAMES_H
#endif // INCLUDED_GAMES_H

View file

@ -26,6 +26,12 @@
*
* 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.
* - Allow a "default" section to be specified (other than "").
* - 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
ppc_execute(ppcFrequency/60-10000);
//printf("PC=%08X LR=%08X\n", ppc_get_pc(), ppc_get_lr());
// VBlank
TileGen.BeginFrame();
@ -2108,6 +2109,7 @@ void CModel3::RunMainBoardFrame(void)
GPU.RenderFrame();
IRQ.Assert(0x02);
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:
@ -2142,6 +2144,7 @@ void CModel3::RunMainBoardFrame(void)
}
}
//printf("\t-- END --\n");
//printf("PC=%08X LR=%08X\n", ppc_get_pc(), ppc_get_lr());
// End frame
GPU.EndFrame();
@ -2215,6 +2218,7 @@ void CModel3::Patch(void)
}
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[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?)
@ -2224,6 +2228,14 @@ void CModel3::Patch(void)
//*(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"))
{
/*
@ -2343,6 +2355,13 @@ void CModel3::Patch(void)
*(UINT32 *) &crom[0x029A0] = 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"))
{
*(UINT32 *) &crom[0x535580] = 0x60000000;
@ -2673,14 +2692,14 @@ CModel3::CModel3(void)
CModel3::~CModel3(void)
{
// Dump some files first
#if 0
//#if 0
Dump("ram", ram, 0x800000, TRUE, FALSE);
//Dump("vrom", vrom, 0x4000000, TRUE, FALSE);
Dump("crom", crom, 0x800000, TRUE, FALSE);
//Dump("bankedCrom", &crom[0x800000], 0x7000000, TRUE, FALSE);
//Dump("soundROM", soundROM, 0x80000, FALSE, TRUE);
//Dump("sampleROM", sampleROM, 0x800000, FALSE, TRUE);
#endif
//#endif
// Stop all threads
StopThreads();