mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-24 09:44:17 -05:00
Merge pull request #367 from DizzyEggg/code_8002774
decompile code_8002774
This commit is contained in:
@@ -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.
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user