From f31aa875f127653e7e1fc81a3093b2d8f09aea8f Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 20 Aug 2021 16:49:35 -0400 Subject: Decompile unk_02089D90 -> save_data_read_error --- arm9/arm9.lsf | 2 +- arm9/asm/unk_02089D90.s | 188 ---------------------------------------- arm9/asm/unk_02089F24.s | 24 ++--- arm9/global.inc | 2 +- arm9/src/main.c | 4 +- arm9/src/save.c | 6 +- arm9/src/save_data_read_error.c | 123 ++++++++++++++++++++++++++ include/save_data_read_error.h | 6 ++ 8 files changed, 147 insertions(+), 208 deletions(-) delete mode 100644 arm9/asm/unk_02089D90.s create mode 100644 arm9/src/save_data_read_error.c create mode 100644 include/save_data_read_error.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 8287f133..5e9e5ba9 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -315,7 +315,7 @@ Static arm9 Object unk_020893E0.o Object unk_02089498.o Object unk_02089960.o - Object unk_02089D90.o + Object save_data_read_error.o Object unk_02089F24.o Object unk_0208A258.o Object unk_0208A300.o diff --git a/arm9/asm/unk_02089D90.s b/arm9/asm/unk_02089D90.s deleted file mode 100644 index 077b7bf5..00000000 --- a/arm9/asm/unk_02089D90.s +++ /dev/null @@ -1,188 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .rodata - - .global UNK_020FF3E4 -UNK_020FF3E4: ; 0x020FF3E4 - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020FF3EC -UNK_020FF3EC: ; 0x020FF3EC - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF3FC -UNK_020FF3FC: ; 0x020FF3FC - .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_020FF418 -UNK_020FF418: ; 0x020FF418 - .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_02089D90 -FUN_02089D90: ; 0x02089D90 - push {r3-r6, lr} - sub sp, #0x1c - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - 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, _02089EF4 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _02089EF8 ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl SetKeyRepeatTimers - ldr r0, _02089EFC ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl GX_SwapDisplay - ldr r3, _02089F00 ; =0x04000050 - mov r0, #0x0 - strh r0, [r3, #0x0] - ldr r2, _02089F04 ; =0x04001050 - sub r3, #0x50 - strh r0, [r2, #0x0] - ldr r1, [r3, #0x0] - ldr r0, _02089F08 ; =0xFFFF1FFF - sub r2, #0x50 - and r1, r0 - str r1, [r3, #0x0] - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - ldr r0, _02089F0C ; =UNK_020FF418 - bl GX_SetBanks - add r0, r4, #0x0 - bl BgConfig_Alloc - add r5, r0, #0x0 - ldr r0, _02089F10 ; =UNK_020FF3EC - bl SetBothScreensModesAndDisable - mov r1, #0x0 - ldr r2, _02089F14 ; =UNK_020FF3FC - add r0, r5, #0x0 - add r3, r1, #0x0 - bl InitBgFromTemplate - add r0, r5, #0x0 - mov r1, #0x0 - bl BgClearTilemapBufferAndCommit - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r2, _02089F18 ; =0x000001F7 - add r0, r5, #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, _02089F1C ; =0x00006C21 - mov r0, #0x0 - bl BG_SetMaskColor - ldr r1, _02089F1C ; =0x00006C21 - mov r0, #0x4 - bl BG_SetMaskColor - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0x5 - add r3, r4, #0x0 - bl NewMsgDataFromNarc - add r6, r0, #0x0 - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - add r4, r0, #0x0 - bl FUN_0201BD5C - ldr r2, _02089F20 ; =UNK_020FF3E4 - add r0, r5, #0x0 - add r1, sp, #0xc - bl AddWindow - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0xc - mov r1, #0xf - add r3, r2, #0x0 - bl FillWindowPixelRect - ldr r2, _02089F18 ; =0x000001F7 - add r0, sp, #0xc - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - add r0, r6, #0x0 - mov r1, #0x0 - add r2, r4, #0x0 - bl ReadMsgDataIntoString - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0xc - add r2, r4, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r4, #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 SetBrightness - mov r4, #0x1 -_02089EE4: - bl HandleDSLidAction - add r0, r4, #0x0 - add r1, r4, #0x0 - bl OS_WaitIrq - b _02089EE4 - nop -_02089EF4: .word 0xFFFFE0FF -_02089EF8: .word 0x04001000 -_02089EFC: .word gMain + 0x60 -_02089F00: .word 0x04000050 -_02089F04: .word 0x04001050 -_02089F08: .word 0xFFFF1FFF -_02089F0C: .word UNK_020FF418 -_02089F10: .word UNK_020FF3EC -_02089F14: .word UNK_020FF3FC -_02089F18: .word 0x000001F7 -_02089F1C: .word 0x00006C21 -_02089F20: .word UNK_020FF3E4 diff --git a/arm9/asm/unk_02089F24.s b/arm9/asm/unk_02089F24.s index 3fbde6cb..dd936ec8 100644 --- a/arm9/asm/unk_02089F24.s +++ b/arm9/asm/unk_02089F24.s @@ -2,10 +2,10 @@ .include "global.inc" .extern gMain - .extern UNK_020FF3E4 - .extern UNK_020FF3EC - .extern UNK_020FF3FC - .extern UNK_020FF418 + .extern gSaveDataReadErrorWindowTemplate + .extern gSaveDataReadErrorGraphicsModes + .extern gSaveDataReadErrorBgTemplate + .extern gSaveDataReadErrorGraphicsBanks .section .rodata @@ -80,15 +80,15 @@ FUN_02089F24: ; 0x02089F24 ldr r1, [r2, #0x0] and r0, r1 str r0, [r2, #0x0] - ldr r0, _0208A0A0 ; =UNK_020FF418 + ldr r0, _0208A0A0 ; =gSaveDataReadErrorGraphicsBanks bl GX_SetBanks add r0, r4, #0x0 bl BgConfig_Alloc add r5, r0, #0x0 - ldr r0, _0208A0A4 ; =UNK_020FF3EC + ldr r0, _0208A0A4 ; =gSaveDataReadErrorGraphicsModes bl SetBothScreensModesAndDisable mov r1, #0x0 - ldr r2, _0208A0A8 ; =UNK_020FF3FC + ldr r2, _0208A0A8 ; =gSaveDataReadErrorBgTemplate add r0, r5, #0x0 add r3, r1, #0x0 bl InitBgFromTemplate @@ -129,7 +129,7 @@ FUN_02089F24: ; 0x02089F24 bl String_ctor add r4, r0, #0x0 bl FUN_0201BD5C - ldr r2, _0208A0B4 ; =UNK_020FF3E4 + ldr r2, _0208A0B4 ; =gSaveDataReadErrorWindowTemplate add r0, r5, #0x0 add r1, sp, #0xc bl AddWindow @@ -184,12 +184,12 @@ _0208A090: .word gMain + 0x60 _0208A094: .word 0x04000050 _0208A098: .word 0x04001050 _0208A09C: .word 0xFFFF1FFF -_0208A0A0: .word UNK_020FF418 -_0208A0A4: .word UNK_020FF3EC -_0208A0A8: .word UNK_020FF3FC +_0208A0A0: .word gSaveDataReadErrorGraphicsBanks +_0208A0A4: .word gSaveDataReadErrorGraphicsModes +_0208A0A8: .word gSaveDataReadErrorBgTemplate _0208A0AC: .word 0x000001F7 _0208A0B0: .word 0x00006C21 -_0208A0B4: .word UNK_020FF3E4 +_0208A0B4: .word gSaveDataReadErrorWindowTemplate thumb_func_start FUN_0208A0B8 FUN_0208A0B8: ; 0x0208A0B8 diff --git a/arm9/global.inc b/arm9/global.inc index 2f9f2d11..04d457a0 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5467,7 +5467,7 @@ .extern FUN_02089418 .extern FUN_02089444 .extern FUN_0208946C -.extern FUN_02089D90 +.extern ShowSaveDataReadError .extern FUN_02089F24 .extern FUN_0208A0B8 .extern FUN_0208A258 diff --git a/arm9/src/main.c b/arm9/src/main.c index 312d222c..3b3b0dd6 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -11,6 +11,7 @@ #include "game_init.h" #include "poke_overlay.h" #include "player_data.h" +#include "save_data_read_error.h" #include "sound.h" #include "timer3.h" #include "unk_02031734.h" @@ -32,7 +33,6 @@ struct UnkStruct_02016FA8 UNK_02016FA8; extern void FUN_02022294(void); extern void GF_InitRTCWork(void); extern int FUN_020337E8(int); -extern void FUN_02089D90(int); extern void FUN_02015E30(void); extern void FUN_0201B5CC(void *); extern void GF_RTC_UpdateOnFrame(void); @@ -72,7 +72,7 @@ THUMB_FUNC void NitroMain(void) ShowWFCUserInfoWarning(3, 0); if (FUN_020227FC(UNK_02016FA8.unk18) == 0) { - FUN_02089D90(0); + ShowSaveDataReadError(0); } else { diff --git a/arm9/src/save.c b/arm9/src/save.c index 7eb523f6..9ddb7336 100644 --- a/arm9/src/save.c +++ b/arm9/src/save.c @@ -4,6 +4,7 @@ #include "heap.h" #include "CARD_backup.h" #include "OS_spinLock.h" +#include "save_data_read_error.h" #pragma thumb on @@ -13,9 +14,6 @@ extern void FUN_02016444(u8 mask); extern void FUN_02016454(u8 mask); -// unk_02089D90.s -extern void FUN_02089D90(int); - // unk_02089F24.s extern void FUN_0208A0B8(int, int); @@ -861,7 +859,7 @@ BOOL FlashLoadChunk(u32 src, void * dest, u32 size) if (!r5) { FreeToHeap(UNK_021C59C8.ptr); - FUN_02089D90(1); + ShowSaveDataReadError(1); } return r5; } diff --git a/arm9/src/save_data_read_error.c b/arm9/src/save_data_read_error.c new file mode 100644 index 00000000..708b3a3c --- /dev/null +++ b/arm9/src/save_data_read_error.c @@ -0,0 +1,123 @@ +#include "global.h" +#include "bg_window.h" +#include "brightness.h" +#include "game_init.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "save_data_read_error.h" +#include "text.h" + +extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); +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); + +const struct WindowTemplate gSaveDataReadErrorWindowTemplate = { + .bgId = GF_BG_LYR_MAIN_0, + .tilemapLeft = 3, + .tilemapTop = 3, + .width = 26, + .height = 18, + .paletteNum = 0x01, + .baseTile = 0x23, +}; + +const struct GraphicsModes gSaveDataReadErrorGraphicsModes = { + .dispMode = GX_DISPMODE_GRAPHICS, + .bgMode = GX_BGMODE_0, + .subMode = GX_BGMODE_0, + ._2d3dMode = GX_BG0_AS_2D, +}; + +const struct BgTemplate gSaveDataReadErrorBgTemplate = { + .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, +}; + +const struct GraphicsBanks gSaveDataReadErrorGraphicsBanks = { + .bg = 3, + .bgextpltt = 0, + .subbg = 0, + .subbgextpltt = 0, + .obj = 0, + .objextpltt = 0, + .subobj = 0, + .subobjextpltt = 0, + .tex = 0, + .texpltt = 0, +}; + +THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) +{ + struct Window window; + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + 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(&gSaveDataReadErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&gSaveDataReadErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &gSaveDataReadErrorBgTemplate, 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* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0005_bin, heap_id); + struct String* str = String_ctor(384, heap_id); + + FUN_0201BD5C(); + + AddWindow(bg_config, &window, &gSaveDataReadErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(msg_data, 0, str); + AddTextPrinterParameterized(&window, 0, str, 0, 0, 0, NULL); + String_dtor(str); + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + SetBrightness(0, 0x3F, 3); + + while (TRUE) + { + HandleDSLidAction(); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } +} diff --git a/include/save_data_read_error.h b/include/save_data_read_error.h new file mode 100644 index 00000000..fe78b8f0 --- /dev/null +++ b/include/save_data_read_error.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_SAVE_READ_DATA_ERROR_H +#define POKEDIAMOND_SAVE_READ_DATA_ERROR_H + +void ShowSaveDataReadError(u32 heap_id); + +#endif -- cgit v1.2.3 From 7f998da0acf97bfa98cba5b82d0ef406157751c1 Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 20 Aug 2021 17:12:07 -0400 Subject: save_data_read_error: Fix include-guard typo --- include/save_data_read_error.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/save_data_read_error.h b/include/save_data_read_error.h index fe78b8f0..482e78d7 100644 --- a/include/save_data_read_error.h +++ b/include/save_data_read_error.h @@ -1,5 +1,5 @@ -#ifndef POKEDIAMOND_SAVE_READ_DATA_ERROR_H -#define POKEDIAMOND_SAVE_READ_DATA_ERROR_H +#ifndef POKEDIAMOND_SAVE_DATA_READ_ERROR_H +#define POKEDIAMOND_SAVE_DATA_READ_ERROR_H void ShowSaveDataReadError(u32 heap_id); -- cgit v1.2.3 From 614fcf2c7cc60e71d0c4707df67a822c19cdc1b4 Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 20 Aug 2021 17:27:56 -0400 Subject: Document gMain.unk65 -> gMain.screensFlipped --- arm9/src/GX_layers.c | 2 +- arm9/src/communication_error.c | 2 +- arm9/src/error_message_reset.c | 2 +- arm9/src/game_init.c | 2 +- arm9/src/save_data_read_error.c | 2 +- arm9/src/wfc_user_info_warning.c | 2 +- include/main.h | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arm9/src/GX_layers.c b/arm9/src/GX_layers.c index 28147dbd..348a398a 100644 --- a/arm9/src/GX_layers.c +++ b/arm9/src/GX_layers.c @@ -96,7 +96,7 @@ THUMB_FUNC void GX_BothDispOn() THUMB_FUNC void GX_SwapDisplay() { - if (gMain.unk65 == 0) + if (gMain.screensFlipped == 0) { GX_SetDispSelect(GX_DISP_SELECT_MAIN_SUB); } diff --git a/arm9/src/communication_error.c b/arm9/src/communication_error.c index 4401d9b8..04058b83 100644 --- a/arm9/src/communication_error.c +++ b/arm9/src/communication_error.c @@ -107,7 +107,7 @@ THUMB_FUNC void ShowCommunicationError(u32 heap_id, u32 error, u32 error_code) SetKeyRepeatTimers(4, 8); - gMain.unk65 = 0; + gMain.screensFlipped = 0; GX_SwapDisplay(); reg_G2_BLDCNT = 0; diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c index 93bc898d..97bc7c70 100644 --- a/arm9/src/error_message_reset.c +++ b/arm9/src/error_message_reset.c @@ -85,7 +85,7 @@ THUMB_FUNC void PrintErrorMessageAndReset() SetKeyRepeatTimers(4, 8); - gMain.unk65 = 0; + gMain.screensFlipped = 0; GX_SwapDisplay(); G2_BlendNone(); diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 44dcc111..705ffbc9 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -163,7 +163,7 @@ void InitSystemForTheGame(void) gMain.unk10 = 0; gMain.unk14 = 0; gMain.unk2C = 0; - gMain.unk65 = 0; + gMain.screensFlipped = 0; } void InitGraphicMemory(void) diff --git a/arm9/src/save_data_read_error.c b/arm9/src/save_data_read_error.c index 708b3a3c..f3778435 100644 --- a/arm9/src/save_data_read_error.c +++ b/arm9/src/save_data_read_error.c @@ -76,7 +76,7 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) SetKeyRepeatTimers(4, 8); - gMain.unk65 = 0; + gMain.screensFlipped = 0; GX_SwapDisplay(); reg_G2_BLDCNT = 0; diff --git a/arm9/src/wfc_user_info_warning.c b/arm9/src/wfc_user_info_warning.c index 370cf314..da547f3d 100644 --- a/arm9/src/wfc_user_info_warning.c +++ b/arm9/src/wfc_user_info_warning.c @@ -83,7 +83,7 @@ THUMB_FUNC void ShowWFCUserInfoWarning(u32 heap_id, u32 a1) SetKeyRepeatTimers(4, 8); - gMain.unk65 = 0; + gMain.screensFlipped = 0; GX_SwapDisplay(); reg_G2_BLDCNT = 0; diff --git a/include/main.h b/include/main.h index ba4d7bc2..87110de5 100644 --- a/include/main.h +++ b/include/main.h @@ -94,7 +94,7 @@ struct Main u16 touchNew; u16 touchHeld; u8 touchpadReadAuto; - u8 unk65; + u8 screensFlipped; u8 unk66; u8 unk67; u8 softResetDisabled; -- cgit v1.2.3 From a09a13e2b35e6ca07ab623464189b8bf602a66a8 Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 20 Aug 2021 21:31:50 -0400 Subject: Decompile unk_02089F24 -> save_data_write_error --- arm9/arm9.lsf | 2 +- arm9/asm/unk_02089F24.s | 362 --------------------------------------- arm9/global.inc | 4 +- arm9/modules/83/asm/module_83.s | 4 +- arm9/src/save.c | 8 +- arm9/src/save_data_write_error.c | 199 +++++++++++++++++++++ include/save_block_2.h | 2 +- include/save_data_write_error.h | 7 + 8 files changed, 215 insertions(+), 373 deletions(-) delete mode 100644 arm9/asm/unk_02089F24.s create mode 100644 arm9/src/save_data_write_error.c create mode 100644 include/save_data_write_error.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 5e9e5ba9..179bf053 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -316,7 +316,7 @@ Static arm9 Object unk_02089498.o Object unk_02089960.o Object save_data_read_error.o - Object unk_02089F24.o + Object save_data_write_error.o Object unk_0208A258.o Object unk_0208A300.o Object unk_0208A338.o diff --git a/arm9/asm/unk_02089F24.s b/arm9/asm/unk_02089F24.s deleted file mode 100644 index dd936ec8..00000000 --- a/arm9/asm/unk_02089F24.s +++ /dev/null @@ -1,362 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - .extern gSaveDataReadErrorWindowTemplate - .extern gSaveDataReadErrorGraphicsModes - .extern gSaveDataReadErrorBgTemplate - .extern gSaveDataReadErrorGraphicsBanks - - .section .rodata - - .global UNK_020FF440 -UNK_020FF440: ; 0x020FF440 - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020FF448 -UNK_020FF448: ; 0x020FF448 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF458 -UNK_020FF458: ; 0x020FF458 - .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_020FF474 -UNK_020FF474: ; 0x020FF474 - .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_02089F24 -FUN_02089F24: ; 0x02089F24 - push {r3-r6, lr} - sub sp, #0x1c - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - 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, _0208A088 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0208A08C ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl SetKeyRepeatTimers - ldr r0, _0208A090 ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl GX_SwapDisplay - ldr r3, _0208A094 ; =0x04000050 - mov r0, #0x0 - strh r0, [r3, #0x0] - ldr r2, _0208A098 ; =0x04001050 - sub r3, #0x50 - strh r0, [r2, #0x0] - ldr r1, [r3, #0x0] - ldr r0, _0208A09C ; =0xFFFF1FFF - sub r2, #0x50 - and r1, r0 - str r1, [r3, #0x0] - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - ldr r0, _0208A0A0 ; =gSaveDataReadErrorGraphicsBanks - bl GX_SetBanks - add r0, r4, #0x0 - bl BgConfig_Alloc - add r5, r0, #0x0 - ldr r0, _0208A0A4 ; =gSaveDataReadErrorGraphicsModes - bl SetBothScreensModesAndDisable - mov r1, #0x0 - ldr r2, _0208A0A8 ; =gSaveDataReadErrorBgTemplate - add r0, r5, #0x0 - add r3, r1, #0x0 - bl InitBgFromTemplate - add r0, r5, #0x0 - mov r1, #0x0 - bl BgClearTilemapBufferAndCommit - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r2, _0208A0AC ; =0x000001F7 - add r0, r5, #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, _0208A0B0 ; =0x00006C21 - mov r0, #0x0 - bl BG_SetMaskColor - ldr r1, _0208A0B0 ; =0x00006C21 - mov r0, #0x4 - bl BG_SetMaskColor - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0x5 - add r3, r4, #0x0 - bl NewMsgDataFromNarc - add r6, r0, #0x0 - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - add r4, r0, #0x0 - bl FUN_0201BD5C - ldr r2, _0208A0B4 ; =gSaveDataReadErrorWindowTemplate - add r0, r5, #0x0 - add r1, sp, #0xc - bl AddWindow - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0xc - mov r1, #0xf - add r3, r2, #0x0 - bl FillWindowPixelRect - ldr r2, _0208A0AC ; =0x000001F7 - add r0, sp, #0xc - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - add r0, r6, #0x0 - mov r1, #0x1 - add r2, r4, #0x0 - bl ReadMsgDataIntoString - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0xc - add r2, r4, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r4, #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 SetBrightness - mov r4, #0x1 -_0208A078: - bl HandleDSLidAction - add r0, r4, #0x0 - add r1, r4, #0x0 - bl OS_WaitIrq - b _0208A078 - nop -_0208A088: .word 0xFFFFE0FF -_0208A08C: .word 0x04001000 -_0208A090: .word gMain + 0x60 -_0208A094: .word 0x04000050 -_0208A098: .word 0x04001050 -_0208A09C: .word 0xFFFF1FFF -_0208A0A0: .word gSaveDataReadErrorGraphicsBanks -_0208A0A4: .word gSaveDataReadErrorGraphicsModes -_0208A0A8: .word gSaveDataReadErrorBgTemplate -_0208A0AC: .word 0x000001F7 -_0208A0B0: .word 0x00006C21 -_0208A0B4: .word gSaveDataReadErrorWindowTemplate - - thumb_func_start FUN_0208A0B8 -FUN_0208A0B8: ; 0x0208A0B8 - push {r4-r7, lr} - sub sp, #0x1c - add r4, r0, #0x0 - cmp r1, #0x0 - bne _0208A0C6 - mov r6, #0x1 - b _0208A0C8 -_0208A0C6: - mov r6, #0x0 -_0208A0C8: - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - bl FUN_02015EF4 - 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, _0208A228 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0208A22C ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl SetKeyRepeatTimers - ldr r0, _0208A230 ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl GX_SwapDisplay - ldr r3, _0208A234 ; =0x04000050 - mov r1, #0x0 - strh r1, [r3, #0x0] - ldr r0, _0208A238 ; =0x04001050 - sub r3, #0x50 - strh r1, [r0, #0x0] - ldr r2, [r3, #0x0] - ldr r1, _0208A23C ; =0xFFFF1FFF - sub r0, #0x50 - and r2, r1 - str r2, [r3, #0x0] - ldr r2, [r0, #0x0] - and r1, r2 - str r1, [r0, #0x0] - ldr r0, _0208A240 ; =UNK_020FF474 - bl GX_SetBanks - add r0, r4, #0x0 - bl BgConfig_Alloc - add r5, r0, #0x0 - ldr r0, _0208A244 ; =UNK_020FF448 - bl SetBothScreensModesAndDisable - mov r1, #0x0 - ldr r2, _0208A248 ; =UNK_020FF458 - add r0, r5, #0x0 - add r3, r1, #0x0 - bl InitBgFromTemplate - add r0, r5, #0x0 - mov r1, #0x0 - bl BgClearTilemapBufferAndCommit - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r2, _0208A24C ; =0x000001F7 - add r0, r5, #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, _0208A250 ; =0x00006C21 - mov r0, #0x0 - bl BG_SetMaskColor - ldr r1, _0208A250 ; =0x00006C21 - mov r0, #0x4 - bl BG_SetMaskColor - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0x6 - add r3, r4, #0x0 - bl NewMsgDataFromNarc - add r7, r0, #0x0 - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - add r4, r0, #0x0 - bl FUN_0201BD5C - ldr r2, _0208A254 ; =UNK_020FF440 - add r0, r5, #0x0 - add r1, sp, #0xc - bl AddWindow - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0xc - mov r1, #0xf - add r3, r2, #0x0 - bl FillWindowPixelRect - ldr r2, _0208A24C ; =0x000001F7 - add r0, sp, #0xc - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - add r0, r7, #0x0 - add r1, r6, #0x0 - add r2, r4, #0x0 - bl ReadMsgDataIntoString - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0xc - add r2, r4, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r4, #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 SetBrightness - mov r4, #0x1 - ; Battery-saver trap -_0208A21A: - bl HandleDSLidAction - add r0, r4, #0x0 - add r1, r4, #0x0 - bl OS_WaitIrq - b _0208A21A - .balign 4 -_0208A228: .word 0xFFFFE0FF -_0208A22C: .word 0x04001000 -_0208A230: .word gMain + 0x60 -_0208A234: .word 0x04000050 -_0208A238: .word 0x04001050 -_0208A23C: .word 0xFFFF1FFF -_0208A240: .word UNK_020FF474 -_0208A244: .word UNK_020FF448 -_0208A248: .word UNK_020FF458 -_0208A24C: .word 0x000001F7 -_0208A250: .word 0x00006C21 -_0208A254: .word UNK_020FF440 diff --git a/arm9/global.inc b/arm9/global.inc index 04d457a0..9831337f 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5468,8 +5468,8 @@ .extern FUN_02089444 .extern FUN_0208946C .extern ShowSaveDataReadError -.extern FUN_02089F24 -.extern FUN_0208A0B8 +.extern ShowGBACartRemovedError +.extern ShowSaveDataWriteError .extern FUN_0208A258 .extern FUN_0208A300 .extern FUN_0208A320 diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index c84d1e83..7c18c8e8 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -2149,7 +2149,7 @@ _0222E656: bl FUN_02032D80 _0222E692: mov r0, #0x51 - bl FUN_02089F24 + bl ShowGBACartRemovedError b _0222E6A8 _0222E69A: bl PlaySE @@ -18582,7 +18582,7 @@ MOD83_02236804: ; 0x02236804 beq _02236828 _02236822: mov r0, #0x4e - bl FUN_02089F24 + bl ShowGBACartRemovedError _02236828: ldr r0, [r4, #0xc] add r0, r0, #1 diff --git a/arm9/src/save.c b/arm9/src/save.c index 9ddb7336..524edfb7 100644 --- a/arm9/src/save.c +++ b/arm9/src/save.c @@ -5,6 +5,7 @@ #include "CARD_backup.h" #include "OS_spinLock.h" #include "save_data_read_error.h" +#include "save_data_write_error.h" #pragma thumb on @@ -14,9 +15,6 @@ extern void FUN_02016444(u8 mask); extern void FUN_02016454(u8 mask); -// unk_02089F24.s -extern void FUN_0208A0B8(int, int); - struct { struct SaveBlock2 * ptr; BOOL iswritten; @@ -908,10 +906,10 @@ BOOL WaitFlashWrite(int lock, BOOL * res) return FALSE; } -void SaveErrorHandling(int lock, int errno) +void SaveErrorHandling(int lock, u32 errno) { CARD_UnlockBackup((u16)lock); OS_ReleaseLockID((u16)lock); FreeToHeap(UNK_021C59C8.ptr); - FUN_0208A0B8(1, errno); + ShowSaveDataWriteError(1, errno); } diff --git a/arm9/src/save_data_write_error.c b/arm9/src/save_data_write_error.c new file mode 100644 index 00000000..f2270b52 --- /dev/null +++ b/arm9/src/save_data_write_error.c @@ -0,0 +1,199 @@ +#include "global.h" +#include "bg_window.h" +#include "brightness.h" +#include "game_init.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "save_data_write_error.h" +#include "text.h" + +extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); +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); + +extern const struct WindowTemplate gSaveDataReadErrorWindowTemplate; +extern const struct GraphicsModes gSaveDataReadErrorGraphicsModes; +extern const struct BgTemplate gSaveDataReadErrorBgTemplate; +extern const struct GraphicsBanks gSaveDataReadErrorGraphicsBanks; + +static const struct WindowTemplate sSaveDataWriteErrorWindowTemplate = { + .bgId = GF_BG_LYR_MAIN_0, + .tilemapLeft = 3, + .tilemapTop = 3, + .width = 26, + .height = 18, + .paletteNum = 0x01, + .baseTile = 0x23, +}; + +static const struct GraphicsModes sSaveDataWriteErrorGraphicsModes = { + .dispMode = GX_DISPMODE_GRAPHICS, + .bgMode = GX_BGMODE_0, + .subMode = GX_BGMODE_0, + ._2d3dMode = GX_BG0_AS_2D, +}; + +static const struct BgTemplate sSaveDataWriteErrorBgTemplate = { + .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 sSaveDataWriteErrorGraphicsBanks = { + .bg = 3, + .bgextpltt = 0, + .subbg = 0, + .subbgextpltt = 0, + .obj = 0, + .objextpltt = 0, + .subobj = 0, + .subobjextpltt = 0, + .tex = 0, + .texpltt = 0, +}; + +THUMB_FUNC void ShowGBACartRemovedError(u32 heap_id) +{ + struct Window window; + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + 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.screensFlipped = 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(&gSaveDataReadErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&gSaveDataReadErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &gSaveDataReadErrorBgTemplate, 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* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0005_bin, heap_id); + struct String* str = String_ctor(384, heap_id); + + FUN_0201BD5C(); + + AddWindow(bg_config, &window, &gSaveDataReadErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(msg_data, 1, str); + AddTextPrinterParameterized(&window, 0, str, 0, 0, 0, NULL); + String_dtor(str); + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + SetBrightness(0, 0x3F, 3); + + while (TRUE) + { + HandleDSLidAction(); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } +} + +THUMB_FUNC void ShowSaveDataWriteError(u32 heap_id, u32 err_no) +{ + struct Window window; + + u32 msg_no; + if (err_no == 0) { + msg_no = 1; + } else { + msg_no = 0; + } + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + FUN_02015EF4(); + 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.screensFlipped = 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(&sSaveDataWriteErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sSaveDataWriteErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sSaveDataWriteErrorBgTemplate, 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* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0006_bin, heap_id); + struct String* str = String_ctor(384, heap_id); + + FUN_0201BD5C(); + + AddWindow(bg_config, &window, &sSaveDataWriteErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(msg_data, msg_no, str); + AddTextPrinterParameterized(&window, 0, str, 0, 0, 0, NULL); + String_dtor(str); + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + SetBrightness(0, 0x3F, 3); + + while (TRUE) + { + HandleDSLidAction(); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } +} diff --git a/include/save_block_2.h b/include/save_block_2.h index a4514c96..fb2bc92a 100644 --- a/include/save_block_2.h +++ b/include/save_block_2.h @@ -152,6 +152,6 @@ BOOL FlashLoadChunk(u32 src, void * dest, u32 size); void FlashWriteCommandCallback(void * arg); int FlashWriteChunkInternal(u32 dest, void * src, u32 size); BOOL WaitFlashWrite(int lock, BOOL * res); -void SaveErrorHandling(int lock, int errno); +void SaveErrorHandling(int lock, u32 errno); #endif //POKEDIAMOND_SAVE_BLOCK_2_H diff --git a/include/save_data_write_error.h b/include/save_data_write_error.h new file mode 100644 index 00000000..45f8f614 --- /dev/null +++ b/include/save_data_write_error.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_SAVE_DATA_WRITE_ERROR_H +#define POKEDIAMOND_SAVE_DATA_WRITE_ERROR_H + +void ShowGBACartRemovedError(u32 heap_id); +void ShowSaveDataWriteError(u32 heap_id, u32 err_no); + +#endif -- cgit v1.2.3 From 0d600f46805de96895678bb76d7c3e87466f459f Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 20 Aug 2021 21:41:10 -0400 Subject: Move ShowGBACartRemovedError to save_data_read_error --- arm9/src/save_data_read_error.c | 79 ++++++++++++++++++++++++++++++++++++---- arm9/src/save_data_write_error.c | 68 ---------------------------------- include/save_data_read_error.h | 1 + include/save_data_write_error.h | 1 - 4 files changed, 72 insertions(+), 77 deletions(-) diff --git a/arm9/src/save_data_read_error.c b/arm9/src/save_data_read_error.c index f3778435..9524475c 100644 --- a/arm9/src/save_data_read_error.c +++ b/arm9/src/save_data_read_error.c @@ -13,7 +13,7 @@ extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_valu extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); -const struct WindowTemplate gSaveDataReadErrorWindowTemplate = { +static const struct WindowTemplate sSaveDataReadErrorWindowTemplate = { .bgId = GF_BG_LYR_MAIN_0, .tilemapLeft = 3, .tilemapTop = 3, @@ -23,14 +23,14 @@ const struct WindowTemplate gSaveDataReadErrorWindowTemplate = { .baseTile = 0x23, }; -const struct GraphicsModes gSaveDataReadErrorGraphicsModes = { +static const struct GraphicsModes sSaveDataReadErrorGraphicsModes = { .dispMode = GX_DISPMODE_GRAPHICS, .bgMode = GX_BGMODE_0, .subMode = GX_BGMODE_0, ._2d3dMode = GX_BG0_AS_2D, }; -const struct BgTemplate gSaveDataReadErrorBgTemplate = { +static const struct BgTemplate sSaveDataReadErrorBgTemplate = { .x = 0, .y = 0, .bufferSize = 0x800, @@ -46,7 +46,7 @@ const struct BgTemplate gSaveDataReadErrorBgTemplate = { .mosaic = FALSE, }; -const struct GraphicsBanks gSaveDataReadErrorGraphicsBanks = { +static const struct GraphicsBanks sSaveDataReadErrorGraphicsBanks = { .bg = 3, .bgextpltt = 0, .subbg = 0, @@ -83,13 +83,13 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) 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(&gSaveDataReadErrorGraphicsBanks); + GX_SetBanks(&sSaveDataReadErrorGraphicsBanks); struct BgConfig* bg_config = BgConfig_Alloc(heap_id); - SetBothScreensModesAndDisable(&gSaveDataReadErrorGraphicsModes); + SetBothScreensModesAndDisable(&sSaveDataReadErrorGraphicsModes); - InitBgFromTemplate(bg_config, 0, &gSaveDataReadErrorBgTemplate, 0); + InitBgFromTemplate(bg_config, 0, &sSaveDataReadErrorBgTemplate, 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); @@ -102,7 +102,7 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) FUN_0201BD5C(); - AddWindow(bg_config, &window, &gSaveDataReadErrorWindowTemplate); + AddWindow(bg_config, &window, &sSaveDataReadErrorWindowTemplate); FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); FUN_0200CCA4(&window, FALSE, 0x01F7, 2); @@ -121,3 +121,66 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) OS_WaitIrq(TRUE, OS_IE_V_BLANK); } } + +THUMB_FUNC void ShowGBACartRemovedError(u32 heap_id) +{ + struct Window window; + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + 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.screensFlipped = 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(&sSaveDataReadErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sSaveDataReadErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sSaveDataReadErrorBgTemplate, 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* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0005_bin, heap_id); + struct String* str = String_ctor(384, heap_id); + + FUN_0201BD5C(); + + AddWindow(bg_config, &window, &sSaveDataReadErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(msg_data, 1, str); + AddTextPrinterParameterized(&window, 0, str, 0, 0, 0, NULL); + String_dtor(str); + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + SetBrightness(0, 0x3F, 3); + + while (TRUE) + { + HandleDSLidAction(); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } +} diff --git a/arm9/src/save_data_write_error.c b/arm9/src/save_data_write_error.c index f2270b52..71edb91d 100644 --- a/arm9/src/save_data_write_error.c +++ b/arm9/src/save_data_write_error.c @@ -13,11 +13,6 @@ extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_valu extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); -extern const struct WindowTemplate gSaveDataReadErrorWindowTemplate; -extern const struct GraphicsModes gSaveDataReadErrorGraphicsModes; -extern const struct BgTemplate gSaveDataReadErrorBgTemplate; -extern const struct GraphicsBanks gSaveDataReadErrorGraphicsBanks; - static const struct WindowTemplate sSaveDataWriteErrorWindowTemplate = { .bgId = GF_BG_LYR_MAIN_0, .tilemapLeft = 3, @@ -64,69 +59,6 @@ static const struct GraphicsBanks sSaveDataWriteErrorGraphicsBanks = { .texpltt = 0, }; -THUMB_FUNC void ShowGBACartRemovedError(u32 heap_id) -{ - struct Window window; - - FUN_0200E3A0(PM_LCD_TOP, 0); - FUN_0200E3A0(PM_LCD_BOTTOM, 0); - - 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.screensFlipped = 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(&gSaveDataReadErrorGraphicsBanks); - - struct BgConfig* bg_config = BgConfig_Alloc(heap_id); - - SetBothScreensModesAndDisable(&gSaveDataReadErrorGraphicsModes); - - InitBgFromTemplate(bg_config, 0, &gSaveDataReadErrorBgTemplate, 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* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0005_bin, heap_id); - struct String* str = String_ctor(384, heap_id); - - FUN_0201BD5C(); - - AddWindow(bg_config, &window, &gSaveDataReadErrorWindowTemplate); - FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); - FUN_0200CCA4(&window, FALSE, 0x01F7, 2); - - ReadMsgDataIntoString(msg_data, 1, str); - AddTextPrinterParameterized(&window, 0, str, 0, 0, 0, NULL); - String_dtor(str); - - GX_BothDispOn(); - FUN_0200E394(PM_LCD_TOP); - FUN_0200E394(PM_LCD_BOTTOM); - SetBrightness(0, 0x3F, 3); - - while (TRUE) - { - HandleDSLidAction(); - OS_WaitIrq(TRUE, OS_IE_V_BLANK); - } -} - THUMB_FUNC void ShowSaveDataWriteError(u32 heap_id, u32 err_no) { struct Window window; diff --git a/include/save_data_read_error.h b/include/save_data_read_error.h index 482e78d7..d3556734 100644 --- a/include/save_data_read_error.h +++ b/include/save_data_read_error.h @@ -2,5 +2,6 @@ #define POKEDIAMOND_SAVE_DATA_READ_ERROR_H void ShowSaveDataReadError(u32 heap_id); +void ShowGBACartRemovedError(u32 heap_id); #endif diff --git a/include/save_data_write_error.h b/include/save_data_write_error.h index 45f8f614..e4c77453 100644 --- a/include/save_data_write_error.h +++ b/include/save_data_write_error.h @@ -1,7 +1,6 @@ #ifndef POKEDIAMOND_SAVE_DATA_WRITE_ERROR_H #define POKEDIAMOND_SAVE_DATA_WRITE_ERROR_H -void ShowGBACartRemovedError(u32 heap_id); void ShowSaveDataWriteError(u32 heap_id, u32 err_no); #endif -- cgit v1.2.3