mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 08:21:29 +12:00
Fixed ELF64 loader.
Fixed cellPadGetInfo. Fixed cellFsOpen path encoding. Draft implementation of cellAudioGetPortConfig. Implemented STBUX, STHUX, STWUX. Improved Boot (S)ELF / Install PKG UI.
This commit is contained in:
parent
e2de06da63
commit
b500fcbaed
10 changed files with 154 additions and 100 deletions
|
@ -1399,6 +1399,10 @@ private:
|
||||||
{
|
{
|
||||||
DisAsm_R3("stdux", rs, ra, rb);
|
DisAsm_R3("stdux", rs, ra, rb);
|
||||||
}
|
}
|
||||||
|
void STWUX(u32 rs, u32 ra, u32 rb)
|
||||||
|
{
|
||||||
|
DisAsm_R3("stwux", rs, ra, rb);
|
||||||
|
}
|
||||||
void STVEWX(u32 vs, u32 ra, u32 rb)
|
void STVEWX(u32 vs, u32 ra, u32 rb)
|
||||||
{
|
{
|
||||||
DisAsm_V1_R2("stvewx", vs, ra, rb);
|
DisAsm_V1_R2("stvewx", vs, ra, rb);
|
||||||
|
@ -1435,6 +1439,10 @@ private:
|
||||||
{
|
{
|
||||||
DisAsm_R3("dcbtst", th, ra, rb);
|
DisAsm_R3("dcbtst", th, ra, rb);
|
||||||
}
|
}
|
||||||
|
void STBUX(u32 rs, u32 ra, u32 rb)
|
||||||
|
{
|
||||||
|
DisAsm_R3("stbux", rs, ra, rb);
|
||||||
|
}
|
||||||
void ADD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc)
|
void ADD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc)
|
||||||
{
|
{
|
||||||
DisAsm_R3_OE_RC("add", rd, ra, rb, oe, rc);
|
DisAsm_R3_OE_RC("add", rd, ra, rb, oe, rc);
|
||||||
|
@ -1530,6 +1538,10 @@ private:
|
||||||
{
|
{
|
||||||
DisAsm_R3("ecowx", rs, ra, rb);
|
DisAsm_R3("ecowx", rs, ra, rb);
|
||||||
}
|
}
|
||||||
|
void STHUX(u32 rs, u32 ra, u32 rb)
|
||||||
|
{
|
||||||
|
DisAsm_R3("sthux", rs, ra, rb);
|
||||||
|
}
|
||||||
void OR(u32 ra, u32 rs, u32 rb, bool rc)
|
void OR(u32 ra, u32 rs, u32 rb, bool rc)
|
||||||
{
|
{
|
||||||
if(rs==rb)
|
if(rs==rb)
|
||||||
|
|
|
@ -482,6 +482,7 @@ namespace PPU_instr
|
||||||
/*0x097*/bind_instr(g1f_list, STWX, RS, RA, RB);
|
/*0x097*/bind_instr(g1f_list, STWX, RS, RA, RB);
|
||||||
/*0x0a7*/bind_instr(g1f_list, STVEHX, VS, RA, RB);
|
/*0x0a7*/bind_instr(g1f_list, STVEHX, VS, RA, RB);
|
||||||
/*0x0b5*/bind_instr(g1f_list, STDUX, RS, RA, RB);
|
/*0x0b5*/bind_instr(g1f_list, STDUX, RS, RA, RB);
|
||||||
|
/*0x0b7*/bind_instr(g1f_list, STWUX, RS, RA, RB);
|
||||||
/*0x0c7*/bind_instr(g1f_list, STVEWX, VS, RA, RB);
|
/*0x0c7*/bind_instr(g1f_list, STVEWX, VS, RA, RB);
|
||||||
/*0x0ca*/bind_instr(g1f_list, ADDZE, RD, RA, OE, RC);
|
/*0x0ca*/bind_instr(g1f_list, ADDZE, RD, RA, OE, RC);
|
||||||
/*0x0d6*/bind_instr(g1f_list, STDCX_, RS, RA, RB);
|
/*0x0d6*/bind_instr(g1f_list, STDCX_, RS, RA, RB);
|
||||||
|
@ -491,6 +492,7 @@ namespace PPU_instr
|
||||||
/*0x0ea*/bind_instr(g1f_list, ADDME, RD, RA, OE, RC);
|
/*0x0ea*/bind_instr(g1f_list, ADDME, RD, RA, OE, RC);
|
||||||
/*0x0eb*/bind_instr(g1f_list, MULLW, RD, RA, RB, OE, RC);
|
/*0x0eb*/bind_instr(g1f_list, MULLW, RD, RA, RB, OE, RC);
|
||||||
/*0x0f6*/bind_instr(g1f_list, DCBTST, TH, RA, RB);
|
/*0x0f6*/bind_instr(g1f_list, DCBTST, TH, RA, RB);
|
||||||
|
/*0x0f7*/bind_instr(g1f_list, STBUX, RS, RA, RB);
|
||||||
/*0x10a*/bind_instr(g1f_list, ADD, RD, RA, RB, OE, RC);
|
/*0x10a*/bind_instr(g1f_list, ADD, RD, RA, RB, OE, RC);
|
||||||
/*0x116*/bind_instr(g1f_list, DCBT, RA, RB, TH);
|
/*0x116*/bind_instr(g1f_list, DCBT, RA, RB, TH);
|
||||||
/*0x117*/bind_instr(g1f_list, LHZX, RD, RA, RB);
|
/*0x117*/bind_instr(g1f_list, LHZX, RD, RA, RB);
|
||||||
|
@ -508,6 +510,7 @@ namespace PPU_instr
|
||||||
/*0x197*/bind_instr(g1f_list, STHX, RS, RA, RB);
|
/*0x197*/bind_instr(g1f_list, STHX, RS, RA, RB);
|
||||||
/*0x19c*/bind_instr(g1f_list, ORC, RA, RS, RB, RC);
|
/*0x19c*/bind_instr(g1f_list, ORC, RA, RS, RB, RC);
|
||||||
/*0x1b6*/bind_instr(g1f_list, ECOWX, RS, RA, RB);
|
/*0x1b6*/bind_instr(g1f_list, ECOWX, RS, RA, RB);
|
||||||
|
/*0x1b7*/bind_instr(g1f_list, STHUX, RS, RA, RB);
|
||||||
/*0x1bc*/bind_instr(g1f_list, OR, RA, RS, RB, RC);
|
/*0x1bc*/bind_instr(g1f_list, OR, RA, RS, RB, RC);
|
||||||
/*0x1c9*/bind_instr(g1f_list, DIVDU, RD, RA, RB, OE, RC);
|
/*0x1c9*/bind_instr(g1f_list, DIVDU, RD, RA, RB, OE, RC);
|
||||||
/*0x1cb*/bind_instr(g1f_list, DIVWU, RD, RA, RB, OE, RC);
|
/*0x1cb*/bind_instr(g1f_list, DIVWU, RD, RA, RB, OE, RC);
|
||||||
|
|
|
@ -2650,6 +2650,12 @@ private:
|
||||||
Memory.Write64(addr, CPU.GPR[rs]);
|
Memory.Write64(addr, CPU.GPR[rs]);
|
||||||
CPU.GPR[ra] = addr;
|
CPU.GPR[ra] = addr;
|
||||||
}
|
}
|
||||||
|
void STWUX(u32 rs, u32 ra, u32 rb)
|
||||||
|
{
|
||||||
|
const u64 addr = CPU.GPR[ra] + CPU.GPR[rb];
|
||||||
|
Memory.Write32(addr, CPU.GPR[rs]);
|
||||||
|
CPU.GPR[ra] = addr;
|
||||||
|
}
|
||||||
void STVEWX(u32 vs, u32 ra, u32 rb)
|
void STVEWX(u32 vs, u32 ra, u32 rb)
|
||||||
{
|
{
|
||||||
const u64 addr = (ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]) & ~3ULL;
|
const u64 addr = (ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]) & ~3ULL;
|
||||||
|
@ -2719,6 +2725,12 @@ private:
|
||||||
{
|
{
|
||||||
//UNK("dcbtst", false);
|
//UNK("dcbtst", false);
|
||||||
}
|
}
|
||||||
|
void STBUX(u32 rs, u32 ra, u32 rb)
|
||||||
|
{
|
||||||
|
const u64 addr = CPU.GPR[ra] + CPU.GPR[rb];
|
||||||
|
Memory.Write8(addr, CPU.GPR[rs]);
|
||||||
|
CPU.GPR[ra] = addr;
|
||||||
|
}
|
||||||
void ADD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc)
|
void ADD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc)
|
||||||
{
|
{
|
||||||
const u64 RA = CPU.GPR[ra];
|
const u64 RA = CPU.GPR[ra];
|
||||||
|
@ -2807,6 +2819,12 @@ private:
|
||||||
//HACK!
|
//HACK!
|
||||||
Memory.Write32((ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]), CPU.GPR[rs]);
|
Memory.Write32((ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]), CPU.GPR[rs]);
|
||||||
}
|
}
|
||||||
|
void STHUX(u32 rs, u32 ra, u32 rb)
|
||||||
|
{
|
||||||
|
const u64 addr = CPU.GPR[ra] + CPU.GPR[rb];
|
||||||
|
Memory.Write16(addr, CPU.GPR[rs]);
|
||||||
|
CPU.GPR[ra] = addr;
|
||||||
|
}
|
||||||
void OR(u32 ra, u32 rs, u32 rb, bool rc)
|
void OR(u32 ra, u32 rs, u32 rb, bool rc)
|
||||||
{
|
{
|
||||||
CPU.GPR[ra] = CPU.GPR[rs] | CPU.GPR[rb];
|
CPU.GPR[ra] = CPU.GPR[rs] | CPU.GPR[rb];
|
||||||
|
|
|
@ -297,6 +297,7 @@ namespace PPU_opcodes
|
||||||
STWX = 0x097,
|
STWX = 0x097,
|
||||||
STVEHX = 0x0a7, //Store Vector Element Halfword Indexed
|
STVEHX = 0x0a7, //Store Vector Element Halfword Indexed
|
||||||
STDUX = 0x0b5,
|
STDUX = 0x0b5,
|
||||||
|
STWUX = 0x0b7,
|
||||||
STVEWX = 0x0c7, //Store Vector Element Word Indexed
|
STVEWX = 0x0c7, //Store Vector Element Word Indexed
|
||||||
ADDZE = 0x0ca,
|
ADDZE = 0x0ca,
|
||||||
STDCX_ = 0x0d6,
|
STDCX_ = 0x0d6,
|
||||||
|
@ -306,6 +307,7 @@ namespace PPU_opcodes
|
||||||
ADDME = 0x0ea,
|
ADDME = 0x0ea,
|
||||||
MULLW = 0x0eb,
|
MULLW = 0x0eb,
|
||||||
DCBTST = 0x0f6,
|
DCBTST = 0x0f6,
|
||||||
|
STBUX = 0x0f7,
|
||||||
DOZ = 0x108,
|
DOZ = 0x108,
|
||||||
ADD = 0x10a,
|
ADD = 0x10a,
|
||||||
DCBT = 0x116,
|
DCBT = 0x116,
|
||||||
|
@ -324,6 +326,7 @@ namespace PPU_opcodes
|
||||||
STHX = 0x197, //Store Halfword Indexed
|
STHX = 0x197, //Store Halfword Indexed
|
||||||
ORC = 0x19c, //OR with Complement
|
ORC = 0x19c, //OR with Complement
|
||||||
ECOWX = 0x1b6,
|
ECOWX = 0x1b6,
|
||||||
|
STHUX = 0x1b7,
|
||||||
OR = 0x1bc,
|
OR = 0x1bc,
|
||||||
DIVDU = 0x1c9,
|
DIVDU = 0x1c9,
|
||||||
DIVWU = 0x1cb,
|
DIVWU = 0x1cb,
|
||||||
|
@ -678,6 +681,7 @@ public:
|
||||||
virtual void STWX(u32 rs, u32 ra, u32 rb) = 0;
|
virtual void STWX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
virtual void STVEHX(u32 vs, u32 ra, u32 rb) = 0;
|
virtual void STVEHX(u32 vs, u32 ra, u32 rb) = 0;
|
||||||
virtual void STDUX(u32 rs, u32 ra, u32 rb) = 0;
|
virtual void STDUX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
|
virtual void STWUX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
virtual void STVEWX(u32 vs, u32 ra, u32 rb) = 0;
|
virtual void STVEWX(u32 vs, u32 ra, u32 rb) = 0;
|
||||||
virtual void ADDZE(u32 rd, u32 ra, u32 oe, bool rc) = 0;
|
virtual void ADDZE(u32 rd, u32 ra, u32 oe, bool rc) = 0;
|
||||||
virtual void STDCX_(u32 rs, u32 ra, u32 rb) = 0;
|
virtual void STDCX_(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
|
@ -687,6 +691,7 @@ public:
|
||||||
virtual void ADDME(u32 rd, u32 ra, u32 oe, bool rc) = 0;
|
virtual void ADDME(u32 rd, u32 ra, u32 oe, bool rc) = 0;
|
||||||
virtual void MULLW(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
virtual void MULLW(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
||||||
virtual void DCBTST(u32 th, u32 ra, u32 rb) = 0;
|
virtual void DCBTST(u32 th, u32 ra, u32 rb) = 0;
|
||||||
|
virtual void STBUX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
virtual void ADD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
virtual void ADD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
||||||
virtual void DCBT(u32 ra, u32 rb, u32 th) = 0;
|
virtual void DCBT(u32 ra, u32 rb, u32 th) = 0;
|
||||||
virtual void LHZX(u32 rd, u32 ra, u32 rb) = 0;
|
virtual void LHZX(u32 rd, u32 ra, u32 rb) = 0;
|
||||||
|
@ -704,6 +709,7 @@ public:
|
||||||
virtual void STHX(u32 rs, u32 ra, u32 rb) = 0;
|
virtual void STHX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
virtual void ORC(u32 rs, u32 ra, u32 rb, bool rc) = 0;
|
virtual void ORC(u32 rs, u32 ra, u32 rb, bool rc) = 0;
|
||||||
virtual void ECOWX(u32 rs, u32 ra, u32 rb) = 0;
|
virtual void ECOWX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
|
virtual void STHUX(u32 rs, u32 ra, u32 rb) = 0;
|
||||||
virtual void OR(u32 ra, u32 rs, u32 rb, bool rc) = 0;
|
virtual void OR(u32 ra, u32 rs, u32 rb, bool rc) = 0;
|
||||||
virtual void DIVDU(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
virtual void DIVDU(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
||||||
virtual void DIVWU(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
virtual void DIVWU(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) = 0;
|
||||||
|
|
|
@ -62,20 +62,20 @@ enum
|
||||||
//libaudio datatypes
|
//libaudio datatypes
|
||||||
struct CellAudioPortParam
|
struct CellAudioPortParam
|
||||||
{
|
{
|
||||||
u64 nChannel;
|
be_t<u64> nChannel;
|
||||||
u64 nBlock;
|
be_t<u64> nBlock;
|
||||||
u64 attr;
|
be_t<u64> attr;
|
||||||
float level;
|
be_t<float> level;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CellAudioPortConfig
|
struct CellAudioPortConfig
|
||||||
{
|
{
|
||||||
u32 readIndexAddr;
|
be_t<u32> readIndexAddr;
|
||||||
u32 status;
|
be_t<u32> status;
|
||||||
u64 nChannel;
|
be_t<u64> nChannel;
|
||||||
u64 nBlock;
|
be_t<u64> nBlock;
|
||||||
u32 portSize;
|
be_t<u32> portSize;
|
||||||
u32 portAddr;
|
be_t<u32> portAddr;
|
||||||
};
|
};
|
||||||
|
|
||||||
CellAudioPortParam current_AudioPortParam;
|
CellAudioPortParam current_AudioPortParam;
|
||||||
|
@ -205,7 +205,7 @@ int cellAudioQuit()
|
||||||
bool g_is_audio_port_open = false;
|
bool g_is_audio_port_open = false;
|
||||||
bool g_is_audio_port_start = false;
|
bool g_is_audio_port_start = false;
|
||||||
|
|
||||||
int cellAudioPortOpen() //CellAudioPortParam *audioParam, u32 *portNum
|
int cellAudioPortOpen(mem_ptr_t<CellAudioPortParam> audioParam, mem32_t portNum)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED_FUNC(cellAudio);
|
UNIMPLEMENTED_FUNC(cellAudio);
|
||||||
if(g_is_audio_port_open) return CELL_AUDIO_ERROR_PORT_OPEN;
|
if(g_is_audio_port_open) return CELL_AUDIO_ERROR_PORT_OPEN;
|
||||||
|
@ -243,9 +243,18 @@ int cellAudioGetPortTimestamp() //u32 portNum, u64 tag, u64 *stamp
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cellAudioGetPortConfig() //u32 portNum, CellAudioPortConfig *portConfig
|
int cellAudioGetPortConfig(mem32_t portNum, mem_ptr_t<CellAudioPortConfig> portConfig)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED_FUNC(cellAudio);
|
UNIMPLEMENTED_FUNC(cellAudio);
|
||||||
|
//TODO
|
||||||
|
portConfig->nBlock = 8;
|
||||||
|
portConfig->nChannel = 2;
|
||||||
|
portConfig->portSize = 256 * portConfig->nBlock * portConfig->nChannel;
|
||||||
|
portConfig->portAddr = Memory.Alloc(portConfig->portSize, 4); //WARNING: Memory leak.
|
||||||
|
portConfig->readIndexAddr = Memory.Alloc(8, 4); //WARNING: Memory leak.
|
||||||
|
portConfig->status = 2;
|
||||||
|
Memory.Write64(portConfig->readIndexAddr, 1);
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,8 @@ int cellPngDecDestroy(u32 mainHandle)
|
||||||
|
|
||||||
int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, u32 src_addr, u32 openInfo)
|
int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, u32 src_addr, u32 openInfo)
|
||||||
{
|
{
|
||||||
|
cellPngDec.Warning("cellPngDecOpen(mainHandle=0x%x,subHandle=0x%x,src_addr=0x%x,openInfo=0x%x)", mainHandle, subHandle.GetAddr(), src_addr, openInfo);
|
||||||
|
|
||||||
CellPngDecSrc* src;
|
CellPngDecSrc* src;
|
||||||
|
|
||||||
src = (CellPngDecSrc*)Memory.GetMemFromAddr(src_addr);
|
src = (CellPngDecSrc*)Memory.GetMemFromAddr(src_addr);
|
||||||
|
@ -134,12 +136,13 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, u32 src_addr, u32 openInfo
|
||||||
current_subHandle->fd = NULL;
|
current_subHandle->fd = NULL;
|
||||||
current_subHandle->src = *src;
|
current_subHandle->src = *src;
|
||||||
|
|
||||||
switch(src->srcSelect.ToLE())
|
switch(src->srcSelect.ToBE())
|
||||||
{
|
{
|
||||||
case CELL_PNGDEC_BUFFER:
|
case const_se_t<u32, CELL_PNGDEC_BUFFER>::value:
|
||||||
current_subHandle->fileSize = src->streamSize.ToLE();
|
current_subHandle->fileSize = src->streamSize.ToLE();
|
||||||
break;
|
break;
|
||||||
case CELL_PNGDEC_FILE:
|
|
||||||
|
case const_se_t<u32, CELL_PNGDEC_FILE>::value:
|
||||||
// Get file descriptor
|
// Get file descriptor
|
||||||
MemoryAllocator<be_t<u32>> fd;
|
MemoryAllocator<be_t<u32>> fd;
|
||||||
int ret = cellFsOpen(src->fileName, 0, fd, NULL, 0);
|
int ret = cellFsOpen(src->fileName, 0, fd, NULL, 0);
|
||||||
|
@ -162,6 +165,8 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, u32 src_addr, u32 openInfo
|
||||||
|
|
||||||
int cellPngDecClose(u32 mainHandle, u32 subHandle)
|
int cellPngDecClose(u32 mainHandle, u32 subHandle)
|
||||||
{
|
{
|
||||||
|
cellPngDec.Warning("cellPngDecClose(mainHandle=0x%x,subHandle=0x%x)", mainHandle, subHandle);
|
||||||
|
|
||||||
ID sub_handle_id_data;
|
ID sub_handle_id_data;
|
||||||
if(!cellPngDec.CheckId(subHandle, sub_handle_id_data))
|
if(!cellPngDec.CheckId(subHandle, sub_handle_id_data))
|
||||||
return CELL_PNGDEC_ERROR_FATAL;
|
return CELL_PNGDEC_ERROR_FATAL;
|
||||||
|
@ -176,7 +181,7 @@ int cellPngDecClose(u32 mainHandle, u32 subHandle)
|
||||||
|
|
||||||
int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t<CellPngDecInfo> info)
|
int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t<CellPngDecInfo> info)
|
||||||
{
|
{
|
||||||
cellPngDec.Log("cellPngDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr());
|
cellPngDec.Warning("cellPngDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr());
|
||||||
ID sub_handle_id_data;
|
ID sub_handle_id_data;
|
||||||
if(!cellPngDec.CheckId(subHandle, sub_handle_id_data))
|
if(!cellPngDec.CheckId(subHandle, sub_handle_id_data))
|
||||||
return CELL_PNGDEC_ERROR_FATAL;
|
return CELL_PNGDEC_ERROR_FATAL;
|
||||||
|
|
|
@ -476,7 +476,7 @@ int cellSysutilUnregisterCallback(int slot)
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cellMsgDialogOpen2(u32 type, u32 msgString_addr, u32 callback_addr, u32 userData, u32 extParam)
|
int cellMsgDialogOpen2(u32 type, char* msgString, u32 callback_addr, u32 userData, u32 extParam)
|
||||||
{
|
{
|
||||||
long style = 0;
|
long style = 0;
|
||||||
|
|
||||||
|
@ -498,7 +498,7 @@ int cellMsgDialogOpen2(u32 type, u32 msgString_addr, u32 callback_addr, u32 user
|
||||||
style |= wxOK;
|
style |= wxOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int res = wxMessageBox(Memory.ReadString(msgString_addr), wxGetApp().GetAppName(), style);
|
int res = wxMessageBox(wxString(msgString, wxConvUTF8), wxGetApp().GetAppName(), style);
|
||||||
|
|
||||||
u64 status;
|
u64 status;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ extern Module sys_fs;
|
||||||
|
|
||||||
int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size)
|
int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size)
|
||||||
{
|
{
|
||||||
const wxString& path = Memory.ReadString(path_addr);
|
const wxString& path = wxString(Memory.ReadString(path_addr), wxConvUTF8);
|
||||||
sys_fs.Log("cellFsOpen(path: %s, flags: 0x%x, fd_addr: 0x%x, arg_addr: 0x%x, size: 0x%llx)",
|
sys_fs.Log("cellFsOpen(path: %s, flags: 0x%x, fd_addr: 0x%x, arg_addr: 0x%x, size: 0x%llx)",
|
||||||
path.mb_str(), flags, fd.GetAddr(), arg.GetAddr(), size);
|
path.mb_str(), flags, fd.GetAddr(), arg.GetAddr(), size);
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ int cellPadGetInfo(u32 info_addr)
|
||||||
{
|
{
|
||||||
if(i >= pads.GetCount()) break;
|
if(i >= pads.GetCount()) break;
|
||||||
|
|
||||||
info.status[i] = re(pads[i].m_port_status);
|
re(info.status[i], pads[i].m_port_status);
|
||||||
info.product_id[i] = const_se_t<u16, 0x0268>::value;
|
info.product_id[i] = const_se_t<u16, 0x0268>::value;
|
||||||
info.vendor_id[i] = const_se_t<u16, 0x054C>::value;
|
info.vendor_id[i] = const_se_t<u16, 0x054C>::value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,7 +201,8 @@ void Emulator::Load()
|
||||||
elf_path += "\\" + wxFileName(m_path).GetName() + ".elf";
|
elf_path += "\\" + wxFileName(m_path).GetName() + ".elf";
|
||||||
}
|
}
|
||||||
|
|
||||||
DecryptSelf(elf_path, self_path);
|
if(!DecryptSelf(elf_path, self_path))
|
||||||
|
return;
|
||||||
|
|
||||||
m_path = elf_path;
|
m_path = elf_path;
|
||||||
}
|
}
|
||||||
|
@ -312,7 +313,7 @@ void Emulator::Load()
|
||||||
thread.SetEntry(l.GetEntry());
|
thread.SetEntry(l.GetEntry());
|
||||||
Memory.StackMem.Alloc(0x1000);
|
Memory.StackMem.Alloc(0x1000);
|
||||||
thread.InitStack();
|
thread.InitStack();
|
||||||
thread.AddArgv(m_path);
|
thread.AddArgv(m_elf_path);
|
||||||
//thread.AddArgv("-emu");
|
//thread.AddArgv("-emu");
|
||||||
|
|
||||||
m_rsx_callback = Memory.MainMem.Alloc(4 * 4) + 4;
|
m_rsx_callback = Memory.MainMem.Alloc(4 * 4) + 4;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue