With help, sub_81C795C has been tamed.
Thanks to Garak on the discord server.
This commit is contained in:
parent
a8d920cc45
commit
f95eebf47a
1 changed files with 15 additions and 50 deletions
|
@ -605,56 +605,21 @@ void CopyPaletteIntoBufferUnfaded(void *palette, u32 bufferOffset, u32 size) {
|
||||||
CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size);
|
CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((naked))
|
|
||||||
void sub_81C795C(struct PaletteDescriptor *palettes) {
|
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;
|
struct PaletteDescriptor *current;
|
||||||
u32 offset;
|
|
||||||
u32 index;
|
u32 index;
|
||||||
|
|
||||||
current = palettes;
|
for (current = palettes; current->palette != NULL; current++)
|
||||||
for (;;) {
|
{
|
||||||
if (current->palette == NULL) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
index = AllocSpritePalette(current->tag);
|
index = AllocSpritePalette(current->tag);
|
||||||
if (index == 0xFF) {
|
if (index == 0xFF)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
offset = (index * 16) + 0x100;
|
else
|
||||||
CopyPaletteIntoBufferUnfaded(current->palette, offset, 0x20);
|
{
|
||||||
current++;
|
index = (index * 16) + 0x100;
|
||||||
|
CopyPaletteIntoBufferUnfaded(current->palette, index, 0x20);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#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
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue