mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-11 03:55:07 -05:00
35 lines
1.0 KiB
C
35 lines
1.0 KiB
C
|
#include "global.h"
|
||
|
|
||
|
OSThread* __osThreadTail[2] = { NULL, (OSThread*)-1 };
|
||
|
OSThread* __osRunQueue = (OSThread*)__osThreadTail;
|
||
|
OSThread* __osActiveQueue = (OSThread*)__osThreadTail;
|
||
|
OSThread* __osRunningThread = NULL;
|
||
|
OSThread* __osFaultedThread = NULL;
|
||
|
|
||
|
void osCreateThread(OSThread* thread, OSId id, void (*entry)(void*), void* arg, void* sp, OSPri pri) {
|
||
|
register u32 prevInt;
|
||
|
OSIntMask mask;
|
||
|
|
||
|
thread->id = id;
|
||
|
thread->priority = pri;
|
||
|
thread->next = NULL;
|
||
|
thread->queue = NULL;
|
||
|
thread->context.pc = (u32)entry;
|
||
|
thread->context.a0 = arg;
|
||
|
thread->context.sp = (u64)(s32)sp - 16;
|
||
|
thread->context.ra = __osCleanupThread;
|
||
|
|
||
|
mask = OS_IM_ALL;
|
||
|
thread->context.sr = (mask & OS_IM_CPU) | 2;
|
||
|
thread->context.rcp = (mask & RCP_IMASK) >> 16;
|
||
|
thread->context.fpcsr = FPCSR_FS | FPCSR_EV;
|
||
|
thread->fp = 0;
|
||
|
thread->state = OS_STATE_STOPPED;
|
||
|
thread->flags = 0;
|
||
|
|
||
|
prevInt = __osDisableInt();
|
||
|
thread->tlnext = __osActiveQueue;
|
||
|
__osActiveQueue = thread;
|
||
|
__osRestoreInt(prevInt);
|
||
|
}
|