blob: ea0442284e9ae0bbb3cfe90867efe33bb8105f10 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#ifndef IRQMGR_H
#define IRQMGR_H
#include "ultra64.h"
#define IRQ_RETRACE_MSG 666
#define IRQ_PRENMI_MSG 669
#define IRQ_PRENMI450_MSG 671
#define IRQ_PRENMI480_MSG 672
#define IRQ_PRENMI500_MSG 673
typedef struct {
/* 0x00 */ s16 type;
/* 0x02 */ s8 data[30];
} IrqmgrMsg; //size = 0x20
typedef struct IrqmgrClient {
/* 0x0 */ struct IrqmgrClient* next;
/* 0x4 */ OSMesgQueue* msgQueue;
} IrqmgrClient; // size = 0x8
typedef struct {
/* 0x000 */ IrqmgrMsg msgRetrace;
/* 0x020 */ IrqmgrMsg msgPreNMI;
/* 0x040 */ IrqmgrMsg msgDelayPreNMI;
/* 0x060 */ OSMesgQueue _msgQueue;
/* 0x078 */ OSMesg msgBuf[8];
/* 0x098 */ OSThread thread;
/* 0x248 */ IrqmgrClient* clients;
/* 0x24C */ u8 prenmi;
/* 0x250 */ OSTime prenmiTime;
/* 0x258 */ OSTimer timer;
/* 0x278 */ OSTime retraceTime;
} Irqmgr; // size = 0x280
void irqmgr_AddClient(IrqmgrClient* client, OSMesgQueue* msgQueue);
void irqmgr_RemoveClient(IrqmgrClient* client);
void irqmgr_SendMesgToClients(IrqmgrMsg* msg);
void irqmgr_JamMesgForClient(IrqmgrMsg* msg);
void irqmgr_HandlePreNMI(void);
void IrqMgr_CheckStacks(void);
void irqmgr_HandlePreNMI450(void);
void irqmgr_HandlePreNMI480(void);
void irqmgr_HandlePreNMI500(void);
void IrqMgr_HandleRetrace(void);
void irqmgr_Main(void* arg);
void CreateIRQManager(void* stack, OSPri priority, u8 retracecount);
extern vs32 ResetStatus;
extern volatile OSTime ResetTime;
extern volatile OSTime RetraceTime;
extern u32 RetraceCount;
#endif
|