-Scaled back the EE load/store cycle count to the theoretical minimum of 1 cycle. (Fixes Digital Devil Saga PAL fmv)

-Added a safety to the VU cycle stealing hack, so it doesn't go berserk :p

Note:
Due to the changed cycle count a lot of games will get "slower".
Especially FMV will be affected.
This is unfortunate, but correct emulation comes first.
You can however enable the ee sync speedhacks, as they're more stable now as well.
This can bring back the lost speed.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@999 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
ramapcsx2 2009-04-17 12:39:22 +00:00
parent 986683323e
commit 984ca67042
2 changed files with 13 additions and 12 deletions

View File

@ -108,11 +108,8 @@ namespace R5900
static const int FPU_Mult = 12;
static const int Store = 28;
static const int Load = 22;
static const int StoreFast = 14;
static const int LoadFast = 12;
static const int Store = 8;
static const int Load = 8;
}
using namespace Cycles;
@ -263,28 +260,28 @@ namespace R5900
MakeOpcode( LB, Load );
MakeOpcode( LH, Load );
MakeOpcode( LWL, Load );
MakeOpcode( LW, LoadFast );
MakeOpcode( LW, Load );
MakeOpcode( LBU, Load );
MakeOpcode( LHU, Load );
MakeOpcode( LWR, Load );
MakeOpcode( LWU, Load );
MakeOpcode( LWC1, Load );
MakeOpcode( LQC2, Load );
MakeOpcode( LD, LoadFast );
MakeOpcode( LD, Load );
// Stores!
MakeOpcode( SQ, Store );
MakeOpcode( SB, Store );//slow
MakeOpcode( SH, Store );//slow
MakeOpcode( SB, Store );
MakeOpcode( SH, Store );
MakeOpcode( SWL, Store );
MakeOpcode( SW, StoreFast );
MakeOpcode( SW, Store );
MakeOpcode( SDL, Store );
MakeOpcode( SDR, Store );
MakeOpcode( SWR, Store );
MakeOpcode( SWC1, Store );
MakeOpcode( SQC2, Store );
MakeOpcode( SD, StoreFast );
MakeOpcode( SD, Store );
// Multimedia Instructions!

View File

@ -2294,7 +2294,11 @@ void SuperVUCleanupProgram(u32 startpc, int vuindex)
VU = vuindex ? &VU1 : &VU0;
VU->cycle += s_TotalVUCycles;
cpuRegs.cycle += s_TotalVUCycles * Config.VUCycleHack;
//VU cycle stealing hack, 3000 cycle maximum so it doesn't get out of hand
if (s_TotalVUCycles < 3000) cpuRegs.cycle += s_TotalVUCycles * Config.VUCycleHack;
else cpuRegs.cycle += 3000 * Config.VUCycleHack;
if( (int)s_writeQ > 0 ) VU->VI[REG_Q] = VU->q;
if( (int)s_writeP > 0 ) {
assert(VU == &VU1);