summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-03-06 10:57:42 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-03-06 10:57:42 -0500
commit3581ce9ba202377282ee58ffe14037088634b954 (patch)
tree1b950eaec4c23865f495b328ad0c0b53b8efef9c
parentf483a93beaaeff82ad0a6b8b6e67a5a1b25ec989 (diff)
Decomp and doc clear_save_data_screen
-rw-r--r--asm/clear_save_data_screen.s469
-rw-r--r--data/clear_save_data_screen.s23
-rw-r--r--include/gba/macro.h10
-rw-r--r--include/strings.h4
-rw-r--r--ld_script.txt4
-rw-r--r--src/clear_save_data_screen.c224
-rw-r--r--sym_ewram.txt6
7 files changed, 241 insertions, 499 deletions
diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s
deleted file mode 100644
index 367f12814..000000000
--- a/asm/clear_save_data_screen.s
+++ /dev/null
@@ -1,469 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80F5574
-sub_80F5574: @ 80F5574
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80F5574
-
- thumb_func_start sub_80F558C
-sub_80F558C: @ 80F558C
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80F558C
-
- thumb_func_start CB2_SaveClearScreen_Init
-CB2_SaveClearScreen_Init: @ 80F55A0
- push {r4,lr}
- ldr r4, _080F55D0 @ =gUnknown_203AB54
- movs r0, 0x4
- bl AllocZeroed
- str r0, [r4]
- movs r1, 0
- strb r1, [r0, 0x1]
- ldr r0, [r4]
- strb r1, [r0]
- ldr r0, [r4]
- strb r1, [r0, 0x2]
- bl sub_80F580C
- ldr r0, _080F55D4 @ =sub_80F55DC
- movs r1, 0
- bl CreateTask
- ldr r0, _080F55D8 @ =sub_80F5574
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F55D0: .4byte gUnknown_203AB54
-_080F55D4: .4byte sub_80F55DC
-_080F55D8: .4byte sub_80F5574
- thumb_func_end CB2_SaveClearScreen_Init
-
- thumb_func_start sub_80F55DC
-sub_80F55DC: @ 80F55DC
- push {r4,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080F55F8 @ =gUnknown_203AB54
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x5
- bhi _080F56C0
- lsls r0, 2
- ldr r1, _080F55FC @ =_080F5600
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F55F8: .4byte gUnknown_203AB54
-_080F55FC: .4byte _080F5600
- .align 2, 0
-_080F5600:
- .4byte _080F5618
- .4byte _080F562A
- .4byte _080F5644
- .4byte _080F564A
- .4byte _080F5660
- .4byte _080F569C
-_080F5618:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080F56E2
-_080F562A:
- ldr r0, _080F5640 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080F56EC
- movs r0, 0
- bl SetVBlankCallback
- b _080F56E2
- .align 2, 0
-_080F5640: .4byte gPaletteFade
-_080F5644:
- bl sub_80F5820
- b _080F56E2
-_080F564A:
- movs r0, 0
- movs r1, 0x1
- movs r2, 0xF0
- bl TextWindow_SetStdFrame0_WithPal
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0xF0
- bl TextWindow_SetStdFrame0_WithPal
- b _080F56E2
-_080F5660:
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0x1
- movs r3, 0xF
- bl DrawStdFrameWithCustomTileAndPalette
- movs r0, 0x1
- str r0, [sp]
- str r0, [sp, 0x4]
- ldr r0, _080F5694 @ =gUnknown_841EE80
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- ldr r0, _080F5698 @ =gUnknown_841B69E
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x3
- bl AddTextPrinterParameterized4
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _080F56E2
- .align 2, 0
-_080F5694: .4byte gUnknown_841EE80
-_080F5698: .4byte gUnknown_841B69E
-_080F569C:
- ldr r0, _080F56BC @ =gUnknown_841EE68
- movs r2, 0x1
- str r2, [sp]
- movs r1, 0xF
- str r1, [sp, 0x4]
- str r2, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- b _080F56E2
- .align 2, 0
-_080F56BC: .4byte gUnknown_841EE68
-_080F56C0:
- ldr r0, _080F56F4 @ =0x0000ffff
- str r0, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _080F56F8 @ =sub_80F558C
- bl SetVBlankCallback
- ldr r1, _080F56FC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080F5700 @ =sub_80F5708
- str r1, [r0]
-_080F56E2:
- ldr r0, _080F5704 @ =gUnknown_203AB54
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
-_080F56EC:
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F56F4: .4byte 0x0000ffff
-_080F56F8: .4byte sub_80F558C
-_080F56FC: .4byte gTasks
-_080F5700: .4byte sub_80F5708
-_080F5704: .4byte gUnknown_203AB54
- thumb_func_end sub_80F55DC
-
- thumb_func_start sub_80F5708
-sub_80F5708: @ 80F5708
- push {r4,r5,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r5, _080F5740 @ =gUnknown_203AB54
- ldr r0, [r5]
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F578C
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _080F5736
- cmp r4, r0
- ble _080F5792
- cmp r4, 0
- beq _080F5744
- cmp r4, 0x1
- bne _080F5792
-_080F5736:
- movs r0, 0x5
- bl PlaySE
- b _080F577A
- .align 2, 0
-_080F5740: .4byte gUnknown_203AB54
-_080F5744:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- str r0, [sp, 0x4]
- ldr r0, _080F5784 @ =gUnknown_841EE80
- str r0, [sp, 0x8]
- str r4, [sp, 0xC]
- ldr r0, _080F5788 @ =gUnknown_841B6B9
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x3
- bl AddTextPrinterParameterized4
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- bl ClearSaveData
-_080F577A:
- ldr r1, [r5]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080F5792
- .align 2, 0
-_080F5784: .4byte gUnknown_841EE80
-_080F5788: .4byte gUnknown_841B6B9
-_080F578C:
- adds r0, r1, 0
- bl sub_80F579C
-_080F5792:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80F5708
-
- thumb_func_start sub_80F579C
-sub_80F579C: @ 80F579C
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080F57B4 @ =gUnknown_203AB54
- ldr r0, [r5]
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- beq _080F57B8
- cmp r0, 0x1
- beq _080F57D4
- b _080F57FE
- .align 2, 0
-_080F57B4: .4byte gUnknown_203AB54
-_080F57B8:
- ldr r0, _080F57D0 @ =0x0000ffff
- str r0, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, [r5]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- b _080F57FE
- .align 2, 0
-_080F57D0: .4byte 0x0000ffff
-_080F57D4:
- ldr r0, _080F5808 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080F57FE
- bl DestroyYesNoMenu
- adds r0, r6, 0
- bl DestroyTask
- bl FreeAllWindowBuffers
- ldr r0, [r5]
- bl Free
- str r4, [r5]
- bl DoSoftReset
-_080F57FE:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5808: .4byte gPaletteFade
- thumb_func_end sub_80F579C
-
- thumb_func_start sub_80F580C
-sub_80F580C: @ 80F580C
- push {lr}
- bl ResetSpriteData
- bl ResetPaletteFade
- bl ResetTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80F580C
-
- thumb_func_start sub_80F5820
-sub_80F5820: @ 80F5820
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- add r0, sp, 0x4
- mov r8, r0
- mov r2, sp
- movs r6, 0
- ldr r1, _080F593C @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _080F5940 @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_080F5846:
- strh r6, [r2]
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _080F5846
- strh r6, [r2]
- mov r2, sp
- str r2, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r2, _080F593C @ =0x040000d4
- mov r1, r8
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xA0
- lsls r1, 19
- mov r0, sp
- strh r4, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsrs r3, 1
- movs r0, 0x81
- lsls r0, 24
- orrs r3, r0
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _080F5944 @ =gUnknown_841EE64
- movs r0, 0
- movs r2, 0x1
- bl InitBgsFromTemplates
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r0, _080F5948 @ =gUnknown_841EE68
- bl InitWindows
- bl DeactivateAllTextPrinters
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F593C: .4byte 0x040000d4
-_080F5940: .4byte 0x81000800
-_080F5944: .4byte gUnknown_841EE64
-_080F5948: .4byte gUnknown_841EE68
- thumb_func_end sub_80F5820
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/clear_save_data_screen.s b/data/clear_save_data_screen.s
index 32a2d422a..7b0827b6c 100644
--- a/data/clear_save_data_screen.s
+++ b/data/clear_save_data_screen.s
@@ -5,26 +5,3 @@
.include "constants/constants.inc"
.section .rodata
.align 2
-
-gUnknown_841EE64:: @ 841EE64
- .4byte 0x000001f0
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
-
-gUnknown_841EE68:: @ 841EE68
- .byte 0, 3, 5, 6, 4, 15
- .2byte 0x000a
- .byte 0, 3, 15, 23, 4, 15
- .2byte 0x0022
- .byte 255, 0, 0, 0, 0, 0
- .2byte 0x0000
-
-gUnknown_841EE80:: @ 841EE80
- .byte 0x01, 0x02, 0x03
diff --git a/include/gba/macro.h b/include/gba/macro.h
index 6cf2e1651..cc8535305 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -171,6 +171,16 @@
#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
+#define DmaClearDefvars(dmaNum, dest, size, bit) \
+{ \
+ void *_dest = dest; \
+ u32 _size = size; \
+ DmaClear##bit(dmaNum, _dest, _size); \
+}
+
+#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
+#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
+
#define IntrEnable(flags) \
{ \
u16 imeTemp; \
diff --git a/include/strings.h b/include/strings.h
index f2207e7a7..d5c6f4b58 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1309,4 +1309,8 @@ extern const u8 gText_QuestLog_VictoryRoad[];
extern const u8 gText_QuestLog_PokemonLeague[];
extern const u8 gText_QuestLog_CeruleanCave[];
+// clear_save_data_screen
+extern const u8 gUnknown_841B69E[];
+extern const u8 gUnknown_841B6B9[];
+
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index 5c908a5f8..1de01ca5f 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -216,7 +216,7 @@ SECTIONS {
src/credits.o(.text);
src/diploma.o(.text);
src/save_failed_screen.o(.text);
- asm/clear_save_data_screen.o(.text);
+ src/clear_save_data_screen.o(.text);
src/evolution_graphics.o(.text);
src/fldeff_teleport.o(.text);
src/new_menu_helpers.o(.text);
@@ -510,7 +510,7 @@ SECTIONS {
src/diploma.o(.rodata);
src/strings.o(.rodata);
src/save_failed_screen.o(.rodata);
- data/clear_save_data_screen.o(.rodata);
+ src/clear_save_data_screen.o(.rodata);
src/evolution_graphics.o(.rodata);
src/new_menu_helpers.o(.rodata);
src/box_party_pokemon_dropdown.o(.rodata);
diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c
new file mode 100644
index 000000000..5485e8da9
--- /dev/null
+++ b/src/clear_save_data_screen.c
@@ -0,0 +1,224 @@
+#include "global.h"
+#include "gflib.h"
+#include "menu.h"
+#include "save.h"
+#include "strings.h"
+#include "task.h"
+#include "text_window.h"
+#include "constants/songs.h"
+
+struct ClearSaveDataStruct {
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+};
+
+static EWRAM_DATA struct ClearSaveDataStruct * sClearSaveDataState = NULL;
+
+static void Task_DrawClearSaveDataScreen(u8 taskId);
+static void Task_HandleYesNoMenu(u8 taskId);
+static void Task_CleanUpAndSoftReset(u8 taskId);
+static void CB2_Sub_SaveClearScreen_Init(void);
+static void SaveClearScreen_GpuInit(void);
+
+static const struct BgTemplate sBgTemplates[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x000
+ }
+};
+
+static const struct WindowTemplate sWindowTemplates[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 5,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 0xF,
+ .baseBlock = 0x00A
+ }, {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 15,
+ .width = 23,
+ .height = 4,
+ .paletteNum = 0xF,
+ .baseBlock = 0x022
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const u8 sTextColor[] = {
+ TEXT_COLOR_WHITE,
+ TEXT_COLOR_DARK_GREY,
+ TEXT_COLOR_LIGHT_GREY
+};
+
+static void CB2_RunClearSaveDataScreen(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB_WaitYesNo(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_SaveClearScreen_Init(void)
+{
+ sClearSaveDataState = AllocZeroed(sizeof(struct ClearSaveDataStruct));
+ sClearSaveDataState->unk1 = 0;
+ sClearSaveDataState->unk0 = 0;
+ sClearSaveDataState->unk2 = 0;
+ CB2_Sub_SaveClearScreen_Init();
+ CreateTask(Task_DrawClearSaveDataScreen, 0);
+ SetMainCallback2(CB2_RunClearSaveDataScreen);
+}
+
+static void Task_DrawClearSaveDataScreen(u8 taskId)
+{
+ switch (sClearSaveDataState->unk1)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ break;
+ case 1:
+ if (gPaletteFade.active)
+ return;
+ SetVBlankCallback(NULL);
+ break;
+ case 2:
+ SaveClearScreen_GpuInit();
+ break;
+ case 3:
+ TextWindow_SetStdFrame0_WithPal(0, 0x001, 0xF0);
+ TextWindow_SetStdFrame0_WithPal(1, 0x001, 0xF0);
+ break;
+ case 4:
+ DrawStdFrameWithCustomTileAndPalette(1, TRUE, 0x001, 0xF);
+ AddTextPrinterParameterized4(1, 2, 0, 3, 1, 1, sTextColor, 0, gUnknown_841B69E);
+ CopyWindowToVram(1, 2);
+ break;
+ case 5:
+ CreateYesNoMenu(&sWindowTemplates[0], 2, 0, 2, 0x001, 0xF, 1);
+ CopyBgTilemapBufferToVram(0);
+ break;
+ default:
+ BeginNormalPaletteFade(0xFFFF, 0, 16, 0, RGB_WHITEALPHA);
+ SetVBlankCallback(VBlankCB_WaitYesNo);
+ gTasks[taskId].func = Task_HandleYesNoMenu;
+ break;
+ }
+ sClearSaveDataState->unk1++;
+}
+
+static void Task_HandleYesNoMenu(u8 taskId)
+{
+ // agbcc refuses to keep &sClearSaveDataState in a register
+ // unless explicitly told to do so as such:
+ struct ClearSaveDataStruct ** r5 = &sClearSaveDataState;
+ if ((*r5)->unk0 == 0)
+ {
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case -1:
+ case 1:
+ PlaySE(SE_SELECT);
+ break;
+ case 0:
+ PlaySE(SE_SELECT);
+ FillWindowPixelBuffer(1, PIXEL_FILL(1));
+ AddTextPrinterParameterized4(1, 2, 0, 3, 1, 1, sTextColor, 0, gUnknown_841B6B9);
+ CopyWindowToVram(1, 3);
+ ClearSaveData();
+ break;
+ case -2:
+ default:
+ return;
+ }
+ (*r5)->unk0++;
+ }
+ else
+ {
+ Task_CleanUpAndSoftReset(taskId);
+ }
+}
+
+static void Task_CleanUpAndSoftReset(u8 taskId)
+{
+ switch (sClearSaveDataState->unk2)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFF, 0, 0, 16, RGB_WHITEALPHA);
+ sClearSaveDataState->unk2++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ DestroyYesNoMenu();
+ DestroyTask(taskId);
+ FreeAllWindowBuffers();
+ FREE_AND_SET_NULL(sClearSaveDataState);
+ DoSoftReset();
+ // noreturn
+ }
+ break;
+ }
+}
+
+static void CB2_Sub_SaveClearScreen_Init(void)
+{
+ ResetSpriteData();
+ ResetPaletteFade();
+ ResetTasks();
+}
+
+static void SaveClearScreen_GpuInit(void)
+{
+ DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000);
+
+#ifndef NONMATCHING
+ asm("":::"ip");
+#endif
+
+ do
+ {
+ void * dest = (void *)OAM;
+ size_t size = OAM_SIZE;
+ DmaClear32(3, dest, size);
+ } while (0);
+
+ do
+ {
+ void * dest = (void *)PLTT;
+ size_t size = PLTT_SIZE;
+ DmaClear16(3, dest, size);
+ } while (0);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates));
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ InitWindows(sWindowTemplates);
+ DeactivateAllTextPrinters();
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ ShowBg(0);
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 2510d6649..4ec32870e 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -297,14 +297,10 @@ gUnknown_203998C: @ 203998C
.include "src/credits.o"
.align 2
.include "src/diploma.o"
-
.align 2
.include "src/save_failed_screen.o"
-
.align 2
-gUnknown_203AB54: @ 203AB54
- .space 0x4
-
+ .include "src/clear_save_data_screen.o"
.align 2
.include "src/new_menu_helpers.o"
.align 2