diff --git a/pcsx2/x86/iR3000Atables.cpp b/pcsx2/x86/iR3000Atables.cpp index c472afe4f3..697c7103ff 100644 --- a/pcsx2/x86/iR3000Atables.cpp +++ b/pcsx2/x86/iR3000Atables.cpp @@ -37,6 +37,16 @@ static void rpsx##f() { \ /* branch = 2; */\ } +// Same as above but with a different naming convension (to avoid various rename) +#define REC_GTE_FUNC(f) \ +static void rgte##f() { \ + xMOV(ptr32[&psxRegs.code], (u32)psxRegs.code); \ + _psxFlushCall(FLUSH_EVERYTHING); \ + xFastCall((void*)(uptr)gte##f); \ + PSX_DEL_CONST(_Rt_); \ +/* branch = 2; */\ +} + extern void psxLWL(); extern void psxLWR(); extern void psxSWL(); @@ -1381,6 +1391,36 @@ void rpsxRFE() xFastCall((void*)(uptr)&iopTestIntc ); } +//// COP2 +REC_GTE_FUNC(RTPS); +REC_GTE_FUNC(NCLIP); +REC_GTE_FUNC(OP); +REC_GTE_FUNC(DPCS); +REC_GTE_FUNC(INTPL); +REC_GTE_FUNC(MVMVA); +REC_GTE_FUNC(NCDS); +REC_GTE_FUNC(CDP); +REC_GTE_FUNC(NCDT); +REC_GTE_FUNC(NCCS); +REC_GTE_FUNC(CC); +REC_GTE_FUNC(NCS); +REC_GTE_FUNC(NCT); +REC_GTE_FUNC(SQR); +REC_GTE_FUNC(DCPL); +REC_GTE_FUNC(DPCT); +REC_GTE_FUNC(AVSZ3); +REC_GTE_FUNC(AVSZ4); +REC_GTE_FUNC(RTPT); +REC_GTE_FUNC(GPF); +REC_GTE_FUNC(GPL); +REC_GTE_FUNC(NCCT); + +REC_GTE_FUNC(MFC2); +REC_GTE_FUNC(CFC2); +REC_GTE_FUNC(MTC2); +REC_GTE_FUNC(CTC2); + + // R3000A tables extern void (*rpsxBSC[64])(); extern void (*rpsxSPC[64])(); @@ -1392,7 +1432,8 @@ extern void (*rpsxCP2BSC[32])(); static void rpsxSPECIAL() { rpsxSPC[_Funct_](); } static void rpsxREGIMM() { rpsxREG[_Rt_](); } static void rpsxCOP0() { rpsxCP0[_Rs_](); } -//static void rpsxBASIC() { rpsxCP2BSC[_Rs_](); } +static void rpsxCOP2() { rpsxCP2[_Funct_](); } +static void rpsxBASIC() { rpsxCP2BSC[_Rs_](); } static void rpsxNULL() { Console.WriteLn("psxUNK: %8.8x", psxRegs.code); @@ -1402,7 +1443,7 @@ void (*rpsxBSC[64])() = { rpsxSPECIAL, rpsxREGIMM, rpsxJ , rpsxJAL , rpsxBEQ , rpsxBNE , rpsxBLEZ, rpsxBGTZ, rpsxADDI , rpsxADDIU , rpsxSLTI, rpsxSLTIU, rpsxANDI, rpsxORI , rpsxXORI, rpsxLUI , rpsxCOP0 , rpsxNULL , rpsxNULL, rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, - rpsxNULL , rpsxNULL , rpsxNULL, rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, + rpsxNULL , rpsxNULL , rpsxNULL /*rpsxCOP2*/, rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxLB , rpsxLH , rpsxLWL , rpsxLW , rpsxLBU , rpsxLHU , rpsxLWR , rpsxNULL, rpsxSB , rpsxSH , rpsxSWL , rpsxSW , rpsxNULL, rpsxNULL, rpsxSWR , rpsxNULL, rpsxNULL , rpsxNULL , rpsxNULL, rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, @@ -1434,6 +1475,24 @@ void (*rpsxCP0[32])() = { rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL }; +void (*rpsxCP2[64])() = { + rpsxBASIC, rgteRTPS , rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL , rgteNCLIP, rpsxNULL, // 00 + rpsxNULL , rpsxNULL , rpsxNULL , rpsxNULL, rgteOP , rpsxNULL , rpsxNULL , rpsxNULL, // 08 + rgteDPCS , rgteINTPL, rgteMVMVA, rgteNCDS, rgteCDP , rpsxNULL , rgteNCDT , rpsxNULL, // 10 + rpsxNULL , rpsxNULL , rpsxNULL , rgteNCCS, rgteCC , rpsxNULL , rgteNCS , rpsxNULL, // 18 + rgteNCT , rpsxNULL , rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL , rpsxNULL , rpsxNULL, // 20 + rgteSQR , rgteDCPL , rgteDPCT , rpsxNULL, rpsxNULL, rgteAVSZ3, rgteAVSZ4, rpsxNULL, // 28 + rgteRTPT , rpsxNULL , rpsxNULL , rpsxNULL, rpsxNULL, rpsxNULL , rpsxNULL , rpsxNULL, // 30 + rpsxNULL , rpsxNULL , rpsxNULL , rpsxNULL, rpsxNULL, rgteGPF , rgteGPL , rgteNCCT // 38 +}; + +void(*rpsxCP2BSC[32])() = { + rgteMFC2, rpsxNULL, rgteCFC2, rpsxNULL, rgteMTC2, rpsxNULL, rgteCTC2, rpsxNULL, + rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, + rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, + rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL, rpsxNULL +}; + //////////////////////////////////////////////// // Back-Prob Function Tables - Gathering Info // ////////////////////////////////////////////////