diff --git a/asm/code_8009804.s b/asm/code_8009804.s index c5d1061ae..0d9b13a6c 100644 --- a/asm/code_8009804.s +++ b/asm/code_8009804.s @@ -5,59 +5,6 @@ .text - thumb_func_start sub_8009A1C -sub_8009A1C: - push {r4-r6,lr} - adds r6, r0, 0 - ldr r0, _08009A30 - str r3, [r0] - ldr r3, [r6, 0xC] - movs r0, 0xC0 - lsls r0, 19 - adds r2, r0 - movs r5, 0 - b _08009A56 - .align 2, 0 -_08009A30: .4byte gUnknown_202D2A0 -_08009A34: - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - ldm r3!, {r0} - stm r2!, {r0} - adds r5, 0x1 -_08009A56: - ldr r0, [r6, 0x8] - cmp r5, r0 - ble _08009A34 - movs r5, 0 - lsls r4, r1, 6 -_08009A60: - adds r0, r5, 0 - adds r0, 0xE0 - ldr r1, [r6, 0x10] - adds r1, r4 - bl SetBGPaletteBufferColorArray - adds r4, 0x4 - adds r5, 0x1 - cmp r5, 0xF - ble _08009A60 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8009A1C - thumb_func_start sub_8009A7C sub_8009A7C: push {r4-r7,lr} diff --git a/src/code_8009804.c b/src/code_8009804.c index 344989031..92fb68549 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -11,10 +11,29 @@ extern const struct FileArchive gSystemFileArchive; // 8300500 extern Palette32 gFontPalette[8]; extern u8 gUnknown_202D238[4]; extern s32 gUnknown_202D23C; +extern u32 gUnknown_202D2A0; extern struct unkStruct_202D240 gUnknown_202D240[8]; -// code_8009804.s -extern void sub_8009A1C(u32); +typedef struct Palette256 +{ + RGB pal[256]; +} Palette256; + +struct unkStruct_8009A1C +{ + u8 fill0[0x8]; + s32 unk8; + u32 *unkC; + Palette256 *unk10; +}; + +struct unkStruct_8009A1C_ptr +{ + u8 fill0; + struct unkStruct_8009A1C *ptr; +}; + +void sub_8009A1C(struct unkStruct_8009A1C *r0, u32 palId, u32 vramDstOffset, u32 r3); void InitFontPalette(void) { @@ -134,7 +153,32 @@ void SetFontsBaseColor(RGB a0) gFontPalette[i].pal[1] = a0; } -UNUSED static void sub_8009A10(u32 *a0) +UNUSED static void sub_8009A10(struct unkStruct_8009A1C_ptr *a0, u32 palId, u32 vramDstOffset, u32 r3) { - sub_8009A1C(a0[1]); + sub_8009A1C(a0->ptr, palId, vramDstOffset, r3); +} + +void sub_8009A1C(struct unkStruct_8009A1C *r0, u32 palId, u32 vramDstOffset, u32 r3) +{ + s32 i; + u32 *dst, *src; + + gUnknown_202D2A0 = r3; + src = r0->unkC; + dst = (void *)(VRAM) + vramDstOffset; + + for (i = 0; i <= r0->unk8; i++) { + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + } + + for (i = 0; i < 16; i++) { + SetBGPaletteBufferColorArray(i + 0xE0, &r0->unk10->pal[i + palId * 16]); + } }