mirror of https://github.com/PCSX2/pcsx2.git
SPU2-X: Fixed some problems with saving/loading states, when loading from old savestate versions.
Pcsx2: Small speedup for the IOP's recClearMem (used a forceinline to cure MSVC's laxidazical inlining) git-svn-id: http://pcsx2.googlecode.com/svn/trunk@714 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
e88cf84e9c
commit
dacfe85189
|
@ -43,7 +43,6 @@
|
|||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
#ifndef __SAFEARRAY_H__
|
||||
#define __SAFEARRAY_H__
|
||||
|
||||
#include "System.h"
|
||||
|
||||
extern void* __fastcall pcsx2_aligned_malloc(size_t size, size_t align);
|
||||
extern void* __fastcall pcsx2_aligned_realloc(void* handle, size_t size, size_t align);
|
||||
extern void pcsx2_aligned_free(void* pmem);
|
||||
|
@ -202,7 +200,7 @@ protected:
|
|||
//
|
||||
//
|
||||
template< typename T >
|
||||
class SafeList : public SafeArray<T>
|
||||
class SafeList
|
||||
{
|
||||
public:
|
||||
static const int DefaultChunkSize = 0x80 * sizeof(T);
|
||||
|
|
|
@ -792,31 +792,8 @@ static s32 recExecuteBlock( s32 eeCycles )
|
|||
return psxBreak + psxCycleEE;
|
||||
}
|
||||
|
||||
static void recClear(u32 Addr, u32 Size)
|
||||
{
|
||||
u32 pc = Addr;
|
||||
while (pc < Addr + Size*4)
|
||||
pc += PSXREC_CLEARM(pc);
|
||||
}
|
||||
|
||||
// not used and not right for now
|
||||
#if 0
|
||||
void rpsxMemConstClear(u32 mem)
|
||||
{
|
||||
// NOTE! This assumes recLUT never changes its mapping
|
||||
if( !(psxRecLUT[mem>>16] + mem) )
|
||||
return;
|
||||
|
||||
CMP32ItoM((uptr)PSX_GETBLOCK(mem), iopJITCompile);
|
||||
j8Ptr[6] = JE8(0);
|
||||
|
||||
_callFunctionArg1((uptr)psxRecClearMem, MEM_CONSTTAG, mem);
|
||||
x86SetJ8(j8Ptr[6]);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Returns the offset to the next instruction after any cleared memory
|
||||
u32 psxRecClearMem(u32 pc)
|
||||
static __forceinline u32 psxRecClearMem(u32 pc)
|
||||
{
|
||||
BASEBLOCKEX* pexblock;
|
||||
BASEBLOCK* pblock;
|
||||
|
@ -885,6 +862,13 @@ u32 psxRecClearMem(u32 pc)
|
|||
return upperextent - pc;
|
||||
}
|
||||
|
||||
static void recClear(u32 Addr, u32 Size)
|
||||
{
|
||||
u32 pc = Addr;
|
||||
while (pc < Addr + Size*4)
|
||||
pc += PSXREC_CLEARM(pc);
|
||||
}
|
||||
|
||||
void psxSetBranchReg(u32 reg)
|
||||
{
|
||||
psxbranch = 1;
|
||||
|
|
|
@ -67,10 +67,9 @@ extern u32 g_iopCyclePenalty;
|
|||
void psxSaveBranchState();
|
||||
void psxLoadBranchState();
|
||||
|
||||
void psxSetBranchReg(u32 reg);
|
||||
void psxSetBranchImm( u32 imm );
|
||||
void psxRecompileNextInstruction(int delayslot);
|
||||
u32 psxRecClearMem(u32 p);
|
||||
extern void psxSetBranchReg(u32 reg);
|
||||
extern void psxSetBranchImm( u32 imm );
|
||||
extern void psxRecompileNextInstruction(int delayslot);
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// IOP Constant Propagation Defines, Vars, and API - From here down!
|
||||
|
|
|
@ -151,8 +151,6 @@ EXPORT_C_(s32) SPU2init()
|
|||
#endif
|
||||
srand((unsigned)time(NULL));
|
||||
|
||||
disableFreezes=false;
|
||||
|
||||
if (spu2init)
|
||||
{
|
||||
ConLog( " * SPU2: Already initialized - Ignoring SPU2init signal." );
|
||||
|
@ -448,9 +446,6 @@ EXPORT_C_(void) SPU2write(u32 rmem, u16 value)
|
|||
// for now, pData is not used
|
||||
EXPORT_C_(int) SPU2setupRecording(int start, void* pData)
|
||||
{
|
||||
// Don't record if we have a bogus state.
|
||||
if( disableFreezes ) return 0;
|
||||
|
||||
if(start==0)
|
||||
RecordStop();
|
||||
else if(start==1)
|
||||
|
|
|
@ -61,16 +61,6 @@ typedef s32 __fastcall FreezeHandlerFunction( SPU2freezeData& data );
|
|||
|
||||
s32 __fastcall FreezeIt( SPU2freezeData& spud )
|
||||
{
|
||||
if( disableFreezes )
|
||||
{
|
||||
// No point in making a save state since the SPU2
|
||||
// state is completely bogus anyway... Let's just
|
||||
// give this some random ID that no one will recognize.
|
||||
|
||||
strcpy( (char*)&spud, "invalid" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
spud.id = SAVE_ID;
|
||||
spud.version = SAVE_VERSION;
|
||||
|
||||
|
@ -125,7 +115,6 @@ s32 __fastcall ThawIt( SPU2freezeData& spud )
|
|||
printf("\tAudio may not recover correctly. Save your game to memorycard, reset,\n\n");
|
||||
printf(" and then continue from there.\n\n");
|
||||
|
||||
disableFreezes = true;
|
||||
resetClock = true;
|
||||
|
||||
// Do *not* reset the cores.
|
||||
|
@ -143,8 +132,6 @@ s32 __fastcall ThawIt( SPU2freezeData& spud )
|
|||
}
|
||||
else
|
||||
{
|
||||
disableFreezes=false;
|
||||
|
||||
// base stuff
|
||||
memcpy(spu2regs, spud.unkregs, 0x010000);
|
||||
memcpy(_spu2mem, spud.mem, 0x200000);
|
||||
|
@ -191,8 +178,6 @@ s32 __fastcall ThawIt( SPU2freezeData& spud )
|
|||
|
||||
s32 __fastcall SizeIt()
|
||||
{
|
||||
if( disableFreezes ) return 8; // length of the string id "invalid" (plus a zero!)
|
||||
|
||||
int size = sizeof(SPU2freezeData);
|
||||
|
||||
// calculate the amount of memory consumed by our cache:
|
||||
|
|
|
@ -39,10 +39,6 @@ DWORD CALLBACK TimeThread(PVOID /* unused param */);
|
|||
// [Air]: fixed the hacky part of UpdateTimer with this:
|
||||
bool resetClock = true;
|
||||
|
||||
// Used to make spu2 more robust at loading incompatible saves.
|
||||
// Disables re-freezing of save state data.
|
||||
bool disableFreezes = false;
|
||||
|
||||
void (* _irqcallback)();
|
||||
void (* dma4callback)();
|
||||
void (* dma7callback)();
|
||||
|
|
|
@ -170,7 +170,6 @@ extern u32 input_data_ptr;
|
|||
|
||||
extern int PlayMode;
|
||||
extern int recording;
|
||||
extern bool disableFreezes;
|
||||
|
||||
extern u32 lClocks;
|
||||
extern u32* cPtr;
|
||||
|
|
Loading…
Reference in New Issue