diff options
Diffstat (limited to 'src/berry_fix_program.c')
-rw-r--r-- | src/berry_fix_program.c | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 58e50e509..b63bc12be 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -30,7 +30,9 @@ extern berryfix_t *gUnknown_030012B8; static void sub_81BF3DC(void); static void sub_81BF5A4(void); -u32 sub_81BF7A4(u8); +static int sub_81BF7A4(int); +void sub_81BF7E8(int); +void sub_81BF8D8(int); // .rodata @@ -179,6 +181,32 @@ static void sub_81BF5A4(void) CopyWindowToVram(3, 2); CopyWindowToVram(0, 2); } + +static int sub_81BF7A4(int checkval) +{ + int retval; + + retval = gUnknown_030012B8->unk1; + if (retval == checkval) + { + retval = checkval; + } + else + { + if (retval == 6) + { + sub_81BF7E8(checkval); + gUnknown_030012B8->unk1 = checkval; + } + else + { + sub_81BF8D8(gUnknown_030012B8->unk1); + gUnknown_030012B8->unk1 = 6; + } + retval = gUnknown_030012B8->unk1; + } + return retval; +} #else __attribute__((naked)) static void sub_81BF5A4(void) { @@ -386,4 +414,43 @@ __attribute__((naked)) static void sub_81BF5A4(void) "\t.pool\n" ".syntax divided"); } + +__attribute__((naked)) static int sub_81BF7A4(int checkval) +{ + asm(".syntax unified\n" + "\tpush {r4,r5,lr}\n" + "\tadds r4, r0, 0\n" + "\tldr r5, =gUnknown_030012B8\n" + "\tldr r0, [r5]\n" + "\tldrb r0, [r0, 0x1]\n" + "\tcmp r0, r4\n" + "\tbne _081BF7BC\n" + "\tadds r0, r4, 0\n" + "\tb _081BF7DC\n" + "\t.pool\n" + "_081BF7BC:\n" + "\tcmp r0, 0x6\n" + "\tbne _081BF7CC\n" + "\tadds r0, r4, 0\n" + "\tbl sub_81BF7E8\n" + "\tldr r0, [r5]\n" + "\tstrb r4, [r0, 0x1]\n" + "\tb _081BF7D6\n" + "_081BF7CC:\n" + "\tbl sub_81BF8D8\n" + "\tldr r1, [r5]\n" + "\tmovs r0, 0x6\n" + "\tstrb r0, [r1, 0x1]\n" + "_081BF7D6:\n" + "\tldr r0, =gUnknown_030012B8\n" + "\tldr r0, [r0]\n" + "\tldrb r0, [r0, 0x1]\n" + "_081BF7DC:\n" + "\tpop {r4,r5}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.pool\n" + ".syntax divided"); +} #endif + |