diff --git a/include/PR/sptask.h b/include/PR/sptask.h index 8f23c1b2..63333b40 100644 --- a/include/PR/sptask.h +++ b/include/PR/sptask.h @@ -15,6 +15,18 @@ #endif #define OS_YIELD_AUDIO_SIZE 0x400 +/* + * Task Flags field + */ +#define OS_TASK_YIELDED 0x0001 +#define OS_TASK_DP_WAIT 0x0002 +#define OS_TASK_LOADABLE 0x0004 +#define OS_TASK_SP_ONLY 0x0008 +#define OS_TASK_USR0 0x0010 +#define OS_TASK_USR1 0x0020 +#define OS_TASK_USR2 0x0040 +#define OS_TASK_USR3 0x0080 + /* Flags */ #define M_TASK_FLAG0 1 #define M_TASK_FLAG1 2 diff --git a/lib/src/os/osPfsDeleteFile.c b/lib/src/os/osPfsDeleteFile.c index 49e28cf3..016ce87d 100644 --- a/lib/src/os/osPfsDeleteFile.c +++ b/lib/src/os/osPfsDeleteFile.c @@ -36,7 +36,7 @@ s32 osPfsDeleteFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank)); ERRCK(__osPfsReleasePages(pfs, &inode, startpage, &sum, bank, &last_page, 1)); //TODO: magic constant ERRCK(__osPfsRWInode(pfs, &inode, OS_WRITE, bank)); - if (last_page.ipage == 1) + if (last_page.ipage == PFS_EOF) break; bank = last_page.inode_t.bank; startpage = last_page.inode_t.page; diff --git a/lib/src/os/osPfsFileState.c b/lib/src/os/osPfsFileState.c index 7bb32b4a..960eae70 100644 --- a/lib/src/os/osPfsFileState.c +++ b/lib/src/os/osPfsFileState.c @@ -46,10 +46,10 @@ s32 osPfsFileState(OSPfs *pfs, s32 file_no, OSPfsState *state) break; } } - if (next_page.ipage == 1) + if (next_page.ipage == PFS_EOF) break; } - if (next_page.ipage != 1) + if (next_page.ipage != PFS_EOF) return PFS_ERR_INCONSISTENT; state->file_size = pages << PFS_ONE_PAGE; diff --git a/lib/src/os/osSpTaskYielded.c b/lib/src/os/osSpTaskYielded.c new file mode 100644 index 00000000..d8f3105a --- /dev/null +++ b/lib/src/os/osSpTaskYielded.c @@ -0,0 +1,28 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D1DF0 */ + +#include "libultra_internal.h" +#include "viint.h" +#include "PR/sptask.h" + +__OSViContext vi[2] = {0}; +__OSViContext *__osViCurr = &vi[0]; +__OSViContext *__osViNext = &vi[1]; + +//TODO: This should be defined above osInitialize +s32 osViClock = VI_NTSC_CLOCK; + +OSYieldResult osSpTaskYielded(OSTask *tp) { + u32 status; + OSYieldResult result; + status = __osSpGetStatus(); + if (status & SP_STATUS_YIELDED) + result = OS_TASK_YIELDED; + else + result = 0; + if (status & SP_STATUS_YIELD) { + tp->t.flags |= result; + tp->t.flags &= ~(OS_TASK_DP_WAIT); + } + return result; +} diff --git a/lib/src/os/osViGetCurrentFramebuffer.c b/lib/src/os/osViGetCurrentFramebuffer.c new file mode 100644 index 00000000..9929a6d8 --- /dev/null +++ b/lib/src/os/osViGetCurrentFramebuffer.c @@ -0,0 +1,15 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D1E70 */ + +#include "libultra_internal.h" +#include "viint.h" + +void *osViGetCurrentFramebuffer(void){ + register u32 saveMask; + void *framep; + + saveMask = __osDisableInt(); + framep = __osViCurr->framep; + __osRestoreInt(saveMask); + return framep; +} diff --git a/lib/src/os/osViGetNextFramebuffer.c b/lib/src/os/osViGetNextFramebuffer.c new file mode 100644 index 00000000..a2419c6c --- /dev/null +++ b/lib/src/os/osViGetNextFramebuffer.c @@ -0,0 +1,15 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D1EB0 */ + +#include "libultra_internal.h" +#include "viint.h" + +void *osViGetNextFramebuffer(void){ + register u32 saveMask; + void *framep; + + saveMask = __osDisableInt(); + framep = __osViNext->framep; + __osRestoreInt(saveMask); + return framep; +} diff --git a/lib/src/os/siacs.c b/lib/src/os/siacs.c index 813c45c3..0f71a037 100644 --- a/lib/src/os/siacs.c +++ b/lib/src/os/siacs.c @@ -22,7 +22,7 @@ s32 viCounterMsg[6]; u16 retrace; //Used in viMgrMain, but it's supposed to be static in that function u16 D_8012D192; s32 D_8012D194[2]; -OSTask tmp_task; +OSTask tmp_task; //Supposed to be statically declared in sptask.c #define PI_Q_BUF_LEN 1 OSMesg piAccessBuf[PI_Q_BUF_LEN]; //Should be static, but this works for now s32 __osPiAccessQueue[6]; diff --git a/lib/src/os/unknown_0D29F0.c b/lib/src/os/sptask.c similarity index 60% rename from lib/src/os/unknown_0D29F0.c rename to lib/src/os/sptask.c index 5e7f4a42..61523176 100644 --- a/lib/src/os/unknown_0D29F0.c +++ b/lib/src/os/sptask.c @@ -1,52 +1,9 @@ /* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D1DF0 */ +/* RAM_POS: 0x800D1EF0 */ #include "libultra_internal.h" #include "viint.h" - -__OSViContext vi[2] = {0}; -__OSViContext *__osViCurr = &vi[0]; -__OSViContext *__osViNext = &vi[1]; - -//TODO: This should be defined above osInitialize -#define OS_TASK_YIELDED 0x0001 -#define OS_TASK_DP_WAIT 0x0002 -s32 osViClock = VI_NTSC_CLOCK; - -OSYieldResult osSpTaskYielded(OSTask *tp) { - u32 status; - OSYieldResult result; - status = __osSpGetStatus(); - if (status & SP_STATUS_YIELDED) - result = OS_TASK_YIELDED; - else - result = 0; - if (status & SP_STATUS_YIELD) { - tp->t.flags |= result; - tp->t.flags &= ~(OS_TASK_DP_WAIT); - } - return result; -} - -void *osViGetCurrentFramebuffer(void){ - register u32 saveMask; - void *framep; - - saveMask = __osDisableInt(); - framep = __osViCurr->framep; - __osRestoreInt(saveMask); - return framep; -} - -void *osViGetNextFramebuffer(void){ - register u32 saveMask; - void *framep; - - saveMask = __osDisableInt(); - framep = __osViNext->framep; - __osRestoreInt(saveMask); - return framep; -} +#include "PR/sptask.h" #define _osVirtualToPhysical(ptr) \ if (ptr != NULL) { \ @@ -54,7 +11,7 @@ void *osViGetNextFramebuffer(void){ } extern OSTask tmp_task; -OSTask *_VirtualToPhysicalTask(OSTask *intp) { +static OSTask *_VirtualToPhysicalTask(OSTask *intp) { OSTask *tp; tp = &tmp_task; bcopy(intp, tp, sizeof(OSTask));