Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2E110 #136

Merged
merged 1 commit into from
Sep 23, 2024
Merged

2E110 #136

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/sections.h
Original file line number Diff line number Diff line change
Expand Up @@ -483,5 +483,6 @@ extern u32 fragment1_relocs_ROM_END[];

extern u8 _675FA0_ROM_START[];
extern u8 _675FA0_ROM_END[];
extern u8 _783760_ROM_START[];

#endif // _SECTIONS_H_
133 changes: 126 additions & 7 deletions src/2E110.c
Original file line number Diff line number Diff line change
@@ -1,15 +1,134 @@
#include "2E110.h"
#include "src/3FB0.h"
#include "src/memory.h"

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D510.s")
static BinArchive* D_800AF740;
static char** D_800AF744;

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D5AC.s")
void func_8002D510(void) {
s32 i;

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D5D4.s")
D_800AF740 = func_800044F4(_783760_ROM_START, NULL, 1, 0);
D_800AF744 = main_pool_alloc(0xA8, 0);

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D600.s")
for (i = 0; i < 42; i++) {
D_800AF744[i] = NULL;
}
}

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D628.s")
char* func_8002D5AC(s32 file_number) {
return (char*)func_8000484C(D_800AF740, file_number);
}

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D7C0.s")
void func_8002D5D4(u32 arg0, s32 arg1) {
if ((arg0 >= 0x14) && (arg0 < 0x2A)) {
D_800AF744[arg0] = arg1;
}
}

#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D80C.s")
void func_8002D600(u32 arg0, s32 arg1) {
if ((arg0 != 0) && (arg0 < 0xA)) {
D_800AF744[arg0] = arg1;
}
}

void func_8002D628(char* arg0, u32 arg1, s8* arg2) {
u32 i;
s32 var_s2;
s32 temp_v0;
char sp58[12];
s8* var_s4;
char* sp54;
u32 var_s3;

var_s2 = 0;
var_s3 = 0;
sp54 = var_s4;
var_s4 = sp54;
i = 0;

while (i < arg1 - 1u) {
switch (var_s2) {
case 0:
temp_v0 = *arg2++;
if (temp_v0 == 0) {
goto end;
}

if (temp_v0 == 0x23) {
temp_v0 = *arg2++;

temp_v0 -= 0x30;
temp_v0 = (*arg2++ + (temp_v0 * 10)) - 0x30;
if ((temp_v0 > 0) && (temp_v0 < 0xA)) {
sprintf(&sp58, "%d", D_800AF744[temp_v0]);
var_s4 = &sp58;
var_s2 = 1;
continue;
}

if ((temp_v0 >= 0x14) && (temp_v0 < 0x2A)) {
if (D_800AF744[temp_v0] != 0) {
var_s4 = D_800AF744[temp_v0];
var_s2 = 1;
}
continue;
}
} else {
*arg0++ = temp_v0;
var_s3++;
i++;
}
break;

case 1:
temp_v0 = *var_s4++;
if (temp_v0 == 0) {
var_s2 = 0;
} else {
*arg0++ = temp_v0;
var_s3++;
i++;
}
break;
}
}

sp54 = var_s4;
end:
*arg0++ = 0;
}

char* func_8002D7C0(char* arg0, s32 arg1, char** arg2, s32 file_number) {
char* sp1C;
char* sp18 = (u32)arg2 + (u32)arg2[file_number + 1];

if (arg0 == NULL) {
sp1C = sp18;
} else {
sp1C = arg0;
func_8002D628(arg0, arg1, sp18);
}

return sp1C;
}

s32 func_8002D80C(s8* arg0) {
s32 last_chr = 0;
s32 line_count = 0;
s32 chr = *arg0++;

while (chr != 0) {
last_chr = chr;
if (chr == '\n') {
line_count++;
}
chr = *arg0++;
}

if (last_chr != '\n') {
line_count++;
}

return line_count;
}
8 changes: 4 additions & 4 deletions src/2E110.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
#include "global.h"

void func_8002D510(void);
s32 func_8002D5AC(s32);
void func_8002D600(s32, s16);
char* func_8002D7C0(char* arg0, s32 arg1, s32 arg2, s32 arg3);
s32 func_8002D80C(char*);
char* func_8002D5AC(s32);
void func_8002D600(u32, s32);
char* func_8002D7C0(char* arg0, s32 arg1, char** arg2, s32 arg3);
s32 func_8002D80C(s8*);


#endif // _2E110_H_
2 changes: 1 addition & 1 deletion src/fragments/2/fragment2.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ extern u32 D_87806670[];
extern u32 D_878065B0[];
extern u32 D_87806730[];

s32 D_87806330 = 0;
char** D_87806330 = NULL;

static s32 D_8780FA20;
static s32 D_8780FA24;
Expand Down
2 changes: 1 addition & 1 deletion src/fragments/2/fragment2.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ typedef struct unk_func_87801684 {
/* 0x04 */ s16 unk_04;
} unk_func_87801684; // size = 0x8

extern s32 D_87806330;
extern char** D_87806330;
extern s16 D_87806338;
extern u32* D_8780633C[];
extern u32* D_8780634C[];
Expand Down
5 changes: 3 additions & 2 deletions yamls/us/rom.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@
- [0x7CD40, .rodata, 26820]
- [0x7CEC0, .rodata, 29BA0]
- [0x7CFD0, .rodata, 2C1C0]
- [0x7D030, rodata, rom_rodata_7D030]
- [0x7D030, .rodata, 2E110]
- [0x7D040, rodata, rom_rodata_7D040]
- [0x7D0F0, .rodata, 30640]
- [0x7D110, rodata, rom_rodata_7D110]
Expand Down Expand Up @@ -497,7 +497,8 @@
- {vram: 0x800AC880, type: .bss, name: 20330}
- {vram: 0x800AC890, type: bss, name: unk_bss_11}
- {vram: 0x800AE520, type: .bss, name: 29BA0}
- {vram: 0x800AF740, type: bss, name: unk_bss_7}
- {vram: 0x800AF740, type: .bss, name: 2E110}
- {vram: 0x800AF750, type: bss, name: unk_bss_7}
- {vram: 0x800B32A0, type: .bss, name: 373A0}
- {vram: 0x800FC7A0, type: .bss, name: 38BB0}
- {vram: 0x800FC820, type: bss, name: unk_bss_12}
Expand Down
Loading