summaryrefslogtreecommitdiff
path: root/src/code_800558C.c
blob: 773e773c8e7b316678290d613ce4d427e68c3471 (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
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
#include "global.h"
#include "code_800558C.h"

extern u32 gUnknown_203B47C;

extern u32 gUnknown_2026E3C;
extern u32 gUnknown_2026E58;
extern u32 gUnknown_2026E54;
extern u32 gUnknown_2026E50;
extern u16 gUnknown_2026E4E;
extern u8 gUnknown_2026E38;

extern void sub_800CC44(u32 r0, u32 r1);

// Unused
#ifndef NONMATCHING
NAKED
#endif
void sub_80060A8(void)
{
#ifdef NONMATCHING
    // TODO ordering of statements is wrong but regs are good so f*** it.
    // My mv/ldr stuff for temp is out of order
    u32 temp;
    gUnknown_2026E3C = gUnknown_2026E58;

    temp = 0;
    if (gUnknown_2026E54  == 0)
    {
        temp = 1;
    }
    gUnknown_2026E54 = temp;

    temp = 0;

    if (gUnknown_2026E50  == 0)
    {
        temp = 1;
    }
    gUnknown_2026E50 = temp;
    
    gUnknown_2026E38 = 0;
#else
	asm_unified("\tpush {lr}\n"
	"\tldr r1, _080060D8\n"
	"\tldr r0, _080060DC\n"
	"\tldr r0, [r0]\n"
	"\tstr r0, [r1]\n"
	"\tldr r2, _080060E0\n"
	"\tmovs r1, 0\n"
	"\tldr r0, [r2]\n"
	"\tcmp r0, 0\n"
	"\tbne _080060BE\n"
	"\tmovs r1, 0x1\n"
"_080060BE:\n"
	"\tstr r1, [r2]\n"
	"\tldr r2, _080060E4\n"
	"\tmovs r1, 0\n"
	"\tldr r0, [r2]\n"
	"\tcmp r0, 0\n"
	"\tbne _080060CC\n"
	"\tmovs r1, 0x1\n"
"_080060CC:\n"
	"\tstr r1, [r2]\n"
	"\tldr r1, _080060E8\n"
	"\tmovs r0, 0\n"
	"\tstrb r0, [r1]\n"
	"\tpop {r0}\n"
	"\tbx r0\n"
	"\t.align 2, 0\n"
"_080060D8: .4byte gUnknown_2026E3C\n"
"_080060DC: .4byte gUnknown_2026E58\n"
"_080060E0: .4byte gUnknown_2026E54\n"
"_080060E4: .4byte gUnknown_2026E50\n"
"_080060E8: .4byte gUnknown_2026E38");

#endif
}

#ifndef NONMATCHING
NAKED
#endif
void sub_80060EC(void)
{
#ifdef NONMATCHING
    // TODO ordering of statements is wrong but regs are good so f*** it.
    u32 temp;
    gUnknown_2026E3C = gUnknown_2026E58;
    temp = 0;

    if (gUnknown_2026E54  == 0)
    {
        temp = 1;
    }
    gUnknown_2026E54 = temp;

    temp = 0;

    if (gUnknown_2026E50  == 0)
    {
        temp = 1;
    }
    gUnknown_2026E50 = temp;
    
    sub_800CC44((gUnknown_2026E4E & (0xF8 << 5)) >> 8, gUnknown_2026E4E & 0x1F);
    gUnknown_2026E38 = 1;
#else
            asm_unified("\tpush {lr}\n"
            "\tldr r1, _08006130\n"
            "\tldr r0, _08006134\n"
            "\tldr r0, [r0]\n"
            "\tstr r0, [r1]\n"
            "\tldr r2, _08006138\n"
            "\tmovs r1, 0\n"
            "\tldr r0, [r2]\n"
            "\tcmp r0, 0\n"
            "\tbne _08006102\n"
            "\tmovs r1, 0x1\n"
    "_08006102:\n"
            "\tstr r1, [r2]\n"
            "\tldr r2, _0800613C\n"
            "\tmovs r1, 0\n"
            "\tldr r0, [r2]\n"
            "\tcmp r0, 0\n"
            "\tbne _08006110\n"
            "\tmovs r1, 0x1\n"
    "_08006110:\n"
            "\tstr r1, [r2]\n"
            "\tldr r0, _08006140\n"
            "\tldrh r2, [r0]\n"
            "\tmovs r0, 0xF8\n"
            "\tlsls r0, 5\n"
            "\tands r0, r2\n"
            "\tlsrs r0, 8\n"
            "\tmovs r1, 0x1F\n"
            "\tands r1, r2\n"
            "\tbl sub_800CC44\n"
            "\tldr r1, _08006144\n"
            "\tmovs r0, 0x1\n"
            "\tstrb r0, [r1]\n"
            "\tpop {r0}\n"
            "\tbx r0\n"
            "\t.align 2, 0\n"
    "_08006130: .4byte gUnknown_2026E3C\n"
    "_08006134: .4byte gUnknown_2026E58\n"
    "_08006138: .4byte gUnknown_2026E54\n"
    "_0800613C: .4byte gUnknown_2026E50\n"
    "_08006140: .4byte gUnknown_2026E4E\n"
    "_08006144: .4byte gUnknown_2026E38");
#endif
}