Merge pull request #454 from tgsm/save_data_write_error

Save data write error
This commit is contained in:
Akira Akashi
2021-08-21 18:35:03 +01:00
committed by GitHub
10 changed files with 218 additions and 381 deletions
+1 -1
View File
@@ -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
-362
View File
@@ -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
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
+3 -5
View File
@@ -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);
}
+71 -8
View File
@@ -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);
}
}
+131
View File
@@ -0,0 +1,131 @@
#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);
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 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);
}
}
+1 -1
View File
@@ -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
+1
View File
@@ -2,5 +2,6 @@
#define POKEDIAMOND_SAVE_DATA_READ_ERROR_H
void ShowSaveDataReadError(u32 heap_id);
void ShowGBACartRemovedError(u32 heap_id);
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef POKEDIAMOND_SAVE_DATA_WRITE_ERROR_H
#define POKEDIAMOND_SAVE_DATA_WRITE_ERROR_H
void ShowSaveDataWriteError(u32 heap_id, u32 err_no);
#endif