diff --git a/ld_script.ld b/ld_script.ld index ae33256d1..73fcce55e 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -48,7 +48,7 @@ SECTIONS { { asm/crt0.o(.text); src/code_80001DC.o(.text); - asm/arm_func.o(.text); + src/arm_funcs.o(.text); src/main_loops.o(.text); src/event_flag.o(.text); src/code_8002774.o(.text); diff --git a/asm/arm_func.s b/src/arm_funcs.s similarity index 98% rename from asm/arm_func.s rename to src/arm_funcs.s index f10e34275..2dbdc27ee 100644 --- a/asm/arm_func.s +++ b/src/arm_funcs.s @@ -1,11 +1,11 @@ #include "asm/constants/gba_constants.inc" #include "asm/macros.inc" - + .syntax unified .text - arm_func_start sub_80001E8 + arm_func_start sub_80001E8 sub_80001E8: stmdb sp!, {r4-r11} mov r12, 0x4000000 @ REG_BASE diff --git a/src/code_800D090.c b/src/code_800D090.c index 08b0f9c3b..202150e77 100644 --- a/src/code_800D090.c +++ b/src/code_800D090.c @@ -119,20 +119,21 @@ union PtrU16U8 u8 *asU8; }; +// Important note: This struct is used in arm_funcs.s, which means the offsets of this struct's memebers CANNOT be changed, unless sub_80001E8 and sub_8000228 are accordingly changed. struct UnkStruct_202DCF8 { u8 unk0; u8 unk1; u8 unk2; u8 unk3; - u8 fill4[4]; + s32 unk4; u8 unk8; u8 unk9; u8 unkA; u8 unkB; u8 fillC[0x14-0xC]; s32 unk14; - u8 fill18[0x28-0x18]; + s32 unk18[4]; union PtrU16U8 unk28; u16 *unk2C; u16 *unk30[4]; @@ -143,23 +144,22 @@ struct UnkStruct_202DCF8 u16 unk90[2][3][12]; }; -extern struct UnkStruct_202DCF8 gUnknown_202DCF8; +EWRAM_DATA static u16 gUnknown_202D808[132] = {0}; +EWRAM_DATA static u16 gUnknown_202D910[2][132] = {0}; +EWRAM_DATA static u16 gUnknown_202DB20[8] = {0}; +EWRAM_DATA static u16 gUnknown_202DB30[2][8] = {0}; +EWRAM_DATA static u32 gUnknown_202DB50[2] = {0}; // Only first index used +EWRAM_DATA static u32 gUnknown_202DB58[2] = {0}; +EWRAM_DATA static u32 gUnknown_202DB60[2] = {0}; +EWRAM_DATA static u32 gUnknown_202DB68 = 0; +EWRAM_DATA static s32 gUnknown_202DB6C = 0; +EWRAM_DATA static u8 gUnknown_202DB70 = 0; +EWRAM_DATA static u32 gUnknown_202DB74 = 0; +// These should not be in EWRAM, but in IWRAM... +EWRAM_DATA static u32 gUnknown_202DB78[16] = {0}; +EWRAM_DATA u32 gUnknown_202DBB8[80] = {0}; -extern u32 gUnknown_202DB60[2]; -extern u16 gUnknown_202DB30[2][8]; -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]; -extern u32 gUnknown_202DB68; -extern s32 gUnknown_202DB6C; -extern u8 gUnknown_202DB70; -extern u32 gUnknown_202DB78[]; -extern u32 gUnknown_202DBB8[]; +EWRAM_DATA struct UnkStruct_202DCF8 gUnknown_202DCF8 = {0}; extern u32 sub_80001E8(void); extern void sub_8000228(void); @@ -224,8 +224,8 @@ static void sub_800D2EC(u32 unused) u16 *ptr = gUnknown_202D808; for (i = 0; i < 8; i++) { - if (gUnknown_202DB50 < (gUnknown_202DB74 / 2)) { - gUnknown_202DB20[i] = ptr[gUnknown_202DB50++]; + if (gUnknown_202DB50[0] < (gUnknown_202DB74 / 2)) { + gUnknown_202DB20[i] = ptr[gUnknown_202DB50[0]++]; } else { gUnknown_202DB20[i] = 0xFCFC; @@ -291,7 +291,7 @@ static inline void ClearUnkMemory(void) gUnknown_202DB60[1] = 0; MemoryClear16(gUnknown_202DB20, sizeof(gUnknown_202DB20)); MemoryClear16(gUnknown_202DB30[0], sizeof(gUnknown_202DB30)); - gUnknown_202DB50 = 0; + gUnknown_202DB50[0] = 0; gUnknown_202DB58[0] = 0; gUnknown_202DB58[1] = 0; MemoryClear16(gUnknown_202D808, sizeof(gUnknown_202D808)); @@ -403,8 +403,8 @@ void sub_800D6AC(void) (*(vu32 *)REG_ADDR_SIOCNT) = 0x2000; REG_SIOCNT |= 0x4003; CpuFill32(0, &gUnknown_202DCF8, 0x120); - CpuCopy32(sub_80001E8, gUnknown_202DB78, 0x40); - CpuCopy32(sub_8000228, gUnknown_202DBB8, 0x140); + CpuCopy32(sub_80001E8, gUnknown_202DB78, sizeof(gUnknown_202DB78)); + CpuCopy32(sub_8000228, gUnknown_202DBB8, sizeof(gUnknown_202DBB8)); gUnknown_202DCF8.unk14 = -1; gUnknown_202DCF8.unk28.asU16 = gUnknown_202DCF8.unk60; gUnknown_202DCF8.unk2C = gUnknown_202DCF8.unk78; diff --git a/sym_ewram.txt b/sym_ewram.txt index 36534ad61..1d7909447 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -19,40 +19,7 @@ .include "src/bg_control.o" .include "src/cpu.o" .space 0x4 - -gUnknown_202D808: /* 202D808 (sub_800D2EC - sub_800D59C) */ - .space 0x108 -gUnknown_202D910: /* 202D910 (sub_800D224 - sub_800D68C) */ - .space 0x4 -gUnknown_202D914: /* 202D914 (sub_800D670) */ - .space 0x20C -gUnknown_202DB20: /* 202DB20 (sub_800D2EC - sub_800D494) */ - .space 0x10 -gUnknown_202DB30: /* 202DB30 (sub_800D1E0 - sub_800D494) */ - .space 0x20 -gUnknown_202DB50: /* 202DB50 (sub_800D2EC - sub_800D494) */ - .space 0x8 -gUnknown_202DB58: /* 202DB58 (sub_800D224 - sub_800D494) */ - .space 0x8 -gUnknown_202DB60: /* 202DB60 (sub_800D1C0 - sub_800D494) */ - .space 0x8 -gUnknown_202DB68: /* 202DB68 (sub_800D33C - sub_800D588) */ - .space 0x4 -gUnknown_202DB6C: /* 202DB6C (sub_800D33C - sub_800D494) */ - .space 0x4 -gUnknown_202DB70: /* 202DB70 (sub_800D33C - sub_800D57C) */ - .space 0x4 -gUnknown_202DB74: /* 202DB74 (sub_800D224 - sub_800D600) */ - .space 0x4 - -gUnknown_202DB78: /* 202DB78 (sub_800D6AC - sub_800D9B8) */ - .space 0x40 -gUnknown_202DBB8: /* 202DBB8 (sub_800D6AC / data_80B9BB8) */ - .space 0x140 - -gUnknown_202DCF8: /* 202DCF8 (sub_80001E8 - sub_800D9B8) */ - .space 0x120 - + .include "src/code_800D090.o" .include "src/friend_areas_map.o" .include "src/code_80118A4.o" .include "src/save.o"