summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriCatButler <i.am.catbutler@gmail.com>2018-03-13 17:23:50 +0000
committerGitHub <noreply@github.com>2018-03-13 17:23:50 +0000
commit15fe3782c1375634b7a9bd9bbbadfd75e7b06fed (patch)
tree6660b9aeb3f4aedf384a0a1c76d3a849d4f43146
parent540dccfdbd162f247d2390ac35df4144b28aab44 (diff)
parent13c17e4b6ef1eee9ad60d3db2016ebb8e54bf337 (diff)
Merge pull request #5 from MrLavender/master
Fix 64-bit dynarec integration and update OS X build
-rw-r--r--.gitignore2
-rw-r--r--libpcsxcore/ix86_64/iPGXP-64.h220
-rwxr-xr-xlibpcsxcore/ix86_64/iR3000A-64.c10
-rwxr-xr-xlibpcsxcore/ix86_64/ix86-64.h2
-rw-r--r--libpcsxcore/pgxp_gte.h2
-rw-r--r--macosx/Pcsxr.xcodeproj/project.pbxproj18
-rw-r--r--macosx/Resources/Base.lproj/Configuration.xib167
-rw-r--r--macosx/Source/ConfigurationController.h4
-rw-r--r--macosx/Source/ConfigurationController.m28
-rw-r--r--macosx/Source/PcsxrController.m14
-rw-r--r--macosx/Source/PgxpController.h24
-rw-r--r--macosx/Source/PgxpController.m98
-rw-r--r--macosx/Source/hotkeys.m6
-rw-r--r--macosx/plugins/PeopsXgl/Base.lproj/NetSfPeopsOpenGLConfig.xib467
-rw-r--r--macosx/plugins/PeopsXgl/PeopsXgl.exp4
-rwxr-xr-xmacosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.h4
-rwxr-xr-xmacosx/plugins/PeopsXgl/macsrc/NetSfPeopsOpenGLPluginConfigController.m31
17 files changed, 712 insertions, 389 deletions
diff --git a/.gitignore b/.gitignore
index acc22675..d714b1c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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