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
|
#include "global.h"
#include "main.h"
void sub_1068C(int a, int b, int c, int d, u16 e)
{
u16 i;
u16 j;
for (i = 0; i < d; i++)
{
for (j = 0; j < c; j++)
{
u16 index = b * 32 + a + i * 32 + j;
gUnknown_03005C00[index] = (gUnknown_03005C00[index] & 0xFFF) | (e << 12);
}
}
}
// This requires volatile parameters to match. There is no reason, *ever*, to do this.
void sub_10708(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY)
{
int i;
for (i = 0; i < numTilesY; i++)
{
DmaCopy16(3, (u8 *)src + 0x400 * i, (u8 *)dest + 0x400 * i, numTilesX * 32);
}
}
void sub_10750(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY)
{
int i;
for (i = 0; i < numTilesY; i++)
{
DmaCopy16(3, (u8 *)src + 0x40 * i, (u8 *)dest + 0x40 * i, numTilesX * 2);
}
}
void sub_10798(void *a, void *b, void (*func)(void))
{
u16 i;
DmaCopy16(3, a, gUnknown_0201A920, 0x200);
DmaCopy16(3, b, gUnknown_0201A920 + 0x200, 0x200);
DmaFill16(3, 0x7FFF, gUnknown_0201A920 - 0x200, 0x400);
DmaCopy16(3, gUnknown_0201A920 - 0x200, gUnknown_0201A920 + 0x200, 0x400);
DmaCopy16(3, gUnknown_0201A920 + 0x200, (void *)PLTT, 0x400);
sub_1050C();
gMain.unk16 = REG_DISPCNT;
for (i = 0; i <= 32; i += 16)
{
if (func != NULL)
func();
sub_1001C(i);
MainLoopIter();
if (i == 32)
{
DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
}
else
{
DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
}
}
}
void sub_10860(void (*func)(void))
{
u16 i;
DmaCopy16(3, (void *)PLTT, gUnknown_0201A520, 0x400);
DmaFill16(3, 0x7FFF, gUnknown_0201A520 + 0x200, 0x400);
DmaCopy16(3, gUnknown_0201A520, gUnknown_0201A520 + 0x400, 0x400);
for (i = 0; i <= 32; i += 16)
{
if (func != NULL)
func();
sub_1001C(i);
MainLoopIter();
if (i == 32)
{
DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
}
else
{
DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
}
}
MainLoopIter();
}
#ifdef NONMATCHING
// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}'
void ClearSomeArray(void)
{
int i;
for (i = 0; i < 4; i++)
gUnknown_0201A500[i] = 0;
}
#else
NAKED
void ClearSomeArray(void)
{
asm_unified("\n\
ldr r1, _08010920 @ =gUnknown_0201A500\n\
movs r2, #0\n\
adds r0, r1, #0\n\
adds r0, #0xc\n\
_08010914:\n\
str r2, [r0]\n\
subs r0, #4\n\
cmp r0, r1\n\
bge _08010914\n\
bx lr\n\
.align 2, 0\n\
_08010920: .4byte gUnknown_0201A500");
}
#endif
|