Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
GDBase.h
Go to the documentation of this file.
1#ifndef _DOLPHIN_GD_BASE_H
2#define _DOLPHIN_GD_BASE_H
3
4#ifdef __REVOLUTION_SDK__
6#else
7#include <dolphin/types.h>
8#include <dolphin/gx/GXEnum.h>
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15typedef void (*GDOverflowCb)(void);
16
23
24extern GDLObj* __GDCurrentDL;
25
26void GDInitGDLObj(GDLObj* dl, void* start, u32 length);
27void GDFlushCurrToMem(void);
28void GDPadCurr32(void);
29void GDOverflowed(void);
32
33inline static void GDOverflowCheck(u32 size) {
36 }
37}
38
39inline static void __GDWrite(u8 data) {
40 *__GDCurrentDL->ptr++ = data;
41}
42
43inline static void GDWrite_u8(u8 data) {
44 GDOverflowCheck(sizeof(u8));
45 __GDWrite(data);
46}
47
48inline static void GDWrite_u16(u16 data) {
49 GDOverflowCheck(sizeof(u16));
50 __GDWrite((u8)((data >> 8)));
51 __GDWrite((u8)((data >> 0) & 0xFF));
52}
53
54inline static void GDWrite_u24(u32 data) {
56 __GDWrite((u8)((data >> 16) & 0xFF));
57 __GDWrite((u8)((data >> 8) & 0xFF));
58 __GDWrite((u8)((data >> 0) & 0xFF));
59}
60
61inline static void GDWrite_u32(u32 data) {
62 GDOverflowCheck(sizeof(u32));
63 __GDWrite((u8)((data >> 24) & 0xFF));
64 __GDWrite((u8)((data >> 16) & 0xFF));
65 __GDWrite((u8)((data >> 8) & 0xFF));
66 __GDWrite((u8)((data >> 0) & 0xFF));
67}
68
69inline static void GDWrite_f32(f32 data) {
70 union {
71 f32 f;
72 u32 u;
73 } fid;
74 fid.f = data;
75 GDWrite_u32(fid.u);
76}
77
78inline static void GDWriteXFCmdHdr(u16 addr, u8 len) {
79 GDWrite_u8(GX_LOAD_XF_REG);
80 GDWrite_u16(len - 1);
81 GDWrite_u16(addr);
82}
83
84inline static void GDWriteXFCmd(u16 addr, u32 val) {
85 GDWrite_u8(GX_LOAD_XF_REG);
86 GDWrite_u16(0);
87 GDWrite_u16(addr);
88 GDWrite_u32(val);
89}
90
91inline static void GDWriteXFIndxDCmd(u16 addr, u8 len, u16 index) {
92 GDWrite_u8(GX_LOAD_INDX_D);
94 GDWrite_u16((len - 1) << 12 | addr);
95}
96
97inline static void GDWriteXFIndxACmd(u16 addr, u8 len, u16 index) {
98 GDWrite_u8(GX_LOAD_INDX_A);
100 GDWrite_u16(((len - 1) << 12) | addr);
101}
102
103inline static void GDWriteXFIndxBCmd(u16 addr, u8 len, u16 index) {
104 GDWrite_u8(GX_LOAD_INDX_B);
106 GDWrite_u16(((len - 1) << 12) | addr);
107}
108
109inline static void GDWriteXFIndxCCmd(u16 addr, u8 len, u16 index) {
110 GDWrite_u8(GX_LOAD_INDX_C);
112 GDWrite_u16(((len - 1) << 12) | addr);
113}
114
115inline static void GDWriteCPCmd(u8 addr, u32 val) {
116 GDWrite_u8(GX_LOAD_CP_REG);
117 GDWrite_u8(addr);
118 GDWrite_u32(val);
119}
120
121inline static void GDWriteBPCmd(u32 regval) {
122 GDWrite_u8(GX_LOAD_BP_REG);
123 GDWrite_u32(regval);
124}
125
126inline static void GDSetCurrent(GDLObj* dl) {
127 __GDCurrentDL = dl;
128}
129
130static inline u32 GDGetCurrOffset(void) {
132}
133
134static inline void GDSetCurrOffset(u32 offset) {
136}
137
138static inline void* GDGetCurrPointer(void) {
139 return (void*)__GDCurrentDL->ptr;
140}
141
142static inline u8* GDGetCurrPointer2(void) {
143 return __GDCurrentDL->ptr;
144}
145
146static inline u32 GDGetGDLObjOffset(const GDLObj* dl) {
147 return (u32)(dl->ptr - dl->start);
148}
149
150#ifdef __cplusplus
151}
152#endif
153
154#endif
155#endif
static u8 index[20][3]
Definition GXDraw.c:434
static void GDSetCurrent(GDLObj *dl)
Definition GDBase.h:126
void(* GDOverflowCb)(void)
Definition GDBase.h:15
static void GDWriteXFCmdHdr(u16 addr, u8 len)
Definition GDBase.h:78
static void GDWrite_u16(u16 data)
Definition GDBase.h:48
static u32 GDGetCurrOffset(void)
Definition GDBase.h:130
static void GDWriteCPCmd(u8 addr, u32 val)
Definition GDBase.h:115
GDLObj * __GDCurrentDL
Definition GDBase.c:4
void GDFlushCurrToMem(void)
Definition GDBase.c:16
static void __GDWrite(u8 data)
Definition GDBase.h:39
static void GDWriteXFIndxDCmd(u16 addr, u8 len, u16 index)
Definition GDBase.h:91
static void GDWrite_u24(u32 data)
Definition GDBase.h:54
static void GDWriteXFIndxCCmd(u16 addr, u8 len, u16 index)
Definition GDBase.h:109
static void GDWriteBPCmd(u32 regval)
Definition GDBase.h:121
static void GDSetCurrOffset(u32 offset)
Definition GDBase.h:134
static void GDWrite_u8(u8 data)
Definition GDBase.h:43
struct _GDLObj GDLObj
void GDSetOverflowCallback(GDOverflowCb callback)
Definition GDBase.c:39
static void GDOverflowCheck(u32 size)
Definition GDBase.h:33
static void GDWriteXFIndxBCmd(u16 addr, u8 len, u16 index)
Definition GDBase.h:103
static u32 GDGetGDLObjOffset(const GDLObj *dl)
Definition GDBase.h:146
void GDOverflowed(void)
Definition GDBase.c:31
GDOverflowCb GDGetOverflowCallback(void)
Definition GDBase.c:43
static void GDWriteXFCmd(u16 addr, u32 val)
Definition GDBase.h:84
static u8 * GDGetCurrPointer2(void)
Definition GDBase.h:142
void GDPadCurr32(void)
Definition GDBase.c:20
static void GDWrite_f32(f32 data)
Definition GDBase.h:69
static void * GDGetCurrPointer(void)
Definition GDBase.h:138
void GDInitGDLObj(GDLObj *dl, void *start, u32 length)
Definition GDBase.c:7
static void GDWrite_u32(u32 data)
Definition GDBase.h:61
unsigned int size
Definition __os.h:106
unsigned long u32
Definition types.h:12
float f32
Definition types.h:25
unsigned short int u16
Definition types.h:10
unsigned char u8
Definition types.h:8
double u
Definition e_pow.c:163
static void GDWrite_u16(u16 data)
Definition GDBase.h:45
static void __GDWrite(u8 data)
Definition GDBase.h:36
static void GDWriteXFIndxACmd(u16 addr, u8 len, u16 index)
Definition GDBase.h:94
static void GDWrite_u8(u8 data)
Definition GDBase.h:40
static void GDOverflowCheck(u32 size)
Definition GDBase.h:30
static void GDWrite_u32(u32 data)
Definition GDBase.h:58
static void callback(u32 param_0)
Definition OSExec.c:308
@ start
Definition strtoul.c:8
Definition GDBase.h:17
u8 * top
Definition GDBase.h:21
u8 * ptr
Definition GDBase.h:20
u32 length
Definition GDBase.h:19
u8 * start
Definition GDBase.h:18