diff options
Diffstat (limited to 'src/code_080B1520.c')
| -rw-r--r-- | src/code_080B1520.c | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/src/code_080B1520.c b/src/code_080B1520.c index 989efe66..c86d10bc 100644 --- a/src/code_080B1520.c +++ b/src/code_080B1520.c @@ -1,8 +1,17 @@ #include "global.h" -extern u16 (*gUnk_02036A50)[]; -extern u16 gUnk_08DE7D40[]; -extern u16 gUnk_08DE7D4C[]; +typedef struct struct_08DE7D40 { + u16 unk_00; + u16 unk_02; + u16 unk_04; + u16 unk_06; + u8 unk_08; + u8 filler[3]; +} struct_08DE7D40; + +extern struct_08DE7D40* gUnk_02036A50; +extern struct_08DE7D40 gUnk_08DE7D40; +extern struct_08DE7D40 gUnk_08DE7D4C; u32 sub_080B1520(u16 unk_1) { u32 ret; @@ -21,22 +30,20 @@ u32 sub_080B1520(u16 unk_1) { return ret; } -NONMATCH("asm/non_matching/code_080B1520/sub_080B1568.inc", void sub_080B1568(u32 unk_1, u32 unk_2, u32 unk_3)) { +NONMATCH("asm/non_matching/code_080B1520/sub_080B1568.inc", void sub_080B1568(u16* src, u16* dest, u32 cnt)) { u32 temp; u16 u1; u16 IME_save; - u16* ptr; - u1 = unk_3; + u1 = cnt; IME_save = REG_IME; REG_IME = 0; temp = REG_WAITCNT & 0xf8ff; - ptr = *gUnk_02036A50; - temp |= ptr[3]; + temp |= gUnk_02036A50->unk_06; REG_WAITCNT = temp; - REG_DMA3SAD = unk_1; - REG_DMA3DAD = unk_2; + REG_DMA3SAD = (u32)src; + REG_DMA3DAD = (u32)dest; REG_DMA3CNT = u1 | 0x80000000; if ((REG_DMA3CNT_H & 0x8000) != 0) { while ((REG_DMA3CNT_H & 0x8000) != 0) {} @@ -44,3 +51,38 @@ NONMATCH("asm/non_matching/code_080B1520/sub_080B1568.inc", void sub_080B1568(u3 REG_IME = IME_save; } END_NONMATCH + +u32 sub_080B15E8(u16 unk_1, u16* unk_2) { + u16 stack[0x44]; + + u16* ptr; + u8 t1, t2; + u16 value; + + if (unk_1 >= gUnk_02036A50->unk_04) { + return 0x80ff; + } else { + ptr = stack; + (u8*)ptr += (gUnk_02036A50->unk_08 << 1) + 1; + ((u8*)ptr)++; + for (t1 = 0; t1 < gUnk_02036A50->unk_08; t1++) { + *(ptr--) = unk_1; + unk_1 >>= 1; + } + *(ptr--) = 1; + *ptr = 1; + sub_080B1568(stack, (u16*)0xd000000, gUnk_02036A50->unk_08 + 3); + sub_080B1568((u16*)0xd000000, stack, 0x44); + ptr = stack + 4; + unk_2 += 3; + for (t1 = 0; t1 < 4; t1++) { + value = 0; + for (t2 = 0; t2 < 0x10; t2++) { + value <<= 1; + value |= (*ptr++) & 1; + } + *(unk_2--) = value; + } + return 0; + } +} |
