mirror of https://github.com/PCSX2/pcsx2.git
A few more changes to the patch code.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2137 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
6a7c617a65
commit
0d68166b65
|
@ -30,10 +30,7 @@
|
||||||
using namespace Threading;
|
using namespace Threading;
|
||||||
|
|
||||||
extern u8 psxhblankgate;
|
extern u8 psxhblankgate;
|
||||||
|
extern void ApplyPatch( int place = 1);
|
||||||
// The two functions needed for patches.
|
|
||||||
extern void ApplyPatch( int place );
|
|
||||||
extern void inifile_read( const char* name );
|
|
||||||
|
|
||||||
static const uint EECNT_FUTURE_TARGET = 0x10000000;
|
static const uint EECNT_FUTURE_TARGET = 0x10000000;
|
||||||
|
|
||||||
|
@ -361,7 +358,7 @@ static __forceinline void VSyncStart(u32 sCycle)
|
||||||
psxVBlankStart();
|
psxVBlankStart();
|
||||||
|
|
||||||
if (gates) rcntStartGate(true, sCycle); // Counters Start Gate code
|
if (gates) rcntStartGate(true, sCycle); // Counters Start Gate code
|
||||||
if (EmuConfig.EnablePatches) ApplyPatch(1); // fixme - Apply patches
|
if (EmuConfig.EnablePatches) ApplyPatch(); // fixme - Apply patches
|
||||||
|
|
||||||
// INTC - VB Blank Start Hack --
|
// INTC - VB Blank Start Hack --
|
||||||
// Hack fix! This corrects a freezeup in Granda 2 where it decides to spin
|
// Hack fix! This corrects a freezeup in Granda 2 where it decides to spin
|
||||||
|
|
|
@ -21,10 +21,7 @@
|
||||||
#include "GS.h" // for sending game crc to mtgs
|
#include "GS.h" // for sending game crc to mtgs
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
extern void InitPatch(wxString crc);
|
||||||
// The two functions needed for patches.
|
|
||||||
extern void ApplyPatch( int place );
|
|
||||||
extern void inifile_read( const char* name );
|
|
||||||
|
|
||||||
u32 ElfCRC;
|
u32 ElfCRC;
|
||||||
|
|
||||||
|
@ -500,8 +497,7 @@ void ElfApplyPatches()
|
||||||
|
|
||||||
if( !EmuConfig.EnablePatches ) return;
|
if( !EmuConfig.EnablePatches ) return;
|
||||||
|
|
||||||
inifile_read( filename.ToUTF8() );
|
InitPatch(filename);
|
||||||
ApplyPatch( 0 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetches the CRC of the game bound to the CDVD plugin.
|
// Fetches the CRC of the game bound to the CDVD plugin.
|
||||||
|
|
294
pcsx2/Patch.cpp
294
pcsx2/Patch.cpp
|
@ -115,23 +115,23 @@ void handle_extended_t( IniPatch *p)
|
||||||
}
|
}
|
||||||
else switch (PrevCheatType)
|
else switch (PrevCheatType)
|
||||||
{
|
{
|
||||||
case 0x3040:
|
case 0x3040: // vvvvvvvv 00000000 Inc
|
||||||
{ // vvvvvvvv 00000000 Inc
|
{
|
||||||
u32 mem = memRead32(PrevCheatAddr);
|
u32 mem = memRead32(PrevCheatAddr);
|
||||||
memWrite32(PrevCheatAddr, mem + (p->addr));
|
memWrite32(PrevCheatAddr, mem + (p->addr));
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x3050:
|
case 0x3050: // vvvvvvvv 00000000 Dec
|
||||||
{ // vvvvvvvv 00000000 Dec
|
{
|
||||||
u32 mem = memRead32(PrevCheatAddr);
|
u32 mem = memRead32(PrevCheatAddr);
|
||||||
memWrite32(PrevCheatAddr, mem - (p->addr));
|
memWrite32(PrevCheatAddr, mem - (p->addr));
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x4000: // vvvvvvvv iiiiiiii
|
case 0x4000: // vvvvvvvv iiiiiiii
|
||||||
for(u32 i = 0; i < IterationCount; i++)
|
for(u32 i = 0; i < IterationCount; i++)
|
||||||
{
|
{
|
||||||
memWrite32((u32)(PrevCheatAddr + (i * IterationIncrement)),(u32)(p->addr + ((u32)p->data * i)));
|
memWrite32((u32)(PrevCheatAddr + (i * IterationIncrement)),(u32)(p->addr + ((u32)p->data * i)));
|
||||||
|
@ -139,7 +139,7 @@ void handle_extended_t( IniPatch *p)
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x5000: // dddddddd iiiiiiii
|
case 0x5000: // dddddddd iiiiiiii
|
||||||
for(u32 i = 0; i < IterationCount; i++)
|
for(u32 i = 0; i < IterationCount; i++)
|
||||||
{
|
{
|
||||||
u8 mem = memRead8(PrevCheatAddr + i);
|
u8 mem = memRead8(PrevCheatAddr + i);
|
||||||
|
@ -148,7 +148,7 @@ void handle_extended_t( IniPatch *p)
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x6000: // 000Xnnnn iiiiiiii
|
case 0x6000: // 000Xnnnn iiiiiiii
|
||||||
if (IterationIncrement == 0x0)
|
if (IterationIncrement == 0x0)
|
||||||
{
|
{
|
||||||
//LastType = ((u32)p->addr & 0x000F0000) >> 16;
|
//LastType = ((u32)p->addr & 0x000F0000) >> 16;
|
||||||
|
@ -220,7 +220,7 @@ void handle_extended_t( IniPatch *p)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x6001: // 000Xnnnn iiiiiiii
|
case 0x6001: // 000Xnnnn iiiiiiii
|
||||||
{
|
{
|
||||||
// Read first pointer
|
// Read first pointer
|
||||||
u32 mem = memRead32(PrevCheatAddr & 0x0FFFFFFF);
|
u32 mem = memRead32(PrevCheatAddr & 0x0FFFFFFF);
|
||||||
|
@ -250,134 +250,133 @@ void handle_extended_t( IniPatch *p)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if ((p->addr & 0xF0000000) == 0x00000000) // 0aaaaaaa 0000000vv
|
if ((p->addr & 0xF0000000) == 0x00000000) // 0aaaaaaa 0000000vv
|
||||||
{
|
{
|
||||||
memWrite8(p->addr & 0x0FFFFFFF, (u8)p->data & 0x000000FF);
|
memWrite8(p->addr & 0x0FFFFFFF, (u8)p->data & 0x000000FF);
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xF0000000) == 0x10000000) // 0aaaaaaa 0000vvvv
|
else if ((p->addr & 0xF0000000) == 0x10000000) // 0aaaaaaa 0000vvvv
|
||||||
{
|
{
|
||||||
memWrite16(p->addr & 0x0FFFFFFF, (u16)p->data & 0x0000FFFF);
|
memWrite16(p->addr & 0x0FFFFFFF, (u16)p->data & 0x0000FFFF);
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xF0000000) == 0x20000000) // 0aaaaaaa vvvvvvvv
|
else if ((p->addr & 0xF0000000) == 0x20000000) // 0aaaaaaa vvvvvvvv
|
||||||
{
|
{
|
||||||
memWrite32(p->addr & 0x0FFFFFFF, (u32)p->data);
|
memWrite32(p->addr & 0x0FFFFFFF, (u32)p->data);
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xFFFF0000) == 0x30000000) // 300000vv 0aaaaaaa Inc
|
else if ((p->addr & 0xFFFF0000) == 0x30000000) // 300000vv 0aaaaaaa Inc
|
||||||
{
|
{
|
||||||
u8 mem = memRead8((u32)p->data);
|
u8 mem = memRead8((u32)p->data);
|
||||||
memWrite8((u32)p->data, mem + (p->addr & 0x000000FF));
|
memWrite8((u32)p->data, mem + (p->addr & 0x000000FF));
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xFFFF0000) == 0x30100000) // 301000vv 0aaaaaaa Dec
|
else if ((p->addr & 0xFFFF0000) == 0x30100000) // 301000vv 0aaaaaaa Dec
|
||||||
{
|
{
|
||||||
u8 mem = memRead8((u32)p->data);
|
u8 mem = memRead8((u32)p->data);
|
||||||
memWrite8((u32)p->data, mem - (p->addr & 0x000000FF));
|
memWrite8((u32)p->data, mem - (p->addr & 0x000000FF));
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xFFFF0000) == 0x30200000) // 3020vvvv 0aaaaaaa Inc
|
else if ((p->addr & 0xFFFF0000) == 0x30200000) // 3020vvvv 0aaaaaaa Inc
|
||||||
{
|
{
|
||||||
u16 mem = memRead16((u32)p->data);
|
u16 mem = memRead16((u32)p->data);
|
||||||
memWrite16((u32)p->data, mem + (p->addr & 0x0000FFFF));
|
memWrite16((u32)p->data, mem + (p->addr & 0x0000FFFF));
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xFFFF0000) == 0x30300000) // 3030vvvv 0aaaaaaa Dec
|
else if ((p->addr & 0xFFFF0000) == 0x30300000) // 3030vvvv 0aaaaaaa Dec
|
||||||
{
|
{
|
||||||
u16 mem = memRead16((u32)p->data);
|
u16 mem = memRead16((u32)p->data);
|
||||||
memWrite16((u32)p->data, mem - (p->addr & 0x0000FFFF));
|
memWrite16((u32)p->data, mem - (p->addr & 0x0000FFFF));
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xFFFF0000) == 0x30400000) // 30400000 0aaaaaaa Inc + Another line
|
else if ((p->addr & 0xFFFF0000) == 0x30400000) // 30400000 0aaaaaaa Inc + Another line
|
||||||
{
|
{
|
||||||
PrevCheatType = 0x3040;
|
PrevCheatType = 0x3040;
|
||||||
PrevCheatAddr = (u32)p->data;
|
PrevCheatAddr = (u32)p->data;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xFFFF0000) == 0x30500000) // 30500000 0aaaaaaa Inc + Another line
|
else if ((p->addr & 0xFFFF0000) == 0x30500000) // 30500000 0aaaaaaa Inc + Another line
|
||||||
{
|
{
|
||||||
PrevCheatType = 0x3050;
|
PrevCheatType = 0x3050;
|
||||||
PrevCheatAddr = (u32)p->data;
|
PrevCheatAddr = (u32)p->data;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xF0000000) == 0x40000000) // 4aaaaaaa nnnnssss + Another line
|
else if ((p->addr & 0xF0000000) == 0x40000000) // 4aaaaaaa nnnnssss + Another line
|
||||||
{
|
{
|
||||||
IterationCount = ((u32)p->data & 0xFFFF0000) / 0x10000;
|
IterationCount = ((u32)p->data & 0xFFFF0000) / 0x10000;
|
||||||
IterationIncrement = ((u32)p->data & 0x0000FFFF) * 4;
|
IterationIncrement = ((u32)p->data & 0x0000FFFF) * 4;
|
||||||
PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF;
|
PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF;
|
||||||
PrevCheatType = 0x4000;
|
PrevCheatType = 0x4000;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xF0000000) == 0x50000000) // 5sssssss nnnnnnnn + Another line
|
else if ((p->addr & 0xF0000000) == 0x50000000) // 5sssssss nnnnnnnn + Another line
|
||||||
{
|
{
|
||||||
PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF;
|
PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF;
|
||||||
IterationCount = ((u32)p->data);
|
IterationCount = ((u32)p->data);
|
||||||
PrevCheatType = 0x5000;
|
PrevCheatType = 0x5000;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xF0000000) == 0x60000000) // 6aaaaaaa 000000vv + Another line/s
|
else if ((p->addr & 0xF0000000) == 0x60000000) // 6aaaaaaa 000000vv + Another line/s
|
||||||
{
|
{
|
||||||
PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF;
|
PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF;
|
||||||
IterationIncrement = ((u32)p->data);
|
IterationIncrement = ((u32)p->data);
|
||||||
IterationCount = 0;
|
IterationCount = 0;
|
||||||
PrevCheatType = 0x6000;
|
PrevCheatType = 0x6000;
|
||||||
}
|
}
|
||||||
else if ((p->addr & 0xF0000000) == 0x70000000)
|
else if ((p->addr & 0xF0000000) == 0x70000000)
|
||||||
{
|
{
|
||||||
if ((p->data & 0x00F00000) == 0x00000000) // 7aaaaaaa 000000vv
|
if ((p->data & 0x00F00000) == 0x00000000) // 7aaaaaaa 000000vv
|
||||||
{
|
{
|
||||||
u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF);
|
u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF);
|
||||||
memWrite8((u32)p->addr & 0x0FFFFFFF,(u8)(mem | (p->data & 0x000000FF)));
|
memWrite8((u32)p->addr & 0x0FFFFFFF,(u8)(mem | (p->data & 0x000000FF)));
|
||||||
}
|
}
|
||||||
else if ((p->data & 0x00F00000) == 0x00100000) // 7aaaaaaa 0010vvvv
|
else if ((p->data & 0x00F00000) == 0x00100000) // 7aaaaaaa 0010vvvv
|
||||||
{
|
{
|
||||||
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
||||||
memWrite16((u32)p->addr & 0x0FFFFFFF,(u16)(mem | (p->data & 0x0000FFFF)));
|
memWrite16((u32)p->addr & 0x0FFFFFFF,(u16)(mem | (p->data & 0x0000FFFF)));
|
||||||
}
|
}
|
||||||
else if ((p->data & 0x00F00000) == 0x00200000) // 7aaaaaaa 002000vv
|
else if ((p->data & 0x00F00000) == 0x00200000) // 7aaaaaaa 002000vv
|
||||||
{
|
{
|
||||||
u8 mem = memRead8((u32)p->addr&0x0FFFFFFF);
|
u8 mem = memRead8((u32)p->addr&0x0FFFFFFF);
|
||||||
memWrite8((u32)p->addr & 0x0FFFFFFF,(u8)(mem & (p->data & 0x000000FF)));
|
memWrite8((u32)p->addr & 0x0FFFFFFF,(u8)(mem & (p->data & 0x000000FF)));
|
||||||
}
|
}
|
||||||
else if ((p->data & 0x00F00000) == 0x00300000) // 7aaaaaaa 0030vvvv
|
else if ((p->data & 0x00F00000) == 0x00300000) // 7aaaaaaa 0030vvvv
|
||||||
{
|
{
|
||||||
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
||||||
memWrite16((u32)p->addr & 0x0FFFFFFF,(u16)(mem & (p->data & 0x0000FFFF)));
|
memWrite16((u32)p->addr & 0x0FFFFFFF,(u16)(mem & (p->data & 0x0000FFFF)));
|
||||||
}
|
}
|
||||||
else if ((p->data & 0x00F00000) == 0x00400000) // 7aaaaaaa 004000vv
|
else if ((p->data & 0x00F00000) == 0x00400000) // 7aaaaaaa 004000vv
|
||||||
{
|
{
|
||||||
u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF);
|
u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF);
|
||||||
memWrite8((u32)p->addr & 0x0FFFFFFF,(u8)(mem ^ (p->data & 0x000000FF)));
|
memWrite8((u32)p->addr & 0x0FFFFFFF,(u8)(mem ^ (p->data & 0x000000FF)));
|
||||||
}
|
}
|
||||||
else if ((p->data & 0x00F00000) == 0x00500000) // 7aaaaaaa 0050vvvv
|
else if ((p->data & 0x00F00000) == 0x00500000) // 7aaaaaaa 0050vvvv
|
||||||
{
|
{
|
||||||
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
||||||
memWrite16((u32)p->addr & 0x0FFFFFFF,(u16)(mem ^ (p->data & 0x0000FFFF)));
|
memWrite16((u32)p->addr & 0x0FFFFFFF,(u16)(mem ^ (p->data & 0x0000FFFF)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (p->addr < 0xE0000000)
|
else if (p->addr < 0xE0000000)
|
||||||
{
|
{
|
||||||
if ((((u32)p->data & 0xFFFF0000) == 0x00000000) ||
|
if ((((u32)p->data & 0xFFFF0000) == 0x00000000) ||
|
||||||
(((u32)p->data & 0xFFFF0000) == 0x00100000) ||
|
(((u32)p->data & 0xFFFF0000) == 0x00100000) ||
|
||||||
(((u32)p->data & 0xFFFF0000) == 0x00200000) ||
|
(((u32)p->data & 0xFFFF0000) == 0x00200000) ||
|
||||||
(((u32)p->data & 0xFFFF0000) == 0x00300000))
|
(((u32)p->data & 0xFFFF0000) == 0x00300000))
|
||||||
{
|
{
|
||||||
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF);
|
||||||
if (mem != (0x0000FFFF & (u32)p->data)) SkipCount = 1;
|
if (mem != (0x0000FFFF & (u32)p->data)) SkipCount = 1;
|
||||||
PrevCheatType = 0;
|
PrevCheatType = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (p->addr < 0xF0000000)
|
else if (p->addr < 0xF0000000)
|
||||||
{
|
{
|
||||||
// We might be able to substitute:
|
if (((u32)p->data & 0xC0000000) == 0x00000000)
|
||||||
// if (((u32)p->data & 0xC0000000) == 0x00000000)
|
if ((((u32)p->data & 0xF0000000) == 0x00000000) ||
|
||||||
if ((((u32)p->data & 0xF0000000) == 0x00000000) ||
|
(((u32)p->data & 0xF0000000) == 0x10000000) ||
|
||||||
(((u32)p->data & 0xF0000000) == 0x10000000) ||
|
(((u32)p->data & 0xF0000000) == 0x20000000) ||
|
||||||
(((u32)p->data & 0xF0000000) == 0x20000000) ||
|
(((u32)p->data & 0xF0000000) == 0x30000000))
|
||||||
(((u32)p->data & 0xF0000000) == 0x30000000))
|
{
|
||||||
{
|
u16 mem = memRead16((u32)p->data & 0x0FFFFFFF);
|
||||||
u16 mem = memRead16((u32)p->data & 0x0FFFFFFF);
|
if (mem != (0x0000FFFF & (u32)p->addr)) SkipCount = ((u32)p->addr & 0xFFF0000) / 0x10000;
|
||||||
if (mem != (0x0000FFFF & (u32)p->addr)) SkipCount = ((u32)p->addr & 0xFFF0000) / 0x10000;
|
PrevCheatType = 0;
|
||||||
PrevCheatType = 0;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,7 +473,9 @@ void inifile_trim( wxString& buffer )
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void inisection_process( FILE * f1 )
|
// This routine recieves a file from inifile_read, trims it,
|
||||||
|
// Then sends the command to be parsed.
|
||||||
|
void inifile_process( FILE * f1 )
|
||||||
{
|
{
|
||||||
char buffer[ 1024 ];
|
char buffer[ 1024 ];
|
||||||
while( fgets( buffer, sizeof( buffer ), f1 ) )
|
while( fgets( buffer, sizeof( buffer ), f1 ) )
|
||||||
|
@ -484,8 +485,8 @@ void inisection_process( FILE * f1 )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//this routine is for reading the ini file
|
// This routine creates a pnach filename from the games crc,
|
||||||
|
// loads it, and passes it to inisection_process to be parsed.
|
||||||
void inifile_read( const char* name )
|
void inifile_read( const char* name )
|
||||||
{
|
{
|
||||||
FILE* f1;
|
FILE* f1;
|
||||||
|
@ -525,7 +526,7 @@ void inifile_read( const char* name )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
inisection_process( f1 );
|
inifile_process( f1 );
|
||||||
fclose( f1 );
|
fclose( f1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,17 +589,20 @@ void _ApplyPatch(IniPatch *p)
|
||||||
//this is for applying patches directly to memory
|
//this is for applying patches directly to memory
|
||||||
void ApplyPatch(int place)
|
void ApplyPatch(int place)
|
||||||
{
|
{
|
||||||
int i;
|
for (int i = 0; i < patchnumber; i++)
|
||||||
|
|
||||||
if (place == 0) Console.WriteLn(" patchnumber: %d", patchnumber);
|
|
||||||
|
|
||||||
for (i = 0; i < patchnumber; i++)
|
|
||||||
{
|
{
|
||||||
if (Patch[i].placetopatch == place)
|
if (Patch[i].placetopatch == place)
|
||||||
_ApplyPatch(&Patch[i]);
|
_ApplyPatch(&Patch[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InitPatch(wxString crc)
|
||||||
|
{
|
||||||
|
inifile_read(crc.ToUTF8());
|
||||||
|
Console.WriteLn("patchnumber: %d", patchnumber);
|
||||||
|
ApplyPatch(0);
|
||||||
|
}
|
||||||
|
|
||||||
void ResetPatch( void )
|
void ResetPatch( void )
|
||||||
{
|
{
|
||||||
patchnumber = 0;
|
patchnumber = 0;
|
||||||
|
|
|
@ -62,7 +62,7 @@ void inifile_command( char* cmd );
|
||||||
void inifile_trim( char* buffer );
|
void inifile_trim( char* buffer );
|
||||||
|
|
||||||
int AddPatch(int Mode, int Place, int Address, int Size, u64 data);
|
int AddPatch(int Mode, int Place, int Address, int Size, u64 data);
|
||||||
void ApplyPatch( int place );
|
void ApplyPatch( int place = 1);
|
||||||
void ResetPatch( void );
|
void ResetPatch( void );
|
||||||
|
|
||||||
extern int g_ZeroGSOptions;
|
extern int g_ZeroGSOptions;
|
||||||
|
|
Loading…
Reference in New Issue