Merge branch 'master' into fix-linux-build

This commit is contained in:
iCatButler 2018-03-13 17:25:03 +00:00 committed by GitHub
commit 2d0b10f982
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 721 additions and 399 deletions

View File

@ -286,7 +286,7 @@ void gteSWC2() {
psxMemWrite32(_oB_, val);
}
inline s64 gte_shift(s64 a, int sf) {
static inline s64 gte_shift(s64 a, int sf) {
if(sf > 0)
return a >> 12;
else if(sf < 0)

View File

@ -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_

View File

@ -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);

View File

@ -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

View File

@ -218,10 +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 */; };
6F5FF7191CE4D1D5005D8636 /* pgxp_gpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FF7171CE4D1D5005D8636 /* pgxp_gpu.c */; };
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 */; };
6F5FF71E1CE4D791005D8636 /* cfg.c in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FF71C1CE4D791005D8636 /* cfg.c */; };
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 */; };
@ -817,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>"; };
@ -826,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>"; };
@ -834,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>"; };
@ -1119,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 */,
@ -1131,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 */,
@ -1781,6 +1773,8 @@
D422E67916DC495800526DCF /* CheatController.m */,
0280B7AB16764CC3007B8001 /* HotkeyController.h */,
0280B7AC16764CC3007B8001 /* HotkeyController.m */,
662A3D671F05E8D500232572 /* PgxpController.h */,
662A3D681F05E8D500232572 /* PgxpController.m */,
);
name = Controllers;
sourceTree = "<group>";
@ -2301,7 +2295,6 @@
6FDBDA731D0DB58300313918 /* pgxp_mem.c in Sources */,
2BB3D6BE05427FE200831ACB /* main.m in Sources */,
6F5FF7211CE4DE68005D8636 /* pgxp_gte.c in Sources */,
6F5FF7191CE4D1D5005D8636 /* pgxp_gpu.c in Sources */,
2BB3D6BF05427FE200831ACB /* PcsxrController.m in Sources */,
2BB3D6C005427FE200831ACB /* ConfigurationController.m in Sources */,
2BB3D6C105427FE200831ACB /* PluginList.m in Sources */,
@ -2344,11 +2337,11 @@
55BBA693149455E1003B2CEC /* PcsxrMemCardHandler.m in Sources */,
55BBA69614945628003B2CEC /* PcsxrPluginHandler.m in Sources */,
55BBA69914953887003B2CEC /* PcsxrDiscHandler.m in Sources */,
6F5FF71E1CE4D791005D8636 /* cfg.c in Sources */,
55BBA69C1495839A003B2CEC /* PcsxrFreezeStateHandler.m in Sources */,
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 */,
@ -2478,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 */,

View File

@ -23,10 +23,10 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
@ -38,17 +38,21 @@
ReferencedContainer = "container:Pcsxr.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "NO"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2BB3D68205427FE200831ACB"
@ -67,12 +71,13 @@
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Instrument"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Instrument"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2BB3D68205427FE200831ACB"

View File

@ -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"/>

View File

@ -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;

View File

@ -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

View File

@ -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];

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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"/>

View File

@ -36,3 +36,7 @@ _GPUcursor
_GPUsetfix
_GPUvisualVibration
_GPUpgxpMemory
_GPUpgxpCacheVertex
_GPUtoggleDebug

View File

@ -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;

View File

@ -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