diff options
author | Cameron Hall <cameronghall@cox.net> | 2019-08-07 17:44:24 -0500 |
---|---|---|
committer | Cameron Hall <cameronghall@cox.net> | 2019-08-07 17:44:24 -0500 |
commit | 254f7f6a218d68ced40fdf5f08b3e63d272981fc (patch) | |
tree | 9159d3545978aa61ee210af5c66c09d3893f9e54 | |
parent | 66780ab02c2d26de2b74e64b07320467a47b42db (diff) |
decompile rom_528AC.s
-rwxr-xr-x | Makefile | 8 | ||||
-rwxr-xr-x | asm/bonus_field_select.s | 4 | ||||
-rwxr-xr-x | asm/field_select.s | 4 | ||||
-rwxr-xr-x | asm/high_scores.s | 24 | ||||
-rwxr-xr-x | asm/options.s | 26 | ||||
-rwxr-xr-x | asm/pokedex.s | 16 | ||||
-rwxr-xr-x | asm/rom_11B9C.s | 16 | ||||
-rwxr-xr-x | asm/rom_3219C.s | 8 | ||||
-rwxr-xr-x | asm/rom_528AC.s | 529 | ||||
-rwxr-xr-x | data/rom.s | 6 | ||||
-rw-r--r-- | include/functions.h | 4 | ||||
-rwxr-xr-x | include/main.h | 22 | ||||
-rw-r--r-- | include/variables.h | 2 | ||||
-rwxr-xr-x | ld_script.txt | 2 | ||||
-rwxr-xr-x | src/gbplayer.c | 1 | ||||
-rwxr-xr-x | src/rom_3219C.c | 16 | ||||
-rw-r--r-- | src/rom_528AC.c | 254 |
17 files changed, 343 insertions, 599 deletions
@@ -105,6 +105,8 @@ include graphics_rules.mk $(C_BUILDDIR)/rom_850.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/gbplayer.o: CC1 := tools/agbcc/bin/old_agbcc +#$(C_BUILDDIR)/rom_528AC.o: CC1 := tools/agbcc/bin/old_agbcc + $(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/libc.o: CFLAGS := -O2 @@ -122,9 +124,9 @@ $(C_BUILDDIR)/%.o: c_dep := endif $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) - @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i - @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s - @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s + $(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i + $(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s + echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s ifeq ($(NODEP),) diff --git a/asm/bonus_field_select.s b/asm/bonus_field_select.s index cea2519..331e00b 100755 --- a/asm/bonus_field_select.s +++ b/asm/bonus_field_select.s @@ -179,7 +179,7 @@ sub_2710: @ 0x08002710 ldr r0, _0800275C @ =gUnknown_0202BEE4 strb r1, [r0] ldr r1, _08002760 @ =gUnknown_0201A4C0 - ldr r0, _08002764 @ =gUnknown_0200B134 + ldr r0, _08002764 @ =gMain+0x74 adds r0, #0xce ldrb r0, [r0] strb r0, [r1] @@ -194,7 +194,7 @@ _08002754: .4byte gUnknown_0201A4F4 _08002758: .4byte gUnknown_0201A4B0 _0800275C: .4byte gUnknown_0202BEE4 _08002760: .4byte gUnknown_0201A4C0 -_08002764: .4byte gUnknown_0200B134 +_08002764: .4byte gMain+0x74 thumb_func_start sub_2768 sub_2768: @ 0x08002768 diff --git a/asm/field_select.s b/asm/field_select.s index 665ab73..f789dbf 100755 --- a/asm/field_select.s +++ b/asm/field_select.s @@ -175,7 +175,7 @@ sub_8C38: @ 0x08008C38 strh r1, [r2, #0x16] strh r1, [r2, #0x12] strb r3, [r2, #0x14] - ldr r0, _08008C74 @ =gUnknown_0200B134 + ldr r0, _08008C74 @ =gMain+0x74 adds r1, r0, #0 adds r1, #0xce ldrb r1, [r1] @@ -187,7 +187,7 @@ sub_8C38: @ 0x08008C38 bx lr .align 2, 0 _08008C70: .4byte gUnknown_02002838 -_08008C74: .4byte gUnknown_0200B134 +_08008C74: .4byte gMain+0x74 _08008C78: .4byte gUnknown_02002850 thumb_func_start sub_8C7C diff --git a/asm/high_scores.s b/asm/high_scores.s index 225b4bc..2c93e68 100755 --- a/asm/high_scores.s +++ b/asm/high_scores.s @@ -187,7 +187,7 @@ sub_CFD4: @ 0x0800CFD4 mov r8, r0 ldr r1, _0800D0B4 @ =gUnknown_0202C610 mov sl, r1 - ldr r2, _0800D0B8 @ =gUnknown_0200B134 + ldr r2, _0800D0B8 @ =gMain+0x74 mov sb, r2 movs r3, #0 mov ip, r3 @@ -296,7 +296,7 @@ _0800D090: .align 2, 0 _0800D0B0: .4byte gUnknown_02002858 _0800D0B4: .4byte gUnknown_0202C610 -_0800D0B8: .4byte gUnknown_0200B134 +_0800D0B8: .4byte gMain+0x74 _0800D0BC: .4byte gUnknown_0202C550 _0800D0C0: .4byte gUnknown_0201B178 _0800D0C4: .4byte gUnknown_0202BEBC @@ -1282,7 +1282,7 @@ _0800D880: cmp r3, #3 ble _0800D880 movs r3, #0 - ldr r0, _0800D908 @ =gUnknown_0200B134 + ldr r0, _0800D908 @ =gMain+0x74 mov r8, r0 ldr r1, _0800D8F8 @ =gUnknown_0202C610 mov ip, r1 @@ -1330,7 +1330,7 @@ _0800D8F8: .4byte gUnknown_0202C610 _0800D8FC: .4byte gMain _0800D900: .4byte gUnknown_02002858 _0800D904: .4byte gUnknown_0201A500 -_0800D908: .4byte gUnknown_0200B134 +_0800D908: .4byte gMain+0x74 _0800D90C: movs r0, #0x6a bl m4aSongNumStart @@ -1735,7 +1735,7 @@ _0800DC3C: ldr r1, _0800DCDC @ =gUnknown_0201B170 str r0, [r1] movs r2, #0 - ldr r3, _0800DCE0 @ =gUnknown_0200B134 + ldr r3, _0800DCE0 @ =gMain+0x74 mov r8, r3 ldr r7, _0800DCE4 @ =gUnknown_0202C610 mov ip, r7 @@ -1795,7 +1795,7 @@ _0800DCD0: .4byte gUnknown_0201B178 _0800DCD4: .4byte gUnknown_0202BEBC _0800DCD8: .4byte gUnknown_0202BED8 _0800DCDC: .4byte gUnknown_0201B170 -_0800DCE0: .4byte gUnknown_0200B134 +_0800DCE0: .4byte gMain+0x74 _0800DCE4: .4byte gUnknown_0202C610 _0800DCE8: .4byte gMain _0800DCEC: .4byte gUnknown_02002858 @@ -5054,7 +5054,7 @@ sub_F6E0: @ 0x0800F6E0 movs r0, #0 strb r0, [r1] movs r2, #0 - ldr r0, _0800F744 @ =gUnknown_0200B134 + ldr r0, _0800F744 @ =gMain+0x74 mov r8, r0 ldr r3, _0800F748 @ =gUnknown_08079430 mov ip, r3 @@ -5099,7 +5099,7 @@ _0800F718: bx r0 .align 2, 0 _0800F740: .4byte gUnknown_0202BEB0 -_0800F744: .4byte gUnknown_0200B134 +_0800F744: .4byte gMain+0x74 _0800F748: .4byte gUnknown_08079430 thumb_func_start sub_F74C @@ -5112,7 +5112,7 @@ sub_F74C: @ 0x0800F74C sub sp, #0x14 movs r0, #0 mov r8, r0 - ldr r1, _0800F85C @ =gUnknown_0200B134 + ldr r1, _0800F85C @ =gMain+0x74 str r1, [sp] _0800F760: bl Random @@ -5229,7 +5229,7 @@ _0800F834: bl Random b _0800F872 .align 2, 0 -_0800F85C: .4byte gUnknown_0200B134 +_0800F85C: .4byte gMain+0x74 _0800F860: .4byte gUnknown_0200B218 _0800F864: .4byte gUnknown_0200B22C _0800F868: @@ -5838,7 +5838,7 @@ _0800FD1C: .4byte 0x00000914 sub_FD20: @ 0x0800FD20 sub sp, #0x19c movs r2, #0 - ldr r3, _0800FD48 @ =gUnknown_0200B134 + ldr r3, _0800FD48 @ =gMain+0x74 mov r1, sp _0800FD28: adds r0, r2, r3 @@ -5858,7 +5858,7 @@ _0800FD3A: movs r0, #0 b _0800FD56 .align 2, 0 -_0800FD48: .4byte gUnknown_0200B134 +_0800FD48: .4byte gMain+0x74 _0800FD4C: adds r1, #2 adds r2, #1 diff --git a/asm/options.s b/asm/options.s index 9f4587b..438dee1 100755 --- a/asm/options.s +++ b/asm/options.s @@ -196,7 +196,7 @@ sub_513B8: @ 0x080513B8 strh r0, [r4, #6] strh r1, [r4, #8] strh r1, [r4, #0xa] - ldr r0, _0805146C @ =gUnknown_0200B134 + ldr r0, _0805146C @ =gMain+0x74 adds r0, #0xcf ldrb r0, [r0] strh r0, [r4, #0xc] @@ -263,7 +263,7 @@ _08051432: cmp r4, #1 bne _0805147C ldr r3, _08051468 @ =gUnknown_02002920 - ldr r0, _0805146C @ =gUnknown_0200B134 + ldr r0, _0805146C @ =gMain+0x74 adds r0, #0xcd ldrb r1, [r0] adds r2, r3, #0 @@ -274,7 +274,7 @@ _08051432: b _0805148C .align 2, 0 _08051468: .4byte gUnknown_02002920 -_0805146C: .4byte gUnknown_0200B134 +_0805146C: .4byte gMain+0x74 _08051470: .4byte gUnknown_02031AF0 _08051474: .4byte gUnknown_08527ED6 _08051478: .4byte gGameBoyPlayerEnabled @@ -284,7 +284,7 @@ _0805147C: adds r0, #0x2a movs r1, #0 strb r1, [r0] - ldr r0, _080514B4 @ =gUnknown_0200B134 + ldr r0, _080514B4 @ =gMain+0x74 adds r0, #0xcd strb r1, [r0] _0805148C: @@ -307,7 +307,7 @@ _0805148C: bx r0 .align 2, 0 _080514B0: .4byte gUnknown_02002920 -_080514B4: .4byte gUnknown_0200B134 +_080514B4: .4byte gMain+0x74 thumb_func_start sub_514B8 sub_514B8: @ 0x080514B8 @@ -550,13 +550,13 @@ _080516B0: ldrh r1, [r0, #0xa] subs r1, #2 strh r1, [r0, #0xc] - ldr r0, _080516CC @ =gUnknown_0200B134 + ldr r0, _080516CC @ =gMain+0x74 adds r0, #0xcf strb r1, [r0] b _08051A96 .align 2, 0 _080516C8: .4byte gUnknown_02002920 -_080516CC: .4byte gUnknown_0200B134 +_080516CC: .4byte gMain+0x74 _080516D0: movs r0, #0x65 bl m4aSongNumStart @@ -564,7 +564,7 @@ _080516D0: ldrh r1, [r2, #0xa] subs r1, #2 strh r1, [r2, #0xc] - ldr r0, _080516F4 @ =gUnknown_0200B134 + ldr r0, _080516F4 @ =gMain+0x74 adds r0, #0xcf strb r1, [r0] movs r0, #7 @@ -574,7 +574,7 @@ _080516D0: b _08051A96 .align 2, 0 _080516F0: .4byte gUnknown_02002920 -_080516F4: .4byte gUnknown_0200B134 +_080516F4: .4byte gMain+0x74 _080516F8: ldr r0, _08051730 @ =gGameBoyPlayerEnabled ldr r0, [r0] @@ -1125,7 +1125,7 @@ _08051B0E: adds r0, r0, r2 ldrh r1, [r4, #0x26] strb r1, [r0] - ldr r2, _08051C04 @ =gUnknown_0200B134 + ldr r2, _08051C04 @ =gMain+0x74 movs r0, #0xa ldrsh r1, [r4, r0] subs r1, #7 @@ -1216,7 +1216,7 @@ _08051BF4: .4byte gUnknown_02002920 _08051BF8: .4byte gMain _08051BFC: .4byte 0x000003F7 _08051C00: .4byte gUnknown_02031AF0 -_08051C04: .4byte gUnknown_0200B134 +_08051C04: .4byte gMain+0x74 _08051C08: .4byte gUnknown_086BB910 _08051C0C: .4byte gUnknown_086BB9B4 _08051C10: @@ -1264,7 +1264,7 @@ _08051C5C: .4byte gMain thumb_func_start sub_51C60 sub_51C60: @ 0x08051C60 push {lr} - ldr r1, _08051C90 @ =gUnknown_0200B134 + ldr r1, _08051C90 @ =gMain+0x74 ldr r0, _08051C94 @ =gUnknown_02002920 adds r0, #0x2a ldrb r0, [r0] @@ -1282,7 +1282,7 @@ sub_51C60: @ 0x08051C60 pop {r0} bx r0 .align 2, 0 -_08051C90: .4byte gUnknown_0200B134 +_08051C90: .4byte gMain+0x74 _08051C94: .4byte gUnknown_02002920 _08051C98: .4byte gAutoDisplayTitlescreenMenu diff --git a/asm/pokedex.s b/asm/pokedex.s index f3fed51..9980236 100755 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -1674,7 +1674,7 @@ _08004C16: cmp r2, #0 bge _08004C16 movs r2, #0 - ldr r4, _08004C74 @ =gUnknown_0200B134 + ldr r4, _08004C74 @ =gMain+0x74 ldr r3, _08004C70 @ =gUnknown_0202A1C0 _08004C2A: adds r1, r2, r4 @@ -1706,7 +1706,7 @@ _08004C64: .4byte gUnknown_0202BF04 _08004C68: .4byte gUnknown_0202A588 _08004C6C: .4byte gUnknown_0202A390 _08004C70: .4byte gUnknown_0202A1C0 -_08004C74: .4byte gUnknown_0200B134 +_08004C74: .4byte gMain+0x74 _08004C78: .4byte gMain _08004C7C: .4byte gUnknown_0201B120 @@ -1742,7 +1742,7 @@ _08004CA4: ldr r7, _08004D0C @ =gUnknown_0202BF04 ldr r0, _08004D10 @ =gUnknown_0202A588 mov ip, r0 - ldr r4, _08004D14 @ =gUnknown_0200B134 + ldr r4, _08004D14 @ =gMain+0x74 ldr r3, _08004CFC @ =gUnknown_0202A1C0 _08004CC2: adds r1, r2, r4 @@ -1776,7 +1776,7 @@ _08004D04: .4byte gUnknown_0202BEC4 _08004D08: .4byte gUnknown_0202BEFC _08004D0C: .4byte gUnknown_0202BF04 _08004D10: .4byte gUnknown_0202A588 -_08004D14: .4byte gUnknown_0200B134 +_08004D14: .4byte gMain+0x74 _08004D18: movs r0, #2 ands r0, r1 @@ -9236,7 +9236,7 @@ sub_88E4: @ 0x080088E4 ldr r6, _08008934 @ =gUnknown_0202A1C0 ldr r5, _08008938 @ =gUnknown_0201A514 ldr r4, _0800893C @ =gUnknown_0202BEB8 - ldr r3, _08008940 @ =gUnknown_0200B134 + ldr r3, _08008940 @ =gMain+0x74 adds r1, r6, #0 _080088F2: adds r0, r2, r3 @@ -9278,7 +9278,7 @@ _0800891E: _08008934: .4byte gUnknown_0202A1C0 _08008938: .4byte gUnknown_0201A514 _0800893C: .4byte gUnknown_0202BEB8 -_08008940: .4byte gUnknown_0200B134 +_08008940: .4byte gMain+0x74 _08008944: .4byte _08008948 _08008948: @ jump table .4byte _08008968 @ case 0 @@ -9458,7 +9458,7 @@ _08008AB8: .4byte gUnknown_0202A588 thumb_func_start sub_8ABC sub_8ABC: @ 0x08008ABC - ldr r1, _08008AD0 @ =gUnknown_0200B134 + ldr r1, _08008AD0 @ =gMain+0x74 movs r2, #0 adds r0, r1, #0 adds r0, #0xcc @@ -9469,4 +9469,4 @@ _08008AC4: bge _08008AC4 bx lr .align 2, 0 -_08008AD0: .4byte gUnknown_0200B134 +_08008AD0: .4byte gMain+0x74 diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index c3bd4d9..ca2c4c6 100755 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -14703,7 +14703,7 @@ _0801915E: bl m4aSongNumStart _08019164: ldr r3, _08019188 @ =gUnknown_02031520 - ldr r1, _0801918C @ =gUnknown_0200B134 + ldr r1, _0801918C @ =gMain+0x74 movs r0, #0xcd adds r0, r0, r1 mov ip, r0 @@ -14721,7 +14721,7 @@ _08019164: bx r0 .align 2, 0 _08019188: .4byte gUnknown_02031520 -_0801918C: .4byte gUnknown_0200B134 +_0801918C: .4byte gMain+0x74 thumb_func_start sub_19190 sub_19190: @ 0x08019190 @@ -21912,7 +21912,7 @@ _0801CB24: mov sl, r0 cmp r1, #0 ble _0801CBEC - ldr r0, _0801CB6C @ =gUnknown_0200B134 + ldr r0, _0801CB6C @ =gMain+0x74 ldr r5, _0801CB70 @ =0x0000059A adds r1, r4, r5 ldrh r3, [r1] @@ -21936,7 +21936,7 @@ _0801CB24: b _0801CC0C .align 2, 0 _0801CB68: .4byte gUnknown_020314E0 -_0801CB6C: .4byte gUnknown_0200B134 +_0801CB6C: .4byte gMain+0x74 _0801CB70: .4byte 0x0000059A _0801CB74: .4byte 0x00000749 _0801CB78: .4byte 0x040000D4 @@ -63901,7 +63901,7 @@ _08031F96: movs r2, #0 lsls r1, r1, #4 str r1, [sp] - ldr r5, _08031FE8 @ =gUnknown_0200B134 + ldr r5, _08031FE8 @ =gMain+0x74 mov r8, r5 mov sl, r4 _08031FA2: @@ -63939,7 +63939,7 @@ _08031FA2: .align 2, 0 _08031FE0: .4byte gUnknown_020314E0 _08031FE4: .4byte 0x0000073D -_08031FE8: .4byte gUnknown_0200B134 +_08031FE8: .4byte gMain+0x74 _08031FEC: .4byte gWildMonLocations _08031FF0: cmp r0, #0x86 @@ -64004,7 +64004,7 @@ _0803204C: b _08032138 _0803205E: ldr r4, _080320A0 @ =gUnknown_086AE5E0 - ldr r3, _080320A4 @ =gUnknown_0200B134 + ldr r3, _080320A4 @ =gMain+0x74 adds r0, r3, #0 adds r0, #0xaf ldrb r1, [r0] @@ -64038,7 +64038,7 @@ _08032086: b _0803213A .align 2, 0 _080320A0: .4byte gUnknown_086AE5E0 -_080320A4: .4byte gUnknown_0200B134 +_080320A4: .4byte gMain+0x74 _080320A8: ldr r0, _0803218C @ =gUnknown_086AE5E0 lsls r1, r6, #0x10 diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index af67f74..78f972d 100755 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -46551,7 +46551,7 @@ _0804A19C: movs r0, #0 strh r0, [r1, #8] movs r2, #0 - ldr r3, _0804A240 @ =gUnknown_0200B134 + ldr r3, _0804A240 @ =gMain+0x74 _0804A1A6: lsls r0, r2, #0x10 asrs r2, r0, #0x10 @@ -46624,7 +46624,7 @@ _0804A230: .4byte gUnknown_02031520 _0804A234: .4byte 0x05000200 _0804A238: .4byte 0x80000100 _0804A23C: .4byte gUnknown_020028D8 -_0804A240: .4byte gUnknown_0200B134 +_0804A240: .4byte gMain+0x74 _0804A244: .4byte gUnknown_020314E0 _0804A248: .4byte gMain _0804A24C: .4byte 0x00000F4C @@ -50701,7 +50701,7 @@ _0804C460: asrs r0, r0, #0x18 cmp r0, #0 ble _0804C510 - ldr r1, _0804C498 @ =gUnknown_0200B134 + ldr r1, _0804C498 @ =gMain+0x74 ldr r2, _0804C49C @ =0x0000059A adds r0, r4, r2 ldrh r3, [r0] @@ -50720,7 +50720,7 @@ _0804C460: mov r8, r5 b _0804C528 .align 2, 0 -_0804C498: .4byte gUnknown_0200B134 +_0804C498: .4byte gMain+0x74 _0804C49C: .4byte 0x0000059A _0804C4A0: .4byte 0x00000749 _0804C4A4: .4byte 0x040000D4 diff --git a/asm/rom_528AC.s b/asm/rom_528AC.s deleted file mode 100755 index 171370b..0000000 --- a/asm/rom_528AC.s +++ /dev/null @@ -1,529 +0,0 @@ - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_528AC -sub_528AC: @ 0x080528AC - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - adds r1, r0, #0 - cmp r0, #0xfa - bls _080528DA - ldr r0, _080528CC @ =0x00000113 - cmp r1, r0 - bls _080528D8 - ldr r0, _080528D0 @ =gUnknown_08527F18 - ldr r2, _080528D4 @ =0xFFFFFEEC - adds r1, r1, r2 - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - b _080528DA - .align 2, 0 -_080528CC: .4byte 0x00000113 -_080528D0: .4byte gUnknown_08527F18 -_080528D4: .4byte 0xFFFFFEEC -_080528D8: - movs r0, #0xc8 -_080528DA: - bx lr - - thumb_func_start sub_528DC -sub_528DC: @ 0x080528DC - push {r4, r5, lr} - sub sp, #4 - adds r5, r0, #0 - adds r4, r1, #0 - lsls r5, r5, #0x10 - lsrs r5, r5, #0x10 - lsls r4, r4, #0x18 - lsrs r4, r4, #0x18 - ldr r0, _08052914 @ =gMPlayInfo_BGM - ldr r1, _08052918 @ =0x0000FFFF - movs r2, #0x99 - bl m4aMPlayVolumeControl - lsls r4, r4, #0x18 - asrs r4, r4, #0x18 - movs r0, #0 - str r0, [sp] - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x7d - movs r3, #0xa - bl sub_52940 - add sp, #4 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08052914: .4byte gMPlayInfo_BGM -_08052918: .4byte 0x0000FFFF - - thumb_func_start sub_5291C -sub_5291C: @ 0x0805291C - push {r4, lr} - sub sp, #4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - lsls r3, r3, #0x18 - lsrs r3, r3, #0x18 - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - movs r4, #0 - str r4, [sp] - bl sub_52940 - add sp, #4 - pop {r4} - pop {r0} - bx r0 - - thumb_func_start sub_52940 -sub_52940: @ 0x08052940 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - adds r5, r0, #0 - adds r4, r1, #0 - adds r0, r2, #0 - adds r6, r3, #0 - lsls r5, r5, #0x10 - lsls r4, r4, #0x18 - lsrs r4, r4, #0x18 - lsls r6, r6, #0x18 - lsrs r6, r6, #0x18 - ldr r1, _080529BC @ =0xFFFF0000 - adds r5, r5, r1 - lsrs r5, r5, #0x10 - movs r1, #0xf0 - lsls r1, r1, #6 - mov r8, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - bl SetPokemonCryVolume - lsls r4, r4, #0x18 - asrs r4, r4, #0x18 - adds r0, r4, #0 - bl SetPokemonCryPanpot - mov r0, r8 - bl SetPokemonCryPitch - movs r0, #0x8c - bl SetPokemonCryLength - movs r0, #0 - bl SetPokemonCryProgress - movs r0, #0 - bl SetPokemonCryRelease - movs r0, #0 - bl SetPokemonCryChorus - adds r0, r6, #0 - bl SetPokemonCryPriority - adds r0, r5, #0 - bl sub_528AC - movs r1, #0x7f - ands r1, r0 - lsrs r0, r0, #7 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - adds r2, r0, #0 - cmp r0, #1 - beq _080529D8 - cmp r0, #1 - bgt _080529C0 - cmp r0, #0 - beq _080529CA - b _08052A0A - .align 2, 0 -_080529BC: .4byte 0xFFFF0000 -_080529C0: - cmp r2, #2 - beq _080529E8 - cmp r2, #3 - beq _080529FC - b _08052A0A -_080529CA: - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080529D4 @ =gUnknown_08532D6C - b _080529F0 - .align 2, 0 -_080529D4: .4byte gUnknown_08532D6C -_080529D8: - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080529E4 @ =gUnknown_08533360 - b _080529F0 - .align 2, 0 -_080529E4: .4byte gUnknown_08533360 -_080529E8: - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080529F8 @ =gUnknown_08533960 -_080529F0: - adds r0, r0, r1 - bl SetPokemonCryTone - b _08052A0A - .align 2, 0 -_080529F8: .4byte gUnknown_08533960 -_080529FC: - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _08052A14 @ =gUnknown_08533F60 - adds r0, r0, r1 - bl SetPokemonCryTone -_08052A0A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_08052A14: .4byte gUnknown_08533F60 - - thumb_func_start sub_52A18 -sub_52A18: @ 0x08052A18 - push {r4, lr} - bl SetSramFastFunc - ldr r4, _08052A4C @ =gMain - movs r0, #0 - strb r0, [r4, #0xc] - bl sub_52A68 - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08052A50 - bl sub_52C64 - bl sub_52B30 - bl sub_52A68 - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08052A5E - movs r0, #1 - strb r0, [r4, #0xc] - bl sub_52C64 - b _08052A5E - .align 2, 0 -_08052A4C: .4byte gMain -_08052A50: - ldr r1, _08052A64 @ =0x00000143 - adds r0, r4, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - bl sub_525CC -_08052A5E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08052A64: .4byte 0x00000143 - - thumb_func_start sub_52A68 -sub_52A68: @ 0x08052A68 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - movs r0, #0 - mov r8, r0 - movs r7, #0 - ldr r1, _08052B04 @ =ReadSramFast - mov sb, r1 -_08052A7A: - ldr r5, _08052B08 @ =gUnknown_0200B134 - movs r4, #0x9d - lsls r4, r4, #2 - lsls r0, r7, #2 - adds r0, r0, r7 - lsls r0, r0, #2 - adds r0, r0, r7 - lsls r0, r0, #5 - ldr r3, _08052B0C @ =0x0E000004 - adds r0, r0, r3 - mov r6, sb - ldr r3, [r6] - adds r1, r5, #0 - adds r2, r4, #0 - bl _call_via_r3 - movs r2, #0 - movs r0, #0x99 - lsls r0, r0, #2 - adds r3, r5, r0 - movs r0, #0 - ldrsb r0, [r3, r0] - ldr r1, _08052B10 @ =gUnknown_086BBA6C - ldrb r6, [r1] - cmp r0, r6 - bne _08052ACA - adds r6, r3, #0 - adds r3, r1, #0 -_08052AB2: - adds r0, r2, #1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - cmp r2, #9 - bhi _08052ACA - adds r0, r2, r6 - movs r1, #0 - ldrsb r1, [r0, r1] - adds r0, r2, r3 - ldrb r0, [r0] - cmp r1, r0 - beq _08052AB2 -_08052ACA: - cmp r2, #0xa - bne _08052B18 - movs r2, #0 - cmp r4, #1 - bls _08052AE0 -_08052AD4: - ldrh r0, [r5] - adds r2, r2, r0 - adds r5, #2 - subs r4, #2 - cmp r4, #1 - bhi _08052AD4 -_08052AE0: - cmp r4, #0 - beq _08052AF0 - ldrh r1, [r5] - movs r3, #0xff - lsls r3, r3, #8 - adds r0, r3, #0 - ands r0, r1 - adds r2, r2, r0 -_08052AF0: - ldr r0, _08052B14 @ =0x0000FFFF - adds r1, r2, #0 - ands r1, r0 - lsrs r2, r2, #0x10 - adds r2, r1, r2 - cmp r2, r0 - bne _08052B18 - movs r6, #1 - mov r8, r6 - b _08052B22 - .align 2, 0 -_08052B04: .4byte ReadSramFast -_08052B08: .4byte gUnknown_0200B134 -_08052B0C: .4byte 0x0E000004 -_08052B10: .4byte gUnknown_086BBA6C -_08052B14: .4byte 0x0000FFFF -_08052B18: - adds r0, r7, #1 - lsls r0, r0, #0x10 - lsrs r7, r0, #0x10 - cmp r7, #1 - bls _08052A7A -_08052B22: - mov r0, r8 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - - thumb_func_start sub_52B30 -sub_52B30: @ 0x08052B30 - push {r4, r5, lr} - ldr r3, _08052B9C @ =gUnknown_0200B134 - movs r4, #0x9d - lsls r4, r4, #2 - movs r0, #0x9c - lsls r0, r0, #2 - adds r1, r3, r0 - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - ldr r2, _08052BA0 @ =0x0000026E - adds r1, r3, r2 - movs r0, #0 - strh r0, [r1] - movs r2, #0 - adds r5, r3, #0 -_08052B50: - ldrh r0, [r3] - adds r2, r2, r0 - adds r3, #2 - subs r4, #2 - cmp r4, #1 - bhi _08052B50 - cmp r4, #0 - beq _08052B6A - ldrh r1, [r3] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - adds r2, r2, r0 -_08052B6A: - ldr r0, _08052BA4 @ =0x0000FFFF - ands r0, r2 - lsrs r1, r2, #0x10 - adds r2, r0, r1 - lsrs r0, r2, #0x10 - adds r0, r0, r2 - mvns r0, r0 - ldr r2, _08052BA0 @ =0x0000026E - adds r1, r5, r2 - strh r0, [r1] - ldr r1, _08052BA8 @ =0x0E000004 - movs r4, #0x9d - lsls r4, r4, #2 - adds r0, r5, #0 - adds r2, r4, #0 - bl WriteAndVerifySramFast - ldr r1, _08052BAC @ =0x0E0002A4 - adds r0, r5, #0 - adds r2, r4, #0 - bl WriteAndVerifySramFast - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08052B9C: .4byte gUnknown_0200B134 -_08052BA0: .4byte 0x0000026E -_08052BA4: .4byte 0x0000FFFF -_08052BA8: .4byte 0x0E000004 -_08052BAC: .4byte 0x0E0002A4 - - thumb_func_start sub_52BB0 -sub_52BB0: @ 0x08052BB0 - push {r4, r5, r6, lr} - lsls r1, r1, #0x18 - lsrs r5, r1, #0x18 - ldr r3, _08052C30 @ =gUnknown_0200B134 - movs r4, #0x9d - lsls r4, r4, #2 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r2, r0, r3 - ldrb r0, [r2] - adds r6, r3, #0 - cmp r0, r5 - bhs _08052C28 - movs r0, #0x9c - lsls r0, r0, #2 - adds r1, r6, r0 - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - movs r1, #0 - strb r5, [r2] - ldr r2, _08052C34 @ =0x0000026E - adds r0, r6, r2 - strh r1, [r0] - movs r2, #0 -_08052BE2: - ldrh r0, [r3] - adds r2, r2, r0 - adds r3, #2 - subs r4, #2 - cmp r4, #1 - bhi _08052BE2 - cmp r4, #0 - beq _08052BFC - ldrh r1, [r3] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - adds r2, r2, r0 -_08052BFC: - ldr r0, _08052C38 @ =0x0000FFFF - ands r0, r2 - lsrs r1, r2, #0x10 - adds r2, r0, r1 - lsrs r0, r2, #0x10 - adds r0, r0, r2 - mvns r0, r0 - ldr r2, _08052C34 @ =0x0000026E - adds r1, r6, r2 - strh r0, [r1] - ldr r1, _08052C3C @ =0x0E000004 - movs r4, #0x9d - lsls r4, r4, #2 - adds r0, r6, #0 - adds r2, r4, #0 - bl WriteAndVerifySramFast - ldr r1, _08052C40 @ =0x0E0002A4 - adds r0, r6, #0 - adds r2, r4, #0 - bl WriteAndVerifySramFast -_08052C28: - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_08052C30: .4byte gUnknown_0200B134 -_08052C34: .4byte 0x0000026E -_08052C38: .4byte 0x0000FFFF -_08052C3C: .4byte 0x0E000004 -_08052C40: .4byte 0x0E0002A4 - - thumb_func_start sub_52C44 -sub_52C44: @ 0x08052C44 - push {lr} - ldr r2, _08052C58 @ =ReadSramFast - ldr r0, _08052C5C @ =0x0E000544 - ldr r1, _08052C60 @ =gUnknown_0200B100 - ldr r3, [r2] - movs r2, #4 - bl _call_via_r3 - pop {r0} - bx r0 - .align 2, 0 -_08052C58: .4byte ReadSramFast -_08052C5C: .4byte 0x0E000544 -_08052C60: .4byte gUnknown_0200B100 - - thumb_func_start sub_52C64 -sub_52C64: @ 0x08052C64 - push {r4, r5, lr} - movs r1, #0 - ldr r5, _08052CBC @ =gUnknown_0200B134 - movs r0, #0x99 - lsls r0, r0, #2 - adds r4, r5, r0 - ldr r3, _08052CC0 @ =gUnknown_086BBA6C -_08052C72: - lsls r0, r1, #0x10 - asrs r0, r0, #0x10 - adds r2, r0, r4 - adds r1, r0, r3 - ldrb r1, [r1] - strb r1, [r2] - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r1, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #9 - ble _08052C72 - movs r1, #0x9c - lsls r1, r1, #2 - adds r0, r5, r1 - movs r4, #0 - str r4, [r0] - adds r0, r5, #0 - adds r0, #0xcd - strb r4, [r0] - adds r0, #1 - strb r4, [r0] - movs r0, #1 - rsbs r0, r0, #0 - bl sub_525CC - bl sub_F6E0 - bl sub_8ABC - adds r0, r5, #0 - adds r0, #0xcf - strb r4, [r0] - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08052CBC: .4byte gUnknown_0200B134 -_08052CC0: .4byte gUnknown_086BBA6C @@ -3113,7 +3113,9 @@ gUnknown_086BB9B4:: @ 0x086BB9B4 gUnknown_086BB9EC:: @ 0x086BB9EC .incbin "baserom.gba", 0x6BB9EC, 0x80 -gUnknown_086BBA6C:: @ 0x086BBA6C - .incbin "baserom.gba", 0x6BBA6C, 0x6BBFD0 - 0x6BBA6C +gSaveFileSignature:: @ 0x086BBA6C + .ascii "POKEPINAGB" + + .incbin "baserom.gba", 0x6BBA6C + 0xA, 0x6BBFD0 - 0x6BBA6C @ rom end 0x6BBFD0 diff --git a/include/functions.h b/include/functions.h index 6698a17..0606057 100644 --- a/include/functions.h +++ b/include/functions.h @@ -162,7 +162,7 @@ void SetMatrixScale(s16 xScale, s16 yScale, s16 matrixNum); //extern ? sub_F434(); //extern ? sub_F4FC(); //extern ? sub_F670(); -//extern ? sub_F6E0(); +extern void sub_F6E0(void); //extern ? sub_F74C(); //extern ? sub_F8B0(); //extern ? sub_FAE8(); @@ -384,7 +384,7 @@ extern void sub_1050C(void); //extern ? sub_88E4(); //extern ? sub_8974(); //extern ? sub_8A78(); -//extern ? sub_8ABC(); +extern void sub_8ABC(void); // asm/rom_1068C.s diff --git a/include/main.h b/include/main.h index 126f6c2..3e0c744 100755 --- a/include/main.h +++ b/include/main.h @@ -3,6 +3,20 @@ #include "global.h" +// This is probably permanently saved data like pokedex and high scores. +struct SaveData +{ + /*0x74*/ u8 pokedexFlags[204]; + /*0x140*/ u8 filler140[1]; + /*0x141*/ u8 unk141; + /*0x142*/ u8 unk142; + /*0x143*/ u8 unk143; + /*0x144*/ u8 filler144[0x2D8-0x144]; + s8 signature[10]; + u16 unk2E2; + u32 unk2E4; +}; + struct Main { /*0x00*/ u8 filler0[0x2]; @@ -12,7 +26,8 @@ struct Main /*0x05*/ u8 filler5[0x2]; /*0x07*/ s8 unk7; /*0x08*/ s8 unk8; - /*0x09*/ u8 filler9[0x4]; + /*0x09*/ u8 filler9[0x3]; + /*0x0C*/ u8 unkC; /*0x0D*/ u8 unkD; /*0x0E*/ u8 fillerE[0x1]; /*0x0F*/ u8 unkF; @@ -38,15 +53,14 @@ struct Main /*0x38*/ volatile u16 blendControl; /*0x3A*/ volatile u16 blendAlpha; /*0x3C*/ volatile u16 blendBrightness; - // may be a sub-struct. possibly save data? + // may be a sub-struct. possibly for saved game? /*0x40*/ int hasSavedGame; /*0x44*/ u8 filler44[0x4]; /*0x48*/ int rngValue; /*0x4C*/ int unk4C; /*0x50*/ int unk50; /*0x54*/ u8 filler54[0x20]; - /*0x74*/ u8 pokedexFlags[204]; - /*0x140*/ u8 filler140[0x1A8]; + /*0x74*/ struct SaveData saveData; /*0x2E8*/ struct MainUnk2E8 unk2E8[4]; /*0x2F8*/ struct SpriteGroup spriteGroups[NUM_SPRITE_GROUPS]; }; diff --git a/include/variables.h b/include/variables.h index 92bf425..590ae00 100644 --- a/include/variables.h +++ b/include/variables.h @@ -26,7 +26,7 @@ extern u8 gUnknown_02002808[]; //extern ? gUnknown_02002958; //extern ? gIntrTable; //extern ? gMain; -//extern ? gUnknown_0200B134; +//extern ? gMain+0x74; //extern ? gUnknown_0200B3B8; //extern ? gUnknown_0200FB98; //extern ? gUnknown_0200FB9C; diff --git a/ld_script.txt b/ld_script.txt index a2f1ac2..56aef78 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -46,7 +46,7 @@ SECTIONS src/rom_3219C.o(.text); asm/rom_3219C.o(.text); asm/options.o(.text); - asm/rom_528AC.o(.text); + src/rom_528AC.o(.text); asm/m4a_1.o(.text); src/m4a.o(.text); asm/libagbsyscall.o(.text); diff --git a/src/gbplayer.c b/src/gbplayer.c index 00d30d5..c0d9655 100755 --- a/src/gbplayer.c +++ b/src/gbplayer.c @@ -292,6 +292,7 @@ void sub_1198(void) void sub_11B0(int arg0) { if (gUnknown_0200B134[0xCD]) + //if (gMain.saveData.unk141) { gUnknown_02019BF8 = arg0; gUnknown_02019BFC = 0; diff --git a/src/rom_3219C.c b/src/rom_3219C.c index 6954fbe..77eb7ac 100755 --- a/src/rom_3219C.c +++ b/src/rom_3219C.c @@ -43,31 +43,31 @@ void sub_3219C(void) { s16 numSpecialMons = 0; gUnknown_020314E0->catchModeSpecies = 0; - if (gUnknown_0200B134[SPECIES_AERODACTYL]) + if (gMain+0x74[SPECIES_AERODACTYL]) { specialMons[numSpecialMons++] = SPECIES_AERODACTYL; - if (gUnknown_0200B134[SPECIES_AERODACTYL] < 4) + if (gMain+0x74[SPECIES_AERODACTYL] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_AERODACTYL; } - if (gUnknown_0200B134[SPECIES_CHIKORITA]) + if (gMain+0x74[SPECIES_CHIKORITA]) { specialMons[numSpecialMons++] = SPECIES_CHIKORITA; - if (gUnknown_0200B134[SPECIES_CHIKORITA] < 4) + if (gMain+0x74[SPECIES_CHIKORITA] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_CHIKORITA; } - if (gUnknown_0200B134[SPECIES_TOTODILE]) + if (gMain+0x74[SPECIES_TOTODILE]) { specialMons[numSpecialMons++] = SPECIES_TOTODILE; - if (gUnknown_0200B134[SPECIES_TOTODILE] < 4) + if (gMain+0x74[SPECIES_TOTODILE] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_TOTODILE; } - if (gUnknown_0200B134[SPECIES_CYNDAQUIL]) + if (gMain+0x74[SPECIES_CYNDAQUIL]) { specialMons[numSpecialMons++] = SPECIES_CYNDAQUIL; - if (gUnknown_0200B134[SPECIES_CYNDAQUIL] < 4) + if (gMain+0x74[SPECIES_CYNDAQUIL] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_CYNDAQUIL; } diff --git a/src/rom_528AC.c b/src/rom_528AC.c new file mode 100644 index 0000000..f1c7d5f --- /dev/null +++ b/src/rom_528AC.c @@ -0,0 +1,254 @@ +#include "global.h" +#include "m4a.h" +#include "agb_sram.h" +#include "main.h" + +extern const u16 gUnknown_08527F18[]; + +#ifdef NONMATCHING +// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}' +int sub_528AC(u16 a) +{ + if (a <= 0xFA) + return a; + if (a <= 0x113) + return 0xC8; + return gUnknown_08527F18[a - 0x114]; +} +#else +NAKED +int sub_528AC(u16 a) +{ + asm_unified("\n\ + lsls r0, r0, #0x10\n\ + lsrs r0, r0, #0x10\n\ + adds r1, r0, #0\n\ + cmp r0, #0xfa\n\ + bls _080528DA\n\ + ldr r0, _080528CC @ =0x00000113\n\ + cmp r1, r0\n\ + bls _080528D8\n\ + ldr r0, _080528D0 @ =gUnknown_08527F18\n\ + ldr r2, _080528D4 @ =0xFFFFFEEC\n\ + adds r1, r1, r2\n\ + lsls r1, r1, #1\n\ + adds r1, r1, r0\n\ + ldrh r0, [r1]\n\ + b _080528DA\n\ + .align 2, 0\n\ +_080528CC: .4byte 0x00000113\n\ +_080528D0: .4byte gUnknown_08527F18\n\ +_080528D4: .4byte 0xFFFFFEEC\n\ +_080528D8:\n\ + movs r0, #0xc8\n\ +_080528DA:\n\ + bx lr"); +} +#endif + +void sub_52940(u16, s8, s8, u8, int); + +void sub_528DC(u16 a, s8 b) +{ + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x99); + sub_52940(a, b, 0x7D, 10, 0); +} + +void sub_5291C(u16 a, s8 b, s8 c, u8 d) +{ + sub_52940(a, b, c, d, 0); +} + +extern struct ToneData gUnknown_08532D6C[]; +extern struct ToneData gUnknown_08533360[]; +extern struct ToneData gUnknown_08533960[]; +extern struct ToneData gUnknown_08533F60[]; + +void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused) +{ + u16 r5 = a - 1; + u32 pitch = 0x3C00; + u32 var; + u32 r1; + u8 r0; + + SetPokemonCryVolume(c); + SetPokemonCryPanpot(b); + SetPokemonCryPitch(pitch); + SetPokemonCryLength(0x8C); + SetPokemonCryProgress(0); + SetPokemonCryRelease(0); + SetPokemonCryChorus(0); + SetPokemonCryPriority(d); + var = sub_528AC(r5); + r1 = var & 0x7F; + r0 = var >> 7; + switch (r0) + { + case 0: + SetPokemonCryTone(&gUnknown_08532D6C[r1]); + break; + case 1: + SetPokemonCryTone(&gUnknown_08533360[r1]); + break; + case 2: + SetPokemonCryTone(&gUnknown_08533960[r1]); + break; + case 3: + SetPokemonCryTone(&gUnknown_08533F60[r1]); + break; + } +} + +extern u16 sub_52A68(void); +extern void sub_525CC(s8); + +void sub_52A18(void) +{ + SetSramFastFunc(); + gMain.unkC = 0; + if (sub_52A68() == 0) + { + sub_52C64(); + sub_52B30(); + if (sub_52A68() == 0) + { + gMain.unkC = 1; + sub_52C64(); + } + } + else + { + sub_525CC(gMain.saveData.unk143); + } +} + +extern struct Main2 gMain_; +extern u8 gSaveFileSignature[]; + +u16 sub_52A68(void) +{ + u16 r8 = 0; + u16 fileNum; + u16 i; + u32 checksum; + + // Looks like there are two copies of the save data, one used as a backup? + for (fileNum = 0; fileNum < 2; fileNum++) + { + u16 *saveData = (u16 *)&gMain.saveData; + u32 size = 0x274; + + ReadSramFast((u8 *)0x0E000004 + fileNum * 672, (u8 *)saveData, size); + + // Verify signature + for (i = 0; i < 10; i++) + { + if (gMain.saveData.signature[i] != gSaveFileSignature[i]) + break; + } + if (i != 10) + continue; + + // Verify checksum + checksum = 0; + while (size > 1) + { + checksum += *saveData++; + size -= 2; + } + if (size != 0) // never happens (size is even) + checksum += *saveData & 0xFF00; + checksum = (checksum & 0xFFFF) + (checksum >> 16); + if (checksum == 0xFFFF) + { + r8 = 1; + break; + } + } + return r8; +} + +// I really think gUnknown_0200B134_ is part of gMain, but the code doesn't +// match if I do that. +#ifdef NONMATCHING +#define gUnknown_0200B134_ gMain.saveData +#else +extern struct SaveData gUnknown_0200B134_; // gMain.saveData +asm(".set gUnknown_0200B134_, gMain+0x74"); +#endif + +void sub_52B30(void) +{ + u32 checksum; + u16 *saveData = (u16 *)&gUnknown_0200B134_; + u32 size = 0x274; + + gUnknown_0200B134_.unk2E4++; + gUnknown_0200B134_.unk2E2 = 0; + + checksum = 0; + while (size > 1) + { + checksum += *saveData++; + size -= 2; + } + if (size != 0) // never happens (size is even) + checksum += *saveData & 0xFF00; + checksum = (checksum & 0xFFFF) + (checksum >> 16); + gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum); + + WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274); + WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274); +} + +void sub_52BB0(s16 a, u8 b) +{ + u16 *saveData = (u16 *)&gUnknown_0200B134_; + u32 size = 0x274; + u32 checksum; + + if (gUnknown_0200B134_.pokedexFlags[a] < b) + { + u16 r1; + + gUnknown_0200B134_.unk2E4++; + r1 = 0; + gUnknown_0200B134_.pokedexFlags[a] = b; + gUnknown_0200B134_.unk2E2 = r1; + + checksum = 0; + while (size > 1) + { + checksum += *saveData++; + size -= 2; + } + if (size != 0) // never happens (size is even) + checksum += *saveData & 0xFF00; + checksum = (checksum & 0xFFFF) + (checksum >> 16); + gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum); + + WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274); + WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274); + } +} + +void sub_52C44(void) +{ + ReadSramFast((u8 *)0x0E000544, (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame)); +} + +void sub_52C64(void) +{ + s16 r1; + + for (r1 = 0; r1 < 10; r1++) + gUnknown_0200B134_.signature[r1] = gSaveFileSignature[r1]; + gUnknown_0200B134_.unk2E4 = 0; + gUnknown_0200B134_.unk141 = 0; + gUnknown_0200B134_.unk142 = 0; + sub_525CC(-1); + sub_F6E0(); + sub_8ABC(); + gUnknown_0200B134_.unk143 = 0; +} |