def allocX86Mem(self, cbMem): pR0KernVirtual = ffi.new("R0PTR *"); pPhysX86Addr = ffi.new("X86PADDR *"); self.rcLibLast = lib.PSPProxyCtxX86MemAlloc(self.hCtx, cbMem, pR0KernVirtual, pPhysX86Addr); if self.rcLibLast == 0: return (0, pR0KernVirtual[0], pPhysX86Addr[0]); return (self.rcLibLast, 0, 0);
def branchTo(self, uPspAddrPc, fThumb, lstGprs): paGprs = ffi.new("uint32_t[13]") paGprs = lstGprs self.rcLibLast = lib.PSPProxyCtxBranchTo(self.hCtx, uPspAddrPc, fThumb, paGprs) if self.rcLibLast == 0: return 0
def readX86Smn(self, idNode, uSmnAddr, cbVal): pVal = None; if cbVal == 1: pVal = ffi.new("uint8_t *"); elif cbVal == 2: pVal = ffi.new("uint16_t *"); elif cbVal == 4: pVal = ffi.new("uint32_t *"); elif cbVal == 8: pVal = ffi.new("uint64_t *"); else: return (-1, 0); self.rcLibLast = lib.PSPProxyCtxX86SmnRead(self.hCtx, idNode, uSmnAddr, cbVal, pVal); if self.rcLibLast == 0: return (0, pVal[0]); else: return (self.rcLibLast, 0);
def readPspMmio(self, uPspAddr, cbVal): pVal = None if cbVal == 1: pVal = ffi.new("uint8_t *") elif cbVal == 2: pVal = ffi.new("uint16_t *") elif cbVal == 4: pVal = ffi.new("uint32_t *") elif cbVal == 8: pVal = ffi.new("uint64_t *") else: return (-1, 0) self.rcLibLast = lib.PSPProxyCtxPspMmioRead(self.hCtx, uPspAddr, cbVal, pVal) if self.rcLibLast == 0: return (0, pVal[0]) else: return (self.rcLibLast, 0)
def readSmn(self, idCcdTgt, uSmnAddr, cbVal): pVal = None if cbVal == 1: pVal = ffi.new("uint8_t *") elif cbVal == 2: pVal = ffi.new("uint16_t *") elif cbVal == 4: pVal = ffi.new("uint32_t *") elif cbVal == 8: pVal = ffi.new("uint64_t *") else: return (-1, 0) self.rcLibLast = lib.PSPProxyCtxPspSmnRead(self.hCtx, idCcdTgt, uSmnAddr, cbVal, pVal) if self.rcLibLast == 0: return (0, pVal[0]) else: return (self.rcLibLast, 0)
def readCoProc(self, idCoProc, idCrn, idCrm, idOpc1, idOpc2): pVal = ffi.new("uint32_t *") self.rcLibLast = lib.PSPProxyCtxPspCoProcRead(self.hCtx, idCoProc, idCrn, idCrm, idOpc1, idOpc2, pVal) if self.rcLibLast == 0: return (0, pVal[0]) else: return (self.rcLibLast, 0)
def writeSmn(self, idCcdTgt, uSmnAddr, cbVal, uVal): pVal = None; if cbVal == 1: pVal = ffi.new("uint8_t *"); elif cbVal == 2: pVal = ffi.new("uint16_t *"); elif cbVal == 4: pVal = ffi.new("uint32_t *"); elif cbVal == 8: pVal = ffi.new("uint64_t *"); else: return -1; pVal[0] = uVal; self.rcLibLast = lib.PSPProxyCtxPspSmnWrite(self.hCtx, idCcdTgt, uSmnAddr, cbVal, pVal); if self.rcLibLast == 0: return 0; else: return self.rcLibLast;
def writeX86Smn(self, idNode, uSmnAddr, cbVal, uVal): pVal = None if cbVal == 1: pVal = ffi.new("uint8_t *") elif cbVal == 2: pVal = ffi.new("uint16_t *") elif cbVal == 4: pVal = ffi.new("uint32_t *") elif cbVal == 8: pVal = ffi.new("uint64_t *") else: return -1 pVal[0] = uVal self.rcLibLast = lib.PSPProxyCtxX86SmnWrite(self.hCtx, idNode, uSmnAddr, cbVal, pVal) if self.rcLibLast == 0: return 0 else: return self.rcLibLast
def writePspX86Mmio(self, uX86Addr, cbVal, uVal): pVal = None if cbVal == 1: pVal = ffi.new("uint8_t *") elif cbVal == 2: pVal = ffi.new("uint16_t *") elif cbVal == 4: pVal = ffi.new("uint32_t *") elif cbVal == 8: pVal = ffi.new("uint64_t *") else: return -1 pVal[0] = uVal self.rcLibLast = lib.PSPProxyCtxPspX86MmioWrite( self.hCtx, uX86Addr, cbVal, pVal) if self.rcLibLast == 0: return 0 else: return self.rcLibLast
def __init__(self, sDevicePath): self.sDevicePath = sDevicePath; self.hCtx = None; self.rcLibLast = 0; phCtx = ffi.new("PPSPPROXYCTX"); rcLib = lib.PSPProxyCtxCreate(phCtx, self.sDevicePath.encode("UTF-8")); if rcLib == 0: self.hCtx = phCtx[0]; else: self.rcLibLast = rcLib;
def __init__(self, sDevicePath): self.sDevicePath = sDevicePath self.hCtx = None self.rcLibLast = 0 phCtx = ffi.new("PPSPPROXYCTX") rcLib = lib.PSPProxyCtxCreate(phCtx, self.sDevicePath.encode("UTF-8"), ffi.NULL, ffi.NULL) if rcLib == 0: self.hCtx = phCtx[0] else: self.rcLibLast = rcLib
def queryLastReqRc(self): pVal = ffi.new("PSPSTS *") self.rcLibLast = lib.PSPProxyCtxQueryLastReqRc(self.hCtx, pVal) if self.rcLibLast == 0: return pVal[0] return self.rcLibLast
def callSvc(self, idxSyscall, uR0, uR1, uR2, uR3): pR0Return = ffi.new("uint32_t *") self.rcLibLast = lib.PSPProxyCtxPspSvcCall(self.hCtx, idxSyscall, uR0, uR1, uR2, uR3, pR0Return) return (self.rcLibLast, pR0Return[0])