diff --git a/rpcs3/Emu/Memory/vm_ptr.h b/rpcs3/Emu/Memory/vm_ptr.h index 9dd93c5051..bd8201521e 100644 --- a/rpcs3/Emu/Memory/vm_ptr.h +++ b/rpcs3/Emu/Memory/vm_ptr.h @@ -116,8 +116,6 @@ namespace vm { AT m_addr; - using type = RT(T...); - AT addr() const { return m_addr; @@ -141,7 +139,7 @@ namespace vm RT operator()(ARMv7Context& context, T... args) const; // conversion to another function pointer - template operator _ptr_base() const + template operator _ptr_base() const { return{ VM_CAST(m_addr) }; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp index 628fb779a3..83ff0fae6e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp @@ -191,8 +191,7 @@ s32 cellMicGetStatus() s32 cellMicStopEx() { - UNIMPLEMENTED_FUNC(cellMic); - return CELL_OK; + throw EXCEPTION("Unexpected function"); } s32 cellMicSysShareClose() @@ -298,7 +297,7 @@ Module cellMic("cellMic", []() REG_FUNC(cellMic, cellMicReadDsp); REG_FUNC(cellMic, cellMicGetStatus); - REG_FUNC(cellMic, cellMicStopEx); + REG_FUNC(cellMic, cellMicStopEx); // this function shouldn't exist REG_FUNC(cellMic, cellMicSysShareClose); REG_FUNC(cellMic, cellMicGetFormat); REG_FUNC(cellMic, cellMicSetMultiMicNotifyEventQueue); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPad.cpp b/rpcs3/Emu/SysCalls/Modules/cellPad.cpp index 6f84a61b73..4ec390e81b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPad.cpp @@ -83,6 +83,11 @@ s32 cellPadPeriphGetInfo(vm::ptr info) return CELL_OK; } +s32 cellPadPeriphGetData() +{ + throw EXCEPTION(""); +} + s32 cellPadGetData(u32 port_no, vm::ptr data) { sys_io.Log("cellPadGetData(port_no=%d, data=*0x%x)", port_no, data); @@ -262,6 +267,11 @@ s32 cellPadGetData(u32 port_no, vm::ptr data) return CELL_OK; } +s32 cellPadGetRawData(u32 port_no, vm::ptr data) +{ + throw EXCEPTION(""); +} + s32 cellPadGetDataExtra(u32 port_no, vm::ptr device_type, vm::ptr data) { sys_io.Log("cellPadGetDataExtra(port_no=%d, device_type=*0x%x, device_type=*0x%x)", port_no, device_type, data); @@ -526,23 +536,26 @@ s32 cellPadLddUnregisterController(s32 handle) return CELL_OK; } + void cellPad_init() { REG_FUNC(sys_io, cellPadInit); REG_FUNC(sys_io, cellPadEnd); REG_FUNC(sys_io, cellPadClearBuf); REG_FUNC(sys_io, cellPadGetData); + REG_FUNC(sys_io, cellPadGetRawData); // REG_FUNC(sys_io, cellPadGetDataExtra); REG_FUNC(sys_io, cellPadSetActDirect); - REG_FUNC(sys_io, cellPadGetInfo); + REG_FUNC(sys_io, cellPadGetInfo); // REG_FUNC(sys_io, cellPadGetInfo2); REG_FUNC(sys_io, cellPadPeriphGetInfo); + REG_FUNC(sys_io, cellPadPeriphGetData); REG_FUNC(sys_io, cellPadSetPortSetting); - REG_FUNC(sys_io, cellPadInfoPressMode); - REG_FUNC(sys_io, cellPadInfoSensorMode); - REG_FUNC(sys_io, cellPadSetPressMode); - REG_FUNC(sys_io, cellPadSetSensorMode); - REG_FUNC(sys_io, cellPadGetCapabilityInfo); + REG_FUNC(sys_io, cellPadInfoPressMode); // + REG_FUNC(sys_io, cellPadInfoSensorMode); // + REG_FUNC(sys_io, cellPadSetPressMode); // + REG_FUNC(sys_io, cellPadSetSensorMode); // + REG_FUNC(sys_io, cellPadGetCapabilityInfo); // REG_FUNC(sys_io, cellPadLddRegisterController); REG_FUNC(sys_io, cellPadLddDataInsert); REG_FUNC(sys_io, cellPadLddGetPortNo); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 492a227cea..702e53ea5d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -1737,6 +1737,13 @@ s32 cellSpursSetPriorities(vm::ptr spurs, u32 wid, vm::cptr prior return CELL_OK; } +/// Set the priority of a workload for the specified SPU +s32 cellSpursSetPriority(vm::ptr spurs, u32 wid, u32 spuId, u32 priority) +{ + cellSpurs.Todo("cellSpursSetPriority(spurs=*0x%x, wid=%d, spuId=%d, priority=%d)", spurs, wid, spuId, priority); + return CELL_OK; +} + /// Set preemption victim SPU s32 cellSpursSetPreemptionVictimHints(vm::ptr spurs, vm::cptr isPreemptible) { @@ -4226,6 +4233,7 @@ Module cellSpurs("cellSpurs", []() REG_FUNC(cellSpurs, cellSpursGetInfo); REG_FUNC(cellSpurs, cellSpursSetMaxContention); REG_FUNC(cellSpurs, cellSpursSetPriorities); + REG_FUNC(cellSpurs, cellSpursSetPriority); REG_FUNC(cellSpurs, cellSpursSetPreemptionVictimHints); REG_FUNC(cellSpurs, cellSpursAttachLv2EventQueue); REG_FUNC(cellSpurs, cellSpursDetachLv2EventQueue); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp index 0b8ae8ef09..7ead629d4b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp @@ -378,6 +378,12 @@ s32 cellSpursJobQueueSetExceptionEventHandler() return CELL_OK; } +s32 cellSpursJobQueueSetExceptionEventHandler2() +{ + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +} + s32 cellSpursJobQueueUnsetExceptionEventHandler() { UNIMPLEMENTED_FUNC(cellSpursJq); @@ -447,5 +453,6 @@ Module cellSpursJq("cellSpursJq", []() REG_FUNC(cellSpursJq, _cellSpursJobQueuePort2CopyPushJobBody); REG_FUNC(cellSpursJq, _cellSpursJobQueuePort2PushJobBody); REG_FUNC(cellSpursJq, cellSpursJobQueueSetExceptionEventHandler); + REG_FUNC(cellSpursJq, cellSpursJobQueueSetExceptionEventHandler2); REG_FUNC(cellSpursJq, cellSpursJobQueueUnsetExceptionEventHandler); }); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index b1406ea74e..c5ebc8911c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -251,6 +251,13 @@ s32 cellSync2QueueGetDepth() Module cellSync2("cellSync2", []() { + //REG_VARIABLE(cellSync2, gCellSync2CallerThreadTypePpuThread); + //REG_VARIABLE(cellSync2, gCellSync2NotifierPpuThread); + //REG_VARIABLE(cellSync2, gCellSync2CallerThreadTypePpuFiber); + //REG_VARIABLE(cellSync2, gCellSync2NotifierPpuFiber); + //REG_VARIABLE(cellSync2, gCellSync2NotifierSpursTask); + //REG_VARIABLE(cellSync2, gCellSync2NotifierSpursJobQueueJob); + REG_FUNC(cellSync2, _cellSync2MutexAttributeInitialize); REG_FUNC(cellSync2, cellSync2MutexEstimateBufferSize); REG_FUNC(cellSync2, cellSync2MutexInitialize); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 67a2d8f160..dfaf79ff0f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -950,6 +950,8 @@ s32 cellVdecSetFrameRate(u32 handle, CellVdecFrameRate frc) Module cellVdec("cellVdec", []() { + //REG_VARIABLE(cellVdec, _cell_vdec_prx_ver); // 0x085a7ecb + REG_FUNC(cellVdec, cellVdecQueryAttr); REG_FUNC(cellVdec, cellVdecQueryAttrEx); REG_FUNC(cellVdec, cellVdecOpen); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp index e9ed1f9da1..0195052edd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp @@ -220,6 +220,11 @@ s32 cellVoiceWriteToIPortEx() return CELL_OK; } +s32 cellVoiceWriteToIPortEx2() +{ + throw EXCEPTION(""); +} + s32 cellVoiceReadFromOPort() { UNIMPLEMENTED_FUNC(cellVoice); @@ -266,6 +271,7 @@ Module cellVoice("cellVoice", []() REG_FUNC(cellVoice, cellVoiceUpdatePort); REG_FUNC(cellVoice, cellVoiceWriteToIPort); REG_FUNC(cellVoice, cellVoiceWriteToIPortEx); + REG_FUNC(cellVoice, cellVoiceWriteToIPortEx2); REG_FUNC(cellVoice, cellVoiceReadFromOPort); REG_FUNC(cellVoice, cellVoiceDebugTopology); }); diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index cfc84ab00e..889e33c848 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -1297,6 +1297,8 @@ Module sysPrxForUser("sysPrxForUser", []() // Setup random number generator srand(time(NULL)); + //REG_VARIABLE(sysPrxForUser, sys_prx_version); // 0x7df066cf + REG_FUNC(sysPrxForUser, sys_initialize_tls); REG_FUNC(sysPrxForUser, sys_lwmutex_create); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index 35f019dd52..dd7f0afd00 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -7,9 +7,48 @@ extern void cellPad_init(); extern void cellKb_init(); extern void cellMouse_init(); + +s32 sys_config_start() +{ + throw EXCEPTION(""); +} + +s32 sys_config_stop() +{ + throw EXCEPTION(""); +} + +s32 sys_config_add_service_listener() +{ + throw EXCEPTION(""); +} + +s32 sys_config_remove_service_listener() +{ + throw EXCEPTION(""); +} + +s32 sys_config_register_service() +{ + throw EXCEPTION(""); +} + +s32 sys_config_unregister_service() +{ + throw EXCEPTION(""); +} + + Module sys_io("sys_io", []() { cellPad_init(); cellKb_init(); cellMouse_init(); + + REG_FUNC(sys_io, sys_config_start); + REG_FUNC(sys_io, sys_config_stop); + REG_FUNC(sys_io, sys_config_add_service_listener); + REG_FUNC(sys_io, sys_config_remove_service_listener); + REG_FUNC(sys_io, sys_config_register_service); + REG_FUNC(sys_io, sys_config_unregister_service); });