diff --git a/rpcs3/Emu/Cell/lv2/lv2.cpp b/rpcs3/Emu/Cell/lv2/lv2.cpp index 2a1bffc248..93e76b056c 100644 --- a/rpcs3/Emu/Cell/lv2/lv2.cpp +++ b/rpcs3/Emu/Cell/lv2/lv2.cpp @@ -29,6 +29,7 @@ #include "sys_vm.h" #include "sys_fs.h" #include "sys_dbg.h" +#include "sys_gamepad.h" LOG_CHANNEL(sys_cond); LOG_CHANNEL(sys_dbg); @@ -53,6 +54,7 @@ LOG_CHANNEL(sys_timer); LOG_CHANNEL(sys_trace); LOG_CHANNEL(sys_tty); LOG_CHANNEL(sys_vm); +LOG_CHANNEL(sys_gamepad); extern std::string ppu_get_syscall_name(u64 code); @@ -600,7 +602,7 @@ std::array g_ppu_syscall_table null_func,//BIND_FUNC(sys_storage_set_region_acl) //618 (0x26A) null_func,//BIND_FUNC(sys_storage_async_send_device_command) //619 (0x26B) null_func,//BIND_FUNC(sys_...) //620 (0x26C) ROOT - null_func,//BIND_FUNC(sys_gamepad_ycon_if) //621 (0x26D) + BIND_FUNC(sys_gamepad_ycon_if), //621 (0x26D) null_func,//BIND_FUNC(sys_storage_get_region_offset) //622 (0x26E) null_func,//BIND_FUNC(sys_storage_set_emulated_speed) //623 (0x26F) null_func,//BIND_FUNC(sys_io_buffer_create) //624 (0x270) diff --git a/rpcs3/MMJoystickHandler.cpp b/rpcs3/MMJoystickHandler.cpp index 759dba1b82..48326bfad6 100644 --- a/rpcs3/MMJoystickHandler.cpp +++ b/rpcs3/MMJoystickHandler.cpp @@ -40,6 +40,8 @@ void MMJoystickHandler::Init(const u32 max_connect) js_info.dwSize = sizeof(js_info); js_info.dwFlags = JOY_RETURNALL; joyGetDevCaps(JOYSTICKID1, &js_caps, sizeof(js_caps)); + + bool JoyPresent = (joyGetPosEx(JOYSTICKID1, &js_info) == JOYERR_NOERROR); if (JoyPresent) { diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 7990046375..3814079edb 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -384,6 +384,7 @@ Create + @@ -661,6 +662,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 8e52a7ffab..c4b011d2f7 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -890,6 +890,9 @@ Utilities + + Emu\Cell\lv2 + Loader @@ -1717,6 +1720,9 @@ Emu\Cell\Modules + + Emu\Cell\lv2 + Loader diff --git a/rpcs3/sys_gamepad.cpp b/rpcs3/sys_gamepad.cpp new file mode 100644 index 0000000000..c77186b578 --- /dev/null +++ b/rpcs3/sys_gamepad.cpp @@ -0,0 +1,117 @@ +#include "stdafx.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/IdManager.h" + +#include "Emu/Cell/ErrorCodes.h" + +#include "sys_gamepad.h" + +namespace vm { using namespace ps3; } + +logs::channel sys_gamepad("sys_gamepad", logs::level::notice); + +u32 sys_gamepad_ycon_initalize(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_initalize(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_finalize(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_finalize(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_has_input_ownership(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_has_input_ownership(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_enumerate_device(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_enumerate_device(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_get_device_info(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_get_device_info(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_read_raw_report(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_read_raw_report(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_write_raw_report(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_write_raw_report(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_get_feature(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_get_feature(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_set_feature(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_set_feature(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +u32 sys_gamepad_ycon_is_gem(vm::ps3::ptr in, vm::ps3::ptr out) +{ + sys_gamepad.todo("sys_gamepad_ycon_is_gem(in=%d, out=%d) -> CELL_OK", in, out); + return CELL_OK; +} + +// syscall(621,packet_id,uint8_t *in,uint8_t *out) Talk:LV2_Functions_and_Syscalls#Syscall_621_.280x26D.29 gamepad_if usage +u32 sys_gamepad_ycon_if(uint8_t packet_id, vm::ps3::ptr in, vm::ps3::ptr out) +{ + + switch (packet_id) + { + case 0: + return sys_gamepad_ycon_initalize(in, out); + break; + case 1: + return sys_gamepad_ycon_finalize(in, out); + break; + case 2: + return sys_gamepad_ycon_has_input_ownership(in, out); + break; + case 3: + return sys_gamepad_ycon_enumerate_device(in, out); + break; + case 4: + return sys_gamepad_ycon_get_device_info(in, out); + break; + case 5: + return sys_gamepad_ycon_read_raw_report(in, out); + break; + case 6: + return sys_gamepad_ycon_write_raw_report(in, out); + break; + case 7: + return sys_gamepad_ycon_get_feature(in, out); + break; + case 8: + return sys_gamepad_ycon_set_feature(in, out); + break; + case 9: + return sys_gamepad_ycon_is_gem(in, out); + break; + + default: + sys_gamepad.error("sys_gamepad_ycon_if(packet_id=*%d, in=%d, out=%d), unknown packet id", packet_id, in, out); + break; + } + + return CELL_OK; +} diff --git a/rpcs3/sys_gamepad.h b/rpcs3/sys_gamepad.h new file mode 100644 index 0000000000..9f3dab972d --- /dev/null +++ b/rpcs3/sys_gamepad.h @@ -0,0 +1,7 @@ +#pragma once + +#include "Emu/Cell/ErrorCodes.h" + +//Syscalls + +u32 sys_gamepad_ycon_if(uint8_t packet_id, vm::ps3::ptr in, vm::ps3::ptr out); \ No newline at end of file