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