summaryrefslogtreecommitdiff
path: root/src/librfu_rfu.c
blob: cf3fe12ad49f0ec9226f5698d6ecf2b11db4ad35 (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
#include "global.h"
#include "main.h"

#include "librfu.h"

struct RfuUnk1
{
    u8 unk_0[0x14];
    u32 unk_14;
    u32 unk_18;
    struct RfuIntrStruct unk_1c;
};

struct RfuUnk2
{
    u8 unk_0[0x68];
    u32 unk_68;
    u32 unk_6c;
    u8 unk_70[0x70];
};

struct RfuUnk3
{
    u32 unk_0;
    u32 unk_4;
    u8 unk_8[0xD4];
    u32 unk_dc;
};

extern u32 *gUnknown_03007890;
extern u32 *gUnknown_03007894;
extern struct RfuUnk3* gUnknown_03007898;
extern struct RfuUnk2* gUnknown_03007880[4];
extern struct RfuUnk1* gUnknown_03007870[4];
extern void* sub_82E53F4;
extern void rfu_STC_clearAPIVariables(void);

// Nonmatching, only register differences
/*u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam)
{
    u16 i;
    u16 *v13;
    u16 *v12;
    u16 num;

    if (((u32)unk0 & 0xF000000) == 0x2000000 && copyInterruptToRam)
    {
        return 2;
    }
    
    if ((u32)unk0 & 3)
        return 2;
    
    // Nintendo pls, just use a ternary for once
    if (copyInterruptToRam)
    {
        // An assert/debug print may have existed before, ie
        // printf("%s %u < %u", "somefile.c:12345", unk1, num)
        // to push this into r3?
        num = 0xe64;
        if (unk1 < num)
            return 1;
    }

    if (copyInterruptToRam == FALSE)
    {
        num = 0x504; // same as above, this should be r3 not r0
        if (unk1 < num)
            return 1;
    }
    gUnknown_03007890 = unk0;
    gUnknown_03007894 = unk0 + (0xB4 / sizeof(u32));
    gUnknown_03007898 = (struct RfuUnk3*)(unk0 + (0xDC / sizeof(u32)));
    gUnknown_03007880[0] = (struct RfuUnk2*)(unk0 + (0x1BC / sizeof(u32)));
    gUnknown_03007870[0] = (struct RfuUnk1*)(unk0 + (0x37C / sizeof(u32)));

    for (i = 1; i < 4; i++, num)
    {
        gUnknown_03007880[i] = (struct RfuUnk2*)&gUnknown_03007880[i-1]->unk_70;
        gUnknown_03007870[i] = (struct RfuUnk1*)&gUnknown_03007870[i-1]->unk_1c;
    }
    
    gUnknown_03007898->unk_dc = (u32)&gUnknown_03007870[3]->unk_1c;
    STWI_init_all(&gUnknown_03007870[3]->unk_1c, interrupt, copyInterruptToRam);
    rfu_STC_clearAPIVariables();

    for (i = 0; i < 4; i++)
    {
        gUnknown_03007880[i]->unk_68 = 0;
        gUnknown_03007880[i]->unk_6c = 0;
        gUnknown_03007870[i]->unk_14 = 0;
        gUnknown_03007870[i]->unk_18 = 0;
    }

    // Not matching, register differences
    v12 = (u16*)((u32)&sub_82E53F4 & ~1);
    v13 = (u16*)gUnknown_03007898->unk_8;
        
    for (i = 47; i != 0xFFFF; i--)
    {
        *v13 = *v12;
        ++v12;
        ++v13;
    }
        
    gUnknown_03007898->unk_4 = (u32)(&gUnknown_03007898->unk_8[1]);
        
    return 0;
}*/