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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
#include "global.h"
#include "main.h"
#include "gx.h"
extern u32 gUnk02106814;
extern u32 gUnk021D3410;
extern u32 gUnk021D3400;
extern u32 gUnk021D3414;
extern u32 gUnk021D3418;
//probably structs of length 0x6
extern u16 gUnk02103B4C[];
extern u16 gUnk02103B4E[];
extern u16 gUnk02103B50[];
extern u32 gUnk021D3408;
extern u32 gUnk021D3404;
extern u16 gUnk02103B3C[];
extern s32 gUnk021D33FC;
extern u32 gUnk021D340C;
static inline void _GX_Load_16(void *src, void *dst, u32 size){
if (gUnk02106814 != -1 && size > 0x1C)
{
MI_DmaCopy16(gUnk02106814, src, dst, size);
}
else
{
MIi_CpuCopy16(src, dst, size);
}
}
static inline void _GX_Load_32(void *src, void *dst, u32 size){
if (gUnk02106814 != -1 && size > 0x30)
{
MI_DmaCopy32(gUnk02106814, src, dst, size);
}
else
{
MIi_CpuCopy32(src, dst, size);
}
}
static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){
if (gUnk02106814 != -1)
{
MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr);
}
else
{
MIi_CpuCopy32(src, dst, size);
}
}
void GX_BeginLoadTex(){
u32 temp = GX_ResetBankForTex();
gUnk021D3410 = temp;
gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC;
gUnk021D3414 = gUnk02103B4E[temp * 3] << 0xC;
gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC;
}
void GX_LoadTex(void *src, u32 offset, u32 size){
void *temp;
if (!gUnk021D3414)
{
temp = (void *)(gUnk021D3400 + offset);
}
else
{
if ((offset + size) < gUnk021D3418)
{
temp = (void *)(gUnk021D3400 + offset);
}
else if (offset >= gUnk021D3418)
{
temp = (void *)(gUnk021D3414 + offset - gUnk021D3418);
}
else
{
void *temp2 = (void *)gUnk021D3414;
u32 temp1 = gUnk021D3418 - offset;
temp = (void *)(gUnk021D3400 + offset);
_GX_Load_32(src, temp, temp1);
_GX_Load_32_Async((void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL);
return;
}
}
_GX_Load_32_Async(src, temp, size, NULL, NULL);
}
void GX_EndLoadTex(){
if (gUnk02106814 != -1)
MI_WaitDma(gUnk02106814);
GX_SetBankForTex(gUnk021D3410);
gUnk021D3418 = 0x0;
gUnk021D3414 = 0x0;
gUnk021D3400 = 0x0;
gUnk021D3410 = 0x0;
}
void GX_BeginLoadTexPltt(){
s32 temp = GX_ResetBankForTexPltt();
gUnk021D3408 = temp;
gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC;
}
void GX_LoadTexPltt(void *src, u32 offset, u32 size){
_GX_Load_32_Async(src, (void *)(gUnk021D3404 + offset), size, NULL, NULL);
}
void GX_EndLoadTexPltt(){
if (gUnk02106814 != -1)
MI_WaitDma(gUnk02106814);
GX_SetBankForTexPltt(gUnk021D3408);
gUnk021D3408 = 0x0;
gUnk021D3404 = 0x0;
}
void GX_BeginLoadClearImage(){
s32 temp = GX_ResetBankForClearImage();
gUnk021D33FC = temp;
switch (temp)
{
case 2:
case 3:
gUnk021D340C = 0x6800000;
return;
case 8:
case 12:
gUnk021D340C = 0x6840000;
return;
case 1:
gUnk021D340C = 0x67E0000;
return;
case 4:
gUnk021D340C = 0x6820000;
}
}
void GX_LoadClearImageColor(void *src, u32 size){
_GX_Load_32_Async(src, (void *)(gUnk021D340C), size, NULL, NULL);
}
void GX_LoadClearImageDepth(void *src, u32 size){
_GX_Load_32_Async(src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL);
}
void GX_EndLoadClearImage(){
if (gUnk02106814 != -1)
MI_WaitDma(gUnk02106814);
GX_SetBankForClearImage(gUnk021D33FC);
gUnk021D33FC = 0x0;
gUnk021D340C = 0x0;
}
|