From b3916e58b2e521e028f2c2b0962bd8d6a8d9f405 Mon Sep 17 00:00:00 2001 From: Julian Uy Date: Fri, 24 Jan 2025 07:13:26 -0600 Subject: [PATCH] add: Definition of GetMemoryMode syscall Update SetMemoryMode docs with new findings --- ee/kernel/Makefile | 2 +- ee/kernel/include/kernel.h | 5 ++++- ee/kernel/include/syscallnr.h | 1 + ee/kernel/src/kernel.S | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ee/kernel/Makefile b/ee/kernel/Makefile index c6dd0a9c610..9ab69336c4a 100644 --- a/ee/kernel/Makefile +++ b/ee/kernel/Makefile @@ -195,7 +195,7 @@ KERNEL_OBJS = ResetEE.o SetGsCrt.o $(EXEC_SYSCALLS) \ SetPgifHandler.o SetVSyncFlag.o SetSyscall.o SifDmaStat.o iSifDmaStat.o \ SifSetDma.o iSifSetDma.o SifSetDChain.o iSifSetDChain.o SifSetReg.o \ SifGetReg.o $(EXECOSD_SYSCALL) Deci2Call.o PSMode.o MachineType.o GetMemorySize.o _GetGsDxDyOffset.o \ - _InitTLB.o SetMemoryMode.o \ + _InitTLB.o SetMemoryMode.o GetMemoryMode.o \ SifWriteBackDCache.o _SyncDCache.o _InvalidDCache.o __errno.o errno.o \ strncpy.o strlen.o memcpy.o memset.o __syscall.o GPfuncs.o _print.o diff --git a/ee/kernel/include/kernel.h b/ee/kernel/include/kernel.h index cec940f4b51..d65eb98e709 100644 --- a/ee/kernel/include/kernel.h +++ b/ee/kernel/include/kernel.h @@ -531,9 +531,12 @@ extern void _GetGsDxDyOffset(int mode, int *dx, int *dy, int *dw, int *dh); // Internal function for reinitializing the TLB, only present in later kernels. Please use InitTLB() instead to initialize the TLB with all kernels. extern int _InitTLB(void); -/* (PSX only) Sets the memory size. 0 = 64MB mode, 1 = 32MB mode. The mode is only binding when either _InitTLB() or the PSX ExecPS2() syscall is called. +/* (DESR kernels only) Sets the memory size. mode != 1 -> 64MB mode, mode == 1 -> 32MB mode. + The mode is only binding when either _InitTLB() or the PSX ExecPS2() syscall is called. The stack pointer must remain in range of usable memory, or a TLB exception will occur. */ extern int SetMemoryMode(int mode); // Arbitrarily named. +/* (DESR kernels only) Get the value set by SetMemoryMode. */ +extern int GetMemoryMode(void); // Arbitrarily named. extern void _SyncDCache(void *start, void *end); extern void _InvalidDCache(void *start, void *end); diff --git a/ee/kernel/include/syscallnr.h b/ee/kernel/include/syscallnr.h index 52c73fc24f1..b0c9ba444a7 100644 --- a/ee/kernel/include/syscallnr.h +++ b/ee/kernel/include/syscallnr.h @@ -156,6 +156,7 @@ #define __NR__InitTLB 0x82 #define __NR_FindAddress 0x83 #define __NR_SetMemoryMode 0x85 +#define __NR_GetMemoryMode 0x86 #define __NR_ExecPSX 0x87 #endif /* __SYSCALLNR_H__ */ diff --git a/ee/kernel/src/kernel.S b/ee/kernel/src/kernel.S index 8b8e1e27a11..ca7d368a599 100644 --- a/ee/kernel/src/kernel.S +++ b/ee/kernel/src/kernel.S @@ -665,6 +665,10 @@ SYSCALL(_InitTLB) SYSCALL(SetMemoryMode) #endif +#ifdef F_GetMemoryMode +SYSCALL(GetMemoryMode) +#endif + #ifdef F_GPfuncs .text .align 2