Start decompiling gflib/save.c

This commit is contained in:
PikalaxALT 2021-08-26 16:16:40 -04:00
parent 4b0f0e2563
commit 64a5c49e04
17 changed files with 448 additions and 293 deletions

View File

@ -334,8 +334,8 @@ _02000564:
bx r0
.align 2, 0
thumb_func_start sub_02000584
sub_02000584: @ 0x02000584
thumb_func_start RenderText_NoPlaceholders
RenderText_NoPlaceholders: @ 0x02000584
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
@ -481,8 +481,8 @@ _02000682:
bx r1
.align 2, 0
thumb_func_start sub_0200068C
sub_0200068C: @ 0x0200068C
thumb_func_start DrawPartyMonHealthBar
DrawPartyMonHealthBar: @ 0x0200068C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
@ -604,16 +604,16 @@ _02000782:
pop {r0}
bx r0
thumb_func_start sub_02000794
sub_02000794: @ 0x02000794
thumb_func_start IsScreenFadedOut
IsScreenFadedOut: @ 0x02000794
ldr r0, =gScreenIsFadedOut
ldrb r0, [r0]
bx lr
.align 2, 0
.pool
thumb_func_start sub_020007A0
sub_020007A0: @ 0x020007A0
thumb_func_start OverrideScreenFadeState
OverrideScreenFadeState: @ 0x020007A0
ldr r1, =gScreenIsFadedOut
strb r0, [r1]
bx lr
@ -893,8 +893,8 @@ _020009BA:
bx r1
.align 2, 0
thumb_func_start sub_020009C4
sub_020009C4: @ 0x020009C4
thumb_func_start RenderTextAt
RenderTextAt: @ 0x020009C4
push {r4, r5, lr}
adds r4, r0, #0
adds r5, r3, #0
@ -906,8 +906,9 @@ sub_020009C4: @ 0x020009C4
pop {r0}
bx r0
thumb_func_start sub_020009DC
sub_020009DC: @ 0x020009DC
thumb_func_start CreateSomeWindowParameterized
CreateSomeWindowParameterized: @ 0x020009DC
@ struct Window * CreateSomeWindowParameterized(u32 windowId, u32 left, u32 top, u32 width, u32 height, u8 glyphSize);
push {r4, r5, r6, r7, lr}
sub sp, #0x20
adds r6, r0, #0
@ -923,7 +924,7 @@ sub_020009DC: @ 0x020009DC
strb r5, [r0, #3]
strb r7, [r0, #4]
mov r1, sp
ldr r0, =gUnknown_02020A44
ldr r0, =sSomeWindowBaseBlock
ldrh r0, [r0]
strh r0, [r1, #6]
movs r0, #0xf
@ -959,7 +960,7 @@ _02000A36:
adds r0, r4, #0
movs r1, #0
bl ClearWindowCharBuffer
ldr r1, =gUnknown_02020A44
ldr r1, =sSomeWindowBaseBlock
adds r0, r5, #0
muls r0, r7, r0
ldrh r2, [r1]
@ -973,8 +974,8 @@ _02000A36:
.align 2, 0
.pool
thumb_func_start sub_02000A74
sub_02000A74: @ 0x02000A74
thumb_func_start CreatePartyMonHPWindow
CreatePartyMonHPWindow: @ 0x02000A74
push {r4, r5, r6, r7, lr}
sub sp, #0x10
adds r3, r0, #0
@ -988,7 +989,7 @@ sub_02000A74: @ 0x02000A74
adds r1, r3, #0
adds r2, r4, #0
movs r3, #7
bl sub_020009DC
bl CreateSomeWindowParameterized
adds r7, r0, #0
movs r1, #0
bl ClearWindowCharBuffer
@ -1062,7 +1063,7 @@ _02000B16:
bl TextWindowSetXY
adds r0, r7, #0
add r1, sp, #8
bl sub_02000584
bl RenderText_NoPlaceholders
adds r0, r7, #0
add sp, #0x10
pop {r4, r5, r6, r7}
@ -1071,8 +1072,8 @@ _02000B16:
.align 2, 0
.pool
thumb_func_start sub_02000B38
sub_02000B38: @ 0x02000B38
thumb_func_start CreateMonIcon
CreateMonIcon: @ 0x02000B38
push {r4, r5, lr}
adds r4, r0, #0
ldr r0, [r4, #0x18]
@ -1209,7 +1210,7 @@ _02000C1A:
movs r1, #0
movs r2, #2
ldr r3, =gUnknown_0202004D
bl sub_020009C4
bl RenderTextAt
b _02000C7E
.align 2, 0
.pool
@ -1299,7 +1300,7 @@ sub_02000CA4: @ 0x02000CA4
bl AddSprite
adds r4, r0, #0
str r6, [r4, #0x14]
ldr r0, =sub_02000B38
ldr r0, =CreateMonIcon
str r0, [r4, #0x10]
ldr r5, =gAgbPmRomParams
ldr r0, [r5]
@ -1484,7 +1485,7 @@ _02000E7E:
movs r0, #8
str r0, [sp, #4]
movs r0, #1
bl sub_020009DC
bl CreateSomeWindowParameterized
mov r3, sb
str r0, [r3, #0x14]
ldr r4, =gPlayerPartyPtr
@ -1618,7 +1619,7 @@ _02000F9A:
mov r2, sb
ldr r0, [r2, #0x14]
add r1, sp, #0x20
bl sub_02000584
bl RenderText_NoPlaceholders
mov r3, sb
ldrb r0, [r3, #3]
cmp r0, #0
@ -1637,7 +1638,7 @@ _02000FBE:
str r0, [sp, #4]
movs r0, #1
movs r3, #3
bl sub_020009DC
bl CreateSomeWindowParameterized
adds r6, r0, #0
ldr r2, =gPlayerPartyPtr
movs r0, #0x64
@ -1685,7 +1686,7 @@ _0200102A:
_02001034:
adds r1, r4, r1
adds r0, r6, #0
bl sub_02000584
bl RenderText_NoPlaceholders
mov r1, sb
str r6, [r1, #0x18]
b _0200107A
@ -1811,7 +1812,7 @@ _02001120:
ldrb r1, [r2, #1]
adds r1, #5
mov r2, sl
bl sub_02000A74
bl CreatePartyMonHPWindow
mov r3, sb
str r0, [r3, #0x1c]
mov r0, r8
@ -1821,7 +1822,7 @@ _02001120:
adds r2, #4
movs r0, #0
mov r3, sl
bl sub_0200068C
bl DrawPartyMonHealthBar
movs r0, #0x2c
mov r1, sl
muls r1, r0, r1
@ -1861,7 +1862,7 @@ _02001178:
movs r3, #0x10
str r3, [sp, #4]
movs r3, #6
bl sub_020009DC
bl CreateSomeWindowParameterized
adds r4, r0, #0
mov r0, sb
str r4, [r0, #0x24]
@ -1877,7 +1878,7 @@ _02001178:
adds r0, r4, #0
movs r1, #0
movs r2, #2
bl sub_020009C4
bl RenderTextAt
b _020011F2
.align 2, 0
.pool
@ -2082,7 +2083,7 @@ _02001366:
movs r0, #8
str r0, [sp, #4]
movs r0, #1
bl sub_020009DC
bl CreateSomeWindowParameterized
mov r3, sb
str r0, [r3, #0x14]
ldr r4, =gPlayerPartyPtr
@ -2216,7 +2217,7 @@ _02001482:
mov r2, sb
ldr r0, [r2, #0x14]
add r1, sp, #0x20
bl sub_02000584
bl RenderText_NoPlaceholders
mov r3, sb
ldrb r0, [r3, #3]
cmp r0, #0
@ -2235,7 +2236,7 @@ _020014A6:
str r0, [sp, #4]
movs r0, #1
movs r3, #3
bl sub_020009DC
bl CreateSomeWindowParameterized
adds r6, r0, #0
ldr r2, =gPlayerPartyPtr
movs r0, #0x64
@ -2283,7 +2284,7 @@ _02001512:
_0200151C:
adds r1, r4, r1
adds r0, r6, #0
bl sub_02000584
bl RenderText_NoPlaceholders
mov r1, sb
str r6, [r1, #0x18]
b _0200155C
@ -2406,7 +2407,7 @@ _020015FC:
ldrb r1, [r2, #1]
adds r1, #2
mov r2, sl
bl sub_02000A74
bl CreatePartyMonHPWindow
mov r3, sb
str r0, [r3, #0x1c]
mov r0, r8
@ -2416,7 +2417,7 @@ _020015FC:
adds r2, #1
movs r0, #0
mov r3, sl
bl sub_0200068C
bl DrawPartyMonHealthBar
movs r0, #0x2c
mov r1, sl
muls r1, r0, r1
@ -2455,7 +2456,7 @@ _02001654:
movs r3, #0x10
str r3, [sp, #4]
movs r3, #6
bl sub_020009DC
bl CreateSomeWindowParameterized
adds r4, r0, #0
mov r0, sb
str r4, [r0, #0x24]
@ -2471,7 +2472,7 @@ _02001654:
adds r0, r4, #0
movs r1, #0
movs r2, #2
bl sub_020009C4
bl RenderTextAt
b _020016CA
.align 2, 0
.pool
@ -2617,7 +2618,7 @@ sub_020017E8: @ 0x020017E8
push {r4, r5, r6, lr}
sub sp, #0xc
adds r6, r0, #0
ldr r1, =gUnknown_02020A44
ldr r1, =sSomeWindowBaseBlock
movs r0, #0x80
strh r0, [r1]
bl ClearVram
@ -2977,7 +2978,7 @@ _02001AC8:
ldr r3, =gUnknown_0201FF98
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
b _02001B98
.align 2, 0
.pool
@ -2986,7 +2987,7 @@ _02001B8C:
ldr r3, =gUnknown_0201FF9F
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
_02001B98:
ldr r5, =gUnknown_02021860
movs r0, #0x86
@ -2996,12 +2997,12 @@ _02001B98:
ldr r3, =gUnknown_0201FFA8
movs r1, #0
movs r2, #0x10
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4]
ldr r3, =gUnknown_0201FFB0
movs r1, #0
movs r2, #0x20
bl sub_020009C4
bl RenderTextAt
ldr r2, =gUnknown_0201F910
movs r0, #0
movs r1, #0
@ -3023,7 +3024,7 @@ _02001B98:
ldr r1, =gBgTilemapBufferTransferScheduled
movs r0, #1
strb r0, [r1, #2]
bl sub_02000794
bl IsScreenFadedOut
cmp r0, #0
beq _02001BF4
bl FadeIn
@ -3484,7 +3485,7 @@ _02001F50:
ldr r3, =gUnknown_0201FFB7
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
b _0200201C
.align 2, 0
.pool
@ -3493,7 +3494,7 @@ _02002010:
ldr r3, =gUnknown_0201FFBE
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
_0200201C:
ldr r5, =gUnknown_02021860
movs r2, #0x86
@ -3503,12 +3504,12 @@ _0200201C:
ldr r3, =gUnknown_0201FFA8
movs r1, #0
movs r2, #0x10
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4]
ldr r3, =gUnknown_0201FFB0
movs r1, #0
movs r2, #0x20
bl sub_020009C4
bl RenderTextAt
ldr r2, =gUnknown_0201F910
movs r0, #0
movs r1, #0
@ -3530,7 +3531,7 @@ _0200201C:
ldr r1, =gBgTilemapBufferTransferScheduled
movs r0, #1
strb r0, [r1, #2]
bl sub_02000794
bl IsScreenFadedOut
cmp r0, #0
beq _02002098
bl FadeIn
@ -3704,7 +3705,7 @@ _020021D4:
adds r0, r4, #0
movs r1, #0
movs r2, #2
bl sub_020009C4
bl RenderTextAt
b _0200222C
.align 2, 0
.pool
@ -3784,7 +3785,7 @@ _02002278:
movs r1, #0
movs r2, #2
ldr r3, =gUnknown_0202004D
bl sub_020009C4
bl RenderTextAt
b _020022DE
.align 2, 0
.pool
@ -3823,7 +3824,7 @@ _020022DE:
adds r0, r4, #0
movs r1, #0
movs r2, #2
bl sub_020009C4
bl RenderTextAt
b _02002336
.align 2, 0
.pool
@ -5118,7 +5119,7 @@ sub_02002D60: @ 0x02002D60
adds r1, r3, #0
adds r2, r4, #0
movs r3, #3
bl sub_020009DC
bl CreateSomeWindowParameterized
adds r6, r0, #0
ldr r2, =gPlayerPartyPtr
movs r0, #0x64
@ -5171,7 +5172,7 @@ _02002DE4:
add r1, sp
adds r1, #8
adds r0, r6, #0
bl sub_02000584
bl RenderText_NoPlaceholders
adds r0, r6, #0
add sp, #0x10
pop {r4, r5, r6}
@ -5319,7 +5320,7 @@ sub_02002EE0: @ 0x02002EE0
adds r0, r5, #0
movs r1, #0
movs r2, #2
bl sub_020009C4
bl RenderTextAt
b _02002F2A
.align 2, 0
.pool
@ -7121,7 +7122,7 @@ _02003F20:
ldr r3, =gUnknown_02020046
movs r1, #0
movs r2, #0x30
bl sub_020009C4
bl RenderTextAt
ldr r0, [r5, #0x10]
cmp r0, #0
bne _02003F82
@ -7995,7 +7996,7 @@ sub_0200465C: @ 0x0200465C
ldr r1, =gUnknown_0201FB90
movs r0, #0
bl AddWindow
ldr r1, =gUnknown_020219E4
ldr r1, =gMessageWindowPtr
str r0, [r1]
movs r1, #1
movs r2, #8
@ -8030,34 +8031,34 @@ _02004744:
beq _02004768
b _020047AC
_0200474A:
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r4, [r0]
adds r0, r4, #0
ldr r1, =0x0000FFFF
bl ClearWindowCharBuffer
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
ldr r1, [r0, #0x18]
b _02004798
.align 2, 0
.pool
_02004768:
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r4, [r0]
adds r0, r4, #0
ldr r1, =0x0000FFFF
bl ClearWindowCharBuffer
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
ldr r1, [r0, #0x1c]
b _02004798
.align 2, 0
.pool
_02004788:
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r4, [r0]
adds r0, r4, #0
ldr r1, =0x0000FFFF
bl ClearWindowCharBuffer
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
ldr r1, [r0, #0x20]
_02004798:
adds r0, r4, #0
@ -8066,12 +8067,12 @@ _02004798:
.align 2, 0
.pool
_020047AC:
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r4, [r0]
adds r0, r4, #0
ldr r1, =0x0000FFFF
bl ClearWindowCharBuffer
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
ldr r1, [r0, #4]
adds r0, r4, #0
bl RenderText
@ -8100,13 +8101,13 @@ sub_020047D4: @ 0x020047D4
lsls r0, r0, #0x1e
cmp r0, #0
blt _020047FE
ldr r0, =gRomDetection_IsRS
ldr r0, =gRomDetection_IsEnglishROM
ldrb r0, [r0]
cmp r0, #0
bne _02004898
_020047FE:
movs r0, #1
bl sub_020007A0
bl OverrideScreenFadeState
add r1, sp, #0x10
ldr r0, =gFont0LatinInfo
ldm r0!, {r2, r3, r5}
@ -8143,12 +8144,12 @@ _020047FE:
ldr r1, =gBgTilemapBufferTransferScheduled
movs r0, #1
strb r0, [r1, #2]
bl sub_02000794
bl IsScreenFadedOut
cmp r0, #1
bne _02004862
bl FadeIn
_02004862:
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
ldr r1, [r0, #0x24]
adds r0, r4, #0
bl RenderText
@ -8168,7 +8169,7 @@ _02004898:
.align 2, 0
.pool
_020048AC:
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r0, [r0]
ldr r1, =0x0000FFFF
bl ClearWindowCharBuffer
@ -8215,7 +8216,7 @@ _0200491C:
ldrb r0, [r0]
cmp r0, #1
bne _02004932
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r0, [r0]
ldr r1, =gUnknown_02020508
bl RenderText
@ -8283,12 +8284,12 @@ _02004998:
movs r0, #0
strb r0, [r1]
bl sub_02006264
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r4, [r0]
adds r0, r4, #0
ldr r1, =0x0000FFFF
bl ClearWindowCharBuffer
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
ldr r1, [r0, #4]
adds r0, r4, #0
bl RenderText
@ -8304,16 +8305,16 @@ _020049C2:
.align 2, 0
.pool
thumb_func_start sub_02004A04
sub_02004A04: @ 0x02004A04
thumb_func_start WarningPrint
WarningPrint: @ 0x02004A04
push {r4, r5, lr}
adds r4, r0, #0
ldr r0, =gUnknown_020219E4
ldr r0, =gMessageWindowPtr
ldr r5, [r0]
ldr r1, =0x0000FFFF
adds r0, r5, #0
bl ClearWindowCharBuffer
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
lsls r4, r4, #2
adds r4, r4, r0
ldr r1, [r4]
@ -8367,12 +8368,12 @@ ErrorPrint: @ 0x02004A34
ldr r1, =gBgTilemapBufferTransferScheduled
movs r0, #1
strb r0, [r1, #2]
bl sub_02000794
bl IsScreenFadedOut
cmp r0, #1
bne _02004A9A
bl FadeIn
_02004A9A:
ldr r0, =gUnknown_0201FBB0
ldr r0, =gErrorMessagePtrs
lsls r1, r5, #2
adds r1, r1, r0
ldr r1, [r1]
@ -8783,7 +8784,7 @@ _02004E84:
movs r1, #0xc
movs r2, #0xa
adds r3, r6, #0
bl sub_0200068C
bl DrawPartyMonHealthBar
movs r2, #4
rsbs r2, r2, #0
movs r0, #1
@ -8852,7 +8853,7 @@ _02004F12:
subs r2, r0, r2
ldr r3, [r4, #4]
adds r0, r6, #0
bl sub_020009C4
bl RenderTextAt
subs r5, #1
adds r4, #0xc
cmp r5, #0
@ -9193,7 +9194,7 @@ sub_02005168: @ 0x02005168
ldr r3, [r1]
movs r1, #0xb0
movs r2, #0x10
bl sub_020009C4
bl RenderTextAt
ldr r1, =gUnknown_02021A20
ldr r0, [r1, #0x18]
mov r2, r8
@ -9240,7 +9241,7 @@ sub_02005168: @ 0x02005168
movs r1, #0xbf
movs r2, #0
add r3, sp, #8
bl sub_020009C4
bl RenderTextAt
add sp, #0x18
pop {r3, r4, r5}
mov r8, r3
@ -9282,7 +9283,7 @@ sub_02005264: @ 0x02005264
ldr r3, =gUnknown_02020098
movs r1, #0xb0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
movs r0, #0
bl sub_02005168
movs r6, #0
@ -9617,7 +9618,7 @@ sub_02005548: @ 0x02005548
ldr r3, =gUnknown_0202010F
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
ldr r0, [r5, #0x18]
ldr r4, =gUnknown_0201FE24
adds r1, r4, #0
@ -9757,7 +9758,7 @@ _02005658:
ldr r3, =gUnknown_02020087
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4, #0x18]
ldr r1, =gUnknown_0201FD94
movs r2, #4
@ -9814,7 +9815,7 @@ sub_02005704: @ 0x02005704
ldr r3, =gUnknown_02020087
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4, #0x18]
ldr r1, =gUnknown_0201FD94
movs r2, #4
@ -9869,7 +9870,7 @@ _020057B8:
ldr r3, =gUnknown_02020087
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4, #0x18]
ldr r4, =gUnknown_0201FD94
adds r1, r4, #0
@ -10120,7 +10121,7 @@ _02005A00:
ldr r3, =gUnknown_02020087
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4, #0x18]
ldr r1, =gUnknown_0201FD94
movs r2, #4
@ -10276,7 +10277,7 @@ _02005B74:
ldrb r0, [r1]
movs r0, #1
strb r0, [r1]
bl sub_02000794
bl IsScreenFadedOut
cmp r0, #0
bne _02005B9A
bl FadeOut
@ -10639,7 +10640,7 @@ sub_02005E68: @ 0x02005E68
ldr r3, =gUnknown_02020087
movs r1, #0
movs r2, #0
bl sub_020009C4
bl RenderTextAt
ldr r0, [r4, #0x18]
ldr r1, =gUnknown_0201FD94
movs r2, #4
@ -10859,7 +10860,7 @@ _0200604E:
sub_02006058: @ 0x02006058
push {r4, r5, r6, lr}
movs r0, #2
bl sub_02004A04
bl WarningPrint
ldr r0, =gUnknown_02024960
ldr r1, =0x0000084C
adds r2, r0, r1
@ -10880,11 +10881,11 @@ _02006074:
cmp r0, #0
beq _02006074
_02006084:
ldr r0, =gRomDetection_IsEnglish
ldr r0, =gRomDetection_IsRubySapphire
ldrb r0, [r0]
cmp r0, #0
beq _020060C0
bl sub_0200CD38
bl GetPlayerMapType
movs r1, #2
ands r1, r0
cmp r1, #0
@ -10894,7 +10895,7 @@ _02006084:
rsbs r0, r0, #0
str r0, [r1]
movs r0, #5
bl sub_02004A04
bl WarningPrint
_020060A6:
movs r0, #2
b _02006256
@ -10967,7 +10968,7 @@ _02006108:
bl ErrorPrint
_02006144:
movs r0, #3
bl sub_02004A04
bl WarningPrint
ldr r5, =gUnknown_02024960
ldr r0, =0x0000084C
adds r1, r5, r0
@ -11054,15 +11055,15 @@ _02006214:
b _02006230
_0200621A:
movs r0, #1
bl sub_02004A04
bl WarningPrint
b _02006230
_02006222:
movs r0, #4
bl sub_02004A04
bl WarningPrint
b _02006230
_0200622A:
movs r0, #5
bl sub_02004A04
bl WarningPrint
_02006230:
ldr r1, =gUnknown_02024960
ldr r0, =0x0000084C
@ -11094,7 +11095,7 @@ _02006256:
sub_02006264: @ 0x02006264
push {r4, r5, lr}
movs r0, #3
bl sub_02004A04
bl WarningPrint
ldr r5, =gUnknown_02024960
ldr r0, =0x0000085B
adds r4, r5, r0
@ -11159,15 +11160,15 @@ _020062F4:
b _02006310
_020062FA:
movs r0, #1
bl sub_02004A04
bl WarningPrint
b _02006310
_02006302:
movs r0, #4
bl sub_02004A04
bl WarningPrint
b _02006310
_0200630A:
movs r0, #5
bl sub_02004A04
bl WarningPrint
_02006310:
ldr r1, =gUnknown_02024960
ldr r0, =0x0000084C
@ -11432,6 +11433,6 @@ _020064E8:
.lcomm gUnknown_02020A38, 8
.lcomm gScreenIsFadedOut, 1
.lcomm _padding_02020A41, 2
.lcomm gUnknown_02020A44, 2
.lcomm sSomeWindowBaseBlock, 2
.lcomm _padding_02020A46, 2
.lcomm gUnknown_02020A48, 4

View File

@ -3,73 +3,10 @@
.text
.syntax unified
thumb_func_start GetPicUncompPtr
GetPicUncompPtr: @ 0x020098D0
ldr r0, =0x03004400
bx lr
.align 2, 0
.pool
thumb_func_start sub_020098D8
sub_020098D8: @ 0x020098D8
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r6, r1, #0
ldr r4, =gSaveSectors
ldr r0, =gAgbPmRomParams
ldr r0, [r0]
adds r1, r0, #0
adds r1, #0x88
ldr r1, [r1]
strh r1, [r4, #4]
adds r0, #0x8c
ldr r0, [r0]
movs r1, #0xf8
lsls r1, r1, #4
bl __umodsi3
strh r0, [r4, #0x24]
adds r4, #0x6c
movs r0, #0xfa
lsls r0, r0, #3
strh r0, [r4]
bl IdentifyFlash
lsls r0, r0, #0x10
cmp r0, #0
bne _0200994C
lsls r0, r5, #0x18
lsrs r0, r0, #0x18
adds r1, r6, #0
bl SetFlashTimerIntr
lsls r0, r0, #0x10
lsrs r1, r0, #0x10
cmp r1, #0
bne _0200994C
ldr r0, =gSaveCounter
str r1, [r0]
ldr r0, =gFirstSaveSector
strh r1, [r0]
ldr r0, =gDamagedSaveSectors
str r1, [r0]
ldr r1, =gSaveValidStatus
movs r0, #0x80
str r0, [r1]
movs r0, #0
b _02009950
.align 2, 0
.pool
_0200994C:
movs r0, #1
rsbs r0, r0, #0
_02009950:
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
thumb_func_start SetSaveSectorPtrs
SetSaveSectorPtrs: @ 0x02009958
push {r4, r5, lr}
ldr r2, =gSaveSectors
ldr r2, =sSaveBlockChunks
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
str r0, [r2]
@ -511,7 +448,7 @@ _02009CC6:
thumb_func_start sub_02009CD8
sub_02009CD8: @ 0x02009CD8
push {r4, r5, r6, lr}
ldr r6, =gSaveSectors
ldr r6, =sSaveBlockChunks
ldr r1, =gFastSaveSection
ldr r0, =gSaveReadBuffer
str r0, [r1]
@ -728,7 +665,7 @@ _02009EB6:
thumb_func_start sub_02009EC8
sub_02009EC8: @ 0x02009EC8
push {r4, r5, r6, lr}
ldr r6, =gSaveSectors
ldr r6, =sSaveBlockChunks
ldr r1, =gFastSaveSection
ldr r0, =gSaveReadBuffer
str r0, [r1]
@ -1144,7 +1081,7 @@ _0200A256:
sub_0200A260: @ 0x0200A260
push {r4, lr}
_0200A262:
ldr r1, =gSaveSectors
ldr r1, =sSaveBlockChunks
ldr r4, =gUnknown_02023F40
ldrh r0, [r4]
cmp r0, #0xd
@ -1323,7 +1260,7 @@ _0200A3DE:
movs r0, #0
strb r0, [r1]
_0200A3EC:
ldr r4, =gSaveSectors
ldr r4, =sSaveBlockChunks
bl SoundVSyncOff
movs r0, #0xd
adds r1, r4, #0
@ -1347,7 +1284,7 @@ _0200A3EC:
_0200A42C:
movs r4, #0
_0200A42E:
ldr r1, =gSaveSectors
ldr r1, =sSaveBlockChunks
movs r0, #0xe
bl sub_0200A118
ldr r1, =gDamagedSaveSectors
@ -1386,7 +1323,7 @@ _0200A46E:
_0200A478:
movs r4, #0
_0200A47A:
ldr r1, =gSaveSectors
ldr r1, =sSaveBlockChunks
movs r0, #0xe
bl sub_0200A1B8
ldr r1, =gDamagedSaveSectors
@ -1890,3 +1827,6 @@ _0200A8AC:
.lcomm sWipeTries, 4
.lcomm gSaveValidStatus, 4
.global sWipeTries
.global gSaveValidStatus

View File

@ -2228,7 +2228,7 @@ DrawSpindasSpots: @ 0x0200B89C
lsls r1, r1, #0x11
cmp r0, r1
bne _0200B9AE
ldr r0, =gRomDetection_IsEnglish
ldr r0, =gRomDetection_IsRubySapphire
ldrb r0, [r0]
movs r1, #7
str r1, [sp, #4]

View File

@ -576,7 +576,7 @@ _0200C9E2:
ands r1, r2
orrs r1, r0
strb r1, [r7]
bl sub_0200CD38
bl GetPlayerMapType
lsls r0, r0, #0x18
lsrs r0, r0, #0x19
ands r0, r5
@ -588,7 +588,7 @@ _0200C9E2:
ands r1, r2
orrs r1, r0
strb r1, [r7]
bl sub_0200CDD0
bl IsFRLG
ands r0, r4
lsls r0, r0, #2
movs r1, #5
@ -597,7 +597,7 @@ _0200C9E2:
ands r1, r2
orrs r1, r0
strb r1, [r7]
bl sub_0200CD38
bl GetPlayerMapType
lsls r0, r0, #0x18
lsrs r0, r0, #0x1f
ands r0, r4
@ -848,10 +848,10 @@ _0200CBF6:
thumb_func_start DetectROM
DetectROM: @ 0x0200CBF8
push {r4, r5, lr}
ldr r2, =gRomDetection_IsEnglish
ldr r2, =gRomDetection_IsRubySapphire
movs r0, #0
strb r0, [r2]
ldr r1, =gRomDetection_IsRS
ldr r1, =gRomDetection_IsEnglishROM
strb r0, [r1]
movs r4, #0
ldr r0, =0x080000AC
@ -985,10 +985,10 @@ _0200CD30:
bx r0
.align 2, 0
thumb_func_start sub_0200CD38
sub_0200CD38: @ 0x0200CD38
thumb_func_start GetPlayerMapType
GetPlayerMapType: @ 0x0200CD38
push {lr}
ldr r0, =gRomDetection_IsEnglish
ldr r0, =gRomDetection_IsRubySapphire
ldrb r0, [r0]
cmp r0, #0
bne _0200CD60
@ -1006,7 +1006,7 @@ sub_0200CD38: @ 0x0200CD38
_0200CD60:
ldr r0, =gSaveBlock1Ptr
ldr r0, [r0]
bl sub_0200CED8
bl USRom_GetPlayerMapType
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
movs r0, #1
@ -1030,7 +1030,7 @@ sub_0200CD84: @ 0x0200CD84
thumb_func_start sub_0200CD88
sub_0200CD88: @ 0x0200CD88
push {lr}
ldr r0, =gRomDetection_IsEnglish
ldr r0, =gRomDetection_IsRubySapphire
ldrb r0, [r0]
cmp r0, #0
bne _0200CDB4
@ -1064,8 +1064,8 @@ _0200CDCA:
bx r1
.align 2, 0
thumb_func_start sub_0200CDD0
sub_0200CDD0: @ 0x0200CDD0
thumb_func_start IsFRLG
IsFRLG: @ 0x0200CDD0
ldr r0, =gAgbPmRomParams
ldr r0, [r0]
ldr r0, [r0]
@ -1081,8 +1081,8 @@ _0200CDE4:
_0200CDE6:
bx lr
thumb_func_start sub_0200CDE8
sub_0200CDE8: @ 0x0200CDE8
thumb_func_start CheckGameClear
CheckGameClear: @ 0x0200CDE8
ldr r1, =gSaveBlock1Ptr
ldr r0, =gAgbPmRomParams
ldr r0, [r0]
@ -1230,8 +1230,8 @@ _0200CED0:
.align 2, 0
.pool
thumb_func_start sub_0200CED8
sub_0200CED8: @ 0x0200CED8
thumb_func_start USRom_GetPlayerMapType
USRom_GetPlayerMapType: @ 0x0200CED8
push {r4, lr}
movs r1, #4
ldrsb r1, [r0, r1]
@ -2195,7 +2195,7 @@ _0200D698:
.align 2, 0
.pool
_0200D6A8:
bl sub_0200CDE8
bl CheckGameClear
ldrb r3, [r5, #0xb]
lsls r2, r3, #0x1f
lsrs r2, r2, #0x1f

View File

@ -15,17 +15,28 @@
.section .rodata
.align 2, 0
gFont0LatinInfo::
.byte 0x02, 0x04, 0x0F, 0x16
.byte 0x04, 0x00
.byte 2 @ bg
.byte 4 @ left
.byte 15 @ top
.byte 22 @ width
.byte 4 @ height
.align 1
.2byte 0x0020
.byte 0x0F, 0x10, 0x00, 0x00
.2byte 0x0020 @ base block
.byte 0x0F @ bg color
.byte 0x10 @ glyph size
.align 2
.4byte 0x06008400
.4byte gFont0LatinGfx
.4byte gFont0LatinWidths
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.4byte 0x06008400 @ char addr
.4byte gFont0LatinGfx @ gfx
.4byte gFont0LatinWidths @ glyph widths
.byte 0 @ fg color
.byte 0 @ shadow color
.byte 0 @ current X
.byte 0 @ current Y
.byte 0 @ glyph fixed width
.byte 0 @ start X
.byte 0 @ start Y
.align 2, 0
gFont0LatinGfx::
.incbin "graphics/fonts/font0_lat.2bpp"
@ -285,28 +296,123 @@ gUnknown_0201FAF8::
.byte 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00
.byte 0xA0, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.align 2, 0
gUnknown_0201FB10::
.byte 0x00, 0x00, 0x00, 0x0B, 0x02, 0x00, 0x20, 0x00, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06
.byte 0x4C, 0x00, 0x01, 0x02, 0xCC, 0x3F, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
gUnknown_0201FB30::
.byte 0x00, 0x01, 0x0C, 0x09, 0x08, 0x00, 0x36, 0x00, 0x0D, 0x10, 0x00, 0x00, 0xC0, 0x06, 0x00, 0x06
.byte 0x4C, 0x00, 0x01, 0x02, 0xCC, 0x3F, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
gUnknown_0201FB50::
.byte 0x00, 0x0B, 0x03, 0x13, 0x11, 0x00, 0x7E, 0x00, 0x0D, 0x10, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x06
.byte 0x4C, 0x00, 0x01, 0x02, 0xCC, 0x3F, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
gUnknown_0201FB70::
.byte 0x00, 0x19, 0x00, 0x05, 0x02, 0x00, 0xC1, 0x01, 0x0D, 0x10, 0x00, 0x00, 0x20, 0x38, 0x00, 0x06
.byte 0x4C, 0x00, 0x01, 0x02, 0xCC, 0x3F, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
gUnknown_0201FB90::
.byte 0x02, 0x01, 0x11, 0x1C, 0x02, 0x00, 0x20, 0x00, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x84, 0x00, 0x06
.byte 0x4C, 0x00, 0x01, 0x02, 0xCC, 0x3F, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0 @ bg
.byte 0 @ left
.byte 0 @ top
.byte 11 @ width
.byte 2 @ height
.align 1
.2byte 0x0020 @ base block
.byte 0x0D @ bg color
.byte 0x10 @ glyph size
.align 2
.4byte 0x06000400 @ char addr
.4byte gFont0LatinGfx @ gfx
.4byte gFont0LatinWidths @ glyph widths
.byte 0 @ fg color
.byte 0 @ shadow color
.byte 0 @ current X
.byte 0 @ current Y
.byte 0 @ glyph fixed width
.byte 0 @ start X
.byte 0 @ start Y
.align 2, 0
gUnknown_0201FBB0::
gUnknown_0201FB30::
.byte 0 @ bg
.byte 1 @ left
.byte 12 @ top
.byte 9 @ width
.byte 8 @ height
.align 1
.2byte 0x0036 @ base block
.byte 0x0D @ bg color
.byte 0x10 @ glyph size
.align 2
.4byte 0x060006C0 @ char addr
.4byte gFont0LatinGfx @ gfx
.4byte gFont0LatinWidths @ glyph widths
.byte 0 @ fg color
.byte 0 @ shadow color
.byte 0 @ current X
.byte 0 @ current Y
.byte 0 @ glyph fixed width
.byte 0 @ start X
.byte 0 @ start Y
.align 2, 0
gUnknown_0201FB50::
.byte 0 @ bg
.byte 11 @ left
.byte 3 @ top
.byte 19 @ width
.byte 17 @ height
.align 1
.2byte 0x007E @ base block
.byte 0x0D @ bg color
.byte 0x10 @ glyph size
.align 2
.4byte 0x06000FC0 @ char addr
.4byte gFont0LatinGfx @ gfx
.4byte gFont0LatinWidths @ glyph widths
.byte 0 @ fg color
.byte 0 @ shadow color
.byte 0 @ current X
.byte 0 @ current Y
.byte 0 @ glyph fixed width
.byte 0 @ start X
.byte 0 @ start Y
.align 2, 0
gUnknown_0201FB70::
.byte 0 @ bg
.byte 25 @ left
.byte 0 @ top
.byte 5 @ width
.byte 2 @ height
.align 1
.2byte 0x01C1 @ base block
.byte 0x0D @ bg color
.byte 0x10 @ glyph size
.align 2
.4byte 0x06003820 @ char addr
.4byte gFont0LatinGfx @ gfx
.4byte gFont0LatinWidths @ glyph widths
.byte 0 @ fg color
.byte 0 @ shadow color
.byte 0 @ current X
.byte 0 @ current Y
.byte 0 @ glyph fixed width
.byte 0 @ start X
.byte 0 @ start Y
.align 2, 0
gUnknown_0201FB90::
.byte 2 @ bg
.byte 1 @ left
.byte 17 @ top
.byte 28 @ width
.byte 2 @ height
.align 1
.2byte 0x0020 @ base block
.byte 0x0F @ bg color
.byte 0x10 @ glyph size
.align 2
.4byte 0x06008400 @ char addr
.4byte gFont0LatinGfx @ gfx
.4byte gFont0LatinWidths @ glyph widths
.byte 0 @ fg color
.byte 0 @ shadow color
.byte 0 @ current X
.byte 0 @ current Y
.byte 0 @ glyph fixed width
.byte 0 @ start X
.byte 0 @ start Y
.align 2, 0
gErrorMessagePtrs::
.4byte 0
.4byte gUnknown_02020378
.4byte gUnknown_02020388

View File

@ -244,22 +244,6 @@ gRSSpecialAreaMaps::
.data
.align 2
gSaveSectors::
.4byte gSaveBlock2Ptr, 0x00000004
.4byte gSaveBlock1Ptr + 0xF80 * 0, 0x00000f80
.4byte gSaveBlock1Ptr + 0xF80 * 1, 0x00000f80
.4byte gSaveBlock1Ptr + 0xF80 * 2, 0x00000f80
.4byte gSaveBlock1Ptr + 0xF80 * 3, 0x00000c40
.4byte gPokemonStoragePtr + 0xF80 * 0, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 1, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 2, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 3, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 4, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 5, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 6, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 7, 0x00000f80
.4byte gPokemonStoragePtr + 0xF80 * 8, 0x00000004
gUnknown_020205BC::
.4byte gSaveReadBuffer, 0x00000f80
.4byte gSaveReadBuffer, 0x00000f80

View File

@ -35,7 +35,7 @@ struct FlashType {
struct FlashSetupInfo
{
u16 (*programFlashByte)(u16, u32, u8);
u16 (*programFlashSector)(u16, u8 *);
u16 (*programFlashSector)(u16, void *);
u16 (*eraseFlashChip)(void);
u16 (*eraseFlashSector)(u16);
u16 (*WaitForFlashWrite)(u8, u8 *, u8);
@ -46,7 +46,7 @@ struct FlashSetupInfo
extern u16 gFlashNumRemainingBytes;
extern u16 (*ProgramFlashByte)(u16, u32, u8);
extern u16 (*ProgramFlashSector)(u16, u8 *);
extern u16 (*ProgramFlashSector)(u16, void *);
extern u16 (*EraseFlashChip)(void);
extern u16 (*EraseFlashSector)(u16);
extern u16 (*WaitForFlashWrite)(u8, u8 *, u8);
@ -65,13 +65,19 @@ u16 ReadFlashId(void);
void StartFlashTimer(u8 phase);
void SetReadFlash1(u16 *dest);
void StopFlashTimer(void);
void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size);
u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src);
void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size);
u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n);
u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData);
u16 EraseFlashChip_MX(void);
u16 EraseFlashSector_MX(u16 sectorNum);
u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data);
u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src);
u16 ProgramFlashSector_MX(u16 sectorNum, void *src);
// agb_flash_1m
u16 IdentifyFlash(void);
#endif // GUARD_GBA_FLASH_INTERNAL_H

View File

@ -16,30 +16,45 @@ struct RomInfo
/*0x44*/ const u8 *speciesNames;
/*0x48*/ const u8 *moveNames;
/*0x4C*/ const struct Decoration *decorations;
/*0x50*/ ptrdiff_t flagsOffs;
/*0x54*/ ptrdiff_t varsOffs;
/*0x58*/ ptrdiff_t pokedexOffs;
/*0x5C*/ ptrdiff_t dexSeen2Offs;
/*0x60*/ ptrdiff_t dexSeen3Offs;
/*0x64*/ ptrdiff_t unk64;
/*0x68*/ ptrdiff_t unk68;
/*0x6C*/ ptrdiff_t unk6C;
/*0x70*/ ptrdiff_t unk70;
/*0x74*/ u8 unk74[16];
/*0x84*/ ptrdiff_t unk84;
/*0x88*/ ptrdiff_t saveBlock2Size;
/*0x8C*/ ptrdiff_t saveBlock1Size;
/*0x90*/ ptrdiff_t playerPartyCountOffs;
/*0x94*/ ptrdiff_t playerPartyOffs;
/*0x98*/ ptrdiff_t unk98;
/*0x9C*/ ptrdiff_t sb2PlayerIdOffs;
/*0xA0*/ ptrdiff_t sb2PlayerNameOffs;
/*0xA4*/ ptrdiff_t sb2PlayerGenderOffs;
/*0xA8*/ ptrdiff_t unkA8;
/*0xAC*/ ptrdiff_t unkAC;
/*0xB0*/ ptrdiff_t unkB0;
/*0xB4*/ ptrdiff_t unkB4;
/*0xB8*/ ptrdiff_t unkB8;
/*0x50*/ size_t flagsOffs;
/*0x54*/ size_t varsOffs;
/*0x58*/ size_t pokedexOffs;
/*0x5C*/ size_t dexSeen2Offs;
/*0x60*/ size_t dexSeen3Offs;
/*0x64*/ size_t unk64;
/*0x68*/ size_t unk68;
/*0x6C*/ size_t unk6C;
/*0x70*/ size_t unk70;
/*0x74*/ u8 unk74;
/*0x75*/ u8 unk75;
/*0x76*/ u8 unk76;
/*0x77*/ u8 pokemonNameLength;
/*0x78*/ u8 unk78;
/*0x79*/ u8 unk79;
/*0x7A*/ u8 unk7A;
/*0x7B*/ u8 unk7B;
/*0x7C*/ u8 unk7C;
/*0x7D*/ u8 unk7D;
/*0x7E*/ u8 unk7E;
/*0x7F*/ u8 unk7F;
/*0x80*/ u8 unk80;
/*0x81*/ u8 unk81;
/*0x82*/ u8 unk82;
/*0x83*/ u8 unk83;
/*0x84*/ u8 unk84;
/*0x88*/ size_t saveBlock2Size;
/*0x8C*/ size_t saveBlock1Size;
/*0x90*/ size_t playerPartyCountOffs;
/*0x94*/ size_t playerPartyOffs;
/*0x98*/ size_t sb2SpecialSaveWarpOffs;
/*0x9C*/ size_t sb2PlayerIdOffs;
/*0xA0*/ size_t sb2PlayerNameOffs;
/*0xA4*/ size_t sb2PlayerGenderOffs;
/*0xA8*/ size_t unkA8;
/*0xAC*/ size_t unkAC;
/*0xB0*/ size_t externalEventFlagsOffs;
/*0xB4*/ size_t externalEventDataOffs;
/*0xB8*/ u8 unkB8; // some sort of flag array?
/*0xBC*/ const struct BaseStats *baseStats;
/*0xC0*/ const u8 *abilityNames;
/*0xC4*/ const u8 *abilityDescriptions;
@ -47,15 +62,15 @@ struct RomInfo
/*0xCC*/ const struct BattleMove *battleMoves;
/*0xD0*/ const struct CompressedSpriteSheet *ballSpriteSheets;
/*0xD4*/ const struct CompressedSpritePalette *ballSpritePalettes;
/*0xD8*/ ptrdiff_t unkD8;
/*0xDC*/ ptrdiff_t unkDC;
/*0xE0*/ ptrdiff_t unkE0;
/*0xE4*/ ptrdiff_t unkE4;
/*0xE8*/ ptrdiff_t unkE8;
/*0xEC*/ ptrdiff_t pcItemsOffs;
/*0xF0*/ ptrdiff_t giftRibbonsOffs;
/*0xF4*/ ptrdiff_t enigmaBerryOffs;
/*0xF8*/ ptrdiff_t enigmaBerrySize;
/*0xD8*/ size_t unkD8;
/*0xDC*/ size_t sysGameClearFlagIdx;
/*0xE0*/ size_t unkE0;
/*0xE4*/ size_t unkE4;
/*0xE8*/ size_t unkE8;
/*0xEC*/ size_t pcItemsOffs;
/*0xF0*/ size_t giftRibbonsOffs;
/*0xF4*/ size_t enigmaBerryOffs;
/*0xF8*/ size_t enigmaBerrySize;
/*0xFC*/ const u8 *moveDescriptions;
};

View File

@ -1,9 +1,9 @@
#ifndef GFLIB_INIT_H
#define GFLIB_INIT_H
#define TEST_BUTTON(arr, flags) ({(arr) & (flags);})
#include "gflib/types.h"
typedef void (*IntrFunc)(void);
#define TEST_BUTTON(arr, flags) ({(arr) & (flags);})
// Expose to crt0.s
void AgbMain(void);

View File

@ -0,0 +1,6 @@
#ifndef GFLIB_TYPES_H
#define GFLIB_TYPES_H
typedef void (*IntrFunc)(void);
#endif //GFLIB_TYPES_H

14
payload/include/iwram.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef GUARD_IWRAM_H
#define GUARD_IWRAM_H
IWRAM_DATA u8 _Iwram[0x8000];
#define gBgTilemapBuffers ((u16 *)IWRAM_START)
#define BG_TILEMAP_BUFFER(i) ((u16 *)(IWRAM_START + BG_SCREEN_SIZE * (i)))
#define BG_TILEMAP_BUFFERS_SIZE (BG_SCREEN_SIZE * 4)
#define gFontHalfrowLookupTable ((u32 *)(IWRAM_START + 0x4000))
#define FONT_HALFROW_LOOKUP_TABLE_SIZE (0x400)
#define gPicUncompBuffer ((u8 *)(IWRAM_START + 0x4400))
#define PIC_UNCOMP_BUFFER_SIZE (0x800)
#endif //GUARD_IWRAM_H

View File

@ -27,6 +27,8 @@ SECTIONS {
src/gflib/gfxload.o(.text);
src/gflib/sound.o(.text);
asm/gflib/agb_rom.o(.text);
src/gflib/pic_uncomp.o(.text);
src/gflib/save.o(.text);
asm/mb_020094A8.o(.text);
asm/pokemon.o(.text);
asm/unk_0200C5DC.o(.text);
@ -81,6 +83,7 @@ SECTIONS {
lib_data :
ALIGN(4)
{
src/gflib/save.o(.data);
data/mb_020094A8.o(.data);
} =0
bss_start = .;
@ -99,18 +102,6 @@ SECTIONS {
}
. = 0x02040000; /* Limit EWRAM size */
. = 0x03000000;
gpu_buffer (NOLOAD) :
ALIGN(4)
{
gBgTilemapBuffers = .;
. += 0x4000;
gFontHalfrowLookupTable = .;
. += 0x400;
gPicUncompBuffer = .;
. += 0x800;
}
. = 0x03008000; /* Limit IWRAM size */
/DISCARD/ :
{
*(*);

View File

@ -9,7 +9,7 @@ static u16 sSavedIme;
u8 gFlashTimeoutFlag;
u8 (*PollFlashStatus)(u8 *);
u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData);
u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src);
u16 (*ProgramFlashSector)(u16 sectorNum, void *src);
const struct FlashType *gFlash;
u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data);
u16 gFlashNumRemainingBytes;
@ -136,7 +136,7 @@ void ReadFlash_Core(vu8 *src, u8 *dest, u32 size)
}
}
void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size)
void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size)
{
u8 *src;
u16 i;
@ -276,7 +276,7 @@ u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src)
return result;
}
u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n)
u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *src, u32 n)
{
u8 i;
u32 result;

View File

@ -153,7 +153,7 @@ static u16 ProgramByte(u8 *src, u8 *dest)
return WaitForFlashWrite(1, dest, *src);
}
u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src)
u16 ProgramFlashSector_MX(u16 sectorNum, void *src)
{
u16 result;
u8 *dest;

View File

@ -0,0 +1,7 @@
#include "global.h"
#include "iwram.h"
void * GetPicUncompPtr(void)
{
return gPicUncompBuffer;
}

View File

@ -0,0 +1,85 @@
#include "global.h"
#include "gflib/types.h"
#include "gflib/save.h"
#include "gflib/agb_rom.h"
#include "gba/flash_internal.h"
struct SaveBlockChunk
{
u8 *data;
u16 size;
};
struct SaveSector
{
u8 data[0xFF4];
u16 id;
u16 checksum;
u32 signature;
u32 counter;
}; // size is 0x1000
// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer
#define SECTOR_DATA_SIZE 3968u
#define SECTOR_FOOTER_SIZE 128
#define HALL_OF_FAME_SECTOR 28
#define NUM_SECTORS_PER_SAVE_SLOT 14 // Number of sectors occupied by a save slot
#define NUM_HALL_OF_FAME_SECTORS 2
#define SAVEBLOCK_CHUNK_EX(structure, size, chunkNum) \
{ \
(u8 *)structure + chunkNum * SECTOR_DATA_SIZE, \
min(size - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \
} \
#define SAVEBLOCK_CHUNK(structure, chunkNum) SAVEBLOCK_CHUNK_EX(&structure, sizeof(structure), chunkNum)
struct SaveBlockChunk sSaveBlockChunks[] = {
{(u8 *)&gSaveBlock2Ptr, 0x00000004},
{(u8 *)&gSaveBlock1Ptr + SECTOR_DATA_SIZE * 0, SECTOR_DATA_SIZE},
{(u8 *)&gSaveBlock1Ptr + SECTOR_DATA_SIZE * 1, SECTOR_DATA_SIZE},
{(u8 *)&gSaveBlock1Ptr + SECTOR_DATA_SIZE * 2, SECTOR_DATA_SIZE},
{(u8 *)&gSaveBlock1Ptr + SECTOR_DATA_SIZE * 3, 0x0c40},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 0, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 1, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 2, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 3, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 4, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 5, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 6, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 7, SECTOR_DATA_SIZE},
{(u8 *)&gPokemonStoragePtr + SECTOR_DATA_SIZE * 8, 0x0004},
};
u16 gFirstSaveSector;
u32 gPrevSaveCounter;
u16 gLastKnownGoodSector;
u32 gDamagedSaveSectors;
u32 gSaveCounter;
struct SaveSector *gFastSaveSection; // the pointer is in fast IWRAM but may sometimes point to the slower EWRAM.
u16 gUnknown_03005EB4;
u16 gSaveFileStatus;
u32 gGameContinueCallback;
extern u32 gSaveValidStatus;
extern u8 sWipeTries;
s32 sub_020098D8(u32 timerNum, IntrFunc * intrFunc)
{
sSaveBlockChunks[0].size = gAgbPmRomParams->saveBlock2Size;
sSaveBlockChunks[4].size = gAgbPmRomParams->saveBlock1Size % SECTOR_DATA_SIZE;
sSaveBlockChunks[13].size = sizeof(struct PokemonStorage) % SECTOR_DATA_SIZE;
if (!IdentifyFlash() && !SetFlashTimerIntr(timerNum, intrFunc))
{
gSaveCounter = 0;
gFirstSaveSector = 0;
gDamagedSaveSectors = 0;
gSaveValidStatus = 0x80;
return 0;
}
return -1;
}

View File

@ -29,7 +29,7 @@ gUnknown_020219DF:
gUnknown_020219E0:
.space 0x4
gUnknown_020219E4:
gMessageWindowPtr:
.space 0xc
gUnknown_020219F0:
@ -155,13 +155,13 @@ gUnknown_02024950:
gUnknown_02024960:
.space 0x884
gRomDetection_IsRS:
gRomDetection_IsEnglishROM:
.space 0x4
gAgbPmRomParams:
.space 0x4
gRomDetection_IsEnglish:
gRomDetection_IsRubySapphire:
.space 0x4
gUnknown_020251F0: