diff options
| author | iCatButler <i.am.catbutler@gmail.com> | 2018-03-13 17:23:50 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-13 17:23:50 +0000 |
| commit | 15fe3782c1375634b7a9bd9bbbadfd75e7b06fed (patch) | |
| tree | 6660b9aeb3f4aedf384a0a1c76d3a849d4f43146 | |
| parent | 540dccfdbd162f247d2390ac35df4144b28aab44 (diff) | |
| parent | 13c17e4b6ef1eee9ad60d3db2016ebb8e54bf337 (diff) | |
Merge pull request #5 from MrLavender/master
Fix 64-bit dynarec integration and update OS X build
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | libpcsxcore/ix86_64/iPGXP-64.h | 220 | ||||
| -rwxr-xr-x | libpcsxcore/ix86_64/iR3000A-64.c | 10 | ||||
| -rwxr-xr-x | libpcsxcore/ix86_64/ix86-64.h | 2 | ||||
| -rw-r--r-- | libpcsxcore/pgxp_gte.h | 2 | ||||
| -rw-r--r-- | macosx/Pcsxr.xcodeproj/project.pbxproj | 18 | ||||
| -rw-r--r-- | macosx/Resources/Base.lproj/Configuration.xib | 167 | ||||
| -rw-r--r-- | macosx/Source/ConfigurationController.h | 4 | ||||
| -rw-r--r-- | macosx/Source/ConfigurationController.m | 28 | ||||
| -rw-r--r-- | macosx/Source/PcsxrController.m | 14 | ||||
| -rw-r--r-- | macosx/Source/PgxpController.h | 24 | ||||
| -rw-r--r-- | macosx/Source/PgxpController.m | 98 | ||||
| -rw-r--r-- | macosx/Source/hotkeys.m | 6 | ||||
| -rw-r--r-- | macosx/plugins/PeopsXgl/Base.lproj/NetSfPeopsOpenGLConfig.xib | 467 | ||||
| -rw-r--r-- | macosx/plugins/PeopsXgl/PeopsXgl.exp | 4 | ||||
| -rwxr-xr-x | macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.h | 4 | ||||
| -rwxr-xr-x | macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.m | 31 |
17 files changed, 712 insertions, 389 deletions
@@ -6,3 +6,5 @@ macosx/build xcuserdata macosx/Info.plistvers.plist +project.xcworkspace +.DS_Store diff --git a/libpcsxcore/ix86_64/iPGXP-64.h b/libpcsxcore/ix86_64/iPGXP-64.h index be69c650..c61190f0 100644 --- a/libpcsxcore/ix86_64/iPGXP-64.h +++ b/libpcsxcore/ix86_64/iPGXP-64.h @@ -1,6 +1,24 @@ #ifndef _I_PGXP_H_ #define _I_PGXP_H_ +// Microsoft Windows uses a different x86_64 calling convention than everyone +// else. I have not yet bothered implementing it here because; +// +// 1. Nobody cares about a Windows 64-bit build of PCSXR since that would mean +// dropping popular closed source 32-bit plugins like Pete's OpenGL2 +// 2. The Windows convention is annoying (only 4 register params, caller must +// reserve stack space for register spilling) and would require more +// extensive code changes (e.g. the PGXP_DBG_OP_E() macro would have to +// handle cases where the arg needs to go on the stack instead of in a +// register, and cleanup afterwards). +// +// See https://msdn.microsoft.com/en-us/library/ms235286.aspx +// and https://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions +// +// MrLavender +#ifdef _MSC_VER +#error PGXP dynarec support is not implemented for Windows 64-bit +#endif ///////////////////////////////////////////// // PGXP wrapper functions @@ -8,13 +26,32 @@ void pgxpRecNULL() {} +// Debug wrappers for x86_64 (because eOp will be last) +#ifdef PGXP_CPU_DEBUG +static void PGXP64_psxTraceOp(u32 code, u32 eOp) { + PGXP_psxTraceOp(eOp, code); +} +static void PGXP64_psxTraceOp1(u32 code, u32 op1, u32 eOp) { + PGXP_psxTraceOp1(eOp, code, op1); +} +static void PGXP64_psxTraceOp2(u32 code, u32 op1, u32 op2, u32 eOp) { + PGXP_psxTraceOp2(eOp, code, op1, op2); +} +static void PGXP64_psxTraceOp3(u32 code, u32 op1, u32 op2, u32 op3, u32 eOp) { + PGXP_psxTraceOp3(eOp, code, op1, op2, op3); +} +static void PGXP64_psxTraceOp4(u32 code, u32 op1, u32 op2, u32 op3, u32 op4, u32 eOp) { + PGXP_psxTraceOp4(eOp, code, op1, op2, op3, op4); +} +#endif + // Choose between debug and direct function #ifdef PGXP_CPU_DEBUG -#define PGXP_REC_FUNC_OP(pu, op, nReg) PGXP_psxTraceOp##nReg -#define PGXP_DBG_OP_E(op) PUSH32I(DBG_E_##op); resp+=4; +#define PGXP_REC_FUNC_OP(pu, op, nReg) PGXP64_psxTraceOp##nReg +#define PGXP_DBG_OP_E(op, arg) MOV32ItoR(arg, DBG_E_##op); #else #define PGXP_REC_FUNC_OP(pu, op, nReg) PGXP_##pu##_##op -#define PGXP_DBG_OP_E(op) +#define PGXP_DBG_OP_E(op, arg) #endif #define PGXP_REC_FUNC_PASS(pu, op) \ @@ -24,45 +61,45 @@ static void pgxpRec##op() { \ #define PGXP_REC_FUNC(pu, op) \ static void pgxpRec##op() { \ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, )); \ - resp += 4; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + PGXP_DBG_OP_E(op, X86ARG2) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, )); \ rec##op();\ } #define PGXP_REC_FUNC_1(pu, op, reg1) \ static void pgxpRec##op() { \ reg1;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 1)); \ - resp += 8; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + POP64R(X86ARG2); \ + PGXP_DBG_OP_E(op, X86ARG3) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 1)); \ rec##op();\ } -#define PGXP_REC_FUNC_2_2(pu, op, test, nReg, reg1, reg2, reg3, reg4) \ -static void pgxpRec##op() { \ - if(test) { rec##op(); return; }\ - reg1;\ - reg2;\ - rec##op();\ - reg3;\ - reg4;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, nReg)); \ - resp += (4 * nReg) + 4; \ -} +//#define PGXP_REC_FUNC_2_2(pu, op, test, nReg, reg1, reg2, reg3, reg4) \ +//static void pgxpRec##op() { \ +// if(test) { rec##op(); return; }\ +// reg1;\ +// reg2;\ +// rec##op();\ +// reg3;\ +// reg4;\ +// PUSH32I(psxRegs.code); \ +// PGXP_DBG_OP_E(op) \ +// CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, nReg)); \ +// resp += (4 * nReg) + 4; \ +//} #define PGXP_REC_FUNC_2(pu, op, reg1, reg2) \ static void pgxpRec##op() { \ reg1;\ reg2;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 2)); \ - resp += 12; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + POP64R(X86ARG2); \ + POP64R(X86ARG3); \ + PGXP_DBG_OP_E(op, X86ARG4) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 2)); \ rec##op();\ } @@ -76,34 +113,34 @@ static void pgxpRec##op() \ } \ else\ {\ - MOV32MtoR(EAX, (u32)&psxRegs.GPR.r[_Rs_]);\ + MOV32MtoR(EAX, (uptr)&psxRegs.GPR.r[_Rs_]);\ if (_Imm_)\ {\ ADD32ItoR(EAX, _Imm_);\ }\ }\ - MOV32RtoM((u32)&gTempAddr, EAX);\ + MOV32RtoM((uptr)&gTempAddr, EAX);\ rec##op();\ - PUSH64M((u32)&gTempAddr);\ reg1;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 2)); \ - resp += 12; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + POP64R(X86ARG2); \ + MOV32MtoR(X86ARG3, (uptr)&gTempAddr); \ + PGXP_DBG_OP_E(op, X86ARG4) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 2)); \ } -#define CPU_REG_NC(idx) MOV32MtoR(EAX,(u32)&psxRegs.GPR.r[idx]) +#define CPU_REG_NC(idx) MOV32MtoR(EAX,(uptr)&psxRegs.GPR.r[idx]) #define CPU_REG(idx) \ if (IsConst(idx)) \ MOV32ItoR(EAX, iRegs[idx].k); \ else\ - MOV32MtoR(EAX, (u32)&psxRegs.GPR.r[idx]); + MOV32MtoR(EAX, (uptr)&psxRegs.GPR.r[idx]); -#define CP0_REG(idx) MOV32MtoR(EAX,(u32)&psxRegs.CP0.r[idx]) -#define GTE_DATA_REG(idx) MOV32MtoR(EAX,(u32)&psxRegs.CP2D.r[idx]) -#define GTE_CTRL_REG(idx) MOV32MtoR(EAX,(u32)&psxRegs.CP2C.r[idx]) +#define CP0_REG(idx) MOV32MtoR(EAX,(uptr)&psxRegs.CP0.r[idx]) +#define GTE_DATA_REG(idx) MOV32MtoR(EAX,(uptr)&psxRegs.CP2D.r[idx]) +#define GTE_CTRL_REG(idx) MOV32MtoR(EAX,(uptr)&psxRegs.CP2C.r[idx]) static u32 gTempInstr = 0; static u32 gTempReg1 = 0; @@ -113,14 +150,14 @@ static void pgxpRec##op() \ { \ if(test) { rec##op(); return; }\ reg1;\ - MOV32RtoM((u32)&gTempReg1, EAX);\ + MOV32RtoM((uptr)&gTempReg1, EAX);\ rec##op();\ - PUSH64M((u32)&gTempReg1);\ reg2;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 2)); \ - resp += 12; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + POP64R(X86ARG2); \ + MOV32MtoR(X86ARG3, (uptr)&gTempReg1); \ + PGXP_DBG_OP_E(op, X86ARG4) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 2)); \ } #define PGXP_REC_FUNC_R2_1(pu, op, test, reg1, reg2, reg3) \ @@ -128,17 +165,17 @@ static void pgxpRec##op() \ { \ if(test) { rec##op(); return; }\ reg1;\ - MOV32RtoM((u32)&gTempReg1, EAX);\ + MOV32RtoM((uptr)&gTempReg1, EAX);\ reg2;\ - MOV32RtoM((u32)&gTempReg2, EAX);\ + MOV32RtoM((uptr)&gTempReg2, EAX);\ rec##op();\ - PUSH64M((u32)&gTempReg1);\ - PUSH64M((u32)&gTempReg2);\ reg3;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 3)); \ - resp += 16; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + POP64R(X86ARG2); \ + MOV32MtoR(X86ARG3, (uptr)&gTempReg2); \ + MOV32MtoR(X86ARG4, (uptr)&gTempReg1); \ + PGXP_DBG_OP_E(op, X86ARG5) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 3)); \ } #define PGXP_REC_FUNC_R2_2(pu, op, test, reg1, reg2, reg3, reg4) \ @@ -146,18 +183,19 @@ static void pgxpRec##op() \ { \ if(test) { rec##op(); return; }\ reg1;\ - MOV32RtoM((u32)&gTempReg1, EAX);\ + MOV32RtoM((uptr)&gTempReg1, EAX);\ reg2;\ - MOV32RtoM((u32)&gTempReg2, EAX);\ + MOV32RtoM((uptr)&gTempReg2, EAX);\ rec##op();\ - PUSH64M((u32)&gTempReg1);\ - PUSH64M((u32)&gTempReg2);\ reg3;\ reg4;\ - PUSH32I(psxRegs.code); \ - PGXP_DBG_OP_E(op) \ - CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 4)); \ - resp += 20; \ + MOV32ItoR(X86ARG1, psxRegs.code); \ + POP64R(X86ARG2); \ + POP64R(X86ARG3); \ + MOV32MtoR(X86ARG4, (uptr)&gTempReg2); \ + MOV32MtoR(X86ARG5, (uptr)&gTempReg1); \ + PGXP_DBG_OP_E(op, X86ARG6) \ + CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 4)); \ } //#define PGXP_REC_FUNC_R1i_1(pu, op, test, reg1, reg2) \ @@ -167,16 +205,29 @@ static void pgxpRec##op() \ // if (IsConst(reg1)) \ // MOV32ItoR(EAX, iRegs[reg1].k); \ // else\ -// MOV32MtoR(EAX, (u32)&psxRegs.GPR.r[reg1]);\ -// MOV32RtoM((u32)&gTempReg, EAX);\ +// MOV32MtoR(EAX, (uptr)&psxRegs.GPR.r[reg1]);\ +// MOV32RtoM((uptr)&gTempReg, EAX);\ // rec##op();\ -// PUSH64M((u32)&gTempReg);\ +// PUSH64M((uptr)&gTempReg);\ // reg2;\ // PUSH32I(psxRegs.code); \ -// CALLFunc((u32)PGXP_REC_FUNC_OP(pu, op, 2)); \ +// CALLFunc((uptr)PGXP_REC_FUNC_OP(pu, op, 2)); \ // resp += 12; \ //} +// Push m32 +#define PUSH32M(from) MOV32MtoR(EAX, from); PUSH64R(RAX); + +static void iPushReg(int reg) +{ + if (IsConst(reg)) { + PUSH32I(iRegs[reg].k); + } + else { + PUSH32M((uptr)&psxRegs.GPR.r[reg]); + } +} + // Rt = Rs op imm PGXP_REC_FUNC_R1_1(CPU, ADDI, !_Rt_, CPU_REG(_Rs_), iPushReg(_Rt_)) PGXP_REC_FUNC_R1_1(CPU, ADDIU, !_Rt_, CPU_REG(_Rs_), iPushReg(_Rt_)) @@ -187,7 +238,18 @@ PGXP_REC_FUNC_R1_1(CPU, SLTI, !_Rt_, CPU_REG(_Rs_), iPushReg(_Rt_)) PGXP_REC_FUNC_R1_1(CPU, SLTIU, !_Rt_, CPU_REG(_Rs_), iPushReg(_Rt_)) // Rt = imm -PGXP_REC_FUNC_2_2(CPU, LUI, !_Rt_, 1, , , iPushReg(_Rt_), ) +//PGXP_REC_FUNC_2_2(CPU, LUI, !_Rt_, 1, , , iPushReg(_Rt_), ) +//This macro is harder to implement for x86_64, and only used once, so... :) MrL +static void pgxpRecLUI() +{ + if (!_Rt_) { recLUI(); return; } + recLUI(); + iPushReg(_Rt_); + MOV32ItoR(X86ARG1, psxRegs.code); + POP64R(X86ARG2); + PGXP_DBG_OP_E(LUI, X86ARG3) + CALLFunc((uptr)PGXP_REC_FUNC_OP(CPU, LUI, 1)); +} // Rd = Rs op Rt PGXP_REC_FUNC_R2_1(CPU, ADD, !_Rd_, CPU_REG(_Rt_), CPU_REG(_Rs_), iPushReg(_Rd_)) @@ -202,10 +264,10 @@ PGXP_REC_FUNC_R2_1(CPU, SLT, !_Rd_, CPU_REG(_Rt_), CPU_REG(_Rs_), iPushReg(_Rd_) PGXP_REC_FUNC_R2_1(CPU, SLTU, !_Rd_, CPU_REG(_Rt_), CPU_REG(_Rs_), iPushReg(_Rd_)) // Hi/Lo = Rs op Rt -PGXP_REC_FUNC_R2_2(CPU, MULT, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH64M((u32)&psxRegs.GPR.n.lo), PUSH64M((u32)&psxRegs.GPR.n.hi)) -PGXP_REC_FUNC_R2_2(CPU, MULTU, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH64M((u32)&psxRegs.GPR.n.lo), PUSH64M((u32)&psxRegs.GPR.n.hi)) -PGXP_REC_FUNC_R2_2(CPU, DIV, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH64M((u32)&psxRegs.GPR.n.lo), PUSH64M((u32)&psxRegs.GPR.n.hi)) -PGXP_REC_FUNC_R2_2(CPU, DIVU, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH64M((u32)&psxRegs.GPR.n.lo), PUSH64M((u32)&psxRegs.GPR.n.hi)) +PGXP_REC_FUNC_R2_2(CPU, MULT, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH32M((uptr)&psxRegs.GPR.n.lo), PUSH32M((uptr)&psxRegs.GPR.n.hi)) +PGXP_REC_FUNC_R2_2(CPU, MULTU, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH32M((uptr)&psxRegs.GPR.n.lo), PUSH32M((uptr)&psxRegs.GPR.n.hi)) +PGXP_REC_FUNC_R2_2(CPU, DIV, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH32M((uptr)&psxRegs.GPR.n.lo), PUSH32M((uptr)&psxRegs.GPR.n.hi)) +PGXP_REC_FUNC_R2_2(CPU, DIVU, 0, CPU_REG(_Rt_), CPU_REG(_Rs_), PUSH32M((uptr)&psxRegs.GPR.n.lo), PUSH32M((uptr)&psxRegs.GPR.n.hi)) PGXP_REC_FUNC_ADDR_1(CPU, SB, iPushReg(_Rt_)) PGXP_REC_FUNC_ADDR_1(CPU, SH, iPushReg(_Rt_)) @@ -232,24 +294,24 @@ PGXP_REC_FUNC_R2_1(CPU, SRLV, !_Rd_, CPU_REG(_Rs_), CPU_REG(_Rt_), iPushReg(_Rd_ PGXP_REC_FUNC_R2_1(CPU, SRAV, !_Rd_, CPU_REG(_Rs_), CPU_REG(_Rt_), iPushReg(_Rd_)) PGXP_REC_FUNC_R1_1(CPU, MFHI, !_Rd_, CPU_REG_NC(33), iPushReg(_Rd_)) -PGXP_REC_FUNC_R1_1(CPU, MTHI, 0, CPU_REG(_Rd_), PUSH64M((u32)&psxRegs.GPR.n.hi)) +PGXP_REC_FUNC_R1_1(CPU, MTHI, 0, CPU_REG(_Rd_), PUSH32M((uptr)&psxRegs.GPR.n.hi)) PGXP_REC_FUNC_R1_1(CPU, MFLO, !_Rd_, CPU_REG_NC(32), iPushReg(_Rd_)) -PGXP_REC_FUNC_R1_1(CPU, MTLO, 0, CPU_REG(_Rd_), PUSH64M((u32)&psxRegs.GPR.n.lo)) +PGXP_REC_FUNC_R1_1(CPU, MTLO, 0, CPU_REG(_Rd_), PUSH32M((uptr)&psxRegs.GPR.n.lo)) // COP2 (GTE) PGXP_REC_FUNC_R1_1(GTE, MFC2, !_Rt_, GTE_DATA_REG(_Rd_), iPushReg(_Rt_)) PGXP_REC_FUNC_R1_1(GTE, CFC2, !_Rt_, GTE_CTRL_REG(_Rd_), iPushReg(_Rt_)) -PGXP_REC_FUNC_R1_1(GTE, MTC2, 0, CPU_REG(_Rt_), PUSH64M((u32)&psxRegs.CP2D.r[_Rd_])) -PGXP_REC_FUNC_R1_1(GTE, CTC2, 0, CPU_REG(_Rt_), PUSH64M((u32)&psxRegs.CP2C.r[_Rd_])) +PGXP_REC_FUNC_R1_1(GTE, MTC2, 0, CPU_REG(_Rt_), PUSH32M((uptr)&psxRegs.CP2D.r[_Rd_])) +PGXP_REC_FUNC_R1_1(GTE, CTC2, 0, CPU_REG(_Rt_), PUSH32M((uptr)&psxRegs.CP2C.r[_Rd_])) -PGXP_REC_FUNC_ADDR_1(GTE, LWC2, PUSH64M((u32)&psxRegs.CP2D.r[_Rt_])) -PGXP_REC_FUNC_ADDR_1(GTE, SWC2, PUSH64M((u32)&psxRegs.CP2D.r[_Rt_])) +PGXP_REC_FUNC_ADDR_1(GTE, LWC2, PUSH32M((uptr)&psxRegs.CP2D.r[_Rt_])) +PGXP_REC_FUNC_ADDR_1(GTE, SWC2, PUSH32M((uptr)&psxRegs.CP2D.r[_Rt_])) // COP0 PGXP_REC_FUNC_R1_1(CP0, MFC0, !_Rd_, CP0_REG(_Rd_), iPushReg(_Rt_)) PGXP_REC_FUNC_R1_1(CP0, CFC0, !_Rd_, CP0_REG(_Rd_), iPushReg(_Rt_)) -PGXP_REC_FUNC_R1_1(CP0, MTC0, !_Rt_, CPU_REG(_Rt_), PUSH64M((u32)&psxRegs.CP0.r[_Rd_])) -PGXP_REC_FUNC_R1_1(CP0, CTC0, !_Rt_, CPU_REG(_Rt_), PUSH64M((u32)&psxRegs.CP0.r[_Rd_])) +PGXP_REC_FUNC_R1_1(CP0, MTC0, !_Rt_, CPU_REG(_Rt_), PUSH32M((uptr)&psxRegs.CP0.r[_Rd_])) +PGXP_REC_FUNC_R1_1(CP0, CTC0, !_Rt_, CPU_REG(_Rt_), PUSH32M((uptr)&psxRegs.CP0.r[_Rd_])) PGXP_REC_FUNC(CP0, RFE) #endif//_I_PGXP_H_ diff --git a/libpcsxcore/ix86_64/iR3000A-64.c b/libpcsxcore/ix86_64/iR3000A-64.c index e1245987..64d9c1d5 100755 --- a/libpcsxcore/ix86_64/iR3000A-64.c +++ b/libpcsxcore/ix86_64/iR3000A-64.c @@ -191,16 +191,6 @@ static void iFlushRegs() { } } -static void iPushReg(int reg) -{ - if (IsConst(reg)) { - PUSH32I(iRegs[reg].k); - } - else { - PUSH64M((uptr)&psxRegs.GPR.r[reg]); - } -} - static void iStoreCycle() { count = ((pc - pcold) / 4) * BIAS; ADD32ItoM((uptr)&psxRegs.cycle, count); diff --git a/libpcsxcore/ix86_64/ix86-64.h b/libpcsxcore/ix86_64/ix86-64.h index 009fa5a1..f0c84023 100755 --- a/libpcsxcore/ix86_64/ix86-64.h +++ b/libpcsxcore/ix86_64/ix86-64.h @@ -90,6 +90,8 @@ extern x86IntRegType g_x86non8bitregs[3]; #define X86ARG2 RSI #define X86ARG3 RDX #define X86ARG4 RCX +#define X86ARG5 R8 +#define X86ARG6 R9 #endif #else diff --git a/libpcsxcore/pgxp_gte.h b/libpcsxcore/pgxp_gte.h index 845ee06d..de607c99 100644 --- a/libpcsxcore/pgxp_gte.h +++ b/libpcsxcore/pgxp_gte.h @@ -61,7 +61,7 @@ void PGXP_GTE_SWC2(u32 instr, u32 rtVal, u32 addr); // copy GTE reg to memory # define max(a, b) ((a) > (b) ? (a) : (b))
#endif
#ifndef min
-#define min(a,b) (((a) < (b)) ? (a) : (b))
+# define min(a, b) ((a) < (b) ? (a) : (b))
#endif
#endif /* _PGXP_GTE_H_ */
diff --git a/macosx/Pcsxr.xcodeproj/project.pbxproj b/macosx/Pcsxr.xcodeproj/project.pbxproj index cd2c2b43..82807a83 100644 --- a/macosx/Pcsxr.xcodeproj/project.pbxproj +++ b/macosx/Pcsxr.xcodeproj/project.pbxproj @@ -218,8 +218,8 @@ 55E0ACE0178B69620005C945 /* LaunchArg.m in Sources */ = {isa = PBXBuildFile; fileRef = 55E0ACDF178B69600005C945 /* LaunchArg.m */; }; 55EC05FB1788B1230053AC23 /* PcsxrMemCardArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 55EC05FA1788B1230053AC23 /* PcsxrMemCardArray.m */; }; 55EC05FE178916E80053AC23 /* MemBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 55EC05FD178916E70053AC23 /* MemBadgeView.m */; }; + 662A3D691F05E8D500232572 /* PgxpController.m in Sources */ = {isa = PBXBuildFile; fileRef = 662A3D681F05E8D500232572 /* PgxpController.m */; }; 6F5FF71A1CE4D3B2005D8636 /* pgxp_gpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FF7171CE4D1D5005D8636 /* pgxp_gpu.c */; }; - 6F5FF71B1CE4D3B2005D8636 /* pgxp_gpu.h in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FF7181CE4D1D5005D8636 /* pgxp_gpu.h */; }; 6F5FF7211CE4DE68005D8636 /* pgxp_gte.c in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FF71F1CE4DE68005D8636 /* pgxp_gte.c */; }; 6FAC15EB1D4CCA6C0028E89C /* pgxp_value.c in Sources */ = {isa = PBXBuildFile; fileRef = 6FAC15E91D4CCA6C0028E89C /* pgxp_value.c */; }; 6FDBDA711D0DB58300313918 /* pgxp_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 6FDBDA6A1D0DB58300313918 /* pgxp_cpu.c */; }; @@ -815,6 +815,8 @@ 55EE2D9017E2323400FED42A /* ecm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecm.h; sourceTree = "<group>"; }; 55F41A2017EF774500605DF8 /* version.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = version.sh; sourceTree = "<group>"; }; 55F41A2117EF7A3300605DF8 /* Info.plistvers.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plistvers.plist; path = ../Info.plistvers.plist; sourceTree = "<group>"; }; + 662A3D671F05E8D500232572 /* PgxpController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PgxpController.h; sourceTree = "<group>"; }; + 662A3D681F05E8D500232572 /* PgxpController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PgxpController.m; sourceTree = "<group>"; }; 6F4B24AB1D54D67E000B7071 /* iPGXP-64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iPGXP-64.h"; sourceTree = "<group>"; }; 6F5FF7171CE4D1D5005D8636 /* pgxp_gpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pgxp_gpu.c; sourceTree = "<group>"; }; 6F5FF7181CE4D1D5005D8636 /* pgxp_gpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pgxp_gpu.h; sourceTree = "<group>"; }; @@ -824,7 +826,6 @@ 6F5FF7201CE4DE68005D8636 /* pgxp_gte.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pgxp_gte.h; sourceTree = "<group>"; }; 6FAC15E91D4CCA6C0028E89C /* pgxp_value.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pgxp_value.c; sourceTree = "<group>"; }; 6FAC15EA1D4CCA6C0028E89C /* psxinterpreter_pgxp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = psxinterpreter_pgxp.h; sourceTree = "<group>"; }; - 6FAC15EC1D4CCAC00028E89C /* pgxp_value.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pgxp_value.c; sourceTree = "<group>"; }; 6FDBDA6A1D0DB58300313918 /* pgxp_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pgxp_cpu.c; sourceTree = "<group>"; }; 6FDBDA6B1D0DB58300313918 /* pgxp_cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pgxp_cpu.h; sourceTree = "<group>"; }; 6FDBDA6C1D0DB58300313918 /* pgxp_debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pgxp_debug.c; sourceTree = "<group>"; }; @@ -832,9 +833,6 @@ 6FDBDA6E1D0DB58300313918 /* pgxp_mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pgxp_mem.c; sourceTree = "<group>"; }; 6FDBDA6F1D0DB58300313918 /* pgxp_mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pgxp_mem.h; sourceTree = "<group>"; }; 6FDBDA701D0DB58300313918 /* pgxp_value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pgxp_value.h; sourceTree = "<group>"; }; - 6FDBDA741D0DB63800313918 /* pgxp_cpu.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pgxp_cpu.c; sourceTree = "<group>"; }; - 6FDBDA751D0DB63800313918 /* pgxp_debug.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pgxp_debug.c; sourceTree = "<group>"; }; - 6FDBDA761D0DB63800313918 /* pgxp_mem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pgxp_mem.c; sourceTree = "<group>"; }; 712FD1E51093096F00575A92 /* debug.c */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.c; path = debug.c; sourceTree = "<group>"; }; 712FD1E61093096F00575A92 /* socket.c */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.c; path = socket.c; sourceTree = "<group>"; }; 712FD1E71093096F00575A92 /* socket.h */ = {isa = PBXFileReference; fileEncoding = 0; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = "<group>"; }; @@ -1117,11 +1115,6 @@ 2BCE23B204C6B52C007C2DA3 /* libpcsxcore */ = { isa = PBXGroup; children = ( - 6FAC15EC1D4CCAC00028E89C /* pgxp_value.c */, - 6FDBDA741D0DB63800313918 /* pgxp_cpu.c */, - 6FDBDA751D0DB63800313918 /* pgxp_debug.c */, - 6FDBDA761D0DB63800313918 /* pgxp_mem.c */, - 6FAC15E91D4CCA6C0028E89C /* pgxp_value.c */, 6FAC15EA1D4CCA6C0028E89C /* psxinterpreter_pgxp.h */, 6FDBDA6A1D0DB58300313918 /* pgxp_cpu.c */, 6FDBDA6B1D0DB58300313918 /* pgxp_cpu.h */, @@ -1129,6 +1122,7 @@ 6FDBDA6D1D0DB58300313918 /* pgxp_debug.h */, 6FDBDA6E1D0DB58300313918 /* pgxp_mem.c */, 6FDBDA6F1D0DB58300313918 /* pgxp_mem.h */, + 6FAC15E91D4CCA6C0028E89C /* pgxp_value.c */, 6FDBDA701D0DB58300313918 /* pgxp_value.h */, 6F5FF71F1CE4DE68005D8636 /* pgxp_gte.c */, 6F5FF7201CE4DE68005D8636 /* pgxp_gte.h */, @@ -1779,6 +1773,8 @@ D422E67916DC495800526DCF /* CheatController.m */, 0280B7AB16764CC3007B8001 /* HotkeyController.h */, 0280B7AC16764CC3007B8001 /* HotkeyController.m */, + 662A3D671F05E8D500232572 /* PgxpController.h */, + 662A3D681F05E8D500232572 /* PgxpController.m */, ); name = Controllers; sourceTree = "<group>"; @@ -2345,6 +2341,7 @@ 0280B7AD16764CC5007B8001 /* HotkeyController.m in Sources */, 02717968167884C9004AED62 /* hotkeys.m in Sources */, 5529EA11169CBE3400BAA2A5 /* RecentItemsMenu.m in Sources */, + 662A3D691F05E8D500232572 /* PgxpController.m in Sources */, D422E67A16DC495800526DCF /* CheatController.m in Sources */, 55EC05FB1788B1230053AC23 /* PcsxrMemCardArray.m in Sources */, 55EC05FE178916E80053AC23 /* MemBadgeView.m in Sources */, @@ -2474,7 +2471,6 @@ buildActionMask = 2147483647; files = ( 6F5FF71A1CE4D3B2005D8636 /* pgxp_gpu.c in Sources */, - 6F5FF71B1CE4D3B2005D8636 /* pgxp_gpu.h in Sources */, 551A775217869C8B0052D185 /* draw.c in Sources */, 551A775317869C8D0052D185 /* fps.c in Sources */, 551A775417869C900052D185 /* gpu.c in Sources */, diff --git a/macosx/Resources/Base.lproj/Configuration.xib b/macosx/Resources/Base.lproj/Configuration.xib index 5c9fdac0..cd0e573d 100644 --- a/macosx/Resources/Base.lproj/Configuration.xib +++ b/macosx/Resources/Base.lproj/Configuration.xib @@ -1,14 +1,17 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="14F2411" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies> <deployment identifier="macosx"/> - <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6250"/> + <development version="6300" identifier="xcode"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/> </dependencies> <objects> <customObject id="-2" userLabel="File's Owner" customClass="ConfigurationController"> <connections> <outlet property="cdromPlugin" destination="397" id="401"/> <outlet property="consoleOutputCell" destination="1278" id="1281"/> + <outlet property="cpuOverclocking" destination="03L-mr-xTn" id="lVg-X9-WHd"/> + <outlet property="cpuOverclockingValue" destination="vyM-WJ-sZf" id="5Sf-Nn-E1N"/> <outlet property="enableNetPlayCell" destination="640" id="651"/> <outlet property="graphicsPlugin" destination="384" id="402"/> <outlet property="hkController" destination="656" id="832"/> @@ -30,6 +33,7 @@ <outlet property="vTypePALCell" destination="560" id="569"/> <outlet property="widescreen" destination="652" id="653"/> <outlet property="window" destination="21" id="345"/> + <outlet property="wipeoutMemHack" destination="Qij-Wg-2W0" id="Iyu-pP-Pk8"/> </connections> </customObject> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> @@ -37,7 +41,7 @@ <window title="PCSXR Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" visibleAtLaunch="NO" animationBehavior="documentWindow" id="21"> <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/> <rect key="contentRect" x="55" y="345" width="513" height="473"/> - <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/> + <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/> <view key="contentView" id="2"> <rect key="frame" x="0.0" y="0.0" width="513" height="473"/> <autoresizingMask key="autoresizingMask"/> @@ -249,6 +253,63 @@ <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> </box> + <box fixedFrame="YES" title="CPU Overclocking" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="8gb-HW-f3X"> + <rect key="frame" x="194" y="234" width="256" height="73"/> + <view key="contentView"> + <rect key="frame" x="1" y="1" width="254" height="57"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <matrix verticalHuggingPriority="750" fixedFrame="YES" mode="highlight" allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Uwn-ba-l80"> + <rect key="frame" x="18" y="10" width="145" height="40"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + <size key="cellSize" width="145" height="18"/> + <size key="intercellSpacing" width="4" height="4"/> + <buttonCell key="prototype" type="check" title="Switch" bezelStyle="regularSquare" imagePosition="left" inset="2" id="opj-md-u7G"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <cells> + <column> + <buttonCell type="check" title="CPU Overclocking" bezelStyle="regularSquare" imagePosition="left" inset="2" id="03L-mr-xTn"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <buttonCell type="check" title="WipeOut MemHack" bezelStyle="regularSquare" imagePosition="left" inset="2" id="Qij-Wg-2W0"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </column> + </cells> + <connections> + <action selector="setCheckbox:" target="-2" id="mb4-BQ-gqt"/> + </connections> + </matrix> + <comboBox focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vyM-WJ-sZf"> + <rect key="frame" x="170" y="26" width="69" height="26"/> + <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" focusRingType="none" title="1.50" drawsBackground="YES" completes="NO" numberOfVisibleItems="8" id="9wB-0E-Yoz"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + <objectValues> + <string>0.50</string> + <string>0.75</string> + <string>1.25</string> + <string>1.50</string> + <string>2.00</string> + <string>3.00</string> + <string>4.00</string> + <string>5.00</string> + </objectValues> + </comboBoxCell> + <connections> + <action selector="setOverclockValue:" target="-2" id="UxU-V7-Zr2"/> + </connections> + </comboBox> + </subviews> + </view> + <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> + <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </box> </subviews> <constraints> <constraint firstItem="502" firstAttribute="leading" secondItem="239" secondAttribute="leading" constant="20" symbolic="YES" id="2H1-We-aph"/> @@ -1120,6 +1181,96 @@ </connections> </view> </tabViewItem> + <tabViewItem label="PGXP" identifier="5" id="ItE-eF-wNU"> + <view key="view" id="uj1-Je-S5K"> + <rect key="frame" x="10" y="33" width="467" height="411"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box fixedFrame="YES" title="Options" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="Rt6-IS-wqH"> + <rect key="frame" x="6" y="271" width="455" height="120"/> + <view key="contentView"> + <rect key="frame" x="1" y="1" width="453" height="104"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tsJ-kM-vyh"> + <rect key="frame" x="16" y="78" width="421" height="18"/> + <buttonCell key="cell" type="check" title="Enable PGXP GTE Vertex Creation" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="UNI-6T-hmi"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <connections> + <action selector="onOptionChange:" target="UdY-FQ-YOS" id="15S-hO-egW"/> + </connections> + </button> + <button fixedFrame="YES" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="Wdx-wr-geL"> + <rect key="frame" x="16" y="45" width="421" height="18"/> + <buttonCell key="cell" type="check" title="Enable Vertex Caching" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="kLH-VO-dOD"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <connections> + <action selector="onOptionChange:" target="UdY-FQ-YOS" id="VDM-Oe-3Dk"/> + </connections> + </button> + <button fixedFrame="YES" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="Tkd-qg-5M6"> + <rect key="frame" x="16" y="12" width="421" height="18"/> + <buttonCell key="cell" type="check" title="Enable Perspective Correct Texturing" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="IvO-v3-jAg"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <connections> + <action selector="onOptionChange:" target="UdY-FQ-YOS" id="azW-yM-Zed"/> + </connections> + </button> + </subviews> + </view> + <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> + <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </box> + <box fixedFrame="YES" title="PGXP Mode" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="7QK-TQ-CUh"> + <rect key="frame" x="6" y="65" width="455" height="192"/> + <view key="contentView"> + <rect key="frame" x="1" y="1" width="453" height="176"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2dk-sa-eo0"> + <rect key="frame" x="127" y="142" width="200" height="26"/> + <popUpButtonCell key="cell" type="push" title="Memory + CPU Logic" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="TUy-0G-7uN" id="kbY-zW-v7U"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="menu"/> + <menu key="menu" id="nNG-em-hU1"> + <items> + <menuItem title="Disabled" id="fAx-O9-gEO"/> + <menuItem title="Memory only" id="sgV-aX-jWN"/> + <menuItem title="Memory + CPU Logic" state="on" id="TUy-0G-7uN"/> + </items> + </menu> + </popUpButtonCell> + <connections> + <action selector="onModeChange:" target="UdY-FQ-YOS" id="H4c-zg-rOQ"/> + </connections> + </popUpButton> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="hf8-BH-ZfI"> + <rect key="frame" x="18" y="14" width="419" height="119"/> + <textFieldCell key="cell" sendsActionOnEndEditing="YES" id="EFJ-3O-jnA"> + <font key="font" metaFont="system"/> + <string key="title">Memory and CPU arithmetic operations + +PGXP is mirroring load, store and transfer operations of the CPU and GTE and arithmetic/logic functions of the PSX CPU. + +(WARNING: This mode is currently unfinished and may cause incorrect behaviour in some games)</string> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> + <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </box> + </subviews> + </view> + </tabViewItem> </tabViewItems> <connections> <outlet property="delegate" destination="-2" id="780"/> @@ -1136,6 +1287,7 @@ <connections> <outlet property="delegate" destination="-2" id="478"/> </connections> + <point key="canvasLocation" x="232.5" y="363.5"/> </window> <view id="957" userLabel="MemCardObjectView"> <rect key="frame" x="0.0" y="0.0" width="180" height="107"/> @@ -1329,6 +1481,15 @@ <outlet property="view" destination="580" id="993"/> </connections> </viewController> + <viewController id="UdY-FQ-YOS" customClass="PgxpController"> + <connections> + <outlet property="perspectiveCorrect" destination="Tkd-qg-5M6" id="4nW-Sp-e4F"/> + <outlet property="pgxpModeButton" destination="2dk-sa-eo0" id="JXH-gN-MI4"/> + <outlet property="pgxpModeLabel" destination="hf8-BH-ZfI" id="EFr-NH-bnq"/> + <outlet property="vertexCaching" destination="Wdx-wr-geL" id="NFe-s6-ajV"/> + <outlet property="vertexCreation" destination="tsJ-kM-vyh" id="WPB-EW-N0e"/> + </connections> + </viewController> </objects> <resources> <image name="NSAdvanced" width="32" height="32"/> diff --git a/macosx/Source/ConfigurationController.h b/macosx/Source/ConfigurationController.h index 90dde217..595b91f8 100644 --- a/macosx/Source/ConfigurationController.h +++ b/macosx/Source/ConfigurationController.h @@ -39,10 +39,14 @@ extern NSString *const memCardChangeNumberKey; @property (weak) IBOutlet NSButtonCell *noFastBootCell; @property (weak) IBOutlet NSButtonCell *enableNetPlayCell; @property (weak) IBOutlet NSButtonCell *widescreen; +@property (weak) IBOutlet NSButtonCell *cpuOverclocking; +@property (weak) IBOutlet NSButtonCell *wipeoutMemHack; +@property (weak) IBOutlet NSComboBox *cpuOverclockingValue; - (IBAction)setCheckbox:(id)sender; - (IBAction)setCheckboxInverse:(id)sender; - (IBAction)setVideoType:(id)sender; +- (IBAction)setOverclockValue:(NSComboBox *)sender; + (void)setMemoryCard:(NSInteger)theCard toPath:(NSString *)theFile; + (void)setMemoryCard:(NSInteger)theCard toURL:(NSURL *)theURL; diff --git a/macosx/Source/ConfigurationController.m b/macosx/Source/ConfigurationController.m index c7b63335..7485e067 100644 --- a/macosx/Source/ConfigurationController.m +++ b/macosx/Source/ConfigurationController.m @@ -41,6 +41,9 @@ NSString *const memCardChangeNumberKey = @"PcsxrMemoryCardThatChangedKey"; @synthesize memCardEdit; @synthesize hkController; @synthesize hkTab; +@synthesize cpuOverclocking; +@synthesize wipeoutMemHack; +@synthesize cpuOverclockingValue; + (void)setMemoryCard:(NSInteger)theCard toURL:(NSURL *)theURL; { @@ -178,6 +181,26 @@ NSString *const memCardChangeNumberKey = @"PcsxrMemoryCardThatChangedKey"; } } +- (IBAction)setOverclockValue:(NSComboBox *)sender +{ + float value = sender.floatValue; + if (value < 0.5) value = 0.5; + if (value > 5.0) value = 5.0; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setFloat:value forKey:@"CpuOverclockingValue"]; + [PcsxrController setConfigFromDefaults]; + + [self setOverclockValueText]; +} + +- (void)setOverclockValueText +{ + NSString *value = [NSString stringWithFormat:@"%.2f", Config.PsxClock]; + [cpuOverclockingValue setStringValue:value]; + [cpuOverclockingValue selectItemWithObjectValue:value]; +} + - (void)awakeFromNib { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -218,6 +241,10 @@ NSString *const memCardChangeNumberKey = @"PcsxrMemoryCardThatChangedKey"; _checkBoxDefaults[@"NoFastBoot"] = noFastBootCell; if (widescreen) _checkBoxDefaults[@"Widescreen"] = widescreen; + if (cpuOverclocking) + _checkBoxDefaults[@"CpuOverclocking"] = cpuOverclocking; + if (wipeoutMemHack) + _checkBoxDefaults[@"WipeoutMemHack"] = wipeoutMemHack; // make the visuals match the defaults @@ -234,6 +261,7 @@ NSString *const memCardChangeNumberKey = @"PcsxrMemoryCardThatChangedKey"; [usesHleCell setEnabled:NO]; } + [self setOverclockValueText]; // setup labels diff --git a/macosx/Source/PcsxrController.m b/macosx/Source/PcsxrController.m index a9c61523..2a7285b1 100644 --- a/macosx/Source/PcsxrController.m +++ b/macosx/Source/PcsxrController.m @@ -1,6 +1,7 @@ #import <Cocoa/Cocoa.h> #import "PcsxrController.h" #import "ConfigurationController.h" +#import "PgxpController.h" #import "CheatController.h" #import "EmuThread.h" #import "PcsxrMemCardHandler.h" @@ -690,6 +691,7 @@ otherblock();\ // special cases //str = [[defaults stringForKey:@"PluginPAD"] fileSystemRepresentation]; //if (str != nil) strncpy(Config.Pad2, str, 255); + Config.PsxClock = [defaults floatForKey:@"CpuOverclockingValue"]; str = [[defaults stringForKey:@"Bios"] fileSystemRepresentation]; if (str) { @@ -767,6 +769,9 @@ otherblock();\ else { strcpy(Config.Net, "Disabled"); } + + // PGXP settings + [PgxpController loadPgxpSettings]; } + (void)setDefaultFromConfig:(NSString *)defaultKey @@ -819,7 +824,10 @@ otherblock();\ @"Widescreen": @NO, @"NetPlay": @NO, @"DidMoveMemoryObjects": @NO, - @"NoFastBoot": @NO}; + @"NoFastBoot": @NO, + @"CpuOverclocking": @NO, + @"CpuOverclockingValue": @1.5f, + @"WipeoutMemHack": @NO}; [defaults registerDefaults:appDefaults]; @@ -845,7 +853,9 @@ otherblock();\ @"RootCounterFix": [NSValue valueWithPointer:&Config.RCntFix], @"VideoSyncWAFix": [NSValue valueWithPointer:&Config.VSyncWA], @"Widescreen": [NSValue valueWithPointer:&Config.Widescreen], - @"NoFastBoot": [NSValue valueWithPointer:&Config.SlowBoot]}; + @"NoFastBoot": [NSValue valueWithPointer:&Config.SlowBoot], + @"CpuOverclocking": [NSValue valueWithPointer:&Config.OverClock], + @"WipeoutMemHack": [NSValue valueWithPointer:&Config.MemHack]}; // setup application support paths NSFileManager *manager = [NSFileManager defaultManager]; diff --git a/macosx/Source/PgxpController.h b/macosx/Source/PgxpController.h new file mode 100644 index 00000000..fee659ef --- /dev/null +++ b/macosx/Source/PgxpController.h @@ -0,0 +1,24 @@ +// +// PgxpController.h +// Pcsxr +// +// Created by MrLavender on 29/06/2017. +// + +#import <Cocoa/Cocoa.h> + +@interface PgxpController : NSViewController + +@property (weak) IBOutlet NSButton *vertexCreation; +@property (weak) IBOutlet NSButton *vertexCaching; +@property (weak) IBOutlet NSButton *perspectiveCorrect; +@property (weak) IBOutlet NSPopUpButton *pgxpModeButton; +@property (weak) IBOutlet NSTextField *pgxpModeLabel; + +- (IBAction)onOptionChange:(NSButton*)sender; +- (IBAction)onModeChange:(NSPopUpButton*)sender; + ++ (void)loadPgxpSettings; ++ (void)savePgxpSettings; + +@end diff --git a/macosx/Source/PgxpController.m b/macosx/Source/PgxpController.m new file mode 100644 index 00000000..19c09b2a --- /dev/null +++ b/macosx/Source/PgxpController.m @@ -0,0 +1,98 @@ +// +// PgxpController.m +// Pcsxr +// +// Created by MrLavender on 29/06/2017. +// + +#import "PgxpController.h" +#include "psxcommon.h" + +#define kPGXP_GTE 0 +#define kPGXP_Cache 1 +#define kPGXP_Texture 2 + +NSString* kPGXP_GTE_Key = @"PGXP_GTE"; +NSString* kPGXP_Cache_Key = @"PGXP_Cache"; +NSString* kPGXP_Texture_Key = @"PGXP_Texture"; +NSString* kPGXP_Mode_Key = @"PGXP_Mode"; + +NSString* infoText[] = { + @"Disabled\n\nPGXP is no longer mirroring any functions.", + @"Memory operations only\n\nPGXP is mirroring load, store and processor transfer operations of the CPU and GTE.", + @"Memory and CPU arithmetic operations\n\nPGXP is mirroring load, store and transfer operations of the CPU and GTE and arithmetic/logic functions of the PSX CPU.\n\n(WARNING: This mode is currently unfinished and may cause incorrect behaviour in some games)" +}; + +@interface PgxpController () +@end + +@implementation PgxpController + +- (void)awakeFromNib +{ + self.vertexCreation.state = Config.PGXP_GTE; + self.vertexCaching.state = Config.PGXP_Cache; + self.perspectiveCorrect.state = Config.PGXP_Texture; + + [self.pgxpModeButton selectItemAtIndex:Config.PGXP_Mode]; + [self setInfoTextForPgxpMode]; +} + +- (IBAction)onOptionChange:(NSButton*)sender +{ + switch (sender.tag) { + case kPGXP_GTE: + Config.PGXP_GTE = sender.state; + break; + case kPGXP_Cache: + Config.PGXP_Cache = sender.state; + break; + case kPGXP_Texture: + Config.PGXP_Texture = sender.state; + break; + default: + break; + } + [PgxpController savePgxpSettings]; +} + +- (IBAction)onModeChange:(NSPopUpButton*)sender +{ + Config.PGXP_Mode = (u32)sender.indexOfSelectedItem; + [self setInfoTextForPgxpMode]; + [PgxpController savePgxpSettings]; +} + +- (void)setInfoTextForPgxpMode +{ + self.pgxpModeLabel.stringValue = infoText[Config.PGXP_Mode]; +} + ++ (void)loadPgxpSettings +{ + NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; + + [userDefaults registerDefaults:@{ + kPGXP_GTE_Key: @YES, + kPGXP_Cache_Key: @YES, + kPGXP_Texture_Key: @YES, + kPGXP_Mode_Key: @0 + }]; + + Config.PGXP_GTE = [userDefaults boolForKey:kPGXP_GTE_Key]; + Config.PGXP_Cache = [userDefaults boolForKey:kPGXP_Cache_Key]; + Config.PGXP_Texture = [userDefaults boolForKey:kPGXP_Texture_Key]; + Config.PGXP_Mode = (u32)[userDefaults integerForKey:kPGXP_Mode_Key]; +} + ++ (void)savePgxpSettings +{ + NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; + + [userDefaults setBool:Config.PGXP_GTE forKey:kPGXP_GTE_Key]; + [userDefaults setBool:Config.PGXP_Cache forKey:kPGXP_Cache_Key]; + [userDefaults setBool:Config.PGXP_Texture forKey:kPGXP_Texture_Key]; + [userDefaults setInteger:Config.PGXP_Mode forKey:kPGXP_Mode_Key]; +} + +@end diff --git a/macosx/Source/hotkeys.m b/macosx/Source/hotkeys.m index 96d89e8b..9945ea29 100644 --- a/macosx/Source/hotkeys.m +++ b/macosx/Source/hotkeys.m @@ -127,7 +127,11 @@ void attachHotkeys() { // GPU key presses NSEvent* (^gpuKeypress)(NSEvent*) = ^(NSEvent *event) { if (event.modifierFlags & NSControlKeyMask) { - GPU_keypressed([event keyCode]); + if ([event keyCode] == 0x67) { // F11 + GPU_toggleDebug(); + } else { + GPU_keypressed([event keyCode]); + } return (NSEvent*)nil; } else { return event; diff --git a/macosx/plugins/PeopsXgl/Base.lproj/NetSfPeopsOpenGLConfig.xib b/macosx/plugins/PeopsXgl/Base.lproj/NetSfPeopsOpenGLConfig.xib index 4ee1cde3..4923fa8c 100644 --- a/macosx/plugins/PeopsXgl/Base.lproj/NetSfPeopsOpenGLConfig.xib +++ b/macosx/plugins/PeopsXgl/Base.lproj/NetSfPeopsOpenGLConfig.xib @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6249" systemVersion="14A386b" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="14F2411" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies> <deployment identifier="macosx"/> - <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6249"/> + <development version="6300" identifier="xcode"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/> </dependencies> <objects> <customObject id="-2" userLabel="File's Owner" customClass="NetSfPeopsOpenGLPluginConfigController"> @@ -10,16 +11,18 @@ <outlet property="advancedBlending" destination="386" id="963"/> <outlet property="autoFullScreen" destination="377" id="967"/> <outlet property="blurEffect" destination="392" id="959"/> - <outlet property="ditherMode" destination="116" id="143"/> + <outlet property="colorDithering" destination="274-uW-DSV" id="84K-3K-lC4"/> <outlet property="drawScanlines" destination="391" id="964"/> <outlet property="fpsCounter" destination="376" id="968"/> - <outlet property="frameBufferEffects" destination="215" id="233"/> + <outlet property="frameBufferAccess" destination="5Yk-qp-3SL" id="vrD-Sd-5md"/> + <outlet property="frameBufferEffects" destination="fV7-ow-636" id="JLu-ME-fwK"/> <outlet property="frameSkipping" destination="375" id="974"/> <outlet property="fullscreenSize" destination="908" id="970"/> <outlet property="gteAccuracy" destination="406" id="956"/> <outlet property="hackEnable" destination="476" id="506"/> <outlet property="hacksMatrix" destination="479" id="509"/> <outlet property="hacksWindow" destination="472" id="505"/> + <outlet property="limitFrameRate" destination="380" id="gQZ-8B-g9B"/> <outlet property="mjpegDecoder" destination="389" id="958"/> <outlet property="mjpegDecoder15bit" destination="390" id="957"/> <outlet property="offscreenDrawing" destination="202" id="232"/> @@ -42,19 +45,19 @@ <window title="GPU Configuration" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="alertPanel" id="5" userLabel="Window"> <windowStyleMask key="styleMask" titled="YES"/> <rect key="contentRect" x="2" y="373" width="611" height="501"/> - <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/> + <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/> <view key="contentView" id="6"> <rect key="frame" x="0.0" y="0.0" width="611" height="501"/> <autoresizingMask key="autoresizingMask"/> <subviews> - <box title="Display Settings" translatesAutoresizingMaskIntoConstraints="NO" id="89"> - <rect key="frame" x="17" y="325" width="577" height="156"/> + <box fixedFrame="YES" title="Display Settings" translatesAutoresizingMaskIntoConstraints="NO" id="89"> + <rect key="frame" x="17" y="338" width="577" height="143"/> <view key="contentView"> - <rect key="frame" x="2" y="2" width="573" height="139"/> + <rect key="frame" x="2" y="2" width="573" height="126"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <matrix verticalHuggingPriority="750" mode="highlight" allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="785"> - <rect key="frame" x="367" y="26" width="189" height="103"/> + <matrix verticalHuggingPriority="750" fixedFrame="YES" mode="highlight" allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="785"> + <rect key="frame" x="367" y="13" width="189" height="103"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <size key="cellSize" width="189" height="19"/> <size key="intercellSpacing" width="0.0" height="2"/> @@ -102,11 +105,8 @@ </column> </cells> </matrix> - <popUpButton toolTip="Change resolution to this when going full screen" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="908"> - <rect key="frame" x="148" y="105" width="135" height="26"/> - <constraints> - <constraint firstAttribute="width" constant="130" id="923"/> - </constraints> + <popUpButton toolTip="Change resolution to this when going full screen" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="908"> + <rect key="frame" x="148" y="92" width="135" height="26"/> <popUpButtonCell key="cell" type="push" title="Current" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="926" id="924"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="menu"/> @@ -123,27 +123,23 @@ </menu> </popUpButtonCell> </popUpButton> - <textField toolTip="Change resolution to this when going full screen" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="909"> - <rect key="frame" x="15" y="111" width="134" height="18"/> - <constraints> - <constraint firstAttribute="height" constant="18" id="920"/> - <constraint firstAttribute="width" constant="130" id="921"/> - </constraints> + <textField toolTip="Change resolution to this when going full screen" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="130" translatesAutoresizingMaskIntoConstraints="NO" id="909"> + <rect key="frame" x="15" y="98" width="134" height="18"/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Fullscreen size" id="922"> <font key="font" metaFont="system"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> - <button toolTip="When checked, will keep the PSX display at natural aspect ratio" translatesAutoresizingMaskIntoConstraints="NO" id="910"> - <rect key="frame" x="15" y="87" width="153" height="18"/> + <button toolTip="When checked, will keep the PSX display at natural aspect ratio" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="910"> + <rect key="frame" x="15" y="74" width="153" height="18"/> <buttonCell key="cell" type="check" title="Resize Proportionally" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="919"> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <font key="font" metaFont="system"/> </buttonCell> </button> - <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="911"> - <rect key="frame" x="194" y="22" width="92" height="32"/> + <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="911"> + <rect key="frame" x="194" y="9" width="92" height="32"/> <buttonCell key="cell" type="push" title="Hacks…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="918"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="system"/> @@ -152,8 +148,8 @@ <action selector="showHacks:" target="-2" id="933"/> </connections> </button> - <form verticalHuggingPriority="750" mode="track" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="912"> - <rect key="frame" x="17" y="29" width="126" height="52"/> + <form verticalHuggingPriority="750" fixedFrame="YES" mode="track" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="912"> + <rect key="frame" x="17" y="16" width="126" height="52"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <size key="cellSize" width="126" height="22"/> <size key="intercellSpacing" width="1" height="8"/> @@ -182,211 +178,17 @@ </form> </subviews> </view> - <constraints> - <constraint firstAttribute="trailing" secondItem="785" secondAttribute="trailing" constant="16" id="799"/> - <constraint firstItem="785" firstAttribute="top" secondItem="89" secondAttribute="top" constant="25" id="814"/> - <constraint firstItem="912" firstAttribute="top" secondItem="910" secondAttribute="bottom" constant="8" symbolic="YES" id="936"/> - <constraint firstItem="910" firstAttribute="top" secondItem="909" secondAttribute="bottom" constant="8" symbolic="YES" id="939"/> - <constraint firstItem="909" firstAttribute="baseline" secondItem="908" secondAttribute="baseline" id="940"/> - <constraint firstItem="912" firstAttribute="bottom" secondItem="911" secondAttribute="bottom" id="943"/> - <constraint firstItem="909" firstAttribute="leading" secondItem="89" secondAttribute="leading" constant="16" id="944"/> - <constraint firstItem="912" firstAttribute="leading" secondItem="89" secondAttribute="leading" constant="16" id="945"/> - <constraint firstItem="908" firstAttribute="top" secondItem="89" secondAttribute="top" constant="25" id="946"/> - <constraint firstItem="908" firstAttribute="leading" secondItem="89" secondAttribute="leading" constant="149" id="947"/> - <constraint firstItem="910" firstAttribute="leading" secondItem="89" secondAttribute="leading" constant="16" id="948"/> - <constraint firstItem="785" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="911" secondAttribute="trailing" constant="8" symbolic="YES" id="GwH-kn-rLW"/> - <constraint firstItem="911" firstAttribute="trailing" secondItem="908" secondAttribute="trailing" id="Kvw-mi-0pm"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="912" secondAttribute="bottom" constant="11" id="YZu-mL-ucP"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="785" secondAttribute="bottom" constant="11" id="slk-vo-UJi"/> - </constraints> <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> </box> - <box toolTip="If your card supports it, will mix textures more accurately" title="Rendering" translatesAutoresizingMaskIntoConstraints="NO" id="107"> - <rect key="frame" x="17" y="57" width="577" height="264"/> + <box toolTip="If your card supports it, will mix textures more accurately" fixedFrame="YES" title="Rendering" translatesAutoresizingMaskIntoConstraints="NO" id="107"> + <rect key="frame" x="17" y="57" width="577" height="277"/> <view key="contentView"> - <rect key="frame" x="2" y="2" width="573" height="247"/> + <rect key="frame" x="2" y="2" width="573" height="260"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <textField toolTip="Specify when to use dithering to render colors" horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="671" translatesAutoresizingMaskIntoConstraints="NO" id="112"> - <rect key="frame" x="15" y="219" width="122" height="17"/> - <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Dither Graphics:" id="383"> - <font key="font" metaFont="system"/> - <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - <popUpButton toolTip="Specify when to use dithering to render colors" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="116"> - <rect key="frame" x="141" y="213" width="174" height="26"/> - <constraints> - <constraint firstAttribute="width" constant="169" id="624"/> - </constraints> - <popUpButtonCell key="cell" type="push" title="When Hinted" bezelStyle="rounded" alignment="left" lineBreakMode="clipping" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="115" id="384"> - <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="menu"/> - <menu key="menu" title="OtherViews" id="113"> - <items> - <menuItem title="Never" id="111"/> - <menuItem title="When Hinted" state="on" id="115"/> - <menuItem title="Always" id="114"/> - </items> - </menu> - </popUpButtonCell> - </popUpButton> - <popUpButton toolTip="Use offscreen drawing to remove some graphics glitches" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="202"> - <rect key="frame" x="141" y="182" width="174" height="26"/> - <popUpButtonCell key="cell" type="push" title="Default" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="206" id="393"> - <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="menu"/> - <menu key="menu" title="OtherViews" id="203"> - <items> - <menuItem title="None" id="205"/> - <menuItem title="Some" id="204"/> - <menuItem title="Default" state="on" id="206"/> - <menuItem title="More" id="254"/> - <menuItem title="Aggressive" id="255"/> - </items> - </menu> - </popUpButtonCell> - </popUpButton> - <textField toolTip="Use offscreen drawing to remove some graphics glitches" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="207"> - <rect key="frame" x="15" y="188" width="122" height="17"/> - <constraints> - <constraint firstAttribute="height" constant="17" id="Frr-gU-j9s"/> - </constraints> - <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Offscreen Drawing:" usesSingleLineMode="YES" id="394"> - <font key="font" metaFont="system"/> - <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - <box title="Textures" translatesAutoresizingMaskIntoConstraints="NO" id="212"> - <rect key="frame" x="14" y="51" width="318" height="126"/> - <view key="contentView"> - <rect key="frame" x="2" y="2" width="314" height="109"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <popUpButton toolTip="The color depth of stored textures." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="169"> - <rect key="frame" x="112" y="75" width="188" height="26"/> - <constraints> - <constraint firstAttribute="width" constant="183" id="1030"/> - </constraints> - <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="395"> - <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="menu"/> - <menu key="menu" title="OtherViews" id="170"> - <items> - <menuItem title="default" id="172"/> - <menuItem title="RGBA 16" id="171"/> - <menuItem title="R5 G5 B5 A1" id="173"/> - <menuItem title="RGBA 32" id="250"/> - <menuItem title="BGRA 32" id="251"/> - </items> - </menu> - </popUpButtonCell> - </popUpButton> - <textField toolTip="Select a quality level of texture scaling" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="201"> - <rect key="frame" x="15" y="46" width="93" height="17"/> - <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Enhancement:" id="398"> - <font key="font" metaFont="system"/> - <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - <textField toolTip="Filter textures when scaled. Higher values filter more kinds of textures, i.e. sprites." verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="193"> - <rect key="frame" x="15" y="18" width="93" height="17"/> - <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Filtering:" id="397"> - <font key="font" metaFont="system"/> - <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - <textField toolTip="The color depth of stored textures." horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="174"> - <rect key="frame" x="15" y="81" width="93" height="17"/> - <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Color Depth:" id="396"> - <font key="font" metaFont="system"/> - <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - <slider toolTip="Filter textures when scaled. Higher values filter more kinds of textures, i.e. sprites." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="252"> - <rect key="frame" x="112" y="12" width="187" height="26"/> - <sliderCell key="cell" alignment="left" maxValue="6" tickMarkPosition="above" numberOfTickMarks="7" allowsTickMarkValuesOnly="YES" sliderType="linear" id="399"> - <font key="font" size="12" name="Helvetica"/> - </sliderCell> - </slider> - <slider toolTip="Select a quality level of texture scaling" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="253"> - <rect key="frame" x="112" y="44" width="187" height="26"/> - <sliderCell key="cell" alignment="left" maxValue="2" tickMarkPosition="above" numberOfTickMarks="3" allowsTickMarkValuesOnly="YES" sliderType="linear" id="400"> - <font key="font" size="12" name="Helvetica"/> - </sliderCell> - </slider> - </subviews> - </view> - <constraints> - <constraint firstItem="174" firstAttribute="leading" secondItem="212" secondAttribute="leading" constant="16" id="736"/> - <constraint firstItem="169" firstAttribute="baseline" secondItem="174" secondAttribute="baseline" id="739"/> - <constraint firstAttribute="trailing" secondItem="169" secondAttribute="trailing" constant="16" id="741"/> - <constraint firstAttribute="trailing" secondItem="253" secondAttribute="trailing" constant="16" id="748"/> - <constraint firstItem="201" firstAttribute="baseline" secondItem="253" secondAttribute="baseline" id="749"/> - <constraint firstItem="169" firstAttribute="top" secondItem="212" secondAttribute="top" constant="25" id="767"/> - <constraint firstItem="252" firstAttribute="top" secondItem="253" secondAttribute="bottom" constant="8" symbolic="YES" id="1025"/> - <constraint firstItem="193" firstAttribute="centerY" secondItem="252" secondAttribute="centerY" id="1028"/> - <constraint firstAttribute="trailing" secondItem="252" secondAttribute="trailing" constant="16" id="1029"/> - <constraint firstItem="169" firstAttribute="leading" secondItem="253" secondAttribute="leading" id="1031"/> - <constraint firstItem="252" firstAttribute="leading" secondItem="253" secondAttribute="leading" id="1032"/> - <constraint firstItem="253" firstAttribute="leading" secondItem="169" secondAttribute="leading" id="8nJ-Q1-ZKd"/> - <constraint firstItem="174" firstAttribute="trailing" secondItem="193" secondAttribute="trailing" id="9Iq-aC-OEr"/> - <constraint firstItem="174" firstAttribute="trailing" secondItem="201" secondAttribute="trailing" id="9LB-1k-ECC"/> - <constraint firstItem="174" firstAttribute="leading" secondItem="193" secondAttribute="leading" id="CPg-9c-dty"/> - <constraint firstItem="169" firstAttribute="leading" secondItem="174" secondAttribute="trailing" constant="8" symbolic="YES" id="SbF-7f-Bnq"/> - <constraint firstItem="252" firstAttribute="leading" secondItem="193" secondAttribute="trailing" constant="8" symbolic="YES" id="Tqx-Cn-OVc"/> - <constraint firstItem="253" firstAttribute="top" secondItem="169" secondAttribute="bottom" constant="8" symbolic="YES" id="Uxd-Wa-luh"/> - <constraint firstItem="174" firstAttribute="leading" secondItem="201" secondAttribute="leading" id="aIR-BW-D9z"/> - <constraint firstItem="253" firstAttribute="trailing" secondItem="169" secondAttribute="trailing" id="eXl-E8-pL6"/> - <constraint firstItem="253" firstAttribute="trailing" secondItem="252" secondAttribute="trailing" id="skt-z8-TVZ"/> - <constraint firstItem="253" firstAttribute="leading" secondItem="252" secondAttribute="leading" id="u9D-yy-haW"/> - <constraint firstItem="253" firstAttribute="leading" secondItem="201" secondAttribute="trailing" constant="8" symbolic="YES" id="uGh-ua-ROW"/> - <constraint firstAttribute="bottom" secondItem="252" secondAttribute="bottom" constant="12" id="woL-if-MOn"/> - </constraints> - <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> - <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> - </box> - <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="215"> - <rect key="frame" x="398" y="182" width="130" height="26"/> - <constraints> - <constraint firstAttribute="width" constant="125" id="623"/> - </constraints> - <popUpButtonCell key="cell" type="push" title="Item1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="218" id="401"> - <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="menu"/> - <menu key="menu" title="OtherViews" id="216"> - <items> - <menuItem title="Item1" state="on" id="218"/> - <menuItem title="Item2" id="217"/> - <menuItem title="Item3" id="219"/> - </items> - </menu> - </popUpButtonCell> - </popUpButton> - <textField toolTip="Select the method the PSX uses to read the contents of the screen" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="220"> - <rect key="frame" x="366" y="219" width="192" height="17"/> - <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title="Frame Buffer Effects" id="402"> - <font key="font" metaFont="system"/> - <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - <colorWell toolTip="Select a color and transparency for the scanlines" translatesAutoresizingMaskIntoConstraints="NO" id="341"> - <rect key="frame" x="337" y="155" width="23" height="22"/> - <constraints> - <constraint firstAttribute="width" constant="23" id="563"/> - <constraint firstAttribute="height" constant="22" id="564"/> - </constraints> - <color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.23999999459999999" colorSpace="calibratedRGB"/> - </colorWell> - <matrix verticalHuggingPriority="750" mode="highlight" allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="702"> - <rect key="frame" x="368" y="18" width="188" height="159"/> + <matrix verticalHuggingPriority="750" fixedFrame="YES" mode="highlight" allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="702"> + <rect key="frame" x="368" y="43" width="188" height="177"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <size key="cellSize" width="188" height="15"/> <size key="intercellSpacing" width="0.0" height="3"/> @@ -459,40 +261,177 @@ <action selector="toggleCheck:" target="-2" id="713"/> </connections> </buttonCell> + <buttonCell type="check" title="Color Dithering" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="274-uW-DSV"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + <connections> + <action selector="toggleCheck:" target="-2" id="j76-co-vAs"/> + </connections> + </buttonCell> </column> </cells> </matrix> + <box fixedFrame="YES" title="Compatibility" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="1qc-Ll-Z0w"> + <rect key="frame" x="14" y="133" width="349" height="117"/> + <view key="contentView"> + <rect key="frame" x="1" y="1" width="347" height="101"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField toolTip="Use offscreen drawing to remove some graphics glitches" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="207"> + <rect key="frame" x="16" y="72" width="129" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Offscreen Drawing:" usesSingleLineMode="YES" id="394"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sgR-2K-qx1"> + <rect key="frame" x="16" y="44" width="129" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Framebuffer Effects:" id="WIM-Fv-18z"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ewc-nd-8Wq"> + <rect key="frame" x="16" y="16" width="129" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Framebuffer Access:" id="KcL-zM-YsC"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <popUpButton toolTip="Use offscreen drawing to remove some graphics glitches" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="202"> + <rect key="frame" x="149" y="67" width="183" height="26"/> + <popUpButtonCell key="cell" type="push" title="Aggressive" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" selectedItem="255" id="393"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="menu"/> + <menu key="menu" title="OtherViews" id="203"> + <items> + <menuItem title="None" id="205"/> + <menuItem title="Some" id="204"/> + <menuItem title="Default" id="206"/> + <menuItem title="More" id="254"/> + <menuItem title="Aggressive" state="on" id="255"/> + </items> + </menu> + </popUpButtonCell> + </popUpButton> + <popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fV7-ow-636"> + <rect key="frame" x="149" y="39" width="183" height="26"/> + <popUpButtonCell key="cell" type="push" title="Gfx card buffer (can be slow)" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="o7R-bu-EAr" id="M3J-hx-Wfs"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="menu"/> + <menu key="menu" id="l9P-IP-Idl"> + <items> + <menuItem title="Emulated VRam (needs FVP)" id="6eu-Lo-wpa"/> + <menuItem title="Black (fast, no effects)" id="BU7-7i-l2v"/> + <menuItem title="Gfx card buffer (can be slow)" state="on" id="o7R-bu-EAr"/> + <menuItem title="Gfx card buffer + soft (slow)" id="GCX-MC-1nr"> + <modifierMask key="keyEquivalentModifierMask"/> + </menuItem> + </items> + </menu> + </popUpButtonCell> + </popUpButton> + <popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Yk-qp-3SL"> + <rect key="frame" x="149" y="11" width="183" height="26"/> + <popUpButtonCell key="cell" type="push" title="Emulated VRam (usually OK)" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="KBJ-lE-Edw" id="SQp-qw-S5v"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="menu"/> + <menu key="menu" id="Y0e-WG-evR"> + <items> + <menuItem title="Emulated VRam (usually OK)" state="on" id="KBJ-lE-Edw"/> + <menuItem title="Gfx card buffer reads" id="zhW-tA-iA4"/> + <menuItem title="Gfx card buffer moves" id="rKh-b0-Gax"/> + <menuItem title="Gfx reads + moves" id="wda-TY-GBK"> + <modifierMask key="keyEquivalentModifierMask"/> + </menuItem> + <menuItem title="Full Software (FVP)" id="kjR-g8-33e"> + <modifierMask key="keyEquivalentModifierMask"/> + </menuItem> + </items> + </menu> + </popUpButtonCell> + </popUpButton> + </subviews> + </view> + <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> + <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </box> + <box fixedFrame="YES" title="Textures" translatesAutoresizingMaskIntoConstraints="NO" id="212"> + <rect key="frame" x="14" y="9" width="349" height="120"/> + <view key="contentView"> + <rect key="frame" x="2" y="2" width="345" height="103"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <popUpButton toolTip="The color depth of stored textures." verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="169"> + <rect key="frame" x="112" y="69" width="219" height="26"/> + <popUpButtonCell key="cell" type="push" title="BGRA 32" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="251" id="395"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="menu"/> + <menu key="menu" title="OtherViews" id="170"> + <items> + <menuItem title="default" id="172"/> + <menuItem title="RGBA 16" id="171"/> + <menuItem title="R5 G5 B5 A1" id="173"/> + <menuItem title="RGBA 32" id="250"/> + <menuItem title="BGRA 32" state="on" id="251"/> + </items> + </menu> + </popUpButtonCell> + </popUpButton> + <textField toolTip="Select a quality level of texture scaling" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="89" translatesAutoresizingMaskIntoConstraints="NO" id="201"> + <rect key="frame" x="15" y="44" width="93" height="17"/> + <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Enhancement:" id="398"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField toolTip="The color depth of stored textures." horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="89" translatesAutoresizingMaskIntoConstraints="NO" id="174"> + <rect key="frame" x="15" y="74" width="93" height="17"/> + <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Color Depth:" id="396"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <slider toolTip="Filter textures when scaled. Higher values filter more kinds of textures, i.e. sprites." verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="252"> + <rect key="frame" x="112" y="11" width="218" height="25"/> + <sliderCell key="cell" alignment="left" maxValue="6" tickMarkPosition="above" numberOfTickMarks="7" allowsTickMarkValuesOnly="YES" sliderType="linear" id="399"> + <font key="font" size="12" name="Helvetica"/> + </sliderCell> + </slider> + <slider toolTip="Select a quality level of texture scaling" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="253"> + <rect key="frame" x="112" y="40" width="218" height="25"/> + <sliderCell key="cell" alignment="left" maxValue="2" tickMarkPosition="above" numberOfTickMarks="3" allowsTickMarkValuesOnly="YES" sliderType="linear" id="400"> + <font key="font" size="12" name="Helvetica"/> + </sliderCell> + </slider> + <textField toolTip="Filter textures when scaled. Higher values filter more kinds of textures, i.e. sprites." verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="89" translatesAutoresizingMaskIntoConstraints="NO" id="193"> + <rect key="frame" x="15" y="16" width="93" height="17"/> + <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Filtering:" id="397"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> + <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </box> + <colorWell toolTip="Select a color and transparency for the scanlines" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="341"> + <rect key="frame" x="533" y="201" width="23" height="22"/> + <color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.23999999459999999" colorSpace="calibratedRGB"/> + </colorWell> </subviews> </view> - <constraints> - <constraint firstItem="116" firstAttribute="leading" secondItem="202" secondAttribute="leading" id="600"/> - <constraint firstItem="116" firstAttribute="trailing" secondItem="202" secondAttribute="trailing" id="607"/> - <constraint firstItem="112" firstAttribute="baseline" secondItem="116" secondAttribute="baseline" id="692"/> - <constraint firstAttribute="trailing" secondItem="702" secondAttribute="trailing" constant="16" id="965"/> - <constraint firstItem="220" firstAttribute="leading" secondItem="702" secondAttribute="leading" id="975"/> - <constraint firstAttribute="trailing" secondItem="220" secondAttribute="trailing" constant="16" id="977"/> - <constraint firstItem="215" firstAttribute="centerX" secondItem="220" secondAttribute="centerX" id="978"/> - <constraint firstItem="212" firstAttribute="leading" secondItem="107" secondAttribute="leading" constant="16" id="989"/> - <constraint firstItem="116" firstAttribute="top" secondItem="107" secondAttribute="top" constant="25" id="993"/> - <constraint firstItem="112" firstAttribute="leading" secondItem="107" secondAttribute="leading" constant="16" id="995"/> - <constraint firstItem="220" firstAttribute="baseline" secondItem="116" secondAttribute="baseline" id="997"/> - <constraint firstItem="215" firstAttribute="baseline" secondItem="207" secondAttribute="baseline" id="1000"/> - <constraint firstItem="702" firstAttribute="leading" secondItem="341" secondAttribute="trailing" constant="8" symbolic="YES" id="1006"/> - <constraint firstItem="341" firstAttribute="leading" secondItem="212" secondAttribute="trailing" constant="8" symbolic="YES" id="1009"/> - <constraint firstItem="702" firstAttribute="top" secondItem="215" secondAttribute="bottom" constant="8" symbolic="YES" id="1016"/> - <constraint firstItem="341" firstAttribute="top" secondItem="702" secondAttribute="top" id="1017"/> - <constraint firstAttribute="bottom" secondItem="702" secondAttribute="bottom" constant="16" id="3Ng-tn-NLl"/> - <constraint firstItem="112" firstAttribute="leading" secondItem="207" secondAttribute="leading" id="7oK-ZZ-JYr"/> - <constraint firstItem="202" firstAttribute="top" secondItem="116" secondAttribute="bottom" constant="10" symbolic="YES" id="O3g-hv-kg2"/> - <constraint firstItem="112" firstAttribute="trailing" secondItem="207" secondAttribute="trailing" id="PhN-KE-FcQ"/> - <constraint firstItem="212" firstAttribute="top" secondItem="202" secondAttribute="bottom" constant="8" symbolic="YES" id="RYi-RA-sus"/> - <constraint firstItem="202" firstAttribute="baseline" secondItem="207" secondAttribute="baseline" id="gHf-9B-iw5"/> - <constraint firstItem="202" firstAttribute="leading" secondItem="207" secondAttribute="trailing" constant="8" symbolic="YES" id="naS-nh-gFe"/> - </constraints> <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> </box> - <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="665"> + <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="665"> <rect key="frame" x="14" y="13" width="76" height="32"/> <buttonCell key="cell" type="push" title="Reset" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="666"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> @@ -502,7 +441,7 @@ <action selector="reset:" target="-2" id="669"/> </connections> </button> - <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="670"> + <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="670"> <rect key="frame" x="514" y="13" width="83" height="32"/> <buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="671"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> @@ -515,7 +454,7 @@ DQ <action selector="ok:" target="-2" id="678"/> </connections> </button> - <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="674"> + <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="674"> <rect key="frame" x="431" y="13" width="83" height="32"/> <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="675"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> @@ -529,22 +468,6 @@ Gw </connections> </button> </subviews> - <constraints> - <constraint firstItem="665" firstAttribute="leading" secondItem="6" secondAttribute="leading" constant="20" symbolic="YES" id="667"/> - <constraint firstAttribute="bottom" secondItem="670" secondAttribute="bottom" constant="20" symbolic="YES" id="672"/> - <constraint firstAttribute="trailing" secondItem="670" secondAttribute="trailing" constant="20" symbolic="YES" id="673"/> - <constraint firstItem="670" firstAttribute="leading" secondItem="674" secondAttribute="trailing" constant="12" symbolic="YES" id="676"/> - <constraint firstItem="89" firstAttribute="top" secondItem="6" secondAttribute="top" constant="20" symbolic="YES" id="680"/> - <constraint firstAttribute="trailing" secondItem="89" secondAttribute="trailing" constant="20" symbolic="YES" id="682"/> - <constraint firstItem="89" firstAttribute="leading" secondItem="6" secondAttribute="leading" constant="20" symbolic="YES" id="907"/> - <constraint firstItem="107" firstAttribute="top" secondItem="89" secondAttribute="bottom" constant="8" symbolic="YES" id="985"/> - <constraint firstItem="674" firstAttribute="baseline" secondItem="670" secondAttribute="baseline" id="2YQ-xw-azh"/> - <constraint firstItem="107" firstAttribute="leading" secondItem="89" secondAttribute="leading" id="Ahd-Du-WuU"/> - <constraint firstItem="674" firstAttribute="top" secondItem="107" secondAttribute="bottom" constant="20" symbolic="YES" id="Iw3-oE-kXe"/> - <constraint firstItem="674" firstAttribute="baseline" secondItem="665" secondAttribute="baseline" id="WHu-Oa-tPr"/> - <constraint firstItem="107" firstAttribute="trailing" secondItem="89" secondAttribute="trailing" id="XDw-KH-rtQ"/> - <constraint firstItem="670" firstAttribute="width" secondItem="674" secondAttribute="width" id="zqC-yW-8jc"/> - </constraints> </view> <connections> <outlet property="delegate" destination="-2" id="142"/> @@ -553,7 +476,7 @@ Gw <window title="Hacks" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="472"> <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> <rect key="contentRect" x="196" y="207" width="501" height="339"/> - <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/> + <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/> <view key="contentView" id="473"> <rect key="frame" x="0.0" y="0.0" width="501" height="339"/> <autoresizingMask key="autoresizingMask"/> @@ -663,7 +586,7 @@ Gw <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> </box> - <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="475"> + <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="353" translatesAutoresizingMaskIntoConstraints="NO" id="475"> <rect key="frame" x="72" y="269" width="357" height="28"/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" id="478"> <font key="font" metaFont="smallSystem"/> diff --git a/macosx/plugins/PeopsXgl/PeopsXgl.exp b/macosx/plugins/PeopsXgl/PeopsXgl.exp index c069e22a..b71abb3c 100644 --- a/macosx/plugins/PeopsXgl/PeopsXgl.exp +++ b/macosx/plugins/PeopsXgl/PeopsXgl.exp @@ -36,3 +36,7 @@ _GPUcursor _GPUsetfix _GPUvisualVibration + +_GPUpgxpMemory +_GPUpgxpCacheVertex +_GPUtoggleDebug diff --git a/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.h b/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.h index 918fe825..65b9a08f 100755 --- a/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.h +++ b/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.h @@ -9,7 +9,7 @@ @interface NetSfPeopsOpenGLPluginConfigController : NSWindowController @property (weak) IBOutlet NSCell *autoFullScreen; -@property (weak) IBOutlet NSPopUpButton *ditherMode; +@property (weak) IBOutlet NSCell *limitFrameRate; @property (weak) IBOutlet NSCell *fpsCounter; @property (weak) IBOutlet NSCell *frameSkipping; @property (weak) IBOutlet NSCell *vSync; @@ -22,6 +22,7 @@ @property (weak) IBOutlet NSSlider *texFiltering; @property (weak) IBOutlet NSSlider *texEnhancment; @property (weak) IBOutlet NSPopUpButton *frameBufferEffects; +@property (weak) IBOutlet NSPopUpButton *frameBufferAccess; @property (weak) IBOutlet NSCell *drawScanlines; @property (weak) IBOutlet NSCell *advancedBlending; @property (weak) IBOutlet NSCell *opaquePass; @@ -31,6 +32,7 @@ @property (weak) IBOutlet NSCell *mjpegDecoder; @property (weak) IBOutlet NSCell *mjpegDecoder15bit; @property (weak) IBOutlet NSCell *gteAccuracy; +@property (weak) IBOutlet NSCell *colorDithering; @property (weak) IBOutlet NSColorWell *scanlineColorWell; @property (weak) IBOutlet NSMatrix *hacksMatrix; @property (weak) IBOutlet NSControl *hackEnable; diff --git a/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.m b/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.m index c882c00b..f2ae0d38 100755 --- a/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.m +++ b/macosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.m @@ -162,6 +162,7 @@ void PrepFactoryDefaultPreferences(void) @"Texture Enhancement Level": @0, @"Texture Filter Level": @0, @"Frame Buffer Level": @0, + @"Frame Buffer Access": @0, kWindowSize: NSStringFromSize(NSMakeSize(800, 600)), @"Draw Scanlines": @NO, // nasty: @@ -199,7 +200,9 @@ void ReadConfig(void) iFrameLimit = 2; // required fFrameRate = 60; // required (some number, 60 seems ok) } - + + iForceVSync = [keyValues[kVSync] boolValue] ? 1 : 0; + // Dithering is either on or off in OpenGL plug, but hey bDrawDither = [keyValues[@"Dither Mode"] intValue]; @@ -241,13 +244,17 @@ void ReadConfig(void) if (iFrameTexType > 3) iFrameTexType = 3; if (iFrameTexType < 0) iFrameTexType = 0; + iFrameReadType = [keyValues[@"Frame Buffer Access"] intValue]; + if (iFrameReadType > 4) iFrameReadType = 4; + if (iFrameReadType < 0) iFrameReadType = 0; + iTexQuality = [keyValues[@"Texture Color Depth Level"] intValue]; if (iTexQuality > 4) iTexQuality = 4; if (iTexQuality < 0) iTexQuality = 0; // MAG_FILTER = LINEAR, etc. iFilterType = [keyValues[@"Texture Filter Level"] intValue]; - if (iFilterType > 2) iFilterType = 2; + if (iFilterType > 6) iFilterType = 6; if (iFilterType < 0) iFilterType = 0; // stretches textures (more detail). You'd think it would look great, but it's not massively better. NEEDS iFilterType to be of any use. @@ -294,7 +301,7 @@ void ReadConfig(void) @implementation NetSfPeopsOpenGLPluginConfigController @synthesize autoFullScreen; -@synthesize ditherMode; +@synthesize limitFrameRate; @synthesize fpsCounter; @synthesize frameSkipping; @synthesize vSync; @@ -307,6 +314,7 @@ void ReadConfig(void) @synthesize texFiltering; @synthesize texEnhancment; @synthesize frameBufferEffects; +@synthesize frameBufferAccess; @synthesize drawScanlines; @synthesize advancedBlending; @synthesize opaquePass; @@ -316,6 +324,7 @@ void ReadConfig(void) @synthesize mjpegDecoder; @synthesize mjpegDecoder15bit; @synthesize gteAccuracy; +@synthesize colorDithering; @synthesize scanlineColorWell; @synthesize hacksMatrix; @synthesize hackEnable; @@ -337,14 +346,14 @@ void ReadConfig(void) writeDic[@"Scanline Color"] = [NSArchiver archivedDataWithRootObject:[scanlineColorWell color]]; writeDic[kFrameSkipping] = ([frameSkipping integerValue] ? @YES : @NO); writeDic[kAutoFullScreen] = ([autoFullScreen integerValue] ? @YES : @NO); - //[writeDic setObject:([frameLimit integerValue] ? @YES : @NO) forKey:kFrameLimit]; + writeDic[kFrameLimit] = ([limitFrameRate integerValue] ? @YES : @NO); writeDic[@"Proportional Resize"] = ([proportionalResize integerValue] ? @YES : @NO); - writeDic[@"Dither Mode"] = @([ditherMode indexOfSelectedItem]); writeDic[@"Offscreen Drawing Level"] = @([offscreenDrawing indexOfSelectedItem]); writeDic[@"Texture Color Depth Level"] = @([texColorDepth indexOfSelectedItem]); writeDic[@"Texture Enhancement Level"] = @([texEnhancment integerValue]); writeDic[@"Texture Filter Level"] = @([texFiltering integerValue]); writeDic[@"Frame Buffer Level"] = @([frameBufferEffects indexOfSelectedItem]); + writeDic[@"Frame Buffer Access"] = @([frameBufferAccess indexOfSelectedItem]); writeDic[@"Draw Scanlines"] = ([drawScanlines integerValue] ? @YES : @NO); writeDic[@"Advanced Blending"] = ([advancedBlending integerValue] ? @YES : @NO); writeDic[@"Opaque Pass"] = ([opaquePass integerValue] ? @YES : @NO); @@ -354,6 +363,7 @@ void ReadConfig(void) writeDic[@"Emulate mjpeg decoder"] = ([mjpegDecoder integerValue] ? @YES : @NO); writeDic[@"Fast mjpeg decoder"] = ([mjpegDecoder15bit integerValue] ? @YES : @NO); writeDic[@"GteAccuracy"] = ([gteAccuracy integerValue] ? @YES : @NO); + writeDic[@"Dither Mode"] = @([colorDithering integerValue]); writeDic[kVSync] = ([vSync integerValue] ? @YES : @NO); writeDic[kWindowSize] = NSStringFromSize(NSMakeSize([windowWidth integerValue], [windowHeighth integerValue])); @@ -408,7 +418,7 @@ void ReadConfig(void) [self loadHacksValues]; [autoFullScreen setIntegerValue:[keyValues[kAutoFullScreen] boolValue]]; - [ditherMode selectItemAtIndex:[keyValues[@"Dither Mode"] integerValue]]; + [limitFrameRate setIntegerValue:[keyValues[kFrameLimit] boolValue]]; [fpsCounter setIntegerValue:[keyValues[kFPSCounter] boolValue]]; [scanlineColorWell setColor:[NSUnarchiver unarchiveObjectWithData: keyValues[@"Scanline Color"]]]; [frameSkipping setIntegerValue:[keyValues[kFrameSkipping] boolValue]]; @@ -426,8 +436,10 @@ void ReadConfig(void) [blurEffect setIntegerValue:[keyValues[@"Blur"] boolValue]]; [texColorDepth selectItemAtIndex:[keyValues[@"Texture Color Depth Level"] integerValue]]; [gteAccuracy setIntegerValue:[keyValues[@"GteAccuracy"] boolValue]]; + [colorDithering setIntegerValue:[keyValues[@"Dither Mode"] integerValue]]; [scanlineColorWell setEnabled:[keyValues[@"Draw Scanlines"] boolValue]]; [frameBufferEffects selectItemAtIndex:[keyValues[@"Frame Buffer Level"] integerValue]]; + [frameBufferAccess selectItemAtIndex:[keyValues[@"Frame Buffer Access"] integerValue]]; [vSync setIntegerValue:[keyValues[kVSync] boolValue]]; [proportionalResize setIntegerValue:[keyValues[@"Proportional Resize"] boolValue]]; NSSize winSize = NSSizeFromString(keyValues[kWindowSize]); @@ -438,6 +450,9 @@ void ReadConfig(void) - (void)awakeFromNib { [[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; // eliminate dumb behavior! + + // Kludge fix for windowWidth field layout problem on OS X 10.10+ + windowWidth.titleWidth = windowWidth.titleWidth + FLT_MIN; } - (void)hacksSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo @@ -475,9 +490,7 @@ void ReadConfig(void) - (IBAction)toggleCheck:(id)sender { - if([sender tag] == 1) { - [scanlineColorWell setEnabled: [sender intValue] ? YES : NO]; - } + scanlineColorWell.enabled = drawScanlines.integerValue; } @end |
