diff options
Diffstat (limited to 'src/pokenav_main.c')
-rw-r--r-- | src/pokenav_main.c | 65 |
1 files changed, 15 insertions, 50 deletions
diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 5610966b7..3e77ba686 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -605,56 +605,21 @@ void CopyPaletteIntoBufferUnfaded(void *palette, u32 bufferOffset, u32 size) { CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); } -__attribute__((naked)) void sub_81C795C(struct PaletteDescriptor *palettes) { - // This code matches the assembly almost exactly; however, gcc chooses - // to store `index` in r0 instead of r1. -#ifdef NONMATCHING struct PaletteDescriptor *current; - u32 offset; - u32 index; - - current = palettes; - for (;;) { - if (current->palette == NULL) { - break; - } - index = AllocSpritePalette(current->tag); - if (index == 0xFF) { - break; - } - offset = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->palette, offset, 0x20); - current++; - } -#else // NONMATCHING - asm(".syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - b _081C7974\n\ - _081C7962:\n\ - lsls r0, r1, 4\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r1, r0, r2\n\ - ldr r0, [r4]\n\ - movs r2, 0x20\n\ - bl CopyPaletteIntoBufferUnfaded\n\ - adds r4, 0x8\n\ - _081C7974:\n\ - ldr r0, [r4]\n\ - cmp r0, 0\n\ - beq _081C7988\n\ - ldrh r0, [r4, 0x4]\n\ - bl AllocSpritePalette\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0xFF\n\ - bne _081C7962\n\ - _081C7988:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -#endif // NONMATCHING + u32 index; + + for (current = palettes; current->palette != NULL; current++) + { + index = AllocSpritePalette(current->tag); + if (index == 0xFF) + { + break; + } + else + { + index = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->palette, index, 0x20); + } + } }
\ No newline at end of file |