From 8604291b0f0e430b01f0099ea4e098171938505b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 18 Sep 2017 08:52:57 -0400 Subject: Start decomp --- src/berry_fix_program.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/berry_fix_program.c (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c new file mode 100644 index 000000000..bafefaf7a --- /dev/null +++ b/src/berry_fix_program.c @@ -0,0 +1,123 @@ + +// Includes +#include "global.h" +#include "multiboot.h" +#include "gpu_regs.h" +#include "main.h" +#include "sprite.h" +#include "task.h" +#include "unknown_task.h" +#include "malloc.h" +#include "m4a.h" + +// Static type declarations + +typedef struct { + u8 state; + u8 unk1; + u16 unk2; + struct MultiBootParam mb; +} berryfix_t; + +// Static RAM declarations + +extern berryfix_t *gUnknown_030012B8; + +// Static ROM declarations + +static void sub_81BF3DC(void); +void sub_81BF5A4(void); +u32 sub_81BF7A4(u8); + +// .rodata + +extern const u8 gUnknown_089A6550[0xC0]; +extern const u8 gMultiBootProgram_BerryGlitchFix_Script[0x3b34]; +extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; +extern const u8 gMultiBootProgram_BerryGlitchFix_End[]; + +// .text + +void sub_81BF384(void) +{ + DisableInterrupts(0xFFFF); + EnableInterrupts(0x0001); + m4aSoundVSyncOff(); + SetVBlankCallback(NULL); + ResetSpriteData(); + ResetTasks(); + remove_some_task(); + SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); + gUnknown_030012B8 = AllocZeroed(0x50); + gUnknown_030012B8->state = 0; + gUnknown_030012B8->unk1 = 6; + SetMainCallback2(sub_81BF3DC); +} + +static void sub_81BF3DC(void) +{ + switch (gUnknown_030012B8->state) + { + case 0: + sub_81BF5A4(); + gUnknown_030012B8->state = 1; + break; + case 1: + if (sub_81BF7A4(5) == 5 && (gMain.newKeys & A_BUTTON)) + { + gUnknown_030012B8->state = 2; + } + break; + case 2: + if (sub_81BF7A4(0) == 0 && (gMain.newKeys & A_BUTTON)) + { + gUnknown_030012B8->state = 3; + } + break; + case 3: + if (sub_81BF7A4(1) == 1) + { + gUnknown_030012B8->mb.masterp = gUnknown_089A6550; + gUnknown_030012B8->mb.server_type = 0; + MultiBootInit(&gUnknown_030012B8->mb); + gUnknown_030012B8->unk2 = 0; + gUnknown_030012B8->state = 4; + } + break; + case 4: + MultiBootMain(&gUnknown_030012B8->mb); + if (gUnknown_030012B8->mb.probe_count != 0 || (!(gUnknown_030012B8->mb.response_bit & 2) || !(gUnknown_030012B8->mb.client_bit & 2))) + { + gUnknown_030012B8->unk2 = 0; + } + else if (++ gUnknown_030012B8->unk2 > 180) + { + MultiBootStartMaster(&gUnknown_030012B8->mb, gMultiBootProgram_BerryGlitchFix_Start, (u32)(gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start), 4, 1); + gUnknown_030012B8->state = 5; + } + break; + case 5: + if (sub_81BF7A4(2) == 2) { + MultiBootMain(&gUnknown_030012B8->mb); + if (MultiBootCheckComplete(&gUnknown_030012B8->mb)) { + gUnknown_030012B8->state = 6; + } + else if (!(gUnknown_030012B8->mb.client_bit & 2)) { + gUnknown_030012B8->state = 7; + } + } + break; + case 6: + if (sub_81BF7A4(3) == 3 && gMain.newKeys & A_BUTTON) + { + DoSoftReset(); + } + break; + case 7: + if (sub_81BF7A4(4) == 4 && gMain.newKeys & A_BUTTON) + { + gUnknown_030012B8->state = 1; + } + break; + } +} -- cgit v1.2.3 From c5dddf41f58446139b52d3b60cb8738052e4a084 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 18 Sep 2017 11:26:45 -0400 Subject: sub_81BF5A4 --- src/berry_fix_program.c | 272 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 269 insertions(+), 3 deletions(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index bafefaf7a..58e50e509 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -1,13 +1,16 @@ // Includes #include "global.h" -#include "multiboot.h" #include "gpu_regs.h" +#include "multiboot.h" +#include "malloc.h" +#include "bg.h" #include "main.h" #include "sprite.h" #include "task.h" #include "unknown_task.h" -#include "malloc.h" +#include "window.h" +#include "menu.h" #include "m4a.h" // Static type declarations @@ -26,7 +29,7 @@ extern berryfix_t *gUnknown_030012B8; // Static ROM declarations static void sub_81BF3DC(void); -void sub_81BF5A4(void); +static void sub_81BF5A4(void); u32 sub_81BF7A4(u8); // .rodata @@ -35,6 +38,14 @@ extern const u8 gUnknown_089A6550[0xC0]; extern const u8 gMultiBootProgram_BerryGlitchFix_Script[0x3b34]; extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; extern const u8 gMultiBootProgram_BerryGlitchFix_End[]; +extern const u8 gUnknown_08617E78[]; +extern const u8 gUnknown_08617E8D[]; +extern const u8 gUnknown_08617E9B[]; +extern const struct BgTemplate gUnknown_08618108[2]; +extern const struct WindowTemplate gUnknown_08618110[7]; +extern const u16 gUnknown_08618138[16]; +extern const u8 gUnknown_08618158[3]; +extern const u8 gUnknown_0861815B[3]; // .text @@ -121,3 +132,258 @@ static void sub_81BF3DC(void) break; } } + +#ifdef NONMATCHING +static void sub_81BF5A4(void) +{ + s32 width; + + SetGpuReg(REG_OFFSET_BG0CNT, 0x0000); + SetGpuReg(REG_OFFSET_BG1CNT, 0x0000); + SetGpuReg(REG_OFFSET_BG0HOFS, 0x0000); + SetGpuReg(REG_OFFSET_BG0VOFS, 0x0000); + SetGpuReg(REG_OFFSET_BG1HOFS, 0x0000); + SetGpuReg(REG_OFFSET_BG1VOFS, 0x0000); + SetGpuReg(REG_OFFSET_BLDCNT, 0x0000); + + DmaFill32(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill32(3, 0, PLTT, PLTT_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + + InitBgsFromTemplates(0, gUnknown_08618108, ARRAY_COUNT(gUnknown_08618108)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + InitWindows(gUnknown_08618110); + DeactivateAllTextPrinters(); + + DmaCopy32(3, gUnknown_08618138, BG_PLTT + 0x1E0, 0x20); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); + FillWindowPixelBuffer(2, 0); + FillWindowPixelBuffer(3, 0); + FillWindowPixelBuffer(0, 0xAA); + +// This block is a meme among memes + width = (0x78 - GetStringWidth(0, gUnknown_08617E9B, 0)) / 2; + box_print(2, 0, width, 3, gUnknown_0861815B, -1, gUnknown_08617E9B); + width = (s32)(0x78 - GetStringWidth(0, gUnknown_08617E9B, 0)) / 2 + 0x78; + box_print(2, 0, width, 3, gUnknown_0861815B, -1, gUnknown_08617E8D); + width = (0x70 - GetStringWidth(0, gUnknown_08617E8D, 0)) / 2; + box_print(3, 0, width, 0, gUnknown_0861815B, -1, gUnknown_08617E8D); + width = (0xd0 - GetStringWidth(1, gUnknown_08617E78, 0)) / 2; + box_print(0, 1, width, 2, gUnknown_08618158, -1, gUnknown_08617E78); + + CopyWindowToVram(2, 2); + CopyWindowToVram(3, 2); + CopyWindowToVram(0, 2); +} +#else +__attribute__((naked)) static void sub_81BF5A4(void) +{ + asm(".syntax unified\n" + "\tpush {r4-r6,lr}\n" + "\tmov r6, r8\n" + "\tpush {r6}\n" + "\tsub sp, 0x10\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x10\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x12\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x14\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x16\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp, 0xC]\n" + "\tldr r4, =0x040000d4\n" + "\tadd r0, sp, 0xC\n" + "\tstr r0, [r4]\n" + "\tmovs r0, 0xC0\n" + "\tlsls r0, 19\n" + "\tstr r0, [r4, 0x4]\n" + "\tldr r0, =0x85006000\n" + "\tstr r0, [r4, 0x8]\n" + "\tldr r0, [r4, 0x8]\n" + "\tstr r1, [sp, 0xC]\n" + "\tadd r0, sp, 0xC\n" + "\tstr r0, [r4]\n" + "\tmovs r0, 0xE0\n" + "\tlsls r0, 19\n" + "\tstr r0, [r4, 0x4]\n" + "\tldr r2, =0x85000100\n" + "\tstr r2, [r4, 0x8]\n" + "\tldr r0, [r4, 0x8]\n" + "\tstr r1, [sp, 0xC]\n" + "\tadd r0, sp, 0xC\n" + "\tstr r0, [r4]\n" + "\tmovs r0, 0xA0\n" + "\tlsls r0, 19\n" + "\tstr r0, [r4, 0x4]\n" + "\tstr r2, [r4, 0x8]\n" + "\tldr r0, [r4, 0x8]\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, =gUnknown_08618108\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x2\n" + "\tbl InitBgsFromTemplates\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl ChangeBgX\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl ChangeBgY\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl ChangeBgX\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl ChangeBgY\n" + "\tldr r0, =gUnknown_08618110\n" + "\tbl InitWindows\n" + "\tbl DeactivateAllTextPrinters\n" + "\tldr r0, =gUnknown_08618138\n" + "\tstr r0, [r4]\n" + "\tldr r0, =0x050001e0\n" + "\tstr r0, [r4, 0x4]\n" + "\tldr r0, =0x84000008\n" + "\tstr r0, [r4, 0x8]\n" + "\tldr r0, [r4, 0x8]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x40\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0\n" + "\tbl FillWindowPixelBuffer\n" + "\tmovs r0, 0x3\n" + "\tmovs r1, 0\n" + "\tbl FillWindowPixelBuffer\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0xAA\n" + "\tbl FillWindowPixelBuffer\n" + "\tldr r5, =gUnknown_08617E9B\n" + "\tmovs r0, 0\n" + "\tadds r1, r5, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r4, 0x78\n" + "\tsubs r0, r4, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r2, r0, 24\n" + "\tlsrs r2, 24\n" + "\tldr r6, =gUnknown_0861815B\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmov r8, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r5, [sp, 0x8]\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x3\n" + "\tbl box_print\n" + "\tldr r5, =gUnknown_08617E8D\n" + "\tmovs r0, 0\n" + "\tadds r1, r5, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tsubs r4, r1\n" + "\tlsrs r0, r4, 31\n" + "\tadds r4, r0\n" + "\tasrs r4, 1\n" + "\tadds r0, r4, 0\n" + "\tadds r0, 0x78\n" + "\tlsls r2, r0, 24\n" + "\tlsrs r2, 24\n" + "\tstr r6, [sp]\n" + "\tmov r0, r8\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r5, [sp, 0x8]\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x3\n" + "\tbl box_print\n" + "\tmovs r0, 0\n" + "\tadds r1, r5, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0x70\n" + "\tsubs r0, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r2, r0, 24\n" + "\tlsrs r2, 24\n" + "\tstr r6, [sp]\n" + "\tmov r0, r8\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r5, [sp, 0x8]\n" + "\tmovs r0, 0x3\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl box_print\n" + "\tldr r4, =gUnknown_08617E78\n" + "\tmovs r0, 0x1\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0xD0\n" + "\tsubs r0, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r2, r0, 24\n" + "\tlsrs r2, 24\n" + "\tldr r0, =gUnknown_08618158\n" + "\tstr r0, [sp]\n" + "\tmov r0, r8\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r4, [sp, 0x8]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x1\n" + "\tmovs r3, 0x2\n" + "\tbl box_print\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x2\n" + "\tbl CopyWindowToVram\n" + "\tmovs r0, 0x3\n" + "\tmovs r1, 0x2\n" + "\tbl CopyWindowToVram\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x2\n" + "\tbl CopyWindowToVram\n" + "\tadd sp, 0x10\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.pool\n" + ".syntax divided"); +} +#endif -- cgit v1.2.3 From 097a38f054c8a858917049fdf8973cb16a26c771 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 18 Sep 2017 13:54:39 -0400 Subject: nonmatching sub_81BF7A4 --- src/berry_fix_program.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) (limited to 'src/berry_fix_program.c') 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 + -- cgit v1.2.3 From 39e6bdf094ac1b53109782c9b5b98c211bbe3149 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 18 Sep 2017 14:04:00 -0400 Subject: sub_81BF7E8 --- src/berry_fix_program.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index b63bc12be..6f4c1c79e 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -31,7 +31,7 @@ extern berryfix_t *gUnknown_030012B8; static void sub_81BF3DC(void); static void sub_81BF5A4(void); static int sub_81BF7A4(int); -void sub_81BF7E8(int); +static void sub_81BF7E8(int); void sub_81BF8D8(int); // .rodata @@ -48,6 +48,8 @@ extern const struct WindowTemplate gUnknown_08618110[7]; extern const u16 gUnknown_08618138[16]; extern const u8 gUnknown_08618158[3]; extern const u8 gUnknown_0861815B[3]; +extern const u8 *const gUnknown_08618160[6]; +extern const u8 *const gUnknown_08618178[6][3]; // .text @@ -454,3 +456,32 @@ __attribute__((naked)) static int sub_81BF7A4(int checkval) } #endif +static void sub_81BF7E8(int scene) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + FillWindowPixelBuffer(1, 0xAA); + box_print(1, 1, 0, 0, gUnknown_08618158, -1, gUnknown_08618160[scene]); + PutWindowTilemap(1); + CopyWindowToVram(1, 2); + switch (scene) + { + case 0: + case 2: + case 3: + case 4: + PutWindowTilemap(2); + break; + case 1: + PutWindowTilemap(3); + break; + case 5: + PutWindowTilemap(0); + break; + } + CopyBgTilemapBufferToVram(0); + LZ77UnCompVram(gUnknown_08618178[scene][0], (void *)BG_CHAR_ADDR(1)); + LZ77UnCompVram(gUnknown_08618178[scene][1], (void *)BG_SCREEN_ADDR(31)); + CpuCopy32(gUnknown_08618178[scene][2], (void *)BG_PLTT, 0x100); + ShowBg(0); + ShowBg(1); +} -- cgit v1.2.3 From 0e2d84f24d22b6ec47e6adf32bc5f4d6b4c6289b Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 18 Sep 2017 14:07:34 -0400 Subject: Remaining functions --- src/berry_fix_program.c | 86 ++++++++++++++----------------------------------- 1 file changed, 24 insertions(+), 62 deletions(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 6f4c1c79e..e4ec0d8c4 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -32,7 +32,7 @@ static void sub_81BF3DC(void); static void sub_81BF5A4(void); static int sub_81BF7A4(int); static void sub_81BF7E8(int); -void sub_81BF8D8(int); +static void sub_81BF8D8(void); // .rodata @@ -184,31 +184,6 @@ static void sub_81BF5A4(void) 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) { @@ -416,45 +391,26 @@ __attribute__((naked)) static void sub_81BF5A4(void) "\t.pool\n" ".syntax divided"); } +#endif -__attribute__((naked)) static int sub_81BF7A4(int checkval) +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"); + if (gUnknown_030012B8->unk1 == checkval) + { + return checkval; + } + if (gUnknown_030012B8->unk1 == 6) + { + sub_81BF7E8(checkval); + gUnknown_030012B8->unk1 = checkval; + } + else + { + sub_81BF8D8(); + gUnknown_030012B8->unk1 = 6; + } + return gUnknown_030012B8->unk1; } -#endif static void sub_81BF7E8(int scene) { @@ -485,3 +441,9 @@ static void sub_81BF7E8(int scene) ShowBg(0); ShowBg(1); } + +static void sub_81BF8D8() +{ + HideBg(0); + HideBg(1); +} -- cgit v1.2.3 From 810bfffd1242ebfd29fcc2db6fef19b34545ad0b Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 18 Sep 2017 15:10:25 -0400 Subject: data decomp --- src/berry_fix_program.c | 103 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 93 insertions(+), 10 deletions(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index e4ec0d8c4..fa13c7e1e 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -36,20 +36,103 @@ static void sub_81BF8D8(void); // .rodata +const u8 gUnknown_08617E78[] = _("Berry Program Update"); +const u8 gUnknown_08617E8D[] = _("Ruby/Sapphire"); +const u8 gUnknown_08617E9B[] = _("Emerald"); + +const u8 Unknown_08617EA3[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button."); +const u8 Unknown_08617F07[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again."); +const u8 Unknown_08617F97[] = _("Please turn on the power of POKéMON\nRuby/Sapphire while holding START and\nSELECT simultaneously. Then, ensure\nthe picture above appears."); +const u8 Unknown_08618020[] = _("Transmitting. Please wait.\n{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\nunplug the Game Boy Advance Game\nLink Cable."); +const u8 Unknown_08618092[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen."); +const u8 Unknown_086180D7[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again."); + +const struct BgTemplate gUnknown_08618108[] = { + { + 0, 0, 30, 0, 0, 0 + }, { + 1, 1, 31, 0, 0, 1 + } +}; + +const struct WindowTemplate gUnknown_08618110[] = { + {0, 2, 4, 26, 2, 15, 0x001}, + {0, 1, 11, 28, 8, 15, 0x035}, + {0, 0, 8, 30, 2, 15, 0x115}, + {0, 8, 0, 14, 2, 15, 0x151}, + {-1} +}; + +const u16 gUnknown_08618138[] = { + 0x7fff, 0x7fff, 0x318c, 0x675a, + 0x043c, 0x3aff, 0x0664, 0x4bd2, + 0x6546, 0x7b14, 0x7fff, 0x318c, + 0x675a, 0x0000, 0x0000, 0x0000 +}; + +const u8 gUnknown_08618158[] = {10, 11, 12}; +const u8 gUnknown_0861815B[] = { 0, 10, 13}; + +const u8 *const gUnknown_08618160[] = { + Unknown_08617F07, + Unknown_08617F97, + Unknown_08618020, + Unknown_08618092, + Unknown_086180D7, + Unknown_08617EA3 +}; + +extern const u8 gUnknown_08DD87C0[]; +extern const u8 gUnknown_08DD8EE0[]; +extern const u8 gUnknown_08DD8780[]; +extern const u8 gUnknown_08DD90E0[]; +extern const u8 gUnknown_08DD9718[]; +extern const u8 gUnknown_08DD9080[]; +extern const u8 gUnknown_08DD98B4[]; +extern const u8 gUnknown_08DD9E58[]; +extern const u8 gUnknown_08DD9874[]; +extern const u8 gUnknown_08DDA02C[]; +extern const u8 gUnknown_08DDA63C[]; +extern const u8 gUnknown_08DD9FEC[]; +extern const u8 gUnknown_08DDA840[]; +extern const u8 gUnknown_08DDAE40[]; +extern const u8 gUnknown_08DDA800[]; +extern const u8 gUnknown_08DDB020[]; +extern const u8 gUnknown_08DDB2C4[]; +extern const u8 gUnknown_08DDAFE0[]; + +const u8 *const gUnknown_08618178[][3] = { + { + gUnknown_08DD87C0, + gUnknown_08DD8EE0, + gUnknown_08DD8780 + }, { + gUnknown_08DD90E0, + gUnknown_08DD9718, + gUnknown_08DD9080 + }, { + gUnknown_08DD98B4, + gUnknown_08DD9E58, + gUnknown_08DD9874 + }, { + gUnknown_08DDA02C, + gUnknown_08DDA63C, + gUnknown_08DD9FEC + }, { + gUnknown_08DDA840, + gUnknown_08DDAE40, + gUnknown_08DDA800 + }, { + gUnknown_08DDB020, + gUnknown_08DDB2C4, + gUnknown_08DDAFE0 + }, +}; + extern const u8 gUnknown_089A6550[0xC0]; extern const u8 gMultiBootProgram_BerryGlitchFix_Script[0x3b34]; extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; extern const u8 gMultiBootProgram_BerryGlitchFix_End[]; -extern const u8 gUnknown_08617E78[]; -extern const u8 gUnknown_08617E8D[]; -extern const u8 gUnknown_08617E9B[]; -extern const struct BgTemplate gUnknown_08618108[2]; -extern const struct WindowTemplate gUnknown_08618110[7]; -extern const u16 gUnknown_08618138[16]; -extern const u8 gUnknown_08618158[3]; -extern const u8 gUnknown_0861815B[3]; -extern const u8 *const gUnknown_08618160[6]; -extern const u8 *const gUnknown_08618178[6][3]; // .text -- cgit v1.2.3 From d48c4ab7a95c0b3cc59e96ca2bf30fdbc7ff1581 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 18 Sep 2017 15:28:55 -0400 Subject: Slight cleanup and relabeling of functions --- src/berry_fix_program.c | 136 ++++++++++++++++++++++++------------------------ 1 file changed, 68 insertions(+), 68 deletions(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index fa13c7e1e..931e92746 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -24,30 +24,30 @@ typedef struct { // Static RAM declarations -extern berryfix_t *gUnknown_030012B8; +static berryfix_t *berry_fix_mb_manager; // Static ROM declarations -static void sub_81BF3DC(void); -static void sub_81BF5A4(void); -static int sub_81BF7A4(int); -static void sub_81BF7E8(int); -static void sub_81BF8D8(void); +static void berry_fix_main(void); +static void berry_fix_gpu_set(void); +static int berry_fix_text_update(int); +static void berry_fix_text_print(int); +static void berry_fix_bg_hide(void); // .rodata -const u8 gUnknown_08617E78[] = _("Berry Program Update"); -const u8 gUnknown_08617E8D[] = _("Ruby/Sapphire"); -const u8 gUnknown_08617E9B[] = _("Emerald"); +static const u8 gUnknown_08617E78[] = _("Berry Program Update"); +static const u8 gUnknown_08617E8D[] = _("Ruby/Sapphire"); +static const u8 gUnknown_08617E9B[] = _("Emerald"); -const u8 Unknown_08617EA3[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button."); -const u8 Unknown_08617F07[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again."); -const u8 Unknown_08617F97[] = _("Please turn on the power of POKéMON\nRuby/Sapphire while holding START and\nSELECT simultaneously. Then, ensure\nthe picture above appears."); -const u8 Unknown_08618020[] = _("Transmitting. Please wait.\n{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\nunplug the Game Boy Advance Game\nLink Cable."); -const u8 Unknown_08618092[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen."); -const u8 Unknown_086180D7[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again."); +static const u8 Unknown_08617EA3[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button."); +static const u8 Unknown_08617F07[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again."); +static const u8 Unknown_08617F97[] = _("Please turn on the power of POKéMON\nRuby/Sapphire while holding START and\nSELECT simultaneously. Then, ensure\nthe picture above appears."); +static const u8 Unknown_08618020[] = _("Transmitting. Please wait.\n{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\nunplug the Game Boy Advance Game\nLink Cable."); +static const u8 Unknown_08618092[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen."); +static const u8 Unknown_086180D7[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again."); -const struct BgTemplate gUnknown_08618108[] = { +static const struct BgTemplate gUnknown_08618108[] = { { 0, 0, 30, 0, 0, 0 }, { @@ -55,7 +55,7 @@ const struct BgTemplate gUnknown_08618108[] = { } }; -const struct WindowTemplate gUnknown_08618110[] = { +static const struct WindowTemplate gUnknown_08618110[] = { {0, 2, 4, 26, 2, 15, 0x001}, {0, 1, 11, 28, 8, 15, 0x035}, {0, 0, 8, 30, 2, 15, 0x115}, @@ -63,17 +63,17 @@ const struct WindowTemplate gUnknown_08618110[] = { {-1} }; -const u16 gUnknown_08618138[] = { +static const u16 gUnknown_08618138[] = { 0x7fff, 0x7fff, 0x318c, 0x675a, 0x043c, 0x3aff, 0x0664, 0x4bd2, 0x6546, 0x7b14, 0x7fff, 0x318c, 0x675a, 0x0000, 0x0000, 0x0000 }; -const u8 gUnknown_08618158[] = {10, 11, 12}; -const u8 gUnknown_0861815B[] = { 0, 10, 13}; +static const u8 gUnknown_08618158[] = {10, 11, 12}; +static const u8 gUnknown_0861815B[] = { 0, 10, 13}; -const u8 *const gUnknown_08618160[] = { +static const u8 *const gUnknown_08618160[] = { Unknown_08617F07, Unknown_08617F97, Unknown_08618020, @@ -101,7 +101,7 @@ extern const u8 gUnknown_08DDB020[]; extern const u8 gUnknown_08DDB2C4[]; extern const u8 gUnknown_08DDAFE0[]; -const u8 *const gUnknown_08618178[][3] = { +static const u8 *const gUnknown_08618178[][3] = { { gUnknown_08DD87C0, gUnknown_08DD8EE0, @@ -136,7 +136,7 @@ extern const u8 gMultiBootProgram_BerryGlitchFix_End[]; // .text -void sub_81BF384(void) +void InitBerryFixProgram(void) { DisableInterrupts(0xFFFF); EnableInterrupts(0x0001); @@ -146,82 +146,82 @@ void sub_81BF384(void) ResetTasks(); remove_some_task(); SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); - gUnknown_030012B8 = AllocZeroed(0x50); - gUnknown_030012B8->state = 0; - gUnknown_030012B8->unk1 = 6; - SetMainCallback2(sub_81BF3DC); + berry_fix_mb_manager = AllocZeroed(0x50); + berry_fix_mb_manager->state = 0; + berry_fix_mb_manager->unk1 = 6; + SetMainCallback2(berry_fix_main); } -static void sub_81BF3DC(void) +static void berry_fix_main(void) { - switch (gUnknown_030012B8->state) + switch (berry_fix_mb_manager->state) { case 0: - sub_81BF5A4(); - gUnknown_030012B8->state = 1; + berry_fix_gpu_set(); + berry_fix_mb_manager->state = 1; break; case 1: - if (sub_81BF7A4(5) == 5 && (gMain.newKeys & A_BUTTON)) + if (berry_fix_text_update(5) == 5 && (gMain.newKeys & A_BUTTON)) { - gUnknown_030012B8->state = 2; + berry_fix_mb_manager->state = 2; } break; case 2: - if (sub_81BF7A4(0) == 0 && (gMain.newKeys & A_BUTTON)) + if (berry_fix_text_update(0) == 0 && (gMain.newKeys & A_BUTTON)) { - gUnknown_030012B8->state = 3; + berry_fix_mb_manager->state = 3; } break; case 3: - if (sub_81BF7A4(1) == 1) + if (berry_fix_text_update(1) == 1) { - gUnknown_030012B8->mb.masterp = gUnknown_089A6550; - gUnknown_030012B8->mb.server_type = 0; - MultiBootInit(&gUnknown_030012B8->mb); - gUnknown_030012B8->unk2 = 0; - gUnknown_030012B8->state = 4; + berry_fix_mb_manager->mb.masterp = gUnknown_089A6550; + berry_fix_mb_manager->mb.server_type = 0; + MultiBootInit(&berry_fix_mb_manager->mb); + berry_fix_mb_manager->unk2 = 0; + berry_fix_mb_manager->state = 4; } break; case 4: - MultiBootMain(&gUnknown_030012B8->mb); - if (gUnknown_030012B8->mb.probe_count != 0 || (!(gUnknown_030012B8->mb.response_bit & 2) || !(gUnknown_030012B8->mb.client_bit & 2))) + MultiBootMain(&berry_fix_mb_manager->mb); + if (berry_fix_mb_manager->mb.probe_count != 0 || (!(berry_fix_mb_manager->mb.response_bit & 2) || !(berry_fix_mb_manager->mb.client_bit & 2))) { - gUnknown_030012B8->unk2 = 0; + berry_fix_mb_manager->unk2 = 0; } - else if (++ gUnknown_030012B8->unk2 > 180) + else if (++ berry_fix_mb_manager->unk2 > 180) { - MultiBootStartMaster(&gUnknown_030012B8->mb, gMultiBootProgram_BerryGlitchFix_Start, (u32)(gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start), 4, 1); - gUnknown_030012B8->state = 5; + MultiBootStartMaster(&berry_fix_mb_manager->mb, gMultiBootProgram_BerryGlitchFix_Start, (u32)(gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start), 4, 1); + berry_fix_mb_manager->state = 5; } break; case 5: - if (sub_81BF7A4(2) == 2) { - MultiBootMain(&gUnknown_030012B8->mb); - if (MultiBootCheckComplete(&gUnknown_030012B8->mb)) { - gUnknown_030012B8->state = 6; + if (berry_fix_text_update(2) == 2) { + MultiBootMain(&berry_fix_mb_manager->mb); + if (MultiBootCheckComplete(&berry_fix_mb_manager->mb)) { + berry_fix_mb_manager->state = 6; } - else if (!(gUnknown_030012B8->mb.client_bit & 2)) { - gUnknown_030012B8->state = 7; + else if (!(berry_fix_mb_manager->mb.client_bit & 2)) { + berry_fix_mb_manager->state = 7; } } break; case 6: - if (sub_81BF7A4(3) == 3 && gMain.newKeys & A_BUTTON) + if (berry_fix_text_update(3) == 3 && gMain.newKeys & A_BUTTON) { DoSoftReset(); } break; case 7: - if (sub_81BF7A4(4) == 4 && gMain.newKeys & A_BUTTON) + if (berry_fix_text_update(4) == 4 && gMain.newKeys & A_BUTTON) { - gUnknown_030012B8->state = 1; + berry_fix_mb_manager->state = 1; } break; } } #ifdef NONMATCHING -static void sub_81BF5A4(void) +static void berry_fix_gpu_set(void) { s32 width; @@ -268,7 +268,7 @@ static void sub_81BF5A4(void) } #else -__attribute__((naked)) static void sub_81BF5A4(void) +__attribute__((naked)) static void berry_fix_gpu_set(void) { asm(".syntax unified\n" "\tpush {r4-r6,lr}\n" @@ -476,26 +476,26 @@ __attribute__((naked)) static void sub_81BF5A4(void) } #endif -static int sub_81BF7A4(int checkval) +static int berry_fix_text_update(int checkval) { - if (gUnknown_030012B8->unk1 == checkval) + if (berry_fix_mb_manager->unk1 == checkval) { return checkval; } - if (gUnknown_030012B8->unk1 == 6) + if (berry_fix_mb_manager->unk1 == 6) { - sub_81BF7E8(checkval); - gUnknown_030012B8->unk1 = checkval; + berry_fix_text_print(checkval); + berry_fix_mb_manager->unk1 = checkval; } else { - sub_81BF8D8(); - gUnknown_030012B8->unk1 = 6; + berry_fix_bg_hide(); + berry_fix_mb_manager->unk1 = 6; } - return gUnknown_030012B8->unk1; + return berry_fix_mb_manager->unk1; } -static void sub_81BF7E8(int scene) +static void berry_fix_text_print(int scene) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); FillWindowPixelBuffer(1, 0xAA); @@ -525,7 +525,7 @@ static void sub_81BF7E8(int scene) ShowBg(1); } -static void sub_81BF8D8() +static void berry_fix_bg_hide() { HideBg(0); HideBg(1); -- cgit v1.2.3 From 54bd2c17812bd399fa6e857332c3bdacc1df71b3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 19 Sep 2017 21:10:30 -0400 Subject: Address review by diego --- src/berry_fix_program.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 931e92746..f04308ae8 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -130,8 +130,7 @@ static const u8 *const gUnknown_08618178[][3] = { }; extern const u8 gUnknown_089A6550[0xC0]; -extern const u8 gMultiBootProgram_BerryGlitchFix_Script[0x3b34]; -extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; +extern const u8 gMultiBootProgram_BerryGlitchFix_Start[0x3b34]; extern const u8 gMultiBootProgram_BerryGlitchFix_End[]; // .text -- cgit v1.2.3 From d1efbcd282aa68634b275af25ca1bf187e85cb9e Mon Sep 17 00:00:00 2001 From: Diegoisawesome Date: Mon, 25 Sep 2017 16:26:45 -0500 Subject: Extract scattered baseroms and cleanup --- src/berry_fix_program.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/berry_fix_program.c') diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index f04308ae8..eca20af9d 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -129,8 +129,7 @@ static const u8 *const gUnknown_08618178[][3] = { }, }; -extern const u8 gUnknown_089A6550[0xC0]; -extern const u8 gMultiBootProgram_BerryGlitchFix_Start[0x3b34]; +extern const u8 gMultiBootProgram_BerryGlitchFix_Start[0x3BF4]; extern const u8 gMultiBootProgram_BerryGlitchFix_End[]; // .text @@ -174,7 +173,7 @@ static void berry_fix_main(void) case 3: if (berry_fix_text_update(1) == 1) { - berry_fix_mb_manager->mb.masterp = gUnknown_089A6550; + berry_fix_mb_manager->mb.masterp = gMultiBootProgram_BerryGlitchFix_Start; berry_fix_mb_manager->mb.server_type = 0; MultiBootInit(&berry_fix_mb_manager->mb); berry_fix_mb_manager->unk2 = 0; @@ -189,7 +188,7 @@ static void berry_fix_main(void) } else if (++ berry_fix_mb_manager->unk2 > 180) { - MultiBootStartMaster(&berry_fix_mb_manager->mb, gMultiBootProgram_BerryGlitchFix_Start, (u32)(gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start), 4, 1); + MultiBootStartMaster(&berry_fix_mb_manager->mb, gMultiBootProgram_BerryGlitchFix_Start + ROM_HEADER_SIZE, (u32)(gMultiBootProgram_BerryGlitchFix_End - (gMultiBootProgram_BerryGlitchFix_Start + ROM_HEADER_SIZE)), 4, 1); berry_fix_mb_manager->state = 5; } break; -- cgit v1.2.3