mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-30 07:22:03 -04:00
Merge pull request #454 from tgsm/save_data_write_error
Save data write error
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
#define POKEDIAMOND_SAVE_DATA_READ_ERROR_H
|
||||
|
||||
void ShowSaveDataReadError(u32 heap_id);
|
||||
void ShowGBACartRemovedError(u32 heap_id);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user