From 94b0d9dfd57bd773ee95b794c480f6b43952becc Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 25 Jan 2015 02:34:40 +0300 Subject: [PATCH] ARMv7: IO funcs registered, u64/s64 stack arg support --- rpcs3/Emu/ARMv7/ARMv7Context.h | 1 - rpcs3/Emu/ARMv7/ARMv7Thread.cpp | 5 - rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp | 143 +++++- rpcs3/Emu/ARMv7/Modules/sceLibKernel.h | 251 ++++++++++ rpcs3/Emu/ARMv7/Modules/sceLibc.cpp | 1 - rpcs3/Emu/ARMv7/Modules/sceLibm.cpp | 1 - rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp | 1 - rpcs3/Emu/ARMv7/PSVFuncList.h | 610 ++++++++--------------- 8 files changed, 579 insertions(+), 434 deletions(-) diff --git a/rpcs3/Emu/ARMv7/ARMv7Context.h b/rpcs3/Emu/ARMv7/ARMv7Context.h index bc024e6e62..491e0a0845 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Context.h +++ b/rpcs3/Emu/ARMv7/ARMv7Context.h @@ -18,7 +18,6 @@ struct ARMv7Context void write_pc(u32 value); u32 read_pc(); - void put_stack_arg(u32 shift, u32 value); u32 get_stack_arg(u32 pos); void fast_call(u32 addr); diff --git a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp index e4b1d65291..0b9710ffe2 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp +++ b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp @@ -20,11 +20,6 @@ u32 ARMv7Context::read_pc() return thread.PC; } -void ARMv7Context::put_stack_arg(u32 shift, u32 value) -{ - vm::psv::write32(SP + shift, value); -} - u32 ARMv7Context::get_stack_arg(u32 pos) { return vm::psv::read32(SP + sizeof(u32) * (pos - 5)); diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp index 070650f925..ac2600dc4b 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Emu/System.h" -#include "Emu/Memory/Memory.h" #include "Emu/ARMv7/PSVFuncList.h" #include "Emu/CPU/CPUThreadManager.h" @@ -858,6 +857,108 @@ s32 sceKernelGetRWLockInfo(s32 rwLockId, vm::psv::ptr pInfo throw __FUNCTION__; } +// IO/File functions + +s32 sceIoRemove(vm::psv::ptr filename) +{ + throw __FUNCTION__; +} + +s32 sceIoMkdir(vm::psv::ptr dirname, s32 mode) +{ + throw __FUNCTION__; +} + +s32 sceIoRmdir(vm::psv::ptr dirname) +{ + throw __FUNCTION__; +} + +s32 sceIoRename(vm::psv::ptr oldname, vm::psv::ptr newname) +{ + throw __FUNCTION__; +} + +s32 sceIoDevctl(vm::psv::ptr devname, s32 cmd, vm::psv::ptr arg, u32 arglen, vm::psv::ptr bufp, u32 buflen) +{ + throw __FUNCTION__; +} + +s32 sceIoSync(vm::psv::ptr devname, s32 flag) +{ + throw __FUNCTION__; +} + +s32 sceIoOpen(vm::psv::ptr filename, s32 flag, s32 mode) +{ + throw __FUNCTION__; +} + +s32 sceIoClose(s32 fd) +{ + throw __FUNCTION__; +} + +s32 sceIoIoctl(s32 fd, s32 cmd, vm::psv::ptr argp, u32 arglen, vm::psv::ptr bufp, u32 buflen) +{ + throw __FUNCTION__; +} + +s64 sceIoLseek(s32 fd, s64 offset, s32 whence) +{ + throw __FUNCTION__; +} + +s32 sceIoLseek32(s32 fd, s32 offset, s32 whence) +{ + throw __FUNCTION__; +} + +s32 sceIoRead(s32 fd, vm::psv::ptr buf, u32 nbyte) +{ + throw __FUNCTION__; +} + +s32 sceIoWrite(s32 fd, vm::psv::ptr buf, u32 nbyte) +{ + throw __FUNCTION__; +} + +s32 sceIoPread(s32 fd, vm::psv::ptr buf, u32 nbyte, s64 offset) +{ + throw __FUNCTION__; +} + +s32 sceIoPwrite(s32 fd, vm::psv::ptr buf, u32 nbyte, s64 offset) +{ + throw __FUNCTION__; +} + +s32 sceIoDopen(vm::psv::ptr dirname) +{ + throw __FUNCTION__; +} + +s32 sceIoDclose(s32 fd) +{ + throw __FUNCTION__; +} + +s32 sceIoDread(s32 fd, vm::psv::ptr buf) +{ + throw __FUNCTION__; +} + +s32 sceIoChstat(vm::psv::ptr name, vm::psv::ptr buf, u32 cbit) +{ + throw __FUNCTION__; +} + +s32 sceIoGetstat(vm::psv::ptr name, vm::psv::ptr buf) +{ + throw __FUNCTION__; +} + #define REG_FUNC(nid, name) reg_psv_func(nid, &sceLibKernel, #name, &name) @@ -1128,24 +1229,24 @@ psv_log_base sceLibKernel("sceLibKernel", []() //REG_FUNC(0x24460BB3, sceKernelWaitSignalCB); //REG_FUNC(0x7BE9C4C8, sceKernelSendSignal); REG_FUNC(0xC5C11EE7, sceKernelCreateThread); - //REG_FUNC(0x6C60AC61, sceIoOpen); - //REG_FUNC(0xF5C6F098, sceIoClose); - //REG_FUNC(0x713523E1, sceIoRead); - //REG_FUNC(0x11FED231, sceIoWrite); - //REG_FUNC(0x99BA173E, sceIoLseek); - //REG_FUNC(0x5CC983AC, sceIoLseek32); - //REG_FUNC(0xE20ED0F3, sceIoRemove); - //REG_FUNC(0xF737E369, sceIoRename); - //REG_FUNC(0x9670D39F, sceIoMkdir); - //REG_FUNC(0xE9F91EC8, sceIoRmdir); - //REG_FUNC(0xA9283DD0, sceIoDopen); - //REG_FUNC(0x9DFF9C59, sceIoDclose); - //REG_FUNC(0x9C8B6624, sceIoDread); - //REG_FUNC(0xBCA5B623, sceIoGetstat); - //REG_FUNC(0x29482F7F, sceIoChstat); - //REG_FUNC(0x98ACED6D, sceIoSync); - //REG_FUNC(0x4B30CB2, sceIoDevctl); - //REG_FUNC(0x54ABACFA, sceIoIoctl); + REG_FUNC(0x6C60AC61, sceIoOpen); + REG_FUNC(0xF5C6F098, sceIoClose); + REG_FUNC(0x713523E1, sceIoRead); + REG_FUNC(0x11FED231, sceIoWrite); + REG_FUNC(0x99BA173E, sceIoLseek); + REG_FUNC(0x5CC983AC, sceIoLseek32); + REG_FUNC(0xE20ED0F3, sceIoRemove); + REG_FUNC(0xF737E369, sceIoRename); + REG_FUNC(0x9670D39F, sceIoMkdir); + REG_FUNC(0xE9F91EC8, sceIoRmdir); + REG_FUNC(0xA9283DD0, sceIoDopen); + REG_FUNC(0x9DFF9C59, sceIoDclose); + REG_FUNC(0x9C8B6624, sceIoDread); + REG_FUNC(0xBCA5B623, sceIoGetstat); + REG_FUNC(0x29482F7F, sceIoChstat); + REG_FUNC(0x98ACED6D, sceIoSync); + REG_FUNC(0x4B30CB2, sceIoDevctl); + REG_FUNC(0x54ABACFA, sceIoIoctl); //REG_FUNC(0x6A7EA9FD, sceIoOpenAsync); //REG_FUNC(0x84201C9B, sceIoCloseAsync); //REG_FUNC(0x7B3BE857, sceIoReadAsync); @@ -1165,8 +1266,8 @@ psv_log_base sceLibKernel("sceLibKernel", []() //REG_FUNC(0xF7C7FBFE, sceIoSyncAsync); //REG_FUNC(0xEC96EA71, sceIoCancel); //REG_FUNC(0x857E0C71, sceIoComplete); - //REG_FUNC(0x52315AD7, sceIoPread); - //REG_FUNC(0x8FFFF5A8, sceIoPwrite); + REG_FUNC(0x52315AD7, sceIoPread); + REG_FUNC(0x8FFFF5A8, sceIoPwrite); //REG_FUNC(0xA010141E, sceIoPreadAsync); //REG_FUNC(0xED25BEEF, sceIoPwriteAsync); //REG_FUNC(0xA792C404, sceIoCompleteMultiple); diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h index b68e89c93f..dca20547c1 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h +++ b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h @@ -1,5 +1,256 @@ #pragma once +// Error Codes + +enum +{ + SCE_KERNEL_ERROR_ERROR = 0x80020001, + SCE_KERNEL_ERROR_NOT_IMPLEMENTED = 0x80020002, + SCE_KERNEL_ERROR_INVALID_ARGUMENT = 0x80020003, + SCE_KERNEL_ERROR_INVALID_ARGUMENT_SIZE = 0x80020004, + SCE_KERNEL_ERROR_INVALID_FLAGS = 0x80020005, + SCE_KERNEL_ERROR_ILLEGAL_SIZE = 0x80020006, + SCE_KERNEL_ERROR_ILLEGAL_ADDR = 0x80020007, + SCE_KERNEL_ERROR_UNSUP = 0x80020008, + SCE_KERNEL_ERROR_ILLEGAL_MODE = 0x80020009, + SCE_KERNEL_ERROR_ILLEGAL_ALIGNMENT = 0x8002000A, + SCE_KERNEL_ERROR_NOSYS = 0x8002000B, + SCE_KERNEL_ERROR_DEBUG_ERROR = 0x80021000, + SCE_KERNEL_ERROR_ILLEGAL_DIPSW_NUMBER = 0x80021001, + SCE_KERNEL_ERROR_CPU_ERROR = 0x80022000, + SCE_KERNEL_ERROR_MMU_ILLEGAL_L1_TYPE = 0x80022001, + SCE_KERNEL_ERROR_MMU_L2_INDEX_OVERFLOW = 0x80022002, + SCE_KERNEL_ERROR_MMU_L2_SIZE_OVERFLOW = 0x80022003, + SCE_KERNEL_ERROR_INVALID_CPU_AFFINITY = 0x80022004, + SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS = 0x80022005, + SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS_PERMISSION = 0x80022006, + SCE_KERNEL_ERROR_VA2PA_FAULT = 0x80022007, + SCE_KERNEL_ERROR_VA2PA_MAPPED = 0x80022008, + SCE_KERNEL_ERROR_VALIDATION_CHECK_FAILED = 0x80022009, + SCE_KERNEL_ERROR_SYSMEM_ERROR = 0x80024000, + SCE_KERNEL_ERROR_INVALID_PROCESS_CONTEXT = 0x80024001, + SCE_KERNEL_ERROR_UID_NAME_TOO_LONG = 0x80024002, + SCE_KERNEL_ERROR_VARANGE_IS_NOT_PHYSICAL_CONTINUOUS = 0x80024003, + SCE_KERNEL_ERROR_PHYADDR_ERROR = 0x80024100, + SCE_KERNEL_ERROR_NO_PHYADDR = 0x80024101, + SCE_KERNEL_ERROR_PHYADDR_USED = 0x80024102, + SCE_KERNEL_ERROR_PHYADDR_NOT_USED = 0x80024103, + SCE_KERNEL_ERROR_NO_IOADDR = 0x80024104, + SCE_KERNEL_ERROR_PHYMEM_ERROR = 0x80024300, + SCE_KERNEL_ERROR_ILLEGAL_PHYPAGE_STATUS = 0x80024301, + SCE_KERNEL_ERROR_NO_FREE_PHYSICAL_PAGE = 0x80024302, + SCE_KERNEL_ERROR_NO_FREE_PHYSICAL_PAGE_UNIT = 0x80024303, + SCE_KERNEL_ERROR_PHYMEMPART_NOT_EMPTY = 0x80024304, + SCE_KERNEL_ERROR_NO_PHYMEMPART_LPDDR2 = 0x80024305, + SCE_KERNEL_ERROR_NO_PHYMEMPART_CDRAM = 0x80024306, + SCE_KERNEL_ERROR_FIXEDHEAP_ERROR = 0x80024400, + SCE_KERNEL_ERROR_FIXEDHEAP_ILLEGAL_SIZE = 0x80024401, + SCE_KERNEL_ERROR_FIXEDHEAP_ILLEGAL_INDEX = 0x80024402, + SCE_KERNEL_ERROR_FIXEDHEAP_INDEX_OVERFLOW = 0x80024403, + SCE_KERNEL_ERROR_FIXEDHEAP_NO_CHUNK = 0x80024404, + SCE_KERNEL_ERROR_UID_ERROR = 0x80024500, + SCE_KERNEL_ERROR_INVALID_UID = 0x80024501, + SCE_KERNEL_ERROR_SYSMEM_UID_INVALID_ARGUMENT = 0x80024502, + SCE_KERNEL_ERROR_SYSMEM_INVALID_UID_RANGE = 0x80024503, + SCE_KERNEL_ERROR_SYSMEM_NO_VALID_UID = 0x80024504, + SCE_KERNEL_ERROR_SYSMEM_CANNOT_ALLOCATE_UIDENTRY = 0x80024505, + SCE_KERNEL_ERROR_NOT_PROCESS_UID = 0x80024506, + SCE_KERNEL_ERROR_NOT_KERNEL_UID = 0x80024507, + SCE_KERNEL_ERROR_INVALID_UID_CLASS = 0x80024508, + SCE_KERNEL_ERROR_INVALID_UID_SUBCLASS = 0x80024509, + SCE_KERNEL_ERROR_UID_CANNOT_FIND_BY_NAME = 0x8002450A, + SCE_KERNEL_ERROR_VIRPAGE_ERROR = 0x80024600, + SCE_KERNEL_ERROR_ILLEGAL_VIRPAGE_TYPE = 0x80024601, + SCE_KERNEL_ERROR_BLOCK_ERROR = 0x80024700, + SCE_KERNEL_ERROR_ILLEGAL_BLOCK_ID = 0x80024701, + SCE_KERNEL_ERROR_ILLEGAL_BLOCK_TYPE = 0x80024702, + SCE_KERNEL_ERROR_BLOCK_IN_USE = 0x80024703, + SCE_KERNEL_ERROR_PARTITION_ERROR = 0x80024800, + SCE_KERNEL_ERROR_ILLEGAL_PARTITION_ID = 0x80024801, + SCE_KERNEL_ERROR_ILLEGAL_PARTITION_INDEX = 0x80024802, + SCE_KERNEL_ERROR_NO_L2PAGETABLE = 0x80024803, + SCE_KERNEL_ERROR_HEAPLIB_ERROR = 0x80024900, + SCE_KERNEL_ERROR_ILLEGAL_HEAP_ID = 0x80024901, + SCE_KERNEL_ERROR_OUT_OF_RANG = 0x80024902, + SCE_KERNEL_ERROR_HEAPLIB_NOMEM = 0x80024903, + SCE_KERNEL_ERROR_SYSMEM_ADDRESS_SPACE_ERROR = 0x80024A00, + SCE_KERNEL_ERROR_INVALID_ADDRESS_SPACE_ID = 0x80024A01, + SCE_KERNEL_ERROR_INVALID_PARTITION_INDEX = 0x80024A02, + SCE_KERNEL_ERROR_ADDRESS_SPACE_CANNOT_FIND_PARTITION_BY_ADDR = 0x80024A03, + SCE_KERNEL_ERROR_SYSMEM_MEMBLOCK_ERROR = 0x80024B00, + SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_TYPE = 0x80024B01, + SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_REMAP_TYPE = 0x80024B02, + SCE_KERNEL_ERROR_NOT_PHY_CONT_MEMBLOCK = 0x80024B03, + SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_CODE = 0x80024B04, + SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_SIZE = 0x80024B05, + SCE_KERNEL_ERROR_ILLEGAL_USERMAP_SIZE = 0x80024B06, + SCE_KERNEL_ERROR_MEMBLOCK_TYPE_FOR_KERNEL_PROCESS = 0x80024B07, + SCE_KERNEL_ERROR_PROCESS_CANNOT_REMAP_MEMBLOCK = 0x80024B08, + SCE_KERNEL_ERROR_SYSMEM_PHYMEMLOW_ERROR = 0x80024C00, + SCE_KERNEL_ERROR_CANNOT_ALLOC_PHYMEMLOW = 0x80024C01, + SCE_KERNEL_ERROR_UNKNOWN_PHYMEMLOW_TYPE = 0x80024C02, + SCE_KERNEL_ERROR_SYSMEM_BITHEAP_ERROR = 0x80024D00, + SCE_KERNEL_ERROR_CANNOT_ALLOC_BITHEAP = 0x80024D01, + SCE_KERNEL_ERROR_LOADCORE_ERROR = 0x80025000, + SCE_KERNEL_ERROR_ILLEGAL_ELF_HEADER = 0x80025001, + SCE_KERNEL_ERROR_ILLEGAL_SELF_HEADER = 0x80025002, + SCE_KERNEL_ERROR_EXCPMGR_ERROR = 0x80027000, + SCE_KERNEL_ERROR_ILLEGAL_EXCPCODE = 0x80027001, + SCE_KERNEL_ERROR_ILLEGAL_EXCPHANDLER = 0x80027002, + SCE_KERNEL_ERROR_NOTFOUND_EXCPHANDLER = 0x80027003, + SCE_KERNEL_ERROR_CANNOT_RELEASE_EXCPHANDLER = 0x80027004, + SCE_KERNEL_ERROR_INTRMGR_ERROR = 0x80027100, + SCE_KERNEL_ERROR_ILLEGAL_CONTEXT = 0x80027101, + SCE_KERNEL_ERROR_ILLEGAL_INTRCODE = 0x80027102, + SCE_KERNEL_ERROR_ILLEGAL_INTRPARAM = 0x80027103, + SCE_KERNEL_ERROR_ILLEGAL_INTRPRIORITY = 0x80027104, + SCE_KERNEL_ERROR_ILLEGAL_TARGET_CPU = 0x80027105, + SCE_KERNEL_ERROR_ILLEGAL_INTRFILTER = 0x80027106, + SCE_KERNEL_ERROR_ILLEGAL_INTRTYPE = 0x80027107, + SCE_KERNEL_ERROR_ILLEGAL_HANDLER = 0x80027108, + SCE_KERNEL_ERROR_FOUND_HANDLER = 0x80027109, + SCE_KERNEL_ERROR_NOTFOUND_HANDLER = 0x8002710A, + SCE_KERNEL_ERROR_NO_MEMORY = 0x8002710B, + SCE_KERNEL_ERROR_DMACMGR_ERROR = 0x80027200, + SCE_KERNEL_ERROR_ALREADY_QUEUED = 0x80027201, + SCE_KERNEL_ERROR_NOT_QUEUED = 0x80027202, + SCE_KERNEL_ERROR_NOT_SETUP = 0x80027203, + SCE_KERNEL_ERROR_ON_TRANSFERRING = 0x80027204, + SCE_KERNEL_ERROR_NOT_INITIALIZED = 0x80027205, + SCE_KERNEL_ERROR_TRANSFERRED = 0x80027206, + SCE_KERNEL_ERROR_NOT_UNDER_CONTROL = 0x80027207, + SCE_KERNEL_ERROR_SYSTIMER_ERROR = 0x80027300, + SCE_KERNEL_ERROR_NO_FREE_TIMER = 0x80027301, + SCE_KERNEL_ERROR_TIMER_NOT_ALLOCATED = 0x80027302, + SCE_KERNEL_ERROR_TIMER_COUNTING = 0x80027303, + SCE_KERNEL_ERROR_TIMER_STOPPED = 0x80027304, + SCE_KERNEL_ERROR_THREADMGR_ERROR = 0x80028000, + SCE_KERNEL_ERROR_DORMANT = 0x80028001, + SCE_KERNEL_ERROR_NOT_DORMANT = 0x80028002, + SCE_KERNEL_ERROR_UNKNOWN_THID = 0x80028003, + SCE_KERNEL_ERROR_CAN_NOT_WAIT = 0x80028004, + SCE_KERNEL_ERROR_ILLEGAL_THID = 0x80028005, + SCE_KERNEL_ERROR_THREAD_TERMINATED = 0x80028006, + SCE_KERNEL_ERROR_DELETED = 0x80028007, + SCE_KERNEL_ERROR_WAIT_TIMEOUT = 0x80028008, + SCE_KERNEL_ERROR_NOTIFY_CALLBACK = 0x80028009, + SCE_KERNEL_ERROR_WAIT_DELETE = 0x8002800A, + SCE_KERNEL_ERROR_ILLEGAL_ATTR = 0x8002800B, + SCE_KERNEL_ERROR_EVF_MULTI = 0x8002800C, + SCE_KERNEL_ERROR_WAIT_CANCEL = 0x8002800D, + SCE_KERNEL_ERROR_EVF_COND = 0x8002800E, + SCE_KERNEL_ERROR_ILLEGAL_COUNT = 0x8002800F, + SCE_KERNEL_ERROR_ILLEGAL_PRIORITY = 0x80028010, + SCE_KERNEL_ERROR_MUTEX_RECURSIVE = 0x80028011, + SCE_KERNEL_ERROR_MUTEX_LOCK_OVF = 0x80028012, + SCE_KERNEL_ERROR_MUTEX_NOT_OWNED = 0x80028013, + SCE_KERNEL_ERROR_MUTEX_UNLOCK_UDF = 0x80028014, + SCE_KERNEL_ERROR_MUTEX_FAILED_TO_OWN = 0x80028015, + SCE_KERNEL_ERROR_FAST_MUTEX_RECURSIVE = 0x80028016, + SCE_KERNEL_ERROR_FAST_MUTEX_LOCK_OVF = 0x80028017, + SCE_KERNEL_ERROR_FAST_MUTEX_FAILED_TO_OWN = 0x80028018, + SCE_KERNEL_ERROR_FAST_MUTEX_NOT_OWNED = 0x80028019, + SCE_KERNEL_ERROR_FAST_MUTEX_OWNED = 0x8002801A, + SCE_KERNEL_ERROR_ALARM_CAN_NOT_CANCEL = 0x8002801B, + SCE_KERNEL_ERROR_INVALID_OBJECT_TYPE = 0x8002801C, + SCE_KERNEL_ERROR_KERNEL_TLS_FULL = 0x8002801D, + SCE_KERNEL_ERROR_ILLEGAL_KERNEL_TLS_INDEX = 0x8002801E, + SCE_KERNEL_ERROR_KERNEL_TLS_BUSY = 0x8002801F, + SCE_KERNEL_ERROR_DIFFERENT_UID_CLASS = 0x80028020, + SCE_KERNEL_ERROR_UNKNOWN_UID = 0x80028021, + SCE_KERNEL_ERROR_SEMA_ZERO = 0x80028022, + SCE_KERNEL_ERROR_SEMA_OVF = 0x80028023, + SCE_KERNEL_ERROR_PMON_NOT_THREAD_MODE = 0x80028024, + SCE_KERNEL_ERROR_PMON_NOT_CPU_MODE = 0x80028025, + SCE_KERNEL_ERROR_ALREADY_REGISTERED = 0x80028026, + SCE_KERNEL_ERROR_INVALID_THREAD_ID = 0x80028027, + SCE_KERNEL_ERROR_ALREADY_DEBUG_SUSPENDED = 0x80028028, + SCE_KERNEL_ERROR_NOT_DEBUG_SUSPENDED = 0x80028029, + SCE_KERNEL_ERROR_CAN_NOT_USE_VFP = 0x8002802A, + SCE_KERNEL_ERROR_RUNNING = 0x8002802B, + SCE_KERNEL_ERROR_EVENT_COND = 0x8002802C, + SCE_KERNEL_ERROR_MSG_PIPE_FULL = 0x8002802D, + SCE_KERNEL_ERROR_MSG_PIPE_EMPTY = 0x8002802E, + SCE_KERNEL_ERROR_ALREADY_SENT = 0x8002802F, + SCE_KERNEL_ERROR_CAN_NOT_SUSPEND = 0x80028030, + SCE_KERNEL_ERROR_FAST_MUTEX_ALREADY_INITIALIZED = 0x80028031, + SCE_KERNEL_ERROR_FAST_MUTEX_NOT_INITIALIZED = 0x80028032, + SCE_KERNEL_ERROR_THREAD_STOPPED = 0x80028033, + SCE_KERNEL_ERROR_THREAD_SUSPENDED = 0x80028034, + SCE_KERNEL_ERROR_NOT_SUSPENDED = 0x80028035, + SCE_KERNEL_ERROR_WAIT_DELETE_MUTEX = 0x80028036, + SCE_KERNEL_ERROR_WAIT_CANCEL_MUTEX = 0x80028037, + SCE_KERNEL_ERROR_WAIT_DELETE_COND = 0x80028038, + SCE_KERNEL_ERROR_WAIT_CANCEL_COND = 0x80028039, + SCE_KERNEL_ERROR_LW_MUTEX_NOT_OWNED = 0x8002803A, + SCE_KERNEL_ERROR_LW_MUTEX_LOCK_OVF = 0x8002803B, + SCE_KERNEL_ERROR_LW_MUTEX_UNLOCK_UDF = 0x8002803C, + SCE_KERNEL_ERROR_LW_MUTEX_RECURSIVE = 0x8002803D, + SCE_KERNEL_ERROR_LW_MUTEX_FAILED_TO_OWN = 0x8002803E, + SCE_KERNEL_ERROR_WAIT_DELETE_LW_MUTEX = 0x8002803F, + SCE_KERNEL_ERROR_ILLEGAL_STACK_SIZE = 0x80028040, + SCE_KERNEL_ERROR_RW_LOCK_RECURSIVE = 0x80028041, + SCE_KERNEL_ERROR_RW_LOCK_LOCK_OVF = 0x80028042, + SCE_KERNEL_ERROR_RW_LOCK_NOT_OWNED = 0x80028043, + SCE_KERNEL_ERROR_RW_LOCK_UNLOCK_UDF = 0x80028044, + SCE_KERNEL_ERROR_RW_LOCK_FAILED_TO_LOCK = 0x80028045, + SCE_KERNEL_ERROR_RW_LOCK_FAILED_TO_UNLOCK = 0x80028046, + + SCE_KERNEL_ERROR_PROCESSMGR_ERROR = 0x80029000, + SCE_KERNEL_ERROR_INVALID_PID = 0x80029001, + SCE_KERNEL_ERROR_INVALID_PROCESS_TYPE = 0x80029002, + SCE_KERNEL_ERROR_PLS_FULL = 0x80029003, + SCE_KERNEL_ERROR_INVALID_PROCESS_STATUS = 0x80029004, + SCE_KERNEL_ERROR_INVALID_BUDGET_ID = 0x80029005, + SCE_KERNEL_ERROR_INVALID_BUDGET_SIZE = 0x80029006, + SCE_KERNEL_ERROR_CP14_DISABLED = 0x80029007, + SCE_KERNEL_ERROR_EXCEEDED_MAX_PROCESSES = 0x80029008, + SCE_KERNEL_ERROR_PROCESS_REMAINING = 0x80029009, + SCE_KERNEL_ERROR_IOFILEMGR_ERROR = 0x8002A000, + SCE_KERNEL_ERROR_IO_NAME_TOO_LONG = 0x8002A001, + SCE_KERNEL_ERROR_IO_REG_DEV = 0x8002A002, + SCE_KERNEL_ERROR_IO_ALIAS_USED = 0x8002A003, + SCE_KERNEL_ERROR_IO_DEL_DEV = 0x8002A004, + SCE_KERNEL_ERROR_IO_WOULD_BLOCK = 0x8002A005, + SCE_KERNEL_ERROR_MODULEMGR_START_FAILED = 0x8002D000, + SCE_KERNEL_ERROR_MODULEMGR_STOP_FAIL = 0x8002D001, + SCE_KERNEL_ERROR_MODULEMGR_IN_USE = 0x8002D002, + SCE_KERNEL_ERROR_MODULEMGR_NO_LIB = 0x8002D003, + SCE_KERNEL_ERROR_MODULEMGR_SYSCALL_REG = 0x8002D004, + SCE_KERNEL_ERROR_MODULEMGR_NOMEM_LIB = 0x8002D005, + SCE_KERNEL_ERROR_MODULEMGR_NOMEM_STUB = 0x8002D006, + SCE_KERNEL_ERROR_MODULEMGR_NOMEM_SELF = 0x8002D007, + SCE_KERNEL_ERROR_MODULEMGR_NOMEM = 0x8002D008, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_LIB = 0x8002D009, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_STUB = 0x8002D00A, + SCE_KERNEL_ERROR_MODULEMGR_NO_FUNC_NID = 0x8002D00B, + SCE_KERNEL_ERROR_MODULEMGR_NO_VAR_NID = 0x8002D00C, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_TYPE = 0x8002D00D, + SCE_KERNEL_ERROR_MODULEMGR_NO_MOD_ENTRY = 0x8002D00E, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_PROC_PARAM = 0x8002D00F, + SCE_KERNEL_ERROR_MODULEMGR_NO_MODOBJ = 0x8002D010, + SCE_KERNEL_ERROR_MODULEMGR_NO_MOD = 0x8002D011, + SCE_KERNEL_ERROR_MODULEMGR_NO_PROCESS = 0x8002D012, + SCE_KERNEL_ERROR_MODULEMGR_OLD_LIB = 0x8002D013, + SCE_KERNEL_ERROR_MODULEMGR_STARTED = 0x8002D014, + SCE_KERNEL_ERROR_MODULEMGR_NOT_STARTED = 0x8002D015, + SCE_KERNEL_ERROR_MODULEMGR_NOT_STOPPED = 0x8002D016, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_PROCESS_UID = 0x8002D017, + SCE_KERNEL_ERROR_MODULEMGR_CANNOT_EXPORT_LIB_TO_SHARED = 0x8002D018, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_REL_INFO = 0x8002D019, + SCE_KERNEL_ERROR_MODULEMGR_INVALID_REF_INFO = 0x8002D01A, + SCE_KERNEL_ERROR_MODULEMGR_ELINK = 0x8002D01B, + SCE_KERNEL_ERROR_MODULEMGR_NOENT = 0x8002D01C, + SCE_KERNEL_ERROR_MODULEMGR_BUSY = 0x8002D01D, + SCE_KERNEL_ERROR_MODULEMGR_NOEXEC = 0x8002D01E, + SCE_KERNEL_ERROR_MODULEMGR_NAMETOOLONG = 0x8002D01F, + SCE_KERNEL_ERROR_LIBRARYDB_NOENT = 0x8002D080, + SCE_KERNEL_ERROR_LIBRARYDB_NO_LIB = 0x8002D081, + SCE_KERNEL_ERROR_LIBRARYDB_NO_MOD = 0x8002D082, + SCE_KERNEL_ERROR_AUTHFAIL = 0x8002F000, + SCE_KERNEL_ERROR_NO_AUTH = 0x8002F001, +}; + union SceKernelSysClock { struct diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp index a81d82ac51..f0e596af2b 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/System.h" -#include "Emu/Memory/Memory.h" #include "Emu/ARMv7/PSVFuncList.h" #include "Emu/ARMv7/ARMv7Callback.h" diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp index db7745f9f3..c0b847e6e5 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Emu/System.h" -#include "Emu/Memory/Memory.h" #include "Emu/ARMv7/PSVFuncList.h" extern psv_log_base sceLibm; diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp index ef215f0971..44b3b75ff8 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Emu/System.h" -#include "Emu/Memory/Memory.h" #include "Emu/ARMv7/PSVFuncList.h" extern psv_log_base sceLibstdcxx; diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.h b/rpcs3/Emu/ARMv7/PSVFuncList.h index acbf9b3f5d..0326208f9f 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.h +++ b/rpcs3/Emu/ARMv7/PSVFuncList.h @@ -1,7 +1,9 @@ #pragma once +#include "Emu/Memory/Memory.h" #include "ARMv7Context.h" #include "Emu/SysCalls/LogBase.h" +// PSV module class class psv_log_base : public LogBase { std::string m_name; @@ -31,396 +33,7 @@ public: }; -enum psv_error_codes -{ - SCE_OK = 0, - - SCE_ERROR_ERRNO_EPERM = 0x80010001, - SCE_ERROR_ERRNO_ENOENT = 0x80010002, - SCE_ERROR_ERRNO_ESRCH = 0x80010003, - SCE_ERROR_ERRNO_EINTR = 0x80010004, - SCE_ERROR_ERRNO_EIO = 0x80010005, - SCE_ERROR_ERRNO_ENXIO = 0x80010006, - SCE_ERROR_ERRNO_E2BIG = 0x80010007, - SCE_ERROR_ERRNO_ENOEXEC = 0x80010008, - SCE_ERROR_ERRNO_EBADF = 0x80010009, - SCE_ERROR_ERRNO_ECHILD = 0x8001000A, - SCE_ERROR_ERRNO_EAGAIN = 0x8001000B, - SCE_ERROR_ERRNO_ENOMEM = 0x8001000C, - SCE_ERROR_ERRNO_EACCES = 0x8001000D, - SCE_ERROR_ERRNO_EFAULT = 0x8001000E, - SCE_ERROR_ERRNO_ENOTBLK = 0x8001000F, - SCE_ERROR_ERRNO_EBUSY = 0x80010010, - SCE_ERROR_ERRNO_EEXIST = 0x80010011, - SCE_ERROR_ERRNO_EXDEV = 0x80010012, - SCE_ERROR_ERRNO_ENODEV = 0x80010013, - SCE_ERROR_ERRNO_ENOTDIR = 0x80010014, - SCE_ERROR_ERRNO_EISDIR = 0x80010015, - SCE_ERROR_ERRNO_EINVAL = 0x80010016, - SCE_ERROR_ERRNO_ENFILE = 0x80010017, - SCE_ERROR_ERRNO_EMFILE = 0x80010018, - SCE_ERROR_ERRNO_ENOTTY = 0x80010019, - SCE_ERROR_ERRNO_ETXTBSY = 0x8001001A, - SCE_ERROR_ERRNO_EFBIG = 0x8001001B, - SCE_ERROR_ERRNO_ENOSPC = 0x8001001C, - SCE_ERROR_ERRNO_ESPIPE = 0x8001001D, - SCE_ERROR_ERRNO_EROFS = 0x8001001E, - SCE_ERROR_ERRNO_EMLINK = 0x8001001F, - SCE_ERROR_ERRNO_EPIPE = 0x80010020, - SCE_ERROR_ERRNO_EDOM = 0x80010021, - SCE_ERROR_ERRNO_ERANGE = 0x80010022, - SCE_ERROR_ERRNO_ENOMSG = 0x80010023, - SCE_ERROR_ERRNO_EIDRM = 0x80010024, - SCE_ERROR_ERRNO_ECHRNG = 0x80010025, - SCE_ERROR_ERRNO_EL2NSYNC = 0x80010026, - SCE_ERROR_ERRNO_EL3HLT = 0x80010027, - SCE_ERROR_ERRNO_EL3RST = 0x80010028, - SCE_ERROR_ERRNO_ELNRNG = 0x80010029, - SCE_ERROR_ERRNO_EUNATCH = 0x8001002A, - SCE_ERROR_ERRNO_ENOCSI = 0x8001002B, - SCE_ERROR_ERRNO_EL2HLT = 0x8001002C, - SCE_ERROR_ERRNO_EDEADLK = 0x8001002D, - SCE_ERROR_ERRNO_ENOLCK = 0x8001002E, - SCE_ERROR_ERRNO_EFORMAT = 0x8001002F, - SCE_ERROR_ERRNO_EUNSUP = 0x80010030, - SCE_ERROR_ERRNO_EBADE = 0x80010032, - SCE_ERROR_ERRNO_EBADR = 0x80010033, - SCE_ERROR_ERRNO_EXFULL = 0x80010034, - SCE_ERROR_ERRNO_ENOANO = 0x80010035, - SCE_ERROR_ERRNO_EBADRQC = 0x80010036, - SCE_ERROR_ERRNO_EBADSLT = 0x80010037, - SCE_ERROR_ERRNO_EDEADLOCK = 0x80010038, - SCE_ERROR_ERRNO_EBFONT = 0x80010039, - SCE_ERROR_ERRNO_ENOSTR = 0x8001003C, - SCE_ERROR_ERRNO_ENODATA = 0x8001003D, - SCE_ERROR_ERRNO_ETIME = 0x8001003E, - SCE_ERROR_ERRNO_ENOSR = 0x8001003F, - SCE_ERROR_ERRNO_ENONET = 0x80010040, - SCE_ERROR_ERRNO_ENOPKG = 0x80010041, - SCE_ERROR_ERRNO_EREMOTE = 0x80010042, - SCE_ERROR_ERRNO_ENOLINK = 0x80010043, - SCE_ERROR_ERRNO_EADV = 0x80010044, - SCE_ERROR_ERRNO_ESRMNT = 0x80010045, - SCE_ERROR_ERRNO_ECOMM = 0x80010046, - SCE_ERROR_ERRNO_EPROTO = 0x80010047, - SCE_ERROR_ERRNO_EMULTIHOP = 0x8001004A, - SCE_ERROR_ERRNO_ELBIN = 0x8001004B, - SCE_ERROR_ERRNO_EDOTDOT = 0x8001004C, - SCE_ERROR_ERRNO_EBADMSG = 0x8001004D, - SCE_ERROR_ERRNO_EFTYPE = 0x8001004F, - SCE_ERROR_ERRNO_ENOTUNIQ = 0x80010050, - SCE_ERROR_ERRNO_EBADFD = 0x80010051, - SCE_ERROR_ERRNO_EREMCHG = 0x80010052, - SCE_ERROR_ERRNO_ELIBACC = 0x80010053, - SCE_ERROR_ERRNO_ELIBBAD = 0x80010054, - SCE_ERROR_ERRNO_ELIBSCN = 0x80010055, - SCE_ERROR_ERRNO_ELIBMAX = 0x80010056, - SCE_ERROR_ERRNO_ELIBEXEC = 0x80010057, - SCE_ERROR_ERRNO_ENOSYS = 0x80010058, - SCE_ERROR_ERRNO_ENMFILE = 0x80010059, - SCE_ERROR_ERRNO_ENOTEMPTY = 0x8001005A, - SCE_ERROR_ERRNO_ENAMETOOLONG = 0x8001005B, - SCE_ERROR_ERRNO_ELOOP = 0x8001005C, - SCE_ERROR_ERRNO_EOPNOTSUPP = 0x8001005F, - SCE_ERROR_ERRNO_EPFNOSUPPORT = 0x80010060, - SCE_ERROR_ERRNO_ECONNRESET = 0x80010068, - SCE_ERROR_ERRNO_ENOBUFS = 0x80010069, - SCE_ERROR_ERRNO_EAFNOSUPPORT = 0x8001006A, - SCE_ERROR_ERRNO_EPROTOTYPE = 0x8001006B, - SCE_ERROR_ERRNO_ENOTSOCK = 0x8001006C, - SCE_ERROR_ERRNO_ENOPROTOOPT = 0x8001006D, - SCE_ERROR_ERRNO_ESHUTDOWN = 0x8001006E, - SCE_ERROR_ERRNO_ECONNREFUSED = 0x8001006F, - SCE_ERROR_ERRNO_EADDRINUSE = 0x80010070, - SCE_ERROR_ERRNO_ECONNABORTED = 0x80010071, - SCE_ERROR_ERRNO_ENETUNREACH = 0x80010072, - SCE_ERROR_ERRNO_ENETDOWN = 0x80010073, - SCE_ERROR_ERRNO_ETIMEDOUT = 0x80010074, - SCE_ERROR_ERRNO_EHOSTDOWN = 0x80010075, - SCE_ERROR_ERRNO_EHOSTUNREACH = 0x80010076, - SCE_ERROR_ERRNO_EINPROGRESS = 0x80010077, - SCE_ERROR_ERRNO_EALREADY = 0x80010078, - SCE_ERROR_ERRNO_EDESTADDRREQ = 0x80010079, - SCE_ERROR_ERRNO_EMSGSIZE = 0x8001007A, - SCE_ERROR_ERRNO_EPROTONOSUPPORT = 0x8001007B, - SCE_ERROR_ERRNO_ESOCKTNOSUPPORT = 0x8001007C, - SCE_ERROR_ERRNO_EADDRNOTAVAIL = 0x8001007D, - SCE_ERROR_ERRNO_ENETRESET = 0x8001007E, - SCE_ERROR_ERRNO_EISCONN = 0x8001007F, - SCE_ERROR_ERRNO_ENOTCONN = 0x80010080, - SCE_ERROR_ERRNO_ETOOMANYREFS = 0x80010081, - SCE_ERROR_ERRNO_EPROCLIM = 0x80010082, - SCE_ERROR_ERRNO_EUSERS = 0x80010083, - SCE_ERROR_ERRNO_EDQUOT = 0x80010084, - SCE_ERROR_ERRNO_ESTALE = 0x80010085, - SCE_ERROR_ERRNO_ENOTSUP = 0x80010086, - SCE_ERROR_ERRNO_ENOMEDIUM = 0x80010087, - SCE_ERROR_ERRNO_ENOSHARE = 0x80010088, - SCE_ERROR_ERRNO_ECASECLASH = 0x80010089, - SCE_ERROR_ERRNO_EILSEQ = 0x8001008A, - SCE_ERROR_ERRNO_EOVERFLOW = 0x8001008B, - SCE_ERROR_ERRNO_ECANCELED = 0x8001008C, - SCE_ERROR_ERRNO_ENOTRECOVERABLE = 0x8001008D, - SCE_ERROR_ERRNO_EOWNERDEAD = 0x8001008E, - - SCE_KERNEL_ERROR_ERROR = 0x80020001, - SCE_KERNEL_ERROR_NOT_IMPLEMENTED = 0x80020002, - SCE_KERNEL_ERROR_INVALID_ARGUMENT = 0x80020003, - SCE_KERNEL_ERROR_INVALID_ARGUMENT_SIZE = 0x80020004, - SCE_KERNEL_ERROR_INVALID_FLAGS = 0x80020005, - SCE_KERNEL_ERROR_ILLEGAL_SIZE = 0x80020006, - SCE_KERNEL_ERROR_ILLEGAL_ADDR = 0x80020007, - SCE_KERNEL_ERROR_UNSUP = 0x80020008, - SCE_KERNEL_ERROR_ILLEGAL_MODE = 0x80020009, - SCE_KERNEL_ERROR_ILLEGAL_ALIGNMENT = 0x8002000A, - SCE_KERNEL_ERROR_NOSYS = 0x8002000B, - SCE_KERNEL_ERROR_DEBUG_ERROR = 0x80021000, - SCE_KERNEL_ERROR_ILLEGAL_DIPSW_NUMBER = 0x80021001, - SCE_KERNEL_ERROR_CPU_ERROR = 0x80022000, - SCE_KERNEL_ERROR_MMU_ILLEGAL_L1_TYPE = 0x80022001, - SCE_KERNEL_ERROR_MMU_L2_INDEX_OVERFLOW = 0x80022002, - SCE_KERNEL_ERROR_MMU_L2_SIZE_OVERFLOW = 0x80022003, - SCE_KERNEL_ERROR_INVALID_CPU_AFFINITY = 0x80022004, - SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS = 0x80022005, - SCE_KERNEL_ERROR_INVALID_MEMORY_ACCESS_PERMISSION = 0x80022006, - SCE_KERNEL_ERROR_VA2PA_FAULT = 0x80022007, - SCE_KERNEL_ERROR_VA2PA_MAPPED = 0x80022008, - SCE_KERNEL_ERROR_VALIDATION_CHECK_FAILED = 0x80022009, - SCE_KERNEL_ERROR_SYSMEM_ERROR = 0x80024000, - SCE_KERNEL_ERROR_INVALID_PROCESS_CONTEXT = 0x80024001, - SCE_KERNEL_ERROR_UID_NAME_TOO_LONG = 0x80024002, - SCE_KERNEL_ERROR_VARANGE_IS_NOT_PHYSICAL_CONTINUOUS = 0x80024003, - SCE_KERNEL_ERROR_PHYADDR_ERROR = 0x80024100, - SCE_KERNEL_ERROR_NO_PHYADDR = 0x80024101, - SCE_KERNEL_ERROR_PHYADDR_USED = 0x80024102, - SCE_KERNEL_ERROR_PHYADDR_NOT_USED = 0x80024103, - SCE_KERNEL_ERROR_NO_IOADDR = 0x80024104, - SCE_KERNEL_ERROR_PHYMEM_ERROR = 0x80024300, - SCE_KERNEL_ERROR_ILLEGAL_PHYPAGE_STATUS = 0x80024301, - SCE_KERNEL_ERROR_NO_FREE_PHYSICAL_PAGE = 0x80024302, - SCE_KERNEL_ERROR_NO_FREE_PHYSICAL_PAGE_UNIT = 0x80024303, - SCE_KERNEL_ERROR_PHYMEMPART_NOT_EMPTY = 0x80024304, - SCE_KERNEL_ERROR_NO_PHYMEMPART_LPDDR2 = 0x80024305, - SCE_KERNEL_ERROR_NO_PHYMEMPART_CDRAM = 0x80024306, - SCE_KERNEL_ERROR_FIXEDHEAP_ERROR = 0x80024400, - SCE_KERNEL_ERROR_FIXEDHEAP_ILLEGAL_SIZE = 0x80024401, - SCE_KERNEL_ERROR_FIXEDHEAP_ILLEGAL_INDEX = 0x80024402, - SCE_KERNEL_ERROR_FIXEDHEAP_INDEX_OVERFLOW = 0x80024403, - SCE_KERNEL_ERROR_FIXEDHEAP_NO_CHUNK = 0x80024404, - SCE_KERNEL_ERROR_UID_ERROR = 0x80024500, - SCE_KERNEL_ERROR_INVALID_UID = 0x80024501, - SCE_KERNEL_ERROR_SYSMEM_UID_INVALID_ARGUMENT = 0x80024502, - SCE_KERNEL_ERROR_SYSMEM_INVALID_UID_RANGE = 0x80024503, - SCE_KERNEL_ERROR_SYSMEM_NO_VALID_UID = 0x80024504, - SCE_KERNEL_ERROR_SYSMEM_CANNOT_ALLOCATE_UIDENTRY = 0x80024505, - SCE_KERNEL_ERROR_NOT_PROCESS_UID = 0x80024506, - SCE_KERNEL_ERROR_NOT_KERNEL_UID = 0x80024507, - SCE_KERNEL_ERROR_INVALID_UID_CLASS = 0x80024508, - SCE_KERNEL_ERROR_INVALID_UID_SUBCLASS = 0x80024509, - SCE_KERNEL_ERROR_UID_CANNOT_FIND_BY_NAME = 0x8002450A, - SCE_KERNEL_ERROR_VIRPAGE_ERROR = 0x80024600, - SCE_KERNEL_ERROR_ILLEGAL_VIRPAGE_TYPE = 0x80024601, - SCE_KERNEL_ERROR_BLOCK_ERROR = 0x80024700, - SCE_KERNEL_ERROR_ILLEGAL_BLOCK_ID = 0x80024701, - SCE_KERNEL_ERROR_ILLEGAL_BLOCK_TYPE = 0x80024702, - SCE_KERNEL_ERROR_BLOCK_IN_USE = 0x80024703, - SCE_KERNEL_ERROR_PARTITION_ERROR = 0x80024800, - SCE_KERNEL_ERROR_ILLEGAL_PARTITION_ID = 0x80024801, - SCE_KERNEL_ERROR_ILLEGAL_PARTITION_INDEX = 0x80024802, - SCE_KERNEL_ERROR_NO_L2PAGETABLE = 0x80024803, - SCE_KERNEL_ERROR_HEAPLIB_ERROR = 0x80024900, - SCE_KERNEL_ERROR_ILLEGAL_HEAP_ID = 0x80024901, - SCE_KERNEL_ERROR_OUT_OF_RANG = 0x80024902, - SCE_KERNEL_ERROR_HEAPLIB_NOMEM = 0x80024903, - SCE_KERNEL_ERROR_SYSMEM_ADDRESS_SPACE_ERROR = 0x80024A00, - SCE_KERNEL_ERROR_INVALID_ADDRESS_SPACE_ID = 0x80024A01, - SCE_KERNEL_ERROR_INVALID_PARTITION_INDEX = 0x80024A02, - SCE_KERNEL_ERROR_ADDRESS_SPACE_CANNOT_FIND_PARTITION_BY_ADDR = 0x80024A03, - SCE_KERNEL_ERROR_SYSMEM_MEMBLOCK_ERROR = 0x80024B00, - SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_TYPE = 0x80024B01, - SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_REMAP_TYPE = 0x80024B02, - SCE_KERNEL_ERROR_NOT_PHY_CONT_MEMBLOCK = 0x80024B03, - SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_CODE = 0x80024B04, - SCE_KERNEL_ERROR_ILLEGAL_MEMBLOCK_SIZE = 0x80024B05, - SCE_KERNEL_ERROR_ILLEGAL_USERMAP_SIZE = 0x80024B06, - SCE_KERNEL_ERROR_MEMBLOCK_TYPE_FOR_KERNEL_PROCESS = 0x80024B07, - SCE_KERNEL_ERROR_PROCESS_CANNOT_REMAP_MEMBLOCK = 0x80024B08, - SCE_KERNEL_ERROR_SYSMEM_PHYMEMLOW_ERROR = 0x80024C00, - SCE_KERNEL_ERROR_CANNOT_ALLOC_PHYMEMLOW = 0x80024C01, - SCE_KERNEL_ERROR_UNKNOWN_PHYMEMLOW_TYPE = 0x80024C02, - SCE_KERNEL_ERROR_SYSMEM_BITHEAP_ERROR = 0x80024D00, - SCE_KERNEL_ERROR_CANNOT_ALLOC_BITHEAP = 0x80024D01, - SCE_KERNEL_ERROR_LOADCORE_ERROR = 0x80025000, - SCE_KERNEL_ERROR_ILLEGAL_ELF_HEADER = 0x80025001, - SCE_KERNEL_ERROR_ILLEGAL_SELF_HEADER = 0x80025002, - SCE_KERNEL_ERROR_EXCPMGR_ERROR = 0x80027000, - SCE_KERNEL_ERROR_ILLEGAL_EXCPCODE = 0x80027001, - SCE_KERNEL_ERROR_ILLEGAL_EXCPHANDLER = 0x80027002, - SCE_KERNEL_ERROR_NOTFOUND_EXCPHANDLER = 0x80027003, - SCE_KERNEL_ERROR_CANNOT_RELEASE_EXCPHANDLER = 0x80027004, - SCE_KERNEL_ERROR_INTRMGR_ERROR = 0x80027100, - SCE_KERNEL_ERROR_ILLEGAL_CONTEXT = 0x80027101, - SCE_KERNEL_ERROR_ILLEGAL_INTRCODE = 0x80027102, - SCE_KERNEL_ERROR_ILLEGAL_INTRPARAM = 0x80027103, - SCE_KERNEL_ERROR_ILLEGAL_INTRPRIORITY = 0x80027104, - SCE_KERNEL_ERROR_ILLEGAL_TARGET_CPU = 0x80027105, - SCE_KERNEL_ERROR_ILLEGAL_INTRFILTER = 0x80027106, - SCE_KERNEL_ERROR_ILLEGAL_INTRTYPE = 0x80027107, - SCE_KERNEL_ERROR_ILLEGAL_HANDLER = 0x80027108, - SCE_KERNEL_ERROR_FOUND_HANDLER = 0x80027109, - SCE_KERNEL_ERROR_NOTFOUND_HANDLER = 0x8002710A, - SCE_KERNEL_ERROR_NO_MEMORY = 0x8002710B, - SCE_KERNEL_ERROR_DMACMGR_ERROR = 0x80027200, - SCE_KERNEL_ERROR_ALREADY_QUEUED = 0x80027201, - SCE_KERNEL_ERROR_NOT_QUEUED = 0x80027202, - SCE_KERNEL_ERROR_NOT_SETUP = 0x80027203, - SCE_KERNEL_ERROR_ON_TRANSFERRING = 0x80027204, - SCE_KERNEL_ERROR_NOT_INITIALIZED = 0x80027205, - SCE_KERNEL_ERROR_TRANSFERRED = 0x80027206, - SCE_KERNEL_ERROR_NOT_UNDER_CONTROL = 0x80027207, - SCE_KERNEL_ERROR_SYSTIMER_ERROR = 0x80027300, - SCE_KERNEL_ERROR_NO_FREE_TIMER = 0x80027301, - SCE_KERNEL_ERROR_TIMER_NOT_ALLOCATED = 0x80027302, - SCE_KERNEL_ERROR_TIMER_COUNTING = 0x80027303, - SCE_KERNEL_ERROR_TIMER_STOPPED = 0x80027304, - SCE_KERNEL_ERROR_THREADMGR_ERROR = 0x80028000, - SCE_KERNEL_ERROR_DORMANT = 0x80028001, - SCE_KERNEL_ERROR_NOT_DORMANT = 0x80028002, - SCE_KERNEL_ERROR_UNKNOWN_THID = 0x80028003, - SCE_KERNEL_ERROR_CAN_NOT_WAIT = 0x80028004, - SCE_KERNEL_ERROR_ILLEGAL_THID = 0x80028005, - SCE_KERNEL_ERROR_THREAD_TERMINATED = 0x80028006, - SCE_KERNEL_ERROR_DELETED = 0x80028007, - SCE_KERNEL_ERROR_WAIT_TIMEOUT = 0x80028008, - SCE_KERNEL_ERROR_NOTIFY_CALLBACK = 0x80028009, - SCE_KERNEL_ERROR_WAIT_DELETE = 0x8002800A, - SCE_KERNEL_ERROR_ILLEGAL_ATTR = 0x8002800B, - SCE_KERNEL_ERROR_EVF_MULTI = 0x8002800C, - SCE_KERNEL_ERROR_WAIT_CANCEL = 0x8002800D, - SCE_KERNEL_ERROR_EVF_COND = 0x8002800E, - SCE_KERNEL_ERROR_ILLEGAL_COUNT = 0x8002800F, - SCE_KERNEL_ERROR_ILLEGAL_PRIORITY = 0x80028010, - SCE_KERNEL_ERROR_MUTEX_RECURSIVE = 0x80028011, - SCE_KERNEL_ERROR_MUTEX_LOCK_OVF = 0x80028012, - SCE_KERNEL_ERROR_MUTEX_NOT_OWNED = 0x80028013, - SCE_KERNEL_ERROR_MUTEX_UNLOCK_UDF = 0x80028014, - SCE_KERNEL_ERROR_MUTEX_FAILED_TO_OWN = 0x80028015, - SCE_KERNEL_ERROR_FAST_MUTEX_RECURSIVE = 0x80028016, - SCE_KERNEL_ERROR_FAST_MUTEX_LOCK_OVF = 0x80028017, - SCE_KERNEL_ERROR_FAST_MUTEX_FAILED_TO_OWN = 0x80028018, - SCE_KERNEL_ERROR_FAST_MUTEX_NOT_OWNED = 0x80028019, - SCE_KERNEL_ERROR_FAST_MUTEX_OWNED = 0x8002801A, - SCE_KERNEL_ERROR_ALARM_CAN_NOT_CANCEL = 0x8002801B, - SCE_KERNEL_ERROR_INVALID_OBJECT_TYPE = 0x8002801C, - SCE_KERNEL_ERROR_KERNEL_TLS_FULL = 0x8002801D, - SCE_KERNEL_ERROR_ILLEGAL_KERNEL_TLS_INDEX = 0x8002801E, - SCE_KERNEL_ERROR_KERNEL_TLS_BUSY = 0x8002801F, - SCE_KERNEL_ERROR_DIFFERENT_UID_CLASS = 0x80028020, - SCE_KERNEL_ERROR_UNKNOWN_UID = 0x80028021, - SCE_KERNEL_ERROR_SEMA_ZERO = 0x80028022, - SCE_KERNEL_ERROR_SEMA_OVF = 0x80028023, - SCE_KERNEL_ERROR_PMON_NOT_THREAD_MODE = 0x80028024, - SCE_KERNEL_ERROR_PMON_NOT_CPU_MODE = 0x80028025, - SCE_KERNEL_ERROR_ALREADY_REGISTERED = 0x80028026, - SCE_KERNEL_ERROR_INVALID_THREAD_ID = 0x80028027, - SCE_KERNEL_ERROR_ALREADY_DEBUG_SUSPENDED = 0x80028028, - SCE_KERNEL_ERROR_NOT_DEBUG_SUSPENDED = 0x80028029, - SCE_KERNEL_ERROR_CAN_NOT_USE_VFP = 0x8002802A, - SCE_KERNEL_ERROR_RUNNING = 0x8002802B, - SCE_KERNEL_ERROR_EVENT_COND = 0x8002802C, - SCE_KERNEL_ERROR_MSG_PIPE_FULL = 0x8002802D, - SCE_KERNEL_ERROR_MSG_PIPE_EMPTY = 0x8002802E, - SCE_KERNEL_ERROR_ALREADY_SENT = 0x8002802F, - SCE_KERNEL_ERROR_CAN_NOT_SUSPEND = 0x80028030, - SCE_KERNEL_ERROR_FAST_MUTEX_ALREADY_INITIALIZED = 0x80028031, - SCE_KERNEL_ERROR_FAST_MUTEX_NOT_INITIALIZED = 0x80028032, - SCE_KERNEL_ERROR_THREAD_STOPPED = 0x80028033, - SCE_KERNEL_ERROR_THREAD_SUSPENDED = 0x80028034, - SCE_KERNEL_ERROR_NOT_SUSPENDED = 0x80028035, - SCE_KERNEL_ERROR_WAIT_DELETE_MUTEX = 0x80028036, - SCE_KERNEL_ERROR_WAIT_CANCEL_MUTEX = 0x80028037, - SCE_KERNEL_ERROR_WAIT_DELETE_COND = 0x80028038, - SCE_KERNEL_ERROR_WAIT_CANCEL_COND = 0x80028039, - SCE_KERNEL_ERROR_LW_MUTEX_NOT_OWNED = 0x8002803A, - SCE_KERNEL_ERROR_LW_MUTEX_LOCK_OVF = 0x8002803B, - SCE_KERNEL_ERROR_LW_MUTEX_UNLOCK_UDF = 0x8002803C, - SCE_KERNEL_ERROR_LW_MUTEX_RECURSIVE = 0x8002803D, - SCE_KERNEL_ERROR_LW_MUTEX_FAILED_TO_OWN = 0x8002803E, - SCE_KERNEL_ERROR_WAIT_DELETE_LW_MUTEX = 0x8002803F, - SCE_KERNEL_ERROR_ILLEGAL_STACK_SIZE = 0x80028040, - SCE_KERNEL_ERROR_RW_LOCK_RECURSIVE = 0x80028041, - SCE_KERNEL_ERROR_RW_LOCK_LOCK_OVF = 0x80028042, - SCE_KERNEL_ERROR_RW_LOCK_NOT_OWNED = 0x80028043, - SCE_KERNEL_ERROR_RW_LOCK_UNLOCK_UDF = 0x80028044, - SCE_KERNEL_ERROR_RW_LOCK_FAILED_TO_LOCK = 0x80028045, - SCE_KERNEL_ERROR_RW_LOCK_FAILED_TO_UNLOCK = 0x80028046, - - SCE_KERNEL_ERROR_PROCESSMGR_ERROR = 0x80029000, - SCE_KERNEL_ERROR_INVALID_PID = 0x80029001, - SCE_KERNEL_ERROR_INVALID_PROCESS_TYPE = 0x80029002, - SCE_KERNEL_ERROR_PLS_FULL = 0x80029003, - SCE_KERNEL_ERROR_INVALID_PROCESS_STATUS = 0x80029004, - SCE_KERNEL_ERROR_INVALID_BUDGET_ID = 0x80029005, - SCE_KERNEL_ERROR_INVALID_BUDGET_SIZE = 0x80029006, - SCE_KERNEL_ERROR_CP14_DISABLED = 0x80029007, - SCE_KERNEL_ERROR_EXCEEDED_MAX_PROCESSES = 0x80029008, - SCE_KERNEL_ERROR_PROCESS_REMAINING = 0x80029009, - SCE_KERNEL_ERROR_IOFILEMGR_ERROR = 0x8002A000, - SCE_KERNEL_ERROR_IO_NAME_TOO_LONG = 0x8002A001, - SCE_KERNEL_ERROR_IO_REG_DEV = 0x8002A002, - SCE_KERNEL_ERROR_IO_ALIAS_USED = 0x8002A003, - SCE_KERNEL_ERROR_IO_DEL_DEV = 0x8002A004, - SCE_KERNEL_ERROR_IO_WOULD_BLOCK = 0x8002A005, - SCE_KERNEL_ERROR_MODULEMGR_START_FAILED = 0x8002D000, - SCE_KERNEL_ERROR_MODULEMGR_STOP_FAIL = 0x8002D001, - SCE_KERNEL_ERROR_MODULEMGR_IN_USE = 0x8002D002, - SCE_KERNEL_ERROR_MODULEMGR_NO_LIB = 0x8002D003, - SCE_KERNEL_ERROR_MODULEMGR_SYSCALL_REG = 0x8002D004, - SCE_KERNEL_ERROR_MODULEMGR_NOMEM_LIB = 0x8002D005, - SCE_KERNEL_ERROR_MODULEMGR_NOMEM_STUB = 0x8002D006, - SCE_KERNEL_ERROR_MODULEMGR_NOMEM_SELF = 0x8002D007, - SCE_KERNEL_ERROR_MODULEMGR_NOMEM = 0x8002D008, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_LIB = 0x8002D009, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_STUB = 0x8002D00A, - SCE_KERNEL_ERROR_MODULEMGR_NO_FUNC_NID = 0x8002D00B, - SCE_KERNEL_ERROR_MODULEMGR_NO_VAR_NID = 0x8002D00C, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_TYPE = 0x8002D00D, - SCE_KERNEL_ERROR_MODULEMGR_NO_MOD_ENTRY = 0x8002D00E, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_PROC_PARAM = 0x8002D00F, - SCE_KERNEL_ERROR_MODULEMGR_NO_MODOBJ = 0x8002D010, - SCE_KERNEL_ERROR_MODULEMGR_NO_MOD = 0x8002D011, - SCE_KERNEL_ERROR_MODULEMGR_NO_PROCESS = 0x8002D012, - SCE_KERNEL_ERROR_MODULEMGR_OLD_LIB = 0x8002D013, - SCE_KERNEL_ERROR_MODULEMGR_STARTED = 0x8002D014, - SCE_KERNEL_ERROR_MODULEMGR_NOT_STARTED = 0x8002D015, - SCE_KERNEL_ERROR_MODULEMGR_NOT_STOPPED = 0x8002D016, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_PROCESS_UID = 0x8002D017, - SCE_KERNEL_ERROR_MODULEMGR_CANNOT_EXPORT_LIB_TO_SHARED = 0x8002D018, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_REL_INFO = 0x8002D019, - SCE_KERNEL_ERROR_MODULEMGR_INVALID_REF_INFO = 0x8002D01A, - SCE_KERNEL_ERROR_MODULEMGR_ELINK = 0x8002D01B, - SCE_KERNEL_ERROR_MODULEMGR_NOENT = 0x8002D01C, - SCE_KERNEL_ERROR_MODULEMGR_BUSY = 0x8002D01D, - SCE_KERNEL_ERROR_MODULEMGR_NOEXEC = 0x8002D01E, - SCE_KERNEL_ERROR_MODULEMGR_NAMETOOLONG = 0x8002D01F, - SCE_KERNEL_ERROR_LIBRARYDB_NOENT = 0x8002D080, - SCE_KERNEL_ERROR_LIBRARYDB_NO_LIB = 0x8002D081, - SCE_KERNEL_ERROR_LIBRARYDB_NO_MOD = 0x8002D082, - SCE_KERNEL_ERROR_AUTHFAIL = 0x8002F000, - SCE_KERNEL_ERROR_NO_AUTH = 0x8002F001, -}; - -struct SceDateTime -{ - u16 year; - u16 month; - u16 day; - u16 hour; - u16 minute; - u16 second; - u32 microsecond; -}; - +// Abstract HLE function caller base class class psv_func_caller { public: @@ -428,6 +41,7 @@ public: virtual ~psv_func_caller(){}; }; +// Utilities for binding ARMv7Context to C++ function arguments received by HLE functions or sent to callbacks namespace psv_func_detail { enum bind_arg_type @@ -532,7 +146,7 @@ namespace psv_func_detail __forceinline static T get_arg(ARMv7Context& context) { // TODO: check - return cast_from_armv7_gpr(context.get_stack_arg(g_count)); + return cast_from_armv7_gpr(vm::psv::read32(context.SP + sizeof(u32) * (g_count - 5))); } __forceinline static void put_arg(ARMv7Context& context, const T& arg) @@ -541,7 +155,45 @@ namespace psv_func_detail const int stack_pos = (g_count - 5) * 4 - FIXED_STACK_FRAME_SIZE; static_assert(stack_pos < 0, "TODO: Increase fixed stack frame size (arg count limit broken)"); - context.put_stack_arg(stack_pos, cast_to_armv7_gpr(arg)); + vm::psv::write32(context.SP + stack_pos, cast_to_armv7_gpr(arg)); + } + }; + + template + struct bind_arg + { + __forceinline static u64 get_arg(ARMv7Context& context) + { + // TODO: check + return vm::psv::read64(context.SP + sizeof(u32) * (g_count - 5)); + } + + __forceinline static void put_arg(ARMv7Context& context, u64 arg) + { + // TODO: check + const int stack_pos = (g_count - 5) * 4 - FIXED_STACK_FRAME_SIZE; + static_assert(stack_pos < -4, "TODO: Increase fixed stack frame size (arg count limit broken)"); + + vm::psv::write64(context.SP + stack_pos, arg); + } + }; + + template + struct bind_arg + { + __forceinline static s64 get_arg(ARMv7Context& context) + { + // TODO: check + return vm::psv::read64(context.SP + sizeof(u32) * (g_count - 5)); + } + + __forceinline static void put_arg(ARMv7Context& context, s64 arg) + { + // TODO: check + const int stack_pos = (g_count - 5) * 4 - FIXED_STACK_FRAME_SIZE; + static_assert(stack_pos < -4, "TODO: Increase fixed stack frame size (arg count limit broken)"); + + vm::psv::write64(context.SP + stack_pos, arg); } }; @@ -630,14 +282,14 @@ namespace psv_func_detail // TODO: check calculations static const bool is_float = std::is_floating_point::value; static const bool is_vector = std::is_same::value; - static const bind_arg_type value = is_float - ? ((f_count >= 4) ? ARG_STACK : ARG_FLOAT) - : (is_vector ? ((v_count >= 4) ? ARG_STACK : ARG_VECTOR): ((g_count >= 4) ? ARG_STACK : ARG_GENERAL)); static const int g_align = __alignof(T) > 4 ? __alignof(T) >> 2 : 1; static const int g_pos = (is_float || is_vector) ? g_count : ((g_count + (g_align - 1)) & ~(g_align - 1)) + 1; static const int g_next = g_pos + g_align - 1; static const int f_value = !is_float ? f_count : f_count + 1; static const int v_value = !is_vector ? v_count : v_count + 1; + static const bind_arg_type value = is_float + ? ((f_value > 9000) ? ARG_STACK : ARG_FLOAT) + : (is_vector ? ((v_value > 9000) ? ARG_STACK : ARG_VECTOR) : ((g_pos > 4) ? ARG_STACK : ARG_GENERAL)); }; template @@ -817,18 +469,19 @@ namespace psv_func_detail }; } +// Basic information about the HLE function struct psv_func { - u32 nid; - const char* name; - std::shared_ptr func; - psv_log_base* module; + u32 nid; // Unique function ID only for old PSV executables (should be generated individually for each elf loaded) + const char* name; // Function name for information + std::shared_ptr func; // Function caller instance + psv_log_base* module; // Module for information }; +// Do not call directly void add_psv_func(psv_func& data); - -template -void reg_psv_func(u32 nid, psv_log_base* module, const char* name, RT(*func)(T...)) +// Do not call directly +template void reg_psv_func(u32 nid, psv_log_base* module, const char* name, RT(*func)(T...)) { psv_func f; f.nid = nid; @@ -838,10 +491,159 @@ void reg_psv_func(u32 nid, psv_log_base* module, const char* name, RT(*func)(T.. add_psv_func(f); } - +// Find registered HLE function by its ID psv_func* get_psv_func_by_nid(u32 nid); +// Get index of registered HLE function u32 get_psv_func_index(psv_func* func); - +// Execute registered HLE function by its index void execute_psv_func_by_index(ARMv7Context& context, u32 index); +// Register all HLE functions void initialize_psv_modules(); +// Unregister all HLE functions void finalize_psv_modules(); + +// General definitions + +enum psv_error_codes +{ + SCE_OK = 0, + + SCE_ERROR_ERRNO_EPERM = 0x80010001, + SCE_ERROR_ERRNO_ENOENT = 0x80010002, + SCE_ERROR_ERRNO_ESRCH = 0x80010003, + SCE_ERROR_ERRNO_EINTR = 0x80010004, + SCE_ERROR_ERRNO_EIO = 0x80010005, + SCE_ERROR_ERRNO_ENXIO = 0x80010006, + SCE_ERROR_ERRNO_E2BIG = 0x80010007, + SCE_ERROR_ERRNO_ENOEXEC = 0x80010008, + SCE_ERROR_ERRNO_EBADF = 0x80010009, + SCE_ERROR_ERRNO_ECHILD = 0x8001000A, + SCE_ERROR_ERRNO_EAGAIN = 0x8001000B, + SCE_ERROR_ERRNO_ENOMEM = 0x8001000C, + SCE_ERROR_ERRNO_EACCES = 0x8001000D, + SCE_ERROR_ERRNO_EFAULT = 0x8001000E, + SCE_ERROR_ERRNO_ENOTBLK = 0x8001000F, + SCE_ERROR_ERRNO_EBUSY = 0x80010010, + SCE_ERROR_ERRNO_EEXIST = 0x80010011, + SCE_ERROR_ERRNO_EXDEV = 0x80010012, + SCE_ERROR_ERRNO_ENODEV = 0x80010013, + SCE_ERROR_ERRNO_ENOTDIR = 0x80010014, + SCE_ERROR_ERRNO_EISDIR = 0x80010015, + SCE_ERROR_ERRNO_EINVAL = 0x80010016, + SCE_ERROR_ERRNO_ENFILE = 0x80010017, + SCE_ERROR_ERRNO_EMFILE = 0x80010018, + SCE_ERROR_ERRNO_ENOTTY = 0x80010019, + SCE_ERROR_ERRNO_ETXTBSY = 0x8001001A, + SCE_ERROR_ERRNO_EFBIG = 0x8001001B, + SCE_ERROR_ERRNO_ENOSPC = 0x8001001C, + SCE_ERROR_ERRNO_ESPIPE = 0x8001001D, + SCE_ERROR_ERRNO_EROFS = 0x8001001E, + SCE_ERROR_ERRNO_EMLINK = 0x8001001F, + SCE_ERROR_ERRNO_EPIPE = 0x80010020, + SCE_ERROR_ERRNO_EDOM = 0x80010021, + SCE_ERROR_ERRNO_ERANGE = 0x80010022, + SCE_ERROR_ERRNO_ENOMSG = 0x80010023, + SCE_ERROR_ERRNO_EIDRM = 0x80010024, + SCE_ERROR_ERRNO_ECHRNG = 0x80010025, + SCE_ERROR_ERRNO_EL2NSYNC = 0x80010026, + SCE_ERROR_ERRNO_EL3HLT = 0x80010027, + SCE_ERROR_ERRNO_EL3RST = 0x80010028, + SCE_ERROR_ERRNO_ELNRNG = 0x80010029, + SCE_ERROR_ERRNO_EUNATCH = 0x8001002A, + SCE_ERROR_ERRNO_ENOCSI = 0x8001002B, + SCE_ERROR_ERRNO_EL2HLT = 0x8001002C, + SCE_ERROR_ERRNO_EDEADLK = 0x8001002D, + SCE_ERROR_ERRNO_ENOLCK = 0x8001002E, + SCE_ERROR_ERRNO_EFORMAT = 0x8001002F, + SCE_ERROR_ERRNO_EUNSUP = 0x80010030, + SCE_ERROR_ERRNO_EBADE = 0x80010032, + SCE_ERROR_ERRNO_EBADR = 0x80010033, + SCE_ERROR_ERRNO_EXFULL = 0x80010034, + SCE_ERROR_ERRNO_ENOANO = 0x80010035, + SCE_ERROR_ERRNO_EBADRQC = 0x80010036, + SCE_ERROR_ERRNO_EBADSLT = 0x80010037, + SCE_ERROR_ERRNO_EDEADLOCK = 0x80010038, + SCE_ERROR_ERRNO_EBFONT = 0x80010039, + SCE_ERROR_ERRNO_ENOSTR = 0x8001003C, + SCE_ERROR_ERRNO_ENODATA = 0x8001003D, + SCE_ERROR_ERRNO_ETIME = 0x8001003E, + SCE_ERROR_ERRNO_ENOSR = 0x8001003F, + SCE_ERROR_ERRNO_ENONET = 0x80010040, + SCE_ERROR_ERRNO_ENOPKG = 0x80010041, + SCE_ERROR_ERRNO_EREMOTE = 0x80010042, + SCE_ERROR_ERRNO_ENOLINK = 0x80010043, + SCE_ERROR_ERRNO_EADV = 0x80010044, + SCE_ERROR_ERRNO_ESRMNT = 0x80010045, + SCE_ERROR_ERRNO_ECOMM = 0x80010046, + SCE_ERROR_ERRNO_EPROTO = 0x80010047, + SCE_ERROR_ERRNO_EMULTIHOP = 0x8001004A, + SCE_ERROR_ERRNO_ELBIN = 0x8001004B, + SCE_ERROR_ERRNO_EDOTDOT = 0x8001004C, + SCE_ERROR_ERRNO_EBADMSG = 0x8001004D, + SCE_ERROR_ERRNO_EFTYPE = 0x8001004F, + SCE_ERROR_ERRNO_ENOTUNIQ = 0x80010050, + SCE_ERROR_ERRNO_EBADFD = 0x80010051, + SCE_ERROR_ERRNO_EREMCHG = 0x80010052, + SCE_ERROR_ERRNO_ELIBACC = 0x80010053, + SCE_ERROR_ERRNO_ELIBBAD = 0x80010054, + SCE_ERROR_ERRNO_ELIBSCN = 0x80010055, + SCE_ERROR_ERRNO_ELIBMAX = 0x80010056, + SCE_ERROR_ERRNO_ELIBEXEC = 0x80010057, + SCE_ERROR_ERRNO_ENOSYS = 0x80010058, + SCE_ERROR_ERRNO_ENMFILE = 0x80010059, + SCE_ERROR_ERRNO_ENOTEMPTY = 0x8001005A, + SCE_ERROR_ERRNO_ENAMETOOLONG = 0x8001005B, + SCE_ERROR_ERRNO_ELOOP = 0x8001005C, + SCE_ERROR_ERRNO_EOPNOTSUPP = 0x8001005F, + SCE_ERROR_ERRNO_EPFNOSUPPORT = 0x80010060, + SCE_ERROR_ERRNO_ECONNRESET = 0x80010068, + SCE_ERROR_ERRNO_ENOBUFS = 0x80010069, + SCE_ERROR_ERRNO_EAFNOSUPPORT = 0x8001006A, + SCE_ERROR_ERRNO_EPROTOTYPE = 0x8001006B, + SCE_ERROR_ERRNO_ENOTSOCK = 0x8001006C, + SCE_ERROR_ERRNO_ENOPROTOOPT = 0x8001006D, + SCE_ERROR_ERRNO_ESHUTDOWN = 0x8001006E, + SCE_ERROR_ERRNO_ECONNREFUSED = 0x8001006F, + SCE_ERROR_ERRNO_EADDRINUSE = 0x80010070, + SCE_ERROR_ERRNO_ECONNABORTED = 0x80010071, + SCE_ERROR_ERRNO_ENETUNREACH = 0x80010072, + SCE_ERROR_ERRNO_ENETDOWN = 0x80010073, + SCE_ERROR_ERRNO_ETIMEDOUT = 0x80010074, + SCE_ERROR_ERRNO_EHOSTDOWN = 0x80010075, + SCE_ERROR_ERRNO_EHOSTUNREACH = 0x80010076, + SCE_ERROR_ERRNO_EINPROGRESS = 0x80010077, + SCE_ERROR_ERRNO_EALREADY = 0x80010078, + SCE_ERROR_ERRNO_EDESTADDRREQ = 0x80010079, + SCE_ERROR_ERRNO_EMSGSIZE = 0x8001007A, + SCE_ERROR_ERRNO_EPROTONOSUPPORT = 0x8001007B, + SCE_ERROR_ERRNO_ESOCKTNOSUPPORT = 0x8001007C, + SCE_ERROR_ERRNO_EADDRNOTAVAIL = 0x8001007D, + SCE_ERROR_ERRNO_ENETRESET = 0x8001007E, + SCE_ERROR_ERRNO_EISCONN = 0x8001007F, + SCE_ERROR_ERRNO_ENOTCONN = 0x80010080, + SCE_ERROR_ERRNO_ETOOMANYREFS = 0x80010081, + SCE_ERROR_ERRNO_EPROCLIM = 0x80010082, + SCE_ERROR_ERRNO_EUSERS = 0x80010083, + SCE_ERROR_ERRNO_EDQUOT = 0x80010084, + SCE_ERROR_ERRNO_ESTALE = 0x80010085, + SCE_ERROR_ERRNO_ENOTSUP = 0x80010086, + SCE_ERROR_ERRNO_ENOMEDIUM = 0x80010087, + SCE_ERROR_ERRNO_ENOSHARE = 0x80010088, + SCE_ERROR_ERRNO_ECASECLASH = 0x80010089, + SCE_ERROR_ERRNO_EILSEQ = 0x8001008A, + SCE_ERROR_ERRNO_EOVERFLOW = 0x8001008B, + SCE_ERROR_ERRNO_ECANCELED = 0x8001008C, + SCE_ERROR_ERRNO_ENOTRECOVERABLE = 0x8001008D, + SCE_ERROR_ERRNO_EOWNERDEAD = 0x8001008E, +}; + +struct SceDateTime +{ + u16 year; + u16 month; + u16 day; + u16 hour; + u16 minute; + u16 second; + u32 microsecond; +};