Merge pull request #367 from DizzyEggg/code_8002774

decompile code_8002774
This commit is contained in:
AnonymousRandomPerson
2025-03-17 18:01:34 -04:00
committed by GitHub
3 changed files with 61 additions and 227 deletions

View File

@@ -1,226 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8002774
sub_8002774:
sub sp, 0x4
str r0, [sp]
mov r0, sp
ldrb r1, [r0, 0x2]
movs r0, 0xF8
adds r2, r0, 0
ands r2, r1
lsls r2, 7
mov r1, sp
ldrb r3, [r1, 0x1]
adds r1, r0, 0
ands r1, r3
lsls r1, 2
orrs r2, r1
mov r1, sp
ldrb r1, [r1]
ands r0, r1
lsrs r0, 3
orrs r0, r2
add sp, 0x4
bx lr
thumb_func_end sub_8002774
thumb_func_start sub_80027A0
sub_80027A0:
push {r4,lr}
sub sp, 0x4
lsls r0, 16
lsrs r2, r0, 16
adds r3, r2, 0
mov r4, sp
movs r0, 0x1F
ands r0, r2
lsls r1, r0, 3
movs r0, 0x1
ands r0, r2
cmp r0, 0
beq _080027BE
movs r0, 0x7
orrs r1, r0
_080027BE:
strb r1, [r4]
mov r4, sp
movs r0, 0xF8
lsls r0, 2
ands r0, r2
lsrs r1, r0, 2
movs r0, 0x20
ands r0, r2
cmp r0, 0
beq _080027D6
movs r0, 0x7
orrs r1, r0
_080027D6:
strb r1, [r4, 0x1]
mov r2, sp
movs r0, 0xF8
lsls r0, 7
ands r0, r3
lsrs r1, r0, 7
movs r0, 0x80
lsls r0, 3
ands r3, r0
cmp r3, 0
beq _080027F0
movs r0, 0x7
orrs r1, r0
_080027F0:
strb r1, [r2, 0x2]
mov r0, sp
movs r1, 0
strb r1, [r0, 0x3]
ldr r0, [sp]
add sp, 0x4
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80027A0
thumb_func_start sub_8002804
sub_8002804:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r3, 0
_0800280C:
adds r1, r5, r3
adds r0, r2, r3
ldrb r0, [r0]
muls r0, r4
cmp r0, 0
bge _0800281A
adds r0, 0xFF
_0800281A:
asrs r0, 8
strb r0, [r1]
adds r3, 0x1
cmp r3, 0x3
ble _0800280C
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8002804
thumb_func_start sub_800282C
sub_800282C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x38
mov r9, r0
str r1, [sp, 0x20]
adds r7, r2, 0
mov r8, r3
adds r0, r1, 0
bl __floatsisf
adds r1, r0, 0
ldr r0, _08002904
bl __divsf3
str r0, [sp, 0x24]
movs r5, 0
mov r0, sp
adds r0, 0x10
str r0, [sp, 0x2C]
str r0, [sp, 0x34]
mov r10, sp
_0800285C:
adds r6, r7, r5
movs r4, 0
ldrsb r4, [r6, r4]
adds r0, r4, 0
bl __floatsisf
cmp r4, 0
bge _08002872
ldr r1, _08002908
bl __addsf3
_08002872:
mov r1, r10
adds r1, 0x4
mov r10, r1
subs r1, 0x4
stm r1!, {r0}
mov r1, r8
adds r0, r1, r5
ldrb r0, [r0]
ldrb r1, [r6]
subs r0, r1
bl __floatsisf
ldr r1, [sp, 0x24]
bl __mulsf3
ldr r1, [sp, 0x34]
stm r1!, {r0}
str r1, [sp, 0x34]
adds r5, 0x1
cmp r5, 0x3
ble _0800285C
ldr r0, [r7]
mov r1, r9
adds r1, 0x4
mov r9, r1
subs r1, 0x4
stm r1!, {r0}
movs r5, 0x1
ldr r0, [sp, 0x20]
subs r0, 0x1
str r0, [sp, 0x28]
mov r1, r8
ldr r1, [r1]
str r1, [sp, 0x30]
cmp r5, r0
bge _080028EE
_080028BA:
movs r6, 0
adds r5, 0x1
mov r10, r5
movs r0, 0x4
add r0, r9
mov r8, r0
mov r5, sp
ldr r7, [sp, 0x2C]
_080028CA:
mov r1, r9
adds r4, r1, r6
ldr r0, [r5]
ldm r7!, {r1}
bl __addsf3
stm r5!, {r0}
bl __fixunssfsi
strb r0, [r4]
adds r6, 0x1
cmp r6, 0x3
ble _080028CA
mov r9, r8
mov r5, r10
ldr r0, [sp, 0x28]
cmp r5, r0
blt _080028BA
_080028EE:
ldr r1, [sp, 0x30]
mov r0, r9
str r1, [r0]
add sp, 0x38
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08002904: .4byte 0x3f800000
_08002908: .4byte 0x43800000
thumb_func_end sub_800282C
.align 2, 0 @ Don't pad with nop.

View File

@@ -51,7 +51,6 @@ SECTIONS {
asm/arm_func.o(.text);
src/main_loops.o(.text);
src/event_flag.o(.text);
asm/code_8002774.o(.text);
src/code_8002774.o(.text);
src/memory.o(.text);
asm/code_80035F0.o(.text);

View File

@@ -4,6 +4,67 @@
#include "structs/str_position.h"
#include "other_random.h"
#define UNK_STRUCT_ARR_COUNT 4
struct S
{
u8 x0[UNK_STRUCT_ARR_COUNT];
};
u16 sub_8002774(struct S s)
{
return ((s.x0[2] & 0xF8) << 7) | ((s.x0[1] & 0xF8) << 2) | ((s.x0[0] & 0xF8) >> 3);
}
struct S sub_80027A0(u16 a0)
{
struct S ret;
ret.x0[0] = (a0 & 0x1F) << 3 | ((a0 & 1) ? 7 : 0);
ret.x0[1] = (a0 & 0x3E0) >> 2 | ((a0 & 0x20) ? 7 : 0);
ret.x0[2] = (a0 & 0x7C00) >> 7 | ((a0 & 0x400) ? 7 : 0);
ret.x0[3] = 0;
return ret;
}
UNUSED static void sub_8002804(struct S *r0, s32 r1, struct S *r2)
{
s32 i;
for (i = 0; i < UNK_STRUCT_ARR_COUNT; i++) {
r0->x0[i] = (r1 * r2->x0[i]) / 256;
}
}
UNUSED static void sub_800282C(struct S *dst, s32 a1, struct S *a2, struct S *a3)
{
s32 i, j;
float spFloats[4];
float floatsMul[4];
float f0 = 1.0f / a1;
for (i = 0; i < 4; i++) {
s8 asSigned = (s8) a2->x0[i];
float f = (float)(asSigned);
if (asSigned < 0) {
f += 256.0f;
}
spFloats[i] = f;
floatsMul[i] = (float)(a3->x0[i] - a2->x0[i]) * f0;
}
*dst++ = *a2;
for (i = 1; i < a1 - 1; dst++, i++) {
for (j = 0; j < 4; j++) {
dst->x0[j] = (unsigned int)((spFloats[j] += floatsMul[j]));
}
}
*dst = *a3;
}
// File split here?
extern PixelPos gVectorDirections[8];
void sub_800290C(PixelPos *param_1, s32 param_2)