GameDB: Follow the same pattern for Speedhacks as for GameFixes

In preparation for #3998
GameDB: Update with current master's GameDB file
This commit is contained in:
Tyler Wilding 2020-12-13 21:23:28 -05:00 committed by refractionpcsx2
parent 34fe57d84b
commit 4d79754f78
9 changed files with 246 additions and 94 deletions

View File

@ -30,22 +30,6 @@ SERIAL-12345: # !required! Serial number for the game, this is how games are loo
# If a GameFix is included in the list, it will be enabled.
# If you'd like to temporarily disable it, either comment out the line, or remove it!
gameFixes:
- VuAddSubHack
- FpuCompareHack
- FpuMulHack
- FpuNegDivHack
- XGKickHack
- IPUWaitHack
- EETimingHack
- SkipMPEGHack
- OPHFlagHack
- DMABusyHack
- VIFFIFOHack
- VIF1StallHack
- GIFFIFOHack
- ScarfaceIbitHack
- CrashTagTeamRaci
- VU0KickstartHack
- VuAddSubHack
- FpuCompareHack
- FpuMulHack
@ -63,9 +47,10 @@ SERIAL-12345: # !required! Serial number for the game, this is how games are loo
- CrashTagTeamRacingIbitHack
- VU0KickstartHack
# The value of the speedhacks is assumed to be an integer,
# but at the time of writing there is only one speedhack option and its effectively a boolean (0/1)
# but at the time of writing speedhacks are effectively booleans (0/1)
speedHacks:
mvuFlagSpeedHack: 0
InstantVU1SpeedHack: 0
memcardFilters:
- "SERIAL-123"
- "SERIAL-456"
@ -174,6 +159,9 @@ These values are in a key-value format, where the value is assumed to be an inte
- `mvuFlagSpeedHack`
- Accepted Values - `0` / `1`
- Katamari Damacy have weird speed bug when this speed hack is enabled (and it is by default)
- `InstantVU1SpeedHack`
- Accepted Values - `0` / `1`
- Games such as Parappa the Rapper 2 need VU1 to sync, so you can force disable the speedhack here
## Memory Card Filter Override

View File

@ -1238,6 +1238,8 @@ SCES-50408:
name: "PaRappa the Rapper 2"
region: "PAL-M5"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes noodles.
SCES-50409:
name: "MotoGP 2"
region: "PAL-M5"
@ -3108,6 +3110,8 @@ SCPS-15016:
SCPS-15017:
name: "PaRappa the Rapper 2"
region: "NTSC-J"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes noodles.
SCPS-15018:
name: "Train Simulator Real, The - Yamanote Sen"
region: "NTSC-J"
@ -3605,6 +3609,8 @@ SCPS-19153:
SCPS-19201:
name: "PaRappa the Rapper 2 [PlayStation 2 The Best]"
region: "NTSC-J"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes noodles.
SCPS-19202:
name: "Extermination [PlayStation 2 The Best]"
region: "NTSC-J"
@ -4390,6 +4396,8 @@ SCUS-97167:
name: "PaRappa the Rapper 2"
region: "NTSC-U"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes noodles.
SCUS-97169:
name: "Drakan - The Ancients' Gates [Demo]"
region: "NTSC-U"
@ -4519,6 +4527,8 @@ SCUS-97206:
SCUS-97208:
name: "Hot Shots Golf 3 & PaRappa the Rapper 2 [Demo]"
region: "NTSC-U"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes noodles on Parappa 2.
SCUS-97209:
name: "Ratchet & Clank [E3 Demo]"
region: "NTSC-U"
@ -5958,6 +5968,8 @@ SLED-52476:
SLED-52488:
name: "Suffering, The [Demo]"
region: "PAL-E"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
SLED-52597:
name: "Burnout 3 - Takedown [Demo]"
region: "PAL-E"
@ -6795,6 +6807,8 @@ SLES-50382:
name: "Silent Hill 2"
region: "PAL-M6"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLES-50383:
name: "Metal Gear Solid 2 - Sons of Liberty"
region: "PAL-M3"
@ -6928,6 +6942,8 @@ SLES-50446:
name: "Shadow Man - 2econd Coming"
region: "PAL-M4"
compat: 4
speedHacks:
InstantVU1SpeedHack: 0 # Fixes SPS.
SLES-50447:
name: "All-Star Baseball 2003"
region: "PAL-E"
@ -7187,6 +7203,8 @@ SLES-50606:
SLES-50608:
name: "Shadow Man - 2econd Coming"
region: "PAL-G"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes SPS.
SLES-50613:
name: "Woody Woodpecker"
region: "PAL-M5"
@ -8270,6 +8288,8 @@ SLES-51144:
name: "Shox - Rally Reinvented"
region: "PAL-M7"
compat: 5
gameFixes:
- VU0KickstartHack # Fixes SPS.
SLES-51145:
name: "Monopoly Party"
region: "PAL-M5"
@ -8295,6 +8315,8 @@ SLES-51156:
name: "Silent Hill 2 - Director's Cut"
region: "PAL-M5"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLES-51157:
name: "Silent Scope 3"
region: "PAL-M5"
@ -8477,9 +8499,13 @@ SLES-51250:
name: "Shox - Rally Reinvented"
region: "PAL-E"
compat: 5
gameFixes:
- VU0KickstartHack # Fixes SPS.
SLES-51251:
name: "Shox - Rally Reinvented"
region: "PAL-E"
gameFixes:
- VU0KickstartHack # Fixes SPS.
SLES-51252:
name: "Lord of the Rings, The - The Two Towers"
region: "PAL-M3"
@ -9243,6 +9269,8 @@ SLES-51690:
SLES-51693:
name: "Suffering, The"
region: "PAL-E-F-G"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
SLES-51696:
name: "Dragon's Lair 3D - Special Edition"
region: "PAL-M5"
@ -9885,6 +9913,8 @@ SLES-52001:
name: "Mission Impossible - Operation Surma"
region: "PAL-M5"
compat: 5
gameFixes:
- VU0KickstartHack # Fixes crashes and broken graphics.
SLES-52002:
name: "Rogue Ops"
region: "PAL-M6"
@ -10598,6 +10628,8 @@ SLES-52439:
name: "Suffering, The"
region: "PAL-E-I-S"
compat: 5
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
SLES-52440:
name: "Harry Potter and the Prisoner of Azkaban"
region: "PAL-M7"
@ -10791,6 +10823,8 @@ SLES-52527:
SLES-52531:
name: "Suffering, The"
region: "PAL-G"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
SLES-52532:
name: "Aces of War"
region: "PAL-E"
@ -12822,6 +12856,8 @@ SLES-53525:
SLES-53526:
name: "Suffering, The - Ties that Bind"
region: "PAL-E-F"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
memcardFilters:
- "SLES-53526"
- "SLES-53527"
@ -12833,6 +12869,8 @@ SLES-53526:
SLES-53527:
name: "Suffering, The - Ties that Bind"
region: "PAL-E-I-S"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
memcardFilters:
- "SLES-53526"
- "SLES-53527"
@ -12844,6 +12882,8 @@ SLES-53527:
SLES-53528:
name: "Suffering, The - Ties that Bind"
region: "PAL-G"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
memcardFilters:
- "SLES-53526"
- "SLES-53527"
@ -13119,6 +13159,8 @@ SLES-53624:
SLES-53626:
name: "Suffering, The - Ties that Bind"
region: "PAL-E-G"
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
memcardFilters:
- "SLES-53526"
- "SLES-53527"
@ -18205,12 +18247,16 @@ SLPM-60273:
SLPM-61009:
name: "Silent Hill 2 (Red Ribbon) [Trial]"
region: "NTSC-J"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLPM-61010:
name: "Devil May Cry [Trial Version]"
region: "NTSC-J"
SLPM-61011:
name: "Silent Hill 2 (Black Ribbon) [Video Trial]"
region: "NTSC-J"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLPM-61051:
name: "Dengeki PS2 D61"
region: "NTSC-J"
@ -20032,6 +20078,8 @@ SLPM-62736:
SLPM-62737:
name: "Rally Shox & Freestyle Motorcross [EA Best Hits]"
region: "NTSC-J"
gameFixes:
- VU0KickstartHack # Fixes SPS.
SLPM-62739:
name: "Suro Genjin"
region: "NTSC-J"
@ -20339,6 +20387,8 @@ SLPM-65051:
name: "Silent Hill 2"
region: "NTSC-J"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLPM-65052:
name: "Guitar Freaks 4th Mix & Drummania 3rd Mix"
region: "NTSC-J"
@ -20499,6 +20549,8 @@ SLPM-65098:
name: "Silent Hill 2 - Saigo no Uta"
region: "NTSC-J"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLPM-65100:
name: "Onimusha 2"
region: "NTSC-J"
@ -21158,6 +21210,8 @@ SLPM-65340:
SLPM-65341:
name: "Silent Hill 2 - Saigo No Uta [Konami The Best]"
region: "NTSC-J"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLPM-65342:
name: "Kyoufu Shinbun (Heisei) Kaiki! Shinrei File"
region: "NTSC-J"
@ -21694,6 +21748,8 @@ SLPM-65527:
SLPM-65529:
name: "Mission Impossible - Operation Surma"
region: "NTSC-J"
gameFixes:
- VU0KickstartHack # Fixes crashes and broken graphics.
SLPM-65530:
name: "J-League Pro Soccer Club - Tsukuku 2004"
region: "NTSC-J"
@ -22009,6 +22065,8 @@ SLPM-65630:
SLPM-65631:
name: "Silent Hill 2 [Konami The Best]"
region: "NTSC-J"
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLPM-65632:
name: "Virtua Fighter Cyber Generation - Ambition of the Judgement Six"
region: "NTSC-J"
@ -23540,6 +23598,13 @@ SLPM-66142:
SLPM-66143:
name: "Rebirth Moon"
region: "NTSC-J"
patches:
1B139735:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,0023B0C8,word,10000003
SLPM-66144:
name: "D1 Grand Prix 2005"
region: "NTSC-J"
@ -24028,6 +24093,13 @@ SLPM-66295:
SLPM-66296:
name: "Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou"
region: "NTSC-J"
patches:
23A9A026:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,00156888,word,10000003
SLPM-66297:
name: "Separate Hearts [Limited Edition]"
region: "NTSC-J"
@ -24324,6 +24396,13 @@ SLPM-66399:
SLPM-66400:
name: "Samurai 7"
region: "NTSC-J"
patches:
836F4606:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,00157F78,word,10000003
SLPM-66401:
name: "Wrestle Kingdom"
region: "NTSC-J"
@ -24496,6 +24575,13 @@ SLPM-66456:
SLPM-66457:
name: "Asobi ni Iku Yo! Chikyuu Pinchi no Konyaku Sengen"
region: "NTSC-J"
patches:
87FFC318:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,001579D8,word,10000003
SLPM-66458:
name: "Acheter Fuuraiki"
region: "NTSC-J"
@ -24618,6 +24704,13 @@ SLPM-66494:
SLPM-66495:
name: "Joshikousei Game's High!"
region: "NTSC-J"
patches:
9FEA4A95:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,00149F18,word,10000003
SLPM-66496:
name: "Tom Clancy's Splinter Cell - Chaos Theory"
region: "NTSC-J"
@ -24826,6 +24919,13 @@ SLPM-66564:
SLPM-66565:
name: "REC - DokiDoki Seiyuu Paradise"
region: "NTSC-J"
patches:
17E04DE7:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,001BAA28,word,10000003
SLPM-66566:
name: "Tenshou Gakuen Gekkou Hasumi"
region: "NTSC-J"
@ -31656,8 +31756,6 @@ SLUS-20217:
name: "Arctic Thunder"
region: "NTSC-U"
compat: 5
gameFixes:
- SkipMPEGHack
SLUS-20218:
name: "Stunt GP"
region: "NTSC-U"
@ -31716,6 +31814,8 @@ SLUS-20228:
name: "Silent Hill 2"
region: "NTSC-U"
compat: 5
speedHacks:
InstantVU1SpeedHack: 0 # Fixes hang on FMV's when CDVD timing is accurate.
SLUS-20229:
name: "Jonny Moseley - Mad Trix"
region: "NTSC-U"
@ -32440,6 +32540,8 @@ SLUS-20400:
name: "Mission Impossible - Operation Surma"
region: "NTSC-U"
compat: 5
gameFixes:
- VU0KickstartHack # Fixes crashes and broken graphics.
SLUS-20402:
name: "Britney's Dance Beat"
region: "NTSC-U"
@ -32479,6 +32581,8 @@ SLUS-20413:
name: "Shadow Man - 2econd Coming"
region: "NTSC-U"
compat: 4
speedHacks:
InstantVU1SpeedHack: 0 # Fixes SPS.
SLUS-20414:
name: "Legaia 2 - Duel Saga"
region: "NTSC-U"
@ -32977,6 +33081,8 @@ SLUS-20533:
name: "Shox"
region: "NTSC-U"
compat: 5
gameFixes:
- VU0KickstartHack # Fixes SPS.
SLUS-20534:
name: "Cabela's Big Game Hunter"
region: "NTSC-U"
@ -33403,6 +33509,8 @@ SLUS-20636:
name: "Suffering, The"
region: "NTSC-U"
compat: 5
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
SLUS-20637:
name: "Chessmaster (Online)"
region: "NTSC-U"
@ -35706,6 +35814,8 @@ SLUS-21189:
name: "Suffering, The - Ties That Bind"
region: "NTSC-U"
compat: 5
speedHacks:
InstantVU1SpeedHack: 1 # Fixes SPS.
memcardFilters:
- "SLUS-21189"
- "SLUS-20636"

View File

@ -62,6 +62,19 @@ enum GamefixId
GamefixId_COUNT
};
// TODO - config - not a fan of the excessive use of enums and macros to make them work
// a proper object would likely make more sense (if possible).
enum SpeedhackId
{
SpeedhackId_FIRST = 0,
Speedhack_mvuFlag = SpeedhackId_FIRST,
Speedhack_InstantVU1,
SpeedhackId_COUNT
};
enum class VsyncMode
{
Off,
@ -77,6 +90,7 @@ typename std::underlying_type<Enumeration>::type enum_cast(Enumeration E)
}
ImplementEnumOperators( GamefixId );
ImplementEnumOperators( SpeedhackId );
//------------ DEFAULT sseMXCSR VALUES ---------------
#define DEFAULT_sseMXCSR 0xffc0 //FPU rounding > DaZ, FtZ, "chop"
@ -402,9 +416,11 @@ struct Pcsx2Config
u8 EECycleSkip; // EE Cycle skip factor (0, 1, 2, or 3)
SpeedhackOptions();
void LoadSave( IniInterface& conf );
void LoadSave(IniInterface& conf);
SpeedhackOptions& DisableAll();
void Set(SpeedhackId id, bool enabled = true);
bool operator ==( const SpeedhackOptions& right ) const
{
return OpEqu( bitset ) && OpEqu( EECycleRate ) && OpEqu( EECycleSkip );

View File

@ -104,9 +104,9 @@ GameDatabaseSchema::GameEntry YamlGameDatabaseImpl::entryFromYaml(const std::str
for (std::string& fix : node["gameFixes"].as<std::vector<std::string>>(std::vector<std::string>()))
{
bool fixValidated = false;
for (GamefixId id = GamefixId_FIRST; id < pxEnumEnd; ++id)
for (GamefixId id = GamefixId_FIRST; id < pxEnumEnd; id++)
{
std::string validFix = wxString(EnumToString(id)).Append(L"Hack").ToStdString();
std::string validFix = fmt::format("{}Hack", wxString(EnumToString(id)));
if (validFix == fix)
{
fixValidated = true;
@ -123,21 +123,30 @@ GameDatabaseSchema::GameEntry YamlGameDatabaseImpl::entryFromYaml(const std::str
}
}
// Validate speed hacks, invalid ones will be dropped!
if (YAML::Node speedHacksNode = node["speedHacks"])
{
for (const auto& entry : speedHacksNode)
{
// Validate speedhacks, invalid ones will be skipped!
std::string speedHack = entry.first.as<std::string>();
// NOTE - currently only 1 speedhack!
if (speedHack != "mvuFlagSpeedHack")
bool speedHackValidated = false;
for (SpeedhackId id = SpeedhackId_FIRST; id < pxEnumEnd; id++)
{
std::string validSpeedHack = fmt::format("{}SpeedHack", wxString(EnumToString(id)));
if (validSpeedHack == speedHack)
{
speedHackValidated = true;
break;
}
}
if (speedHackValidated)
{
gameEntry.speedHacks[speedHack] = entry.second.as<int>();
}
else
{
Console.Error(fmt::format("[GameDB] Invalid speedhack: '{}', specified for serial: '{}'. Dropping!", speedHack, serial));
continue;
}
gameEntry.speedHacks[speedHack] = entry.second.as<int>();
}
}

View File

@ -41,33 +41,35 @@ wxString strgametitle;
struct PatchTextTable
{
int code;
const wxChar* text;
PATCHTABLEFUNC* func;
int code;
const wxChar* text;
PATCHTABLEFUNC* func;
};
static const PatchTextTable commands_patch[] =
{
{1, L"author", PatchFunc::author},
{2, L"comment", PatchFunc::comment},
{3, L"patch", PatchFunc::patch},
{0, wxEmptyString, NULL} // Array Terminator
{
{ 1, L"author", PatchFunc::author},
{ 2, L"comment", PatchFunc::comment },
{ 3, L"patch", PatchFunc::patch },
{ 0, wxEmptyString, NULL } // Array Terminator
};
static const PatchTextTable dataType[] =
{
{1, L"byte", NULL},
{2, L"short", NULL},
{3, L"word", NULL},
{4, L"double", NULL},
{5, L"extended", NULL},
{0, wxEmptyString, NULL}};
{
{ 1, L"byte", NULL },
{ 2, L"short", NULL },
{ 3, L"word", NULL },
{ 4, L"double", NULL },
{ 5, L"extended", NULL },
{ 0, wxEmptyString, NULL }
};
static const PatchTextTable cpuCore[] =
{
{1, L"EE", NULL},
{2, L"IOP", NULL},
{0, wxEmptyString, NULL}};
{
{ 1, L"EE", NULL },
{ 2, L"IOP", NULL },
{ 0, wxEmptyString, NULL }
};
// IniFile Functions.

View File

@ -35,10 +35,35 @@ void TraceLogFilters::LoadSave( IniInterface& ini )
IniEntry( IOP.bitset );
}
const wxChar* const tbl_SpeedhackNames[] =
{
L"mvuFlag",
L"InstantVU1"};
const __fi wxChar* EnumToString(SpeedhackId id)
{
return tbl_SpeedhackNames[id];
}
void Pcsx2Config::SpeedhackOptions::Set(SpeedhackId id, bool enabled)
{
EnumAssert(id);
switch (id)
{
case Speedhack_mvuFlag:
vuFlagHack = enabled;
break;
case Speedhack_InstantVU1:
vu1Instant = enabled;
break;
jNO_DEFAULT;
}
}
Pcsx2Config::SpeedhackOptions::SpeedhackOptions()
{
DisableAll();
// Set recommended speedhacks to enabled by default. They'll still be off globally on resets.
WaitLoop = true;
IntcStat = true;
@ -48,25 +73,25 @@ Pcsx2Config::SpeedhackOptions::SpeedhackOptions()
Pcsx2Config::SpeedhackOptions& Pcsx2Config::SpeedhackOptions::DisableAll()
{
bitset = 0;
EECycleRate = 0;
EECycleSkip = 0;
bitset = 0;
EECycleRate = 0;
EECycleSkip = 0;
return *this;
}
void Pcsx2Config::SpeedhackOptions::LoadSave( IniInterface& ini )
void Pcsx2Config::SpeedhackOptions::LoadSave(IniInterface& ini)
{
ScopedIniGroup path( ini, L"Speedhacks" );
ScopedIniGroup path(ini, L"Speedhacks");
IniBitfield( EECycleRate );
IniBitfield( EECycleSkip );
IniBitBool( fastCDVD );
IniBitBool( IntcStat );
IniBitBool( WaitLoop );
IniBitBool( vuFlagHack );
IniBitBool( vuThread );
IniBitBool( vu1Instant );
IniBitfield(EECycleRate);
IniBitfield(EECycleSkip);
IniBitBool(fastCDVD);
IniBitBool(IntcStat);
IniBitBool(WaitLoop);
IniBitBool(vuFlagHack);
IniBitBool(vuThread);
IniBitBool(vu1Instant);
}
void Pcsx2Config::ProfilerOptions::LoadSave( IniInterface& ini )

View File

@ -135,13 +135,13 @@ extern s32 iopCycleEE; // tracks IOP's current sych status with the EE
/**** R3000A Instruction Macros ****/
#define _PC_ psxRegs.pc // The next PC to be executed
#define _Funct_ ((psxRegs.code ) & 0x3F) // The funct part of the instruction register
#define _Rd_ ((psxRegs.code >> 11) & 0x1F) // The rd part of the instruction register
#define _Rt_ ((psxRegs.code >> 16) & 0x1F) // The rt part of the instruction register
#define _Rs_ ((psxRegs.code >> 21) & 0x1F) // The rs part of the instruction register
#define _Sa_ ((psxRegs.code >> 6) & 0x1F) // The sa part of the instruction register
#define _Im_ ((u16)psxRegs.code) // The immediate part of the instruction register
#define _InstrucTarget_ (psxRegs.code & 0x03ffffff) // The target part of the instruction register
#define _Funct_ ((psxRegs.code ) & 0x3F) // The funct part of the instruction register
#define _Rd_ ((psxRegs.code >> 11) & 0x1F) // The rd part of the instruction register
#define _Rt_ ((psxRegs.code >> 16) & 0x1F) // The rt part of the instruction register
#define _Rs_ ((psxRegs.code >> 21) & 0x1F) // The rs part of the instruction register
#define _Sa_ ((psxRegs.code >> 6) & 0x1F) // The sa part of the instruction register
#define _Im_ ((u16)psxRegs.code) // The immediate part of the instruction register
#define _InstrucTarget_ (psxRegs.code & 0x03ffffff) // The target part of the instruction register
#define _Imm_ ((short)psxRegs.code) // sign-extended immediate
#define _ImmU_ (psxRegs.code&0xffff) // zero-extended immediate

View File

@ -231,13 +231,13 @@ struct tlbs
#define _PC_ cpuRegs.pc // The next PC to be executed - only used in this header and R3000A.h
#define _Funct_ ((cpuRegs.code ) & 0x3F) // The funct part of the instruction register
#define _Rd_ ((cpuRegs.code >> 11) & 0x1F) // The rd part of the instruction register
#define _Rt_ ((cpuRegs.code >> 16) & 0x1F) // The rt part of the instruction register
#define _Rs_ ((cpuRegs.code >> 21) & 0x1F) // The rs part of the instruction register
#define _Sa_ ((cpuRegs.code >> 6) & 0x1F) // The sa part of the instruction register
#define _Im_ ((u16)cpuRegs.code) // The immediate part of the instruction register
#define _InstrucTarget_ (cpuRegs.code & 0x03ffffff) // The target part of the instruction register
#define _Funct_ ((cpuRegs.code ) & 0x3F) // The funct part of the instruction register
#define _Rd_ ((cpuRegs.code >> 11) & 0x1F) // The rd part of the instruction register
#define _Rt_ ((cpuRegs.code >> 16) & 0x1F) // The rt part of the instruction register
#define _Rs_ ((cpuRegs.code >> 21) & 0x1F) // The rs part of the instruction register
#define _Sa_ ((cpuRegs.code >> 6) & 0x1F) // The sa part of the instruction register
#define _Im_ ((u16)cpuRegs.code) // The immediate part of the instruction register
#define _InstrucTarget_ (cpuRegs.code & 0x03ffffff) // The target part of the instruction register
#define _Imm_ ((s16)cpuRegs.code) // sign-extended immediate
#define _ImmU_ (cpuRegs.code&0xffff) // zero-extended immediate

View File

@ -19,6 +19,7 @@
#include "AppGameDatabase.h"
#include <wx/stdpaths.h>
#include "fmt/core.h"
#include "Debugger/DisassemblyDialog.h"
@ -255,7 +256,7 @@ static int loadGameSettings(Pcsx2Config& dest, const GameDatabaseSchema::GameEnt
SSE_RoundMode eeRM = (SSE_RoundMode)enum_cast(game.eeRoundMode);
if (EnumIsValid(eeRM))
{
PatchesCon->WriteLn("(GameDB) Changing EE/FPU roundmode to %d [%s]", eeRM, EnumToString(eeRM));
PatchesCon->WriteLn(L"(GameDB) Changing EE/FPU roundmode to %d [%s]", eeRM, EnumToString(eeRM));
dest.Cpu.sseMXCSR.SetRoundMode(eeRM);
gf++;
}
@ -266,7 +267,7 @@ static int loadGameSettings(Pcsx2Config& dest, const GameDatabaseSchema::GameEnt
SSE_RoundMode vuRM = (SSE_RoundMode)enum_cast(game.vuRoundMode);
if (EnumIsValid(vuRM))
{
PatchesCon->WriteLn("(GameDB) Changing VU0/VU1 roundmode to %d [%s]", vuRM, EnumToString(vuRM));
PatchesCon->WriteLn(L"(GameDB) Changing VU0/VU1 roundmode to %d [%s]", vuRM, EnumToString(vuRM));
dest.Cpu.sseVUMXCSR.SetRoundMode(vuRM);
gf++;
}
@ -275,7 +276,7 @@ static int loadGameSettings(Pcsx2Config& dest, const GameDatabaseSchema::GameEnt
if (game.eeClampMode != GameDatabaseSchema::ClampMode::Undefined)
{
int clampMode = enum_cast(game.eeClampMode);
PatchesCon->WriteLn("(GameDB) Changing EE/FPU clamp mode [mode=%d]", clampMode);
PatchesCon->WriteLn(L"(GameDB) Changing EE/FPU clamp mode [mode=%d]", clampMode);
dest.Cpu.Recompiler.fpuOverflow = (clampMode >= 1);
dest.Cpu.Recompiler.fpuExtraOverflow = (clampMode >= 2);
dest.Cpu.Recompiler.fpuFullMode = (clampMode >= 3);
@ -292,26 +293,27 @@ static int loadGameSettings(Pcsx2Config& dest, const GameDatabaseSchema::GameEnt
gf++;
}
if (game.speedHacks.count("mvuFlagSpeedHack") == 1)
// TODO - config - this could be simplified with maps instead of bitfields and enums
for (SpeedhackId id = SpeedhackId_FIRST; id < pxEnumEnd; id++)
{
bool vuFlagHack = game.speedHacks.at("mvuFlagSpeedHack") ? 1 : 0;
PatchesCon->WriteLn("(GameDB) Changing mVU flag speed hack [mode=%d]", vuFlagHack);
dest.Speedhacks.vuFlagHack = vuFlagHack;
gf++;
}
std::string key = fmt::format("{}SpeedHack", wxString(EnumToString(id)));
if (game.keyExists("InstantVU1SpeedHack"))
{
bool vu1InstantHack = game.getInt("InstantVU1SpeedHack") ? 1 : 0;
PatchesCon->WriteLn("(GameDB) Changing Instant VU1 speedhack [mode=%d]", vu1InstantHack);
dest.Speedhacks.vu1Instant = vu1InstantHack;
gf++;
// Gamefixes are already guaranteed to be valid, any invalid ones are dropped
if (game.speedHacks.count(key) == 1)
{
// Legacy note - speedhacks are setup in the GameDB as integer values, but
// are effectively booleans like the gamefixes
bool mode = game.speedHacks.at(key) ? 1: 0;
dest.Speedhacks.Set(id, mode);
PatchesCon->WriteLn(L"(GameDB) Setting Speedhack '" + key + "' to [mode=%d]", mode);
gf++;
}
}
// TODO - config - this could be simplified with maps instead of bitfields and enums
for (GamefixId id = GamefixId_FIRST; id < pxEnumEnd; ++id)
for (GamefixId id = GamefixId_FIRST; id < pxEnumEnd; id++)
{
std::string key = wxString(EnumToString(id)).Append(L"Hack").ToStdString();
std::string key = fmt::format("{}Hack", wxString(EnumToString(id)));
// Gamefixes are already guaranteed to be valid, any invalid ones are dropped
if (std::find(game.gameFixes.begin(), game.gameFixes.end(), key) != game.gameFixes.end())