sub_800D59

This commit is contained in:
DizzyEggg
2025-05-26 17:53:53 +02:00
parent 552f8629b3
commit e8c6f98151
2 changed files with 191 additions and 495 deletions

View File

@@ -5,499 +5,8 @@
.text
thumb_func_start sub_800D224
sub_800D224:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
str r0, [sp]
movs r6, 0
ldr r0, _0800D280
mov r12, r0
ldr r1, _0800D284
mov r10, r1
movs r2, 0x2
mov r9, r2
_0800D240:
ldr r1, [sp]
asrs r1, r6
movs r0, 0x1
ands r1, r0
adds r3, r6, 0x1
mov r8, r3
cmp r1, 0
beq _0800D2CE
lsls r0, r6, 2
ldr r1, _0800D288
adds r2, r0, r1
ldr r1, [r2]
adds r5, r0, 0
cmp r1, 0x1
bne _0800D2CE
lsls r0, r6, 5
adds r0, r6
lsls r0, 3
ldr r1, _0800D28C
adds r7, r0, r1
movs r4, 0
mov r3, r12
adds r0, r5, r3
ldr r1, [r0]
mov r3, r10
ldr r0, [r3]
lsrs r0, 1
cmp r1, r0
bcc _0800D290
mov r0, r9
str r0, [r2]
b _0800D2C4
.align 2, 0
_0800D280: .4byte gUnknown_202DB58
_0800D284: .4byte gUnknown_202DB74
_0800D288: .4byte gUnknown_202DB60
_0800D28C: .4byte gUnknown_202D910
_0800D290:
mov r1, r12
adds r0, r5, r1
ldr r3, [r0]
adds r2, r3, r4
lsls r2, 1
adds r2, r7
lsls r0, r4, 1
lsls r1, r6, 4
adds r0, r1
ldr r1, _0800D2E4
adds r0, r1
ldrh r0, [r0]
strh r0, [r2]
adds r4, 0x1
cmp r4, 0x7
bhi _0800D2C4
adds r1, r3, r4
mov r2, r10
ldr r0, [r2]
lsrs r0, 1
cmp r1, r0
bcc _0800D290
ldr r3, _0800D2E8
adds r0, r5, r3
mov r1, r9
str r1, [r0]
_0800D2C4:
mov r2, r12
adds r1, r5, r2
ldr r0, [r1]
adds r0, 0x8
str r0, [r1]
_0800D2CE:
mov r6, r8
cmp r6, 0x1
ble _0800D240
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800D2E4: .4byte gUnknown_202DB30
_0800D2E8: .4byte gUnknown_202DB60
thumb_func_end sub_800D224
thumb_func_start sub_800D2EC
sub_800D2EC:
push {r4-r7,lr}
ldr r0, _0800D318
mov r12, r0
ldr r3, _0800D31C
adds r7, r3, 0
ldr r6, _0800D320
ldr r2, _0800D324
adds r5, r2, 0
adds r5, 0xE
ldr r4, _0800D328
_0800D300:
ldr r0, [r4]
lsrs r0, 1
ldr r1, [r7]
cmp r1, r0
bcs _0800D32C
lsls r0, r1, 1
add r0, r12
ldrh r0, [r0]
strh r0, [r2]
adds r0, r1, 0x1
str r0, [r3]
b _0800D32E
.align 2, 0
_0800D318: .4byte gUnknown_202D808
_0800D31C: .4byte gUnknown_202DB50
_0800D320: .4byte 0x0000fcfc
_0800D324: .4byte gUnknown_202DB20
_0800D328: .4byte gUnknown_202DB74
_0800D32C:
strh r6, [r2]
_0800D32E:
adds r2, 0x2
cmp r2, r5
bls _0800D300
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800D2EC
thumb_func_start sub_800D33C
sub_800D33C:
push {r4,r5,lr}
movs r5, 0
ldr r1, _0800D370
ldr r4, _0800D374
ldr r0, [r4]
str r0, [r1]
ldr r0, _0800D378
ldr r1, _0800D37C
bl sub_800D820
adds r2, r0, 0
str r2, [r4]
ldr r1, _0800D380
ldrb r0, [r1]
cmp r0, 0
bne _0800D384
movs r0, 0x80
lsls r0, 1
ands r0, r2
cmp r0, 0
beq _0800D36A
movs r0, 0x1
strb r0, [r1]
_0800D36A:
movs r0, 0
b _0800D40E
.align 2, 0
_0800D370: .4byte gUnknown_202DB6C
_0800D374: .4byte gUnknown_202DB68
_0800D378: .4byte gUnknown_202DB20
_0800D37C: .4byte gUnknown_202DB30
_0800D380: .4byte gUnknown_202DB70
_0800D384:
movs r0, 0x80
lsls r0, 5
ands r0, r2
cmp r0, 0
beq _0800D392
movs r0, 0x3
b _0800D40E
_0800D392:
movs r0, 0x80
lsls r0, 6
ands r0, r2
cmp r0, 0
beq _0800D3A0
movs r0, 0x4
b _0800D40E
_0800D3A0:
movs r0, 0x80
lsls r0, 8
ands r0, r2
cmp r0, 0
beq _0800D3BA
lsls r1, r2, 28
lsrs r1, 28
lsls r0, r2, 20
lsrs r0, 28
cmp r1, r0
beq _0800D3BA
movs r0, 0x5
b _0800D40E
_0800D3BA:
ldr r4, _0800D3F8
ldr r0, _0800D3FC
ldr r2, [r4]
ldr r0, [r0]
orrs r0, r2
movs r1, 0xE
ands r0, r1
cmp r0, 0
beq _0800D40C
ldr r0, _0800D400
ldr r1, [r0]
lsls r1, 26
lsrs r1, 30
movs r0, 0x1
lsls r0, r1
ands r2, r0
cmp r2, 0
beq _0800D40C
bl sub_800D1E0
ldr r0, [r4]
bl sub_800D224
ldr r0, [r4]
bl sub_800D1C0
lsls r0, 24
cmp r0, 0
beq _0800D404
movs r0, 0x2
b _0800D40E
.align 2, 0
_0800D3F8: .4byte gUnknown_202DB68
_0800D3FC: .4byte gUnknown_202DB6C
_0800D400: .4byte 0x04000128
_0800D404:
ldr r0, [r4]
bl sub_800D2EC
movs r5, 0x1
_0800D40C:
adds r0, r5, 0
_0800D40E:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_800D33C
thumb_func_start sub_800D414
sub_800D414:
push {r4,lr}
ldr r0, _0800D468
movs r4, 0
str r4, [r0]
ldr r0, _0800D46C
str r4, [r0]
ldr r0, _0800D470
strb r4, [r0]
ldr r0, _0800D474
str r4, [r0]
ldr r0, _0800D478
str r4, [r0]
str r4, [r0, 0x4]
ldr r0, _0800D47C
movs r1, 0x10
bl MemoryClear16
ldr r0, _0800D480
movs r1, 0x20
bl MemoryClear16
ldr r0, _0800D484
str r4, [r0]
ldr r0, _0800D488
str r4, [r0]
str r4, [r0, 0x4]
ldr r0, _0800D48C
movs r1, 0x84
lsls r1, 1
bl MemoryClear16
ldr r0, _0800D490
movs r1, 0x84
lsls r1, 2
bl MemoryClear16
bl sub_800D6AC
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800D468: .4byte gUnknown_202DB68
_0800D46C: .4byte gUnknown_202DB6C
_0800D470: .4byte gUnknown_202DB70
_0800D474: .4byte gUnknown_202DB74
_0800D478: .4byte gUnknown_202DB60
_0800D47C: .4byte gUnknown_202DB20
_0800D480: .4byte gUnknown_202DB30
_0800D484: .4byte gUnknown_202DB50
_0800D488: .4byte gUnknown_202DB58
_0800D48C: .4byte gUnknown_202D808
_0800D490: .4byte gUnknown_202D910
thumb_func_end sub_800D414
thumb_func_start sub_800D494
sub_800D494:
push {r4,lr}
ldr r0, _0800D4E4
movs r4, 0
str r4, [r0]
ldr r0, _0800D4E8
str r4, [r0]
ldr r0, _0800D4EC
strb r4, [r0]
ldr r0, _0800D4F0
str r4, [r0]
ldr r0, _0800D4F4
str r4, [r0]
str r4, [r0, 0x4]
ldr r0, _0800D4F8
movs r1, 0x10
bl MemoryClear16
ldr r0, _0800D4FC
movs r1, 0x20
bl MemoryClear16
ldr r0, _0800D500
str r4, [r0]
ldr r0, _0800D504
str r4, [r0]
str r4, [r0, 0x4]
ldr r0, _0800D508
movs r1, 0x84
lsls r1, 1
bl MemoryClear16
ldr r0, _0800D50C
movs r1, 0x84
lsls r1, 2
bl MemoryClear16
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800D4E4: .4byte gUnknown_202DB68
_0800D4E8: .4byte gUnknown_202DB6C
_0800D4EC: .4byte gUnknown_202DB70
_0800D4F0: .4byte gUnknown_202DB74
_0800D4F4: .4byte gUnknown_202DB60
_0800D4F8: .4byte gUnknown_202DB20
_0800D4FC: .4byte gUnknown_202DB30
_0800D500: .4byte gUnknown_202DB50
_0800D504: .4byte gUnknown_202DB58
_0800D508: .4byte gUnknown_202D808
_0800D50C: .4byte gUnknown_202D910
thumb_func_end sub_800D494
thumb_func_start sub_800D510
sub_800D510:
ldr r1, _0800D51C
movs r2, 0x80
lsls r2, 8
adds r0, r2, 0
strh r0, [r1]
bx lr
.align 2, 0
_0800D51C: .4byte 0x04000134
thumb_func_end sub_800D510
thumb_func_start sub_800D520
sub_800D520:
push {r4,r5,lr}
sub sp, 0x4
mov r1, sp
movs r0, 0x1
strh r0, [r1]
ldr r0, _0800D568
ldrb r1, [r0]
movs r0, 0x30
ands r0, r1
cmp r0, 0
bne _0800D55C
mov r1, sp
mov r0, sp
ldrh r0, [r0]
subs r0, 0x1
strh r0, [r1]
ldrh r0, [r1]
ldr r1, _0800D56C
cmp r0, r1
beq _0800D55C
mov r4, sp
adds r5, r1, 0
_0800D54C:
bl VBlankIntrWait
ldrh r0, [r4]
subs r0, 0x1
strh r0, [r4]
ldrh r0, [r4]
cmp r0, r5
bne _0800D54C
_0800D55C:
bl sub_800D7D0
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800D568: .4byte 0x04000128
_0800D56C: .4byte 0x0000ffff
thumb_func_end sub_800D520
thumb_func_start sub_800D570
sub_800D570:
push {lr}
bl sub_800D7B8
pop {r0}
bx r0
thumb_func_end sub_800D570
thumb_func_start sub_800D57C
sub_800D57C:
ldr r0, _0800D584
ldrb r0, [r0]
bx lr
.align 2, 0
_0800D584: .4byte gUnknown_202DB70
thumb_func_end sub_800D57C
thumb_func_start sub_800D588
sub_800D588:
ldr r0, _0800D598
ldr r0, [r0]
movs r1, 0x80
ands r0, r1
lsls r0, 24
lsrs r0, 24
bx lr
.align 2, 0
_0800D598: .4byte gUnknown_202DB68
thumb_func_end sub_800D588
thumb_func_start sub_800D59C
sub_800D59C:
push {r4-r6,lr}
adds r3, r0, 0
adds r2, r1, 0
movs r5, 0
ldr r6, _0800D5F4
ldr r4, _0800D5F8
adds r0, r2, 0x1
movs r1, 0x2
negs r1, r1
ands r0, r1
adds r0, 0x8
str r0, [r4]
adds r0, r6, 0x4
adds r1, r3, 0
bl CpuCopy
ldr r0, _0800D5FC
strh r0, [r6]
strh r5, [r6, 0x2]
movs r2, 0
ldr r0, [r4]
lsrs r0, 1
subs r0, 0x2
cmp r5, r0
bcs _0800D5DE
adds r3, r0, 0
adds r1, r6, 0
_0800D5D2:
ldrh r0, [r1]
adds r5, r0
adds r1, 0x2
adds r2, 0x1
cmp r2, r3
bcc _0800D5D2
_0800D5DE:
ldr r2, _0800D5F4
mvns r1, r5
ldr r0, _0800D5F8
ldr r0, [r0]
lsrs r0, 1
subs r1, r0
strh r1, [r2, 0x2]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0800D5F4: .4byte gUnknown_202D808
_0800D5F8: .4byte gUnknown_202DB74
_0800D5FC: .4byte 0x0000fdfd
thumb_func_end sub_800D59C
thumb_func_start sub_800D600
sub_800D600:

View File

@@ -1,5 +1,7 @@
#include "global.h"
#include "music.h"
#include "memory.h"
#include "cpu.h"
extern u32 gUnknown_202DB60[2];
extern u16 gUnknown_202DB30[2][8];
@@ -113,13 +115,13 @@ void nullsub_187(void)
{
}
u32 sub_800D1C0(void)
bool8 sub_800D1C0(u32 unused)
{
if(gUnknown_202DB60[0] != 2)
return 0;
return FALSE;
if(gUnknown_202DB60[1] != 2)
return 0;
return 1;
return FALSE;
return TRUE;
}
void sub_800D1E0(void)
@@ -137,3 +139,188 @@ void sub_800D1E0(void)
}
}
}
extern u32 gUnknown_202DB58[2];
extern u32 gUnknown_202DB74;
extern u32 gUnknown_202DB50;
extern u16 gUnknown_202DB208[];
extern u16 gUnknown_202D808[132];
extern u16 gUnknown_202D910[2][132];
extern u16 gUnknown_202DB30[2][8];
extern u16 gUnknown_202DB20[8];
void sub_800D224(s32 a0)
{
s32 i;
for (i = 0; i < 2; i++) {
if (((a0 >> i) & 1) && gUnknown_202DB60[i] == 1) {
u32 j;
u16 *ptr = gUnknown_202D910[i];
for (j = 0; j < 8; j++) {
if (gUnknown_202DB58[i] + j >= gUnknown_202DB74 / 2) {
gUnknown_202DB60[i] = 2;
break;
}
ptr[gUnknown_202DB58[i] + j] = gUnknown_202DB30[i][j];
}
gUnknown_202DB58[i] += 8;
}
}
}
void sub_800D2EC(u32 unused)
{
u32 i;
u16 *ptr = gUnknown_202D808;
for (i = 0; i < 8; i++) {
if (gUnknown_202DB50 < (gUnknown_202DB74 / 2)) {
gUnknown_202DB20[i] = ptr[gUnknown_202DB50++];
}
else {
gUnknown_202DB20[i] = 0xFCFC;
}
}
}
extern u32 gUnknown_202DB68;
extern s32 gUnknown_202DB6C;
extern u8 gUnknown_202DB70;
u32 sub_800D820(u16 *a0, u16 *a1);
s32 sub_800D33C(void)
{
s32 ret = 0;
gUnknown_202DB6C = gUnknown_202DB68;
gUnknown_202DB68 = sub_800D820(gUnknown_202DB20, gUnknown_202DB30[0]);
if (gUnknown_202DB70 == 0) {
if (gUnknown_202DB68 & 0x100) {
gUnknown_202DB70 = 1;
}
return 0;
}
else if (gUnknown_202DB68 & 0x1000) {
return 3;
}
else if (gUnknown_202DB68 & 0x2000) {
return 4;
}
else if (gUnknown_202DB68 & 0x8000) {
u32 bits1, bits2;
bits1 = gUnknown_202DB68 << 28;
bits1 >>= 28;
bits2 = gUnknown_202DB68 << 20;
bits2 >>= 28;
if (bits1 != bits2)
return 5;
}
if (((gUnknown_202DB68 | gUnknown_202DB6C) & 0xE)) {
u32 si0Cnt = (*(vu32 *)REG_ADDR_SIOCNT);
si0Cnt <<= 26;
si0Cnt >>= 30;
if ((gUnknown_202DB68 & (1 << si0Cnt))) {
sub_800D1E0();
sub_800D224(gUnknown_202DB68);
if (sub_800D1C0(gUnknown_202DB68)) {
return 2;
}
sub_800D2EC(gUnknown_202DB68);
ret = 1;
}
}
return ret;
}
void sub_800D6AC(void);
void sub_800D7D0(void);
void sub_800D7B8(void);
static inline void ClearUnkMemory(void)
{
gUnknown_202DB68 = 0;
gUnknown_202DB6C = 0;
gUnknown_202DB70 = 0;
gUnknown_202DB74 = 0;
gUnknown_202DB60[0] = 0;
gUnknown_202DB60[1] = 0;
MemoryClear16(gUnknown_202DB20, sizeof(gUnknown_202DB20));
MemoryClear16(gUnknown_202DB30[0], sizeof(gUnknown_202DB30));
gUnknown_202DB50 = 0;
gUnknown_202DB58[0] = 0;
gUnknown_202DB58[1] = 0;
MemoryClear16(gUnknown_202D808, sizeof(gUnknown_202D808));
MemoryClear16(gUnknown_202D910[0], sizeof(gUnknown_202D910));
}
// These two are the same, except sub_800D414 calls an additional func
void sub_800D414(void)
{
ClearUnkMemory();
sub_800D6AC();
}
void sub_800D494(void)
{
ClearUnkMemory();
}
void sub_800D510(void)
{
REG_RCNT = 0x8000;
}
void sub_800D520(void)
{
vu16 var = 1; // Has to be u16, not s16
u8 si0Cnt = (*(vu8 *)REG_ADDR_SIOCNT); // First 8 bits
if (!(si0Cnt & 0x30)) {
while (--var != (u16) -1) {
VBlankIntrWait();
}
}
sub_800D7D0();
}
void sub_800D570()
{
sub_800D7B8();
}
UNUSED static u8 sub_800D57C(void)
{
return gUnknown_202DB70;
}
u8 sub_800D588(void)
{
return (gUnknown_202DB68 & 0x80);
}
void sub_800D59C(u16 *src, u32 size)
{
u32 i;
u16 bits;
s32 count = 0;
u16 *dst = gUnknown_202D808;
gUnknown_202DB74 = ((size + 1) & ~(1)) + 8;
CpuCopy(&dst[2], src, size);
bits = 0xFDFD;
dst[0] = bits;
dst[1] = 0;
for (i = 0; i < (gUnknown_202DB74 / 2) - 2; i++) {
count += dst[i];
}
gUnknown_202D808[1] = ~count - (gUnknown_202DB74 / 2);
}