diff --git a/include/PR/os_system.h b/include/PR/os_system.h index 1179189a2..993935352 100644 --- a/include/PR/os_system.h +++ b/include/PR/os_system.h @@ -21,7 +21,7 @@ /*---------------------------------------------------------------------* Copyright (C) 1998 Nintendo. (Originated by SGI) - + $RCSfile: os_system.h,v $ $Revision: 1.1 $ $Date: 1998/10/09 08:01:18 $ @@ -54,7 +54,7 @@ extern "C" { */ /* - * Values for osTvType + * Values for osTvType */ #define OS_TV_PAL 0 #define OS_TV_NTSC 1 @@ -103,7 +103,6 @@ extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */ extern void osInitialize(void); extern void osExit(void); -extern u32 osGetMemSize(void); /* pre-NMI */ extern s32 osAfterPreNMI(void); diff --git a/src/include/lib/boot.h b/src/include/lib/boot.h index d5bf53e3f..c82118d5f 100644 --- a/src/include/lib/boot.h +++ b/src/include/lib/boot.h @@ -2,8 +2,13 @@ #define _IN_LIB_BOOT_H #include +#if VERSION >= VERSION_NTSC_1_0 +extern s32 osGetMemSize(void); +#else +extern u32 osGetMemSize(void); +#endif + void boot(void); -s32 boot_get_mem_size(void); void *boot_allocate_stack(s32 threadid, s32 size); void boot_check_stack_overflow(void); diff --git a/src/lib/boot.c b/src/lib/boot.c index 53bf5c9c5..8bc461df2 100644 --- a/src/lib/boot.c +++ b/src/lib/boot.c @@ -29,7 +29,7 @@ u32 var8008dbcc; OSSched g_Sched; OSScClient g_MainSchedClient; #if VERSION >= VERSION_NTSC_1_0 -u32 g_OsMemSize; +u32 g_SavedOsMemSize; #else u16 *var800902e4; u16 var800902e8; @@ -54,9 +54,9 @@ extern u8 *_inflateSegmentRomStart; extern u8 *_inflateSegmentRomEnd; #if VERSION >= VERSION_NTSC_1_0 -s32 boot_get_mem_size(void) +s32 osGetMemSize(void) { - return g_OsMemSize; + return g_SavedOsMemSize; } #endif @@ -89,10 +89,15 @@ void boot(void) u32 flags; #if VERSION >= VERSION_NTSC_1_0 + // In NTSC beta, libultra's osGetMemSize is used several times during boot. + // This function writes to the expansion area but this shouldn't be a problem... + // In NTSC 1.0 and later, libultra's osGetMemSize is not linked and is replaced + // with one which returns osMemSize. But it appears as though osMemSize is only + // reliable on a cold boot, because it's saved and reloaded here on a reset. if (osResetType == RESETTYPE_WARM) { - g_OsMemSize = *(u32 *) STACK_START; + g_SavedOsMemSize = *(u32 *) STACK_START; } else { - *(u32 *) STACK_START = g_OsMemSize = osMemSize; + *(u32 *) STACK_START = g_SavedOsMemSize = osMemSize; } #endif diff --git a/src/lib/main.c b/src/lib/main.c index 4f7b46d4e..26d74565b 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -404,7 +404,7 @@ void main_init(void) // In 4MB mode, place it close to the end of memory, // but before the thread stacks and VM system. // In 8MB mode, put it at the end of the expansion pak. - if (boot_get_mem_size() <= 4 * 1024 * 1024) { + if (osGetMemSize() <= 4 * 1024 * 1024) { addr = K0BASE + 4 * 1024 * 1024; addr -= STACKSIZE_MAIN; addr -= STACKSIZE_IDLE; diff --git a/src/lib/memp.c b/src/lib/memp.c index 3dd8ee694..434329f4f 100644 --- a/src/lib/memp.c +++ b/src/lib/memp.c @@ -90,18 +90,9 @@ void memp_set_heap(u8 *heapstart, u32 heaplen) g_MempOnboardPools[MEMPOOL_STAGE].rightpos = heapstart + heaplen; // If 8MB, reserve the entire expansion pak for the stage pool -#if VERSION >= VERSION_NTSC_1_0 - extraend = (u8 *) K0BASE + boot_get_mem_size(); -#else extraend = (u8 *) K0BASE + osGetMemSize(); -#endif -#if VERSION >= VERSION_NTSC_1_0 - if (boot_get_mem_size() > 4 * 1024 * 1024) -#else - if (osGetMemSize() > 4 * 1024 * 1024) -#endif - { + if (osGetMemSize() > 4 * 1024 * 1024) { g_MempExpansionPools[MEMPOOL_STAGE].start = (u8 *) K0BASE + 4 * 1024 * 1024; g_MempExpansionPools[MEMPOOL_STAGE].rightpos = extraend; } diff --git a/src/lib/vminit.c b/src/lib/vminit.c index 2cbb0d0fb..be0f31035 100644 --- a/src/lib/vminit.c +++ b/src/lib/vminit.c @@ -199,12 +199,7 @@ void vm_init(void) rzip_init(); -#if VERSION >= VERSION_NTSC_1_0 - if (boot_get_mem_size() <= 0x400000) -#else - if (osGetMemSize() <= 0x400000) -#endif - { + if (osGetMemSize() <= 0x400000) { g_Is4Mb = true; g_VmNumPages = (s32)((&_gameSegmentEnd - &_gameSegmentStart) + (VM_PAGE_SIZE - 1)) / VM_PAGE_SIZE;