Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/include/PR/os_thread.h
7858 views
1
#ifndef _ULTRA64_THREAD_H_
2
#define _ULTRA64_THREAD_H_
3
#include "ultratypes.h"
4
/* Recommended priorities for system threads */
5
#define OS_PRIORITY_MAX 255
6
#define OS_PRIORITY_VIMGR 254
7
#define OS_PRIORITY_RMON 250
8
#define OS_PRIORITY_RMONSPIN 200
9
#define OS_PRIORITY_PIMGR 150
10
#define OS_PRIORITY_SIMGR 140
11
#define OS_PRIORITY_APPMAX 127
12
#define OS_PRIORITY_IDLE 0
13
14
#define OS_STATE_STOPPED 1
15
#define OS_STATE_RUNNABLE 2
16
#define OS_STATE_RUNNING 4
17
#define OS_STATE_WAITING 8
18
19
/* Types */
20
21
typedef s32 OSPri;
22
typedef s32 OSId;
23
24
typedef union
25
{
26
struct {f32 f_odd; f32 f_even;} f;
27
} __OSfp;
28
29
typedef struct
30
{
31
/* registers */
32
/*0x20*/ u64 at, v0, v1, a0, a1, a2, a3;
33
/*0x58*/ u64 t0, t1, t2, t3, t4, t5, t6, t7;
34
/*0x98*/ u64 s0, s1, s2, s3, s4, s5, s6, s7;
35
/*0xD8*/ u64 t8, t9, gp, sp, s8, ra;
36
/*0x108*/ u64 lo, hi;
37
/*0x118*/ u32 sr, pc, cause, badvaddr, rcp;
38
/*0x12C*/ u32 fpcsr;
39
__OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
40
__OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
41
} __OSThreadContext;
42
43
typedef struct
44
{
45
u32 flag;
46
u32 count;
47
u64 time;
48
} __OSThreadprofile_s;
49
50
typedef struct OSThread_s
51
{
52
/*0x00*/ struct OSThread_s *next;
53
/*0x04*/ OSPri priority;
54
/*0x08*/ struct OSThread_s **queue;
55
/*0x0C*/ struct OSThread_s *tlnext;
56
/*0x10*/ u16 state;
57
/*0x12*/ u16 flags;
58
/*0x14*/ OSId id;
59
/*0x18*/ int fp;
60
/*0x1C*/ __OSThreadprofile_s *thprof;
61
/*0x20*/ __OSThreadContext context;
62
} OSThread;
63
64
65
/* Functions */
66
67
void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *),
68
void *arg, void *sp, OSPri pri);
69
OSId osGetThreadId(OSThread *thread);
70
OSPri osGetThreadPri(OSThread *thread);
71
void osSetThreadPri(OSThread *thread, OSPri pri);
72
void osStartThread(OSThread *thread);
73
void osStopThread(OSThread *thread);
74
75
#endif
76
77