From dc44cab8beddd3b0b05d75223a8538f49decc417 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 19 Aug 2025 20:13:45 +1000 Subject: [PATCH] GBA/32x: Increase free RAM by 18 kb and reduce binary size by 45/66 kb by going straight in-game rather than via the launcher --- src/32x/Platform_32x.c | 46 ++++++++++++++++++++++++++++++++++++----- src/_PlatformBase.h | 4 ++-- src/gba/Platform_GBA.c | 47 +++++++++++++++++++++++++++++++++++------- 3 files changed, 83 insertions(+), 14 deletions(-) diff --git a/src/32x/Platform_32x.c b/src/32x/Platform_32x.c index 9e51645e1..835d72b8c 100644 --- a/src/32x/Platform_32x.c +++ b/src/32x/Platform_32x.c @@ -14,7 +14,6 @@ #include #include -#include "../_PlatformConsole.h" #include "../../misc/32x/32x.h" #include "../../misc/32x/hw_32x.h" @@ -30,24 +29,43 @@ const cc_result ReturnCode_SocketDropped = -1; const char* Platform_AppNameSuffix = " 32x"; cc_bool Platform_ReadonlyFilesystem = true; +cc_uint8 Platform_Flags = PLAT_FLAG_SINGLE_PROCESS | PLAT_FLAG_APP_EXIT; + + +/*########################################################################################################################* +*-----------------------------------------------------Main entrypoint-----------------------------------------------------* +*#########################################################################################################################*/ +#include "../main_impl.h" + +int main(int argc, char** argv) { + SetupProgram(argc, argv); + while (Window_Main.Exists) { + RunGame(); + } + + Window_Free(); + return 0; +} /*########################################################################################################################* *---------------------------------------------------------Memory----------------------------------------------------------* *#########################################################################################################################*/ +void* Mem_Set(void* dst, cc_uint8 value, unsigned numBytes) { return memset( dst, value, numBytes); } +void* Mem_Copy(void* dst, const void* src, unsigned numBytes) { return memcpy( dst, src, numBytes); } +void* Mem_Move(void* dst, const void* src, unsigned numBytes) { return memmove(dst, src, numBytes); } + void* Mem_TryAlloc(cc_uint32 numElems, cc_uint32 elemsSize) { cc_uint32 size = CalcMemSize(numElems, elemsSize); - Platform_Log1(" MALLOC: %i", &size); void* ptr = size ? ta_alloc(size) : NULL; - Platform_Log1("MALLOCED: %x", &ptr); + Platform_Log2("MALLOCED: %x (%i bytes)", &ptr, &size); return ptr; } void* Mem_TryAllocCleared(cc_uint32 numElems, cc_uint32 elemsSize) { cc_uint32 size = CalcMemSize(numElems, elemsSize); - Platform_Log1(" CALLOC: %i", &size); void* ptr = size ? ta_alloc(size) : NULL; - Platform_Log1("CALLOCED: %x", &ptr); + Platform_Log2("CALLOCED: %x (%i bytes)", &ptr, &size); if (ptr) Mem_Set(ptr, 0, size); return ptr; @@ -304,3 +322,21 @@ cc_result Platform_Decrypt(const void* data, int len, cc_string* dst) { return ERR_NOT_SUPPORTED; } + +/*########################################################################################################################* +*-----------------------------------------------------Process/Module------------------------------------------------------* +*#########################################################################################################################*/ +cc_result Process_StartGame2(const cc_string* args, int numArgs) { + return 0; +} + +int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) { + return 0; +} + +cc_result Platform_SetDefaultCurrentDirectory(int argc, char **argv) { + return 0; +} + +void Process_Exit(cc_result code) { _exit(code); } + diff --git a/src/_PlatformBase.h b/src/_PlatformBase.h index f6c30eaa8..9c6c5a7dc 100644 --- a/src/_PlatformBase.h +++ b/src/_PlatformBase.h @@ -102,7 +102,7 @@ static char gameArgs[GAME_MAX_CMDARGS][STRING_SIZE]; static int gameNumArgs; static cc_bool gameHasArgs; -static cc_result SetGameArgs(const cc_string* args, int numArgs) { +static CC_INLINE cc_result SetGameArgs(const cc_string* args, int numArgs) { int i; for (i = 0; i < numArgs; i++) { @@ -114,7 +114,7 @@ static cc_result SetGameArgs(const cc_string* args, int numArgs) { return 0; } -static int GetGameArgs(cc_string* args) { +static CC_INLINE int GetGameArgs(cc_string* args) { int i, count = gameNumArgs; for (i = 0; i < count; i++) { diff --git a/src/gba/Platform_GBA.c b/src/gba/Platform_GBA.c index 83f91e430..6951699ba 100644 --- a/src/gba/Platform_GBA.c +++ b/src/gba/Platform_GBA.c @@ -16,9 +16,6 @@ #include #include "gbadefs.h" -#define OVERRIDE_MEM_FUNCTIONS -#include "../_PlatformConsole.h" - #include "../../third_party/tinyalloc/tinyalloc.c" typedef volatile uint8_t vu8; @@ -34,24 +31,42 @@ const cc_result ReturnCode_SocketDropped = -1; const char* Platform_AppNameSuffix = " GBA"; cc_bool Platform_ReadonlyFilesystem; +cc_uint8 Platform_Flags = PLAT_FLAG_SINGLE_PROCESS | PLAT_FLAG_APP_EXIT; +/*########################################################################################################################* +*-----------------------------------------------------Main entrypoint-----------------------------------------------------* +*#########################################################################################################################*/ +#include "../main_impl.h" + +int main(int argc, char** argv) { + SetupProgram(argc, argv); + while (Window_Main.Exists) { + RunGame(); + } + + Window_Free(); + return 0; +} + /*########################################################################################################################* *---------------------------------------------------------Memory----------------------------------------------------------* *#########################################################################################################################*/ +void* Mem_Set(void* dst, cc_uint8 value, unsigned numBytes) { return memset( dst, value, numBytes); } +void* Mem_Copy(void* dst, const void* src, unsigned numBytes) { return memcpy( dst, src, numBytes); } +void* Mem_Move(void* dst, const void* src, unsigned numBytes) { return memmove(dst, src, numBytes); } + void* Mem_TryAlloc(cc_uint32 numElems, cc_uint32 elemsSize) { cc_uint32 size = CalcMemSize(numElems, elemsSize); - Platform_Log1(" MALLOC: %i", &size); void* ptr = size ? ta_alloc(size) : NULL; - Platform_Log1("MALLOCED: %x", &ptr); + Platform_Log2("MALLOCED: %x (%i bytes)", &ptr, &size); return ptr; } void* Mem_TryAllocCleared(cc_uint32 numElems, cc_uint32 elemsSize) { cc_uint32 size = CalcMemSize(numElems, elemsSize); - Platform_Log1(" CALLOC: %i", &size); void* ptr = size ? ta_alloc(size) : NULL; - Platform_Log1("CALLOCED: %x", &ptr); + Platform_Log2("CALLOCED: %x (%i bytes)", &ptr, &size); if (ptr) Mem_Set(ptr, 0, size); return ptr; @@ -354,3 +369,21 @@ cc_result Platform_Decrypt(const void* data, int len, cc_string* dst) { return ERR_NOT_SUPPORTED; } + +/*########################################################################################################################* +*-----------------------------------------------------Process/Module------------------------------------------------------* +*#########################################################################################################################*/ +cc_result Process_StartGame2(const cc_string* args, int numArgs) { + return 0; +} + +int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) { + return 0; +} + +cc_result Platform_SetDefaultCurrentDirectory(int argc, char **argv) { + return 0; +} + +void Process_Exit(cc_result code) { _exit(code); } +