From 6004a2e23868cc9b7733c6c04dceeaf1e55b5326 Mon Sep 17 00:00:00 2001 From: angie Date: Sun, 3 Sep 2023 17:18:23 -0300 Subject: [PATCH] cleanup a lot of os files --- include/PR/controller.h | 3 +- include/alignment.h | 8 ++-- include/attributes.h | 10 +++++ spec | 2 +- src/libultra/flash/osFlash.c | 8 ++-- src/libultra/io/controller.c | 8 ++-- src/libultra/io/pfsisplug.c | 33 +++++++------- src/libultra/io/pimgr.c | 8 ++-- .../{os/viextend.c => io/viextendvstart.c} | 0 src/libultra/os/getmemsize.c | 43 +++++++++++-------- src/libultra/os/getthreadid.c | 2 +- src/libultra/os/getthreadpri.c | 2 +- src/libultra/os/gettime.c | 8 ++-- src/libultra/os/initialize.c | 7 +-- src/libultra/os/jammesg.c | 6 +-- src/libultra/os/recvmesg.c | 6 +-- src/libultra/os/resetglobalintmask.c | 2 +- src/libultra/os/sendmesg.c | 8 ++-- src/libultra/os/seteventmesg.c | 14 +++--- src/libultra/os/setglobalintmask.c | 2 +- src/libultra/os/setthreadpri.c | 6 +-- src/libultra/os/settime.c | 2 +- src/libultra/os/settimer.c | 36 ++++++++-------- src/libultra/os/startthread.c | 15 ++++--- src/libultra/os/stopthread.c | 15 ++++--- src/libultra/os/stoptimer.c | 2 +- src/libultra/os/thread.c | 6 +-- src/libultra/os/threadsave.c | 2 +- src/libultra/os/timerintr.c | 5 +-- src/libultra/os/virtualtophysical.c | 1 - src/libultra/os/yieldthread.c | 4 +- tools/disasm/files.txt | 2 +- tools/sizes/boot_functions.csv | 2 +- 33 files changed, 149 insertions(+), 129 deletions(-) create mode 100644 include/attributes.h rename src/libultra/{os/viextend.c => io/viextendvstart.c} (100%) diff --git a/include/PR/controller.h b/include/PR/controller.h index cd3032020c..b8d86594a5 100644 --- a/include/PR/controller.h +++ b/include/PR/controller.h @@ -4,6 +4,7 @@ #include "ultratypes.h" #include "os_cont.h" #include "os_pfs.h" +#include "rcp.h" #define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4) @@ -152,7 +153,7 @@ typedef struct { /* 0x05 */ u8 typel; /* 0x06 */ u8 status; /* 0x07 */ u8 align1; -} __OSContRequestHeader; // size = 0x8 +} __OSContRequesFormat; // size = 0x8 typedef struct { /* 0x00 */ u8 txsize; diff --git a/include/alignment.h b/include/alignment.h index e26a1d3f33..f2fd657504 100644 --- a/include/alignment.h +++ b/include/alignment.h @@ -1,16 +1,16 @@ #ifndef ALIGNMENT_H #define ALIGNMENT_H +#include "attributes.h" + #define ALIGN8(val) (((val) + 7) & ~7) #define ALIGN16(val) (((val) + 0xF) & ~0xF) #define ALIGN32(val) (((val) + 0x1F) & ~0x1F) #define ALIGN64(val) (((val) + 0x3F) & ~0x3F) #define ALIGN256(val) (((val) + 0xFF) & ~0xFF) -#ifdef __GNUC__ -#define ALIGNED8 __attribute__ ((aligned (8))) -#else -#define ALIGNED8 +#ifndef ALIGNED +#define ALIGNED(x) __attribute__ ((aligned (x))) #endif #ifdef __sgi /* IDO compiler */ diff --git a/include/attributes.h b/include/attributes.h new file mode 100644 index 0000000000..db4b420d11 --- /dev/null +++ b/include/attributes.h @@ -0,0 +1,10 @@ +#ifndef ATTRIBUTES_H +#define ATTRIBUTES_H + +#if (!defined(__GNUC__) && !defined(__clang__)) || defined(M2CTX) || defined(__sgi) + #ifndef __attribute__ + #define __attribute__(x) + #endif +#endif + +#endif diff --git a/spec b/spec index 1a6732ac5d..713140befc 100644 --- a/spec +++ b/spec @@ -48,7 +48,7 @@ beginseg include "build/asm/boot/setcause.text.o" include "build/src/libultra/os/sendmesg.o" include "build/src/libultra/io/pfsfreeblocks.o" - include "build/src/libultra/os/viextend.o" + include "build/src/libultra/io/viextendvstart.o" include "build/src/libultra/os/stopthread.o" include "build/src/libultra/os/recvmesg.o" include "build/asm/boot/setintmask.text.o" diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index 648e2c974b..1555aea6ba 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -2,10 +2,10 @@ #include "ultra64.h" #include "global.h" -u32 __osFlashID[4] ALIGNED8; -OSIoMesg __osFlashMsg ALIGNED8; -OSMesgQueue __osFlashMessageQ ALIGNED8; -OSPiHandle __osFlashHandler ALIGNED8; +u32 __osFlashID[4] ALIGNED(8); +OSIoMesg __osFlashMsg ALIGNED(8); +OSMesgQueue __osFlashMessageQ ALIGNED(8); +OSPiHandle __osFlashHandler ALIGNED(8); OSMesg __osFlashMsgBuf[1]; s32 __osFlashVersion; UNK_TYPE1 D_801FD0FC[0x14]; diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 7f38373af7..ef15824aee 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -50,14 +50,14 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { void __osContGetInitData(u8* pattern, OSContStatus* data) { u8* ptr; - __OSContRequestHeader requestHeader; + __OSContRequesFormat requestHeader; s32 i; u8 bits; bits = 0; ptr = (u8*)__osContPifRam.ramarray; for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestHeader), data++) { - requestHeader = *(__OSContRequestHeader*)ptr; + requestHeader = *(__OSContRequesFormat*)ptr; data->errno = (requestHeader.rxsize & 0xC0) >> 4; if (data->errno == 0) { data->type = requestHeader.typel << 8 | requestHeader.typeh; @@ -71,7 +71,7 @@ void __osContGetInitData(u8* pattern, OSContStatus* data) { void __osPackRequestData(u8 poll) { u8* ptr; - __OSContRequestHeader requestHeader; + __OSContRequesFormat requestHeader; s32 i; for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) { @@ -90,7 +90,7 @@ void __osPackRequestData(u8 poll) { requestHeader.align1 = 255; for (i = 0; i < __osMaxControllers; i++) { - *(__OSContRequestHeader*)ptr = requestHeader; + *(__OSContRequesFormat*)ptr = requestHeader; ptr += sizeof(requestHeader); } *ptr = 254; diff --git a/src/libultra/io/pfsisplug.c b/src/libultra/io/pfsisplug.c index 99a2cbc422..384a8e83f7 100644 --- a/src/libultra/io/pfsisplug.c +++ b/src/libultra/io/pfsisplug.c @@ -1,6 +1,9 @@ #include "PR/os_pfs.h" #include "PR/controller.h" -#include "global.h" +#include "PR/siint.h" +#include "alignment.h" + +OSPifRam __osPfsPifRam ALIGNED(16); void __osPfsRequestData(u8 poll); void __osPfsGetInitData(u8* pattern, OSContStatus* contData); @@ -50,40 +53,40 @@ s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern) { void __osPfsRequestData(u8 poll) { u8* bufPtr = (u8*)&__osPfsPifRam; - __OSContRequestHeader req; + __OSContRequesFormat req; s32 i; __osContLastPoll = poll; - __osPfsPifRam.status = 1; + __osPfsPifRam.status = CONT_CMD_EXE; - req.align = 0xFF; - req.txsize = 1; - req.rxsize = 3; + req.align = CONT_CMD_NOP; + req.txsize = CONT_CMD_REQUEST_STATUS_TX; + req.rxsize = CONT_CMD_REQUEST_STATUS_RX; req.poll = poll; - req.typeh = 0xFF; - req.typel = 0xFF; - req.status = 0xFF; - req.align1 = 0xFF; + req.typeh = CONT_CMD_NOP; + req.typel = CONT_CMD_NOP; + req.status = CONT_CMD_NOP; + req.align1 = CONT_CMD_NOP; for (i = 0; i < __osMaxControllers; i++) { - *((__OSContRequestHeader*)bufPtr) = req; - bufPtr += sizeof(req); + *((__OSContRequesFormat*)bufPtr) = req; + bufPtr += sizeof(__OSContRequesFormat); } *((u8*)bufPtr) = CONT_CMD_END; } void __osPfsGetInitData(u8* pattern, OSContStatus* contData) { u8* bufptr; - __OSContRequestHeader req; + __OSContRequesFormat req; s32 i; u8 bits = 0; bufptr = (u8*)&__osPfsPifRam; for (i = 0; i < __osMaxControllers; i++, bufptr += sizeof(req), contData++) { - req = *((__OSContRequestHeader*)bufptr); - contData->errno = ((req.rxsize & 0xC0) >> 4); + req = *((__OSContRequesFormat*)bufptr); + contData->errno = CHNL_ERR(req); if (contData->errno) { continue; diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c index 3ba971007a..2ba34d5205 100644 --- a/src/libultra/io/pimgr.c +++ b/src/libultra/io/pimgr.c @@ -1,16 +1,16 @@ #include "global.h" #include "stack.h" -OSPiHandle __Dom1SpeedParam ALIGNED8; -OSPiHandle __Dom2SpeedParam ALIGNED8; +OSPiHandle __Dom1SpeedParam ALIGNED(8); +OSPiHandle __Dom2SpeedParam ALIGNED(8); OSThread sPiMgrThread; STACK(sPiMgrStack, 0x1000); -OSMesgQueue piEventQueue ALIGNED8; +OSMesgQueue piEventQueue ALIGNED(8); OSMesg piEventBuf[1]; OSDevMgr __osPiDevMgr = { 0 }; OSPiHandle* __osPiTable = NULL; -OSPiHandle* __osCurrentHandle[2] ALIGNED8 = { &__Dom1SpeedParam, &__Dom2SpeedParam }; +OSPiHandle* __osCurrentHandle[2] ALIGNED(8) = { &__Dom1SpeedParam, &__Dom2SpeedParam }; void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) { u32 savedMask; diff --git a/src/libultra/os/viextend.c b/src/libultra/io/viextendvstart.c similarity index 100% rename from src/libultra/os/viextend.c rename to src/libultra/io/viextendvstart.c diff --git a/src/libultra/os/getmemsize.c b/src/libultra/os/getmemsize.c index e9a995f30e..ea27022559 100644 --- a/src/libultra/os/getmemsize.c +++ b/src/libultra/os/getmemsize.c @@ -1,28 +1,33 @@ -#include "global.h" +#include "ultra64.h" + +#define STEP 0x100000 +#define SIZE_4MB 0x400000 +#define SIZE_8MB 0x800000 u32 osGetMemSize(void) { - u32* spC; - u32 sp8; - u32 sp4; - u32 sp0; + vu32* ptr; + u32 size = SIZE_4MB; + u32 data0; + u32 data1; - sp8 = 0x400000; + while (size < SIZE_8MB) { + ptr = (vu32*)(K1BASE + size); - do { - spC = (u32*)(sp8 + 0xA0000000); - sp4 = *(u32*)(0xA0000000 + sp8); - sp0 = *(u32*)(0xA00FFFFC + sp8); - *(u32*)(0xA0000000 + sp8) = *(u32*)(0xA0000000 + sp8) ^ 0xFFFFFFFF; - spC[0x000FFFFC / 4] = spC[0x000FFFFC / 4] ^ 0xFFFFFFFF; + data0 = *ptr; + data1 = ptr[STEP / 4 - 1]; - if ((spC[0] != (sp4 ^ 0xFFFFFFFF)) || (spC[0x000FFFFC / 4] != (sp0 ^ 0xFFFFFFFF))) { - return sp8; + *ptr ^= ~0; + ptr[STEP / 4 - 1] ^= ~0; + + if ((*ptr != (data0 ^ ~0)) || (ptr[STEP / 4 - 1] != (data1 ^ ~0))) { + return size; } - *spC = sp4; - spC[0x000FFFFC / 4] = sp0; - sp8 = sp8 + 0x100000; - } while (sp8 < 0x800000); + *ptr = data0; + ptr[STEP / 4 - 1] = data1; - return sp8; + size += STEP; + } + + return size; } diff --git a/src/libultra/os/getthreadid.c b/src/libultra/os/getthreadid.c index 57c8e275f9..d773898803 100644 --- a/src/libultra/os/getthreadid.c +++ b/src/libultra/os/getthreadid.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" OSId osGetThreadId(OSThread* t) { if (t == NULL) { diff --git a/src/libultra/os/getthreadpri.c b/src/libultra/os/getthreadpri.c index ada853ffbf..7ea51bb648 100644 --- a/src/libultra/os/getthreadpri.c +++ b/src/libultra/os/getthreadpri.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" OSPri osGetThreadPri(OSThread* t) { if (t == NULL) { diff --git a/src/libultra/os/gettime.c b/src/libultra/os/gettime.c index a29688a0af..4d5b044b11 100644 --- a/src/libultra/os/gettime.c +++ b/src/libultra/os/gettime.c @@ -1,18 +1,18 @@ -#include "global.h" +#include "ultra64.h" OSTime osGetTime(void) { u32 CurrentCount; u32 elapseCount; - OSTime sp28; + OSTime currentCount; register u32 savedMask; savedMask = __osDisableInt(); CurrentCount = osGetCount(); elapseCount = CurrentCount - __osBaseCounter; - sp28 = __osCurrentTime; + currentCount = __osCurrentTime; __osRestoreInt(savedMask); - return elapseCount + sp28; + return elapseCount + currentCount; } diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 5c8bd66502..b14503c20f 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -1,4 +1,5 @@ -#include "global.h" +#include "ultra64.h" +#include "libc/stdbool.h" #define COLD_RESET 0 @@ -41,9 +42,9 @@ void __osInitialize_common(void) { __osSetFpcCsr(FPCSR_FS | FPCSR_EV); __osSetWatchLo(0x04900000); - while (__osSiRawReadIo(0x1FC007FC, &pifdata)) {} + while (__osSiRawReadIo(PIF_RAM_END - 3, &pifdata)) {} - while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {} + while (__osSiRawWriteIo(PIF_RAM_END - 3, pifdata | 8)) {} *(__osExceptionVector*)UT_VEC = __osExceptionPreamble; *(__osExceptionVector*)XUT_VEC = __osExceptionPreamble; diff --git a/src/libultra/os/jammesg.c b/src/libultra/os/jammesg.c index e91753e2c7..83df63ee96 100644 --- a/src/libultra/os/jammesg.c +++ b/src/libultra/os/jammesg.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag) { register u32 saveMask; @@ -6,8 +6,8 @@ s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag) { saveMask = __osDisableInt(); while (mq->validCount >= mq->msgCount) { - if (flag == 1) { - __osRunningThread->state = 8; + if (flag == OS_MESG_BLOCK) { + __osRunningThread->state = OS_STATE_WAITING; __osEnqueueAndYield(&mq->fullQueue); } else { __osRestoreInt(saveMask); diff --git a/src/libultra/os/recvmesg.c b/src/libultra/os/recvmesg.c index ec0b3f93b9..dd3aeaea39 100644 --- a/src/libultra/os/recvmesg.c +++ b/src/libultra/os/recvmesg.c @@ -1,12 +1,12 @@ -#include "global.h" +#include "ultra64.h" s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags) { register u32 saveMask; saveMask = __osDisableInt(); - while (mq->validCount == 0) { - if (flags == 0) { + while (MQ_IS_EMPTY(mq)) { + if (flags == OS_MESG_NOBLOCK) { __osRestoreInt(saveMask); return -1; } diff --git a/src/libultra/os/resetglobalintmask.c b/src/libultra/os/resetglobalintmask.c index 9dcbfcd3bb..0cf5113a5b 100644 --- a/src/libultra/os/resetglobalintmask.c +++ b/src/libultra/os/resetglobalintmask.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void __osResetGlobalIntMask(OSHWIntr mask) { register s32 prevInt = __osDisableInt(); diff --git a/src/libultra/os/sendmesg.c b/src/libultra/os/sendmesg.c index 6859c107b7..bf8166e401 100644 --- a/src/libultra/os/sendmesg.c +++ b/src/libultra/os/sendmesg.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags) { register u32 saveMask; @@ -6,9 +6,9 @@ s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags) { saveMask = __osDisableInt(); - while (mq->validCount >= mq->msgCount) { - if (flags == 1) { - __osRunningThread->state = 8; + while (MQ_IS_FULL(mq)) { + if (flags == OS_MESG_BLOCK) { + __osRunningThread->state = OS_STATE_WAITING; __osEnqueueAndYield(&mq->fullQueue); } else { __osRestoreInt(saveMask); diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index 1aa09f1af0..b238372530 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -1,9 +1,11 @@ -#include "global.h" +#include "ultra64.h" #include "PR/osint.h" +#include "libc/stdbool.h" +#include "alignment.h" -u32 __osPreNMI = 0; +u32 __osPreNMI = false; -__OSEventState __osEventStateTab[OS_NUM_EVENTS]; +__OSEventState __osEventStateTab[OS_NUM_EVENTS] ALIGNED(8); void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { register u32 saveMask; @@ -16,11 +18,11 @@ void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { es->messageQueue = mq; es->message = m; - if (e == 14) { - if ((__osShutdown != 0) && (__osPreNMI == 0)) { + if (e == OS_EVENT_PRENMI) { + if (__osShutdown && !__osPreNMI) { osSendMesg(mq, m, OS_MESG_NOBLOCK); } - __osPreNMI = 1; + __osPreNMI = true; } __osRestoreInt(saveMask); diff --git a/src/libultra/os/setglobalintmask.c b/src/libultra/os/setglobalintmask.c index 067343f6ee..42333ee2b5 100644 --- a/src/libultra/os/setglobalintmask.c +++ b/src/libultra/os/setglobalintmask.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void __osSetGlobalIntMask(OSHWIntr mask) { register s32 prevInt = __osDisableInt(); diff --git a/src/libultra/os/setthreadpri.c b/src/libultra/os/setthreadpri.c index 2da5bf2660..0a6f3e356d 100644 --- a/src/libultra/os/setthreadpri.c +++ b/src/libultra/os/setthreadpri.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void osSetThreadPri(OSThread* thread, OSPri p) { register u32 saveMask; @@ -12,13 +12,13 @@ void osSetThreadPri(OSThread* thread, OSPri p) { if (thread->priority != p) { thread->priority = p; - if (thread != __osRunningThread && thread->state != 1) { + if (thread != __osRunningThread && thread->state != OS_STATE_STOPPED) { __osDequeueThread(thread->queue, thread); __osEnqueueThread(thread->queue, thread); } if (__osRunningThread->priority < __osRunQueue->priority) { - __osRunningThread->state = 2; + __osRunningThread->state = OS_STATE_RUNNABLE; __osEnqueueAndYield(&__osRunQueue); } } diff --git a/src/libultra/os/settime.c b/src/libultra/os/settime.c index e6fc07bb47..fc4b77987c 100644 --- a/src/libultra/os/settime.c +++ b/src/libultra/os/settime.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void osSetTime(OSTime ticks) { __osCurrentTime = ticks; diff --git a/src/libultra/os/settimer.c b/src/libultra/os/settimer.c index 77f568a02e..5cf01c675c 100644 --- a/src/libultra/os/settimer.c +++ b/src/libultra/os/settimer.c @@ -1,17 +1,17 @@ -#include "global.h" +#include "ultra64.h" -int osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg) { - OSTime tim; - OSTimer* spC; - u32 sp14; - u32 sp10; +int osSetTimer(OSTimer* t, OSTime countdown, OSTime interval, OSMesgQueue* mq, OSMesg msg) { + OSTime time; + OSTimer* next; + u32 count; + u32 value; u32 saveMask; t->next = NULL; t->prev = NULL; t->interval = interval; - if (value != 0) { - t->value = value; + if (countdown != 0) { + t->value = countdown; } else { t->value = interval; } @@ -20,21 +20,19 @@ int osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMes saveMask = __osDisableInt(); - if (__osTimerList->next != __osTimerList) { - //! FAKE: - if (1) {} - - spC = __osTimerList->next; - sp14 = osGetCount(); - sp10 = sp14 - __osTimerCounter; - if (sp10 < spC->value) { - spC->value -= sp10; + if (__osTimerList->next == __osTimerList) { + } else { + next = __osTimerList->next; + count = osGetCount(); + value = count - __osTimerCounter; + if (value < next->value) { + next->value -= value; } else { - spC->value = 1; + next->value = 1; } } - tim = __osInsertTimer(t); + time = __osInsertTimer(t); __osSetTimerIntr(__osTimerList->next->value); __osRestoreInt(saveMask); diff --git a/src/libultra/os/startthread.c b/src/libultra/os/startthread.c index fb19b67e2e..5773b7e2a1 100644 --- a/src/libultra/os/startthread.c +++ b/src/libultra/os/startthread.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void osStartThread(OSThread* t) { register u32 saveMask; @@ -6,16 +6,17 @@ void osStartThread(OSThread* t) { saveMask = __osDisableInt(); switch (t->state) { - case 8: - t->state = 2; + case OS_STATE_WAITING: + t->state = OS_STATE_RUNNABLE; __osEnqueueThread(&__osRunQueue, t); break; - case 1: + + case OS_STATE_STOPPED: if ((t->queue == NULL) || (t->queue == &__osRunQueue)) { - t->state = 2; + t->state = OS_STATE_RUNNABLE; __osEnqueueThread(&__osRunQueue, t); } else { - t->state = 8; + t->state = OS_STATE_WAITING; __osEnqueueThread(t->queue, t); __osEnqueueThread(&__osRunQueue, __osPopThread(t->queue)); } @@ -26,7 +27,7 @@ void osStartThread(OSThread* t) { __osDispatchThread(); } else { if (__osRunningThread->priority < __osRunQueue->priority) { - __osRunningThread->state = 2; + __osRunningThread->state = OS_STATE_RUNNABLE; __osEnqueueAndYield(&__osRunQueue); } } diff --git a/src/libultra/os/stopthread.c b/src/libultra/os/stopthread.c index 0fb388074b..eaceb51f42 100644 --- a/src/libultra/os/stopthread.c +++ b/src/libultra/os/stopthread.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void osStopThread(OSThread* t) { register u32 saveMask; @@ -7,19 +7,20 @@ void osStopThread(OSThread* t) { saveMask = __osDisableInt(); if (t == NULL) { - state = 4; + state = OS_STATE_RUNNING; } else { state = t->state; } switch (state) { - case 4: - __osRunningThread->state = 1; + case OS_STATE_RUNNING: + __osRunningThread->state = OS_STATE_STOPPED; __osEnqueueAndYield(NULL); break; - case 2: - case 8: - t->state = 1; + + case OS_STATE_RUNNABLE: + case OS_STATE_WAITING: + t->state = OS_STATE_STOPPED; __osDequeueThread(t->queue, t); break; } diff --git a/src/libultra/os/stoptimer.c b/src/libultra/os/stoptimer.c index 70a483461a..936a19af8b 100644 --- a/src/libultra/os/stoptimer.c +++ b/src/libultra/os/stoptimer.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" s32 osStopTimer(OSTimer* t) { register u32 savedMask; diff --git a/src/libultra/os/thread.c b/src/libultra/os/thread.c index 6833a63c2e..cd0484b443 100644 --- a/src/libultra/os/thread.c +++ b/src/libultra/os/thread.c @@ -1,6 +1,6 @@ -#include "global.h" +#include "ultra64.h" -__OSThreadTail __osThreadTail = { NULL, -1}; +__OSThreadTail __osThreadTail = { NULL, OS_PRIORITY_THREADTAIL }; OSThread* __osRunQueue = (OSThread*)&__osThreadTail; OSThread* __osActiveQueue = (OSThread*)&__osThreadTail; OSThread* __osRunningThread = NULL; @@ -10,7 +10,7 @@ void __osDequeueThread(OSThread** queue, OSThread* t) { register OSThread* pred; register OSThread* succ; - pred = (OSThread*)queue; //! This seems questionable, but the function matches... + pred = (OSThread*)queue; succ = pred->next; while (succ != NULL) { if (succ == t) { diff --git a/src/libultra/os/threadsave.c b/src/libultra/os/threadsave.c index bcf79be8d6..2f7abe20d2 100644 --- a/src/libultra/os/threadsave.c +++ b/src/libultra/os/threadsave.c @@ -1,3 +1,3 @@ -#include "global.h" +#include "ultra64.h" OSThread __osThreadSave; diff --git a/src/libultra/os/timerintr.c b/src/libultra/os/timerintr.c index 69ac931e1a..ae30b5cf7b 100644 --- a/src/libultra/os/timerintr.c +++ b/src/libultra/os/timerintr.c @@ -1,12 +1,11 @@ -#include "global.h" +#include "ultra64.h" +#include "libc/stdbool.h" OSTimer __osBaseTimer; OSTime __osCurrentTime; u32 __osBaseCounter; u32 __osViIntrCount; u32 __osTimerCounter; -s32 D_8009E5C8[2]; // dummy bss padding required -OSPifRam __osPfsPifRam; OSTimer* __osTimerList = &__osBaseTimer; diff --git a/src/libultra/os/virtualtophysical.c b/src/libultra/os/virtualtophysical.c index 403ab5f4f3..61abb14e0b 100644 --- a/src/libultra/os/virtualtophysical.c +++ b/src/libultra/os/virtualtophysical.c @@ -1,7 +1,6 @@ #include "PR/ultratypes.h" #include "PR/osint.h" #include "libc/stdint.h" -#include "global.h" uintptr_t osVirtualToPhysical(void* virtualAddress) { if (((uintptr_t)virtualAddress >= 0x80000000) && ((uintptr_t)virtualAddress < 0xA0000000)) { diff --git a/src/libultra/os/yieldthread.c b/src/libultra/os/yieldthread.c index c49fd0f121..7fd4e2491c 100644 --- a/src/libultra/os/yieldthread.c +++ b/src/libultra/os/yieldthread.c @@ -1,9 +1,9 @@ -#include "global.h" +#include "ultra64.h" void osYieldThread(void) { register u32 saveMask = __osDisableInt(); - __osRunningThread->state = 2; + __osRunningThread->state = OS_STATE_RUNNABLE; __osEnqueueAndYield(&__osRunQueue); __osRestoreInt(saveMask); diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index c745316843..2b48102f00 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -70,7 +70,7 @@ 0x80087B00 : "setcause", 0x80087B10 : "sendmesg", 0x80087C60 : "pfsfreeblocks", - 0x80087E00 : "viextend", + 0x80087E00 : "viextendvstart", 0x80087E10 : "stopthread", 0x80087ED0 : "recvmesg", 0x80088010 : "setintmask", diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index bd346dedf6..4b4ce92368 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -241,7 +241,7 @@ asm/non_matchings/boot/printutils/Sleep_Sec.s,Sleep_Sec,0x80087AC0,0x10 asm/non_matchings/boot/setcause/__osSetCause.s,__osSetCause,0x80087B00,0x4 asm/non_matchings/boot/sendmesg/osSendMesg.s,osSendMesg,0x80087B10,0x54 asm/non_matchings/boot/pfsfreeblocks/osPfsFreeBlocks.s,osPfsFreeBlocks,0x80087C60,0x68 -asm/non_matchings/boot/viextend/osViExtendVStart.s,osViExtendVStart,0x80087E00,0x4 +asm/non_matchings/boot/viextendvstart/osViExtendVStart.s,osViExtendVStart,0x80087E00,0x4 asm/non_matchings/boot/stopthread/osStopThread.s,osStopThread,0x80087E10,0x30 asm/non_matchings/boot/recvmesg/osRecvMesg.s,osRecvMesg,0x80087ED0,0x50 asm/non_matchings/boot/setintmask/osSetIntMask.s,osSetIntMask,0x80088010,0x28