diff options
author | tgsm <doodrabbit@hotmail.com> | 2021-07-07 06:59:31 -0500 |
---|---|---|
committer | tgsm <doodrabbit@hotmail.com> | 2021-07-07 06:59:31 -0500 |
commit | eef820ba4669a78a62d106ea1ddb0380bd28ef20 (patch) | |
tree | 8e6647f154d64e8e45cf1b874191afb2fe5e4aee | |
parent | d62768df00ac272f38b09e90d0889caa59f7ff73 (diff) |
Decompile unk_02033F50 -> communication_error
-rw-r--r-- | arm9/arm9.lsf | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02033F50.s | 266 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/modules/80/asm/module_80.s | 2 | ||||
-rw-r--r-- | arm9/src/communication_error.c | 159 | ||||
-rw-r--r-- | arm9/src/main.c | 9 | ||||
-rw-r--r-- | arm9/src/unk_02031734.c | 6 | ||||
-rw-r--r-- | include/communication_error.h | 7 |
8 files changed, 176 insertions, 277 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 0153f5e3..d7310855 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -138,7 +138,7 @@ Static arm9 Object unk_020337E8.o Object unk_02033874.o Object unk_02033B68.o - Object unk_02033F50.o + Object communication_error.o Object wfc_user_info_warning.o Object map_matrix.o Object map_header.o diff --git a/arm9/asm/unk_02033F50.s b/arm9/asm/unk_02033F50.s deleted file mode 100644 index 7240c93f..00000000 --- a/arm9/asm/unk_02033F50.s +++ /dev/null @@ -1,266 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .rodata - - .global UNK_020EEC9C -UNK_020EEC9C: ; 0x020EEC9C - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020EECA4 -UNK_020EECA4: ; 0x020EECA4 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020EECB4 -UNK_020EECB4: ; 0x020EECB4 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020EECD0 -UNK_020EECD0: ; 0x020EECD0 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .text - - thumb_func_start FUN_02033F50 -FUN_02033F50: ; 0x02033F50 - ldr r3, _02033F64 ; =0x027E0000 - ldr r1, _02033F68 ; =0x00003FF8 - mov r0, #0x1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - ldr r3, _02033F6C ; =MI_WaitDma - mov r0, #0x3 - bx r3 - nop -_02033F64: .word 0x027E0000 -_02033F68: .word 0x00003FF8 -_02033F6C: .word MI_WaitDma - - thumb_func_start FUN_02033F70 -FUN_02033F70: ; 0x02033F70 - push {r3-r7, lr} - sub sp, #0x28 - add r4, r0, #0x0 - str r2, [sp, #0xc] - cmp r1, #0x4 - bhi _02033F92 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02033F88: ; jump table (using 16-bit offset) - .short _02033F92 - _02033F88 - 2; case 0 - .short _02033F96 - _02033F88 - 2; case 1 - .short _02033F9A - _02033F88 - 2; case 2 - .short _02033F9E - _02033F88 - 2; case 3 - .short _02033FA2 - _02033F88 - 2; case 4 -_02033F92: - mov r5, #0x1 - b _02033FA4 -_02033F96: - mov r5, #0x2 - b _02033FA4 -_02033F9A: - mov r5, #0x3 - b _02033FA4 -_02033F9E: - mov r5, #0x4 - b _02033FA4 -_02033FA2: - mov r5, #0x5 -_02033FA4: - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - bl OS_DisableIrqMask - ldr r1, _02034154 ; =FUN_02033F50 - mov r0, #0x1 - bl OS_SetIrqFunction - mov r0, #0x1 - bl OS_EnableIrqMask - mov r0, #0x0 - add r1, r0, #0x0 - bl Main_SetVBlankIntrCB - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_02015F34 - bl GX_DisableEngineALayers - bl GX_DisableEngineBLayers - mov r2, #0x1 - lsl r2, r2, #0x1a - ldr r1, [r2, #0x0] - ldr r0, _02034158 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0203415C ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl SetKeyRepeatTimers - ldr r0, _02034160 ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl GX_SwapDisplay - ldr r3, _02034164 ; =0x04000050 - mov r1, #0x0 - strh r1, [r3, #0x0] - ldr r0, _02034168 ; =0x04001050 - sub r3, #0x50 - strh r1, [r0, #0x0] - ldr r2, [r3, #0x0] - ldr r1, _0203416C ; =0xFFFF1FFF - sub r0, #0x50 - and r2, r1 - str r2, [r3, #0x0] - ldr r2, [r0, #0x0] - and r1, r2 - str r1, [r0, #0x0] - ldr r0, _02034170 ; =UNK_020EECD0 - bl GX_SetBanks - add r0, r4, #0x0 - bl BgConfig_Alloc - add r6, r0, #0x0 - ldr r0, _02034174 ; =UNK_020EECA4 - bl SetBothScreensModesAndDisable - mov r1, #0x0 - ldr r2, _02034178 ; =UNK_020EECB4 - add r0, r6, #0x0 - add r3, r1, #0x0 - bl InitBgFromTemplate - add r0, r6, #0x0 - mov r1, #0x0 - bl BgClearTilemapBufferAndCommit - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r2, _0203417C ; =0x000001F7 - add r0, r6, #0x0 - mov r3, #0x2 - str r4, [sp, #0x4] - bl FUN_0200CB00 - mov r0, #0x0 - mov r1, #0x20 - add r2, r4, #0x0 - bl FUN_02002ED0 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - add r3, r4, #0x0 - bl BG_ClearCharDataRange - ldr r1, _02034180 ; =0x00006C21 - mov r0, #0x0 - bl BG_SetMaskColor - ldr r1, _02034180 ; =0x00006C21 - mov r0, #0x4 - bl BG_SetMaskColor - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0xc8 - add r3, r4, #0x0 - bl NewMsgDataFromNarc - str r0, [sp, #0x10] - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - add r7, r0, #0x0 - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - str r0, [sp, #0x14] - bl FUN_0201BD5C - add r0, r4, #0x0 - bl ScrStrBufs_new - add r4, r0, #0x0 - ldr r2, _02034184 ; =UNK_020EEC9C - add r0, r6, #0x0 - add r1, sp, #0x18 - bl AddWindow - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0x18 - mov r1, #0xf - add r3, r2, #0x0 - bl FillWindowPixelRect - ldr r2, _0203417C ; =0x000001F7 - add r0, sp, #0x18 - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - mov r0, #0x2 - str r0, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - ldr r2, [sp, #0xc] - add r0, r4, #0x0 - mov r1, #0x0 - mov r3, #0x5 - bl BufferIntegerAsString - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x14] - add r1, r5, #0x0 - bl ReadMsgDataIntoString - ldr r2, [sp, #0x14] - add r0, r4, #0x0 - add r1, r7, #0x0 - bl StringExpandPlaceholders - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0x18 - add r2, r7, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r7, #0x0 - bl String_dtor - bl GX_BothDispOn - mov r0, #0x0 - bl FUN_0200E394 - mov r0, #0x1 - bl FUN_0200E394 - mov r0, #0x0 - mov r1, #0x3f - mov r2, #0x3 - bl FUN_0200A274 - add r0, sp, #0x18 - bl RemoveWindow - ldr r0, [sp, #0x10] - bl DestroyMsgData - add r0, r4, #0x0 - bl ScrStrBufs_delete - add r0, r6, #0x0 - bl FreeToHeap - add sp, #0x28 - pop {r3-r7, pc} - nop -_02034154: .word FUN_02033F50 -_02034158: .word 0xFFFFE0FF -_0203415C: .word 0x04001000 -_02034160: .word gMain + 0x60 -_02034164: .word 0x04000050 -_02034168: .word 0x04001050 -_0203416C: .word 0xFFFF1FFF -_02034170: .word UNK_020EECD0 -_02034174: .word UNK_020EECA4 -_02034178: .word UNK_020EECB4 -_0203417C: .word 0x000001F7 -_02034180: .word 0x00006C21 -_02034184: .word UNK_020EEC9C diff --git a/arm9/global.inc b/arm9/global.inc index da12b3fd..4595d537 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2471,7 +2471,7 @@ .extern FUN_02033EEC .extern FUN_02033F04 .extern FUN_02033F20 -.extern FUN_02033F70 +.extern ShowCommunicationError .extern ShowWFCUserInfoWarning .extern MapMatrix_New .extern MapMatrix_Load diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index a1fe2ee3..fae0c264 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -15323,7 +15323,7 @@ _02234FFC: mov r0, #3 mov r1, #1 mov r2, #0 - bl FUN_02033F70 + bl ShowCommunicationError _02235006: mov r0, #3 pop {r3, r4, r5, pc} diff --git a/arm9/src/communication_error.c b/arm9/src/communication_error.c new file mode 100644 index 00000000..0ea26458 --- /dev/null +++ b/arm9/src/communication_error.c @@ -0,0 +1,159 @@ +#include "global.h" +#include "bg_window.h" +#include "communication_error.h" +#include "game_init.h" +#include "MI_dma.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "text.h" + +extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); +extern void FUN_0200A274(fx32 brightness, fx32, u32); +extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); +extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); +extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); +extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); + +static const struct WindowTemplate sCommunicationErrorWindowTemplate = { + .bgId = GF_BG_LYR_MAIN_0, + .tilemapLeft = 3, + .tilemapTop = 3, + .width = 26, + .height = 18, + .paletteNum = 0x01, + .baseTile = 0x23, +}; + +static const struct GraphicsModes sCommunicationErrorGraphicsModes = { + .dispMode = GX_DISPMODE_GRAPHICS, + .bgMode = GX_BGMODE_0, + .subMode = GX_BGMODE_0, + ._2d3dMode = GX_BG0_AS_2D, +}; + +static const struct BgTemplate sCommunicationErrorBgTemplate = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .size = GF_BG_SCR_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x0000, + .charBase = GX_BG_CHARBASE_0x18000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 1, + .areaOver = GX_BG_AREAOVER_XLU, + .unk17 = 0, + .mosaic = FALSE, +}; + +static const struct GraphicsBanks sCommunicationErrorGraphicsBanks = { + .bg = 3, + .bgextpltt = 0, + .subbg = 0, + .subbgextpltt = 0, + .obj = 0, + .objextpltt = 0, + .subobj = 0, + .subobjextpltt = 0, + .tex = 0, + .texpltt = 0, +}; + +THUMB_FUNC void FUN_02033F50(void) +{ + DTCM.intr_check |= 1; + MI_WaitDma(3); +} + +THUMB_FUNC void ShowCommunicationError(u32 heap_id, u32 error, u32 error_code) +{ + struct Window window; + + u32 error_message_no; + switch (error) + { + default: + case 0: + error_message_no = 1; + break; + case 1: + error_message_no = 2; + break; + case 2: + error_message_no = 3; + break; + case 3: + error_message_no = 4; + break; + case 4: + error_message_no = 5; + break; + } + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + OS_DisableIrqMask(OS_IE_V_BLANK); + OS_SetIrqFunction(OS_IE_V_BLANK, FUN_02033F50); + OS_EnableIrqMask(OS_IE_V_BLANK); + + Main_SetVBlankIntrCB(NULL, NULL); + FUN_02015F34(NULL, NULL); + + GX_DisableEngineALayers(); + GX_DisableEngineBLayers(); + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + + SetKeyRepeatTimers(4, 8); + + gMain.unk65 = 0; + + GX_SwapDisplay(); + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); + reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); + GX_SetBanks(&sCommunicationErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sCommunicationErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sCommunicationErrorBgTemplate, 0); + BgClearTilemapBufferAndCommit(bg_config, 0); + FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); + FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); + BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, heap_id); + BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0x6C21); + BG_SetMaskColor(GF_BG_LYR_SUB_0, 0x6C21); + + struct MsgData* error_message_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0200_bin, heap_id); + struct String* error_message_str = String_ctor(384, heap_id); + struct String* tmp_str = String_ctor(384, heap_id); + FUN_0201BD5C(); + struct ScrStrBufs* mgr = ScrStrBufs_new(heap_id); + + AddWindow(bg_config, &window, &sCommunicationErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + BufferIntegerAsString(mgr, 0, (s32)error_code, 5, 2, 1); + ReadMsgDataIntoString(error_message_data, error_message_no, tmp_str); + StringExpandPlaceholders(mgr, error_message_str, tmp_str); + + AddTextPrinterParameterized(&window, 0, error_message_str, 0, 0, 0, NULL); + String_dtor(error_message_str); + // BUG: tmp_str is never destroyed. + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + FUN_0200A274(0, 0x3F, 3); + + RemoveWindow(&window); + DestroyMsgData(error_message_data); + ScrStrBufs_delete(mgr); + FreeToHeap(bg_config); +} diff --git a/arm9/src/main.c b/arm9/src/main.c index d1a60190..fb4f8707 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -5,6 +5,7 @@ #include "CARD_backup.h" #include "CARD_pullOut.h" #include "CTRDG_common.h" +#include "communication_error.h" #include "PAD_pad.h" #include "main.h" #include "game_init.h" @@ -226,21 +227,19 @@ THUMB_FUNC void DoSoftReset(u32 parameter) } while (1); } -extern void FUN_02033F70(int, int, int); - THUMB_FUNC void FUN_02000F4C(u32 arg0, u32 arg1) { if (arg1 == 3) { - FUN_02033F70(0, 3, 0); + ShowCommunicationError(0, 3, 0); } else if (arg0 == 0) { - FUN_02033F70(0, 2, 0); + ShowCommunicationError(0, 2, 0); } else { - FUN_02033F70(0, 0, 0); + ShowCommunicationError(0, 0, 0); } FUN_02032DAC(); while (1) diff --git a/arm9/src/unk_02031734.c b/arm9/src/unk_02031734.c index 7d3b4c03..e6a1514b 100644 --- a/arm9/src/unk_02031734.c +++ b/arm9/src/unk_02031734.c @@ -1,6 +1,7 @@ #include "global.h" #include "unk_02031734.h" #include "MI_memory.h" +#include "communication_error.h" #include "game_init.h" #include "heap.h" #include "player_data.h" @@ -52,7 +53,6 @@ extern void MOD04_021DD6F0(); extern s32 MOD04_021D76AC(); extern MOD05_021D74E0(struct SaveBlock2 *sav2, u32 param1); extern void MOD04_021D83A8(void (*param0)(s32)); -extern void FUN_02033F70(int, int, int); extern void FUN_0200541C(); THUMB_FUNC void FUN_02031734(struct SaveBlock2 *sav2, u8 param1) @@ -2090,7 +2090,7 @@ THUMB_FUNC u8 FUN_020335B8() THUMB_FUNC void FUN_020335D0(s32 param0) { - FUN_02033F70(0, 1, param0); + ShowCommunicationError(0, 1, param0); while (TRUE) { } @@ -2098,7 +2098,7 @@ THUMB_FUNC void FUN_020335D0(s32 param0) THUMB_FUNC void FUN_020335E0() { - FUN_02033F70(0, 4, 0); + ShowCommunicationError(0, 4, 0); while (TRUE) { } diff --git a/include/communication_error.h b/include/communication_error.h new file mode 100644 index 00000000..2e8ad1c7 --- /dev/null +++ b/include/communication_error.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_COMMUNICATION_ERROR_H +#define POKEDIAMOND_COMMUNICATION_ERROR_H + +void FUN_02033F50(void); +void ShowCommunicationError(u32 heap_id, u32 error, u32 error_code); + +#endif |