summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuderlem <huderlem@gmail.com>2019-08-05 17:02:39 -0500
committerGitHub <noreply@github.com>2019-08-05 17:02:39 -0500
commit08bd3049160f9a6d05aa680a3106854015798f58 (patch)
treeea3e8d61c7276c9a23697a3c8c1d883575316aa4
parentd824a2b4266e6cfa885ef08b23c43e38dbbafcd7 (diff)
parentbcd0c961fa3643240d9f9785e5bf5b037158aa98 (diff)
Merge pull request #6 from camthesaxman/titlescreen
decompile the rest of titlescreen.s and import agb_sram library and strlen function
-rwxr-xr-xMakefile3
-rwxr-xr-xasm/rom_3219C.s8
-rwxr-xr-xasm/rom_528AC.s18
-rwxr-xr-xasm/titlescreen.s681
-rwxr-xr-xasm/unknown_lib.s230
-rwxr-xr-xasm/unknown_lib_2.s46
-rw-r--r--include/agb_sram.h10
-rw-r--r--include/functions.h16
-rwxr-xr-xinclude/main.h1
-rwxr-xr-xinclude/titlescreen.h12
-rw-r--r--include/types.h6
-rw-r--r--include/variables.h4
-rwxr-xr-xld_script.txt5
-rw-r--r--src/agb_sram.c90
-rwxr-xr-xsrc/titlescreen.c238
-rwxr-xr-xsrc/util.c2
-rwxr-xr-xsym_common.txt4
-rw-r--r--sym_ewram.txt12
18 files changed, 345 insertions, 1041 deletions
diff --git a/Makefile b/Makefile
index 94bfc73..f6b6a80 100755
--- a/Makefile
+++ b/Makefile
@@ -112,6 +112,9 @@ $(C_BUILDDIR)/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc
+$(C_BUILDDIR)/agb_sram.o: CFLAGS := -mthumb-interwork -Wimplicit -Wparentheses -Werror -O1
+$(C_BUILDDIR)/agb_sram.o: CC1 := tools/agbcc/bin/old_agbcc
+
ifeq ($(NODEP),)
$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
else
diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s
index 270885e..af67f74 100755
--- a/asm/rom_3219C.s
+++ b/asm/rom_3219C.s
@@ -49099,7 +49099,7 @@ sub_4B654: @ 0x0804B654
str r1, [r0]
ldr r1, _0804B670 @ =0x0E000544
ldr r2, _0804B674 @ =0x00001410
- bl sub_55654
+ bl WriteAndVerifySramFast
pop {r0}
bx r0
.align 2, 0
@@ -49119,7 +49119,7 @@ sub_4B678: @ 0x0804B678
mov r8, r0
cmp r0, #1
bne _0804B6B0
- ldr r3, _0804B6A0 @ =gUnknown_02032FF0
+ ldr r3, _0804B6A0 @ =ReadSramFast
ldr r0, _0804B6A4 @ =0x0E000544
ldr r1, _0804B6A8 @ =gUnknown_020314E0
ldr r1, [r1]
@@ -49128,7 +49128,7 @@ sub_4B678: @ 0x0804B678
bl _call_via_r3
b _0804B746
.align 2, 0
-_0804B6A0: .4byte gUnknown_02032FF0
+_0804B6A0: .4byte ReadSramFast
_0804B6A4: .4byte 0x0E000544
_0804B6A8: .4byte gUnknown_020314E0
_0804B6AC: .4byte 0x00001410
@@ -49779,7 +49779,7 @@ _0804BBCC:
ldr r1, _0804BC30 @ =0x0E000544
adds r0, r6, #0
movs r2, #4
- bl sub_55654
+ bl WriteAndVerifySramFast
_0804BC14:
pop {r3, r4, r5}
mov r8, r3
diff --git a/asm/rom_528AC.s b/asm/rom_528AC.s
index f5f2b88..171370b 100755
--- a/asm/rom_528AC.s
+++ b/asm/rom_528AC.s
@@ -189,7 +189,7 @@ _08052A14: .4byte gUnknown_08533F60
thumb_func_start sub_52A18
sub_52A18: @ 0x08052A18
push {r4, lr}
- bl sub_555BC
+ bl SetSramFastFunc
ldr r4, _08052A4C @ =gMain
movs r0, #0
strb r0, [r4, #0xc]
@@ -232,7 +232,7 @@ sub_52A68: @ 0x08052A68
movs r0, #0
mov r8, r0
movs r7, #0
- ldr r1, _08052B04 @ =gUnknown_02032FF0
+ ldr r1, _08052B04 @ =ReadSramFast
mov sb, r1
_08052A7A:
ldr r5, _08052B08 @ =gUnknown_0200B134
@@ -309,7 +309,7 @@ _08052AF0:
mov r8, r6
b _08052B22
.align 2, 0
-_08052B04: .4byte gUnknown_02032FF0
+_08052B04: .4byte ReadSramFast
_08052B08: .4byte gUnknown_0200B134
_08052B0C: .4byte 0x0E000004
_08052B10: .4byte gUnknown_086BBA6C
@@ -377,11 +377,11 @@ _08052B6A:
lsls r4, r4, #2
adds r0, r5, #0
adds r2, r4, #0
- bl sub_55654
+ bl WriteAndVerifySramFast
ldr r1, _08052BAC @ =0x0E0002A4
adds r0, r5, #0
adds r2, r4, #0
- bl sub_55654
+ bl WriteAndVerifySramFast
pop {r4, r5}
pop {r0}
bx r0
@@ -449,11 +449,11 @@ _08052BFC:
lsls r4, r4, #2
adds r0, r6, #0
adds r2, r4, #0
- bl sub_55654
+ bl WriteAndVerifySramFast
ldr r1, _08052C40 @ =0x0E0002A4
adds r0, r6, #0
adds r2, r4, #0
- bl sub_55654
+ bl WriteAndVerifySramFast
_08052C28:
pop {r4, r5, r6}
pop {r0}
@@ -468,7 +468,7 @@ _08052C40: .4byte 0x0E0002A4
thumb_func_start sub_52C44
sub_52C44: @ 0x08052C44
push {lr}
- ldr r2, _08052C58 @ =gUnknown_02032FF0
+ ldr r2, _08052C58 @ =ReadSramFast
ldr r0, _08052C5C @ =0x0E000544
ldr r1, _08052C60 @ =gUnknown_0200B100
ldr r3, [r2]
@@ -477,7 +477,7 @@ sub_52C44: @ 0x08052C44
pop {r0}
bx r0
.align 2, 0
-_08052C58: .4byte gUnknown_02032FF0
+_08052C58: .4byte ReadSramFast
_08052C5C: .4byte 0x0E000544
_08052C60: .4byte gUnknown_0200B100
diff --git a/asm/titlescreen.s b/asm/titlescreen.s
deleted file mode 100755
index 0d127f7..0000000
--- a/asm/titlescreen.s
+++ /dev/null
@@ -1,681 +0,0 @@
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_11640
-sub_11640: @ 0x08011640
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- ldr r4, _08011744 @ =gTitlescreen
- movs r0, #8
- ldrsb r0, [r4, r0]
- movs r1, #0xb8
- muls r0, r1, r0
- ldr r2, _08011748 @ =gUnknown_0200B3B8
- adds r7, r0, r2
- movs r0, #0x10
- ldrsb r0, [r4, r0]
- muls r0, r1, r0
- adds r6, r0, r2
- movs r0, #9
- ldrsb r0, [r4, r0]
- strh r0, [r7]
- movs r0, #0x11
- ldrsb r0, [r4, r0]
- strh r0, [r6]
- ldr r5, _0801174C @ =gUnknown_086A96E4
- adds r0, r5, #0
- movs r1, #5
- bl LoadSpriteSets
- ldrh r0, [r7]
- cmp r0, #1
- bne _080116DC
- movs r0, #0x78
- strh r0, [r7, #2]
- movs r0, #0x66
- strh r0, [r7, #4]
- movs r0, #8
- ldrsb r0, [r4, r0]
- lsls r0, r0, #2
- adds r0, r0, r5
- ldr r0, [r0]
- mov ip, r0
- movs r5, #0
- ldrh r0, [r0]
- cmp r5, r0
- bge _080116DC
- ldr r1, _08011750 @ =gOamBuffer
- mov r8, r1
- ldr r2, _08011754 @ =0xFFFFFE00
- mov sb, r2
- adds r4, r7, #0
- adds r4, #8
-_080116A2:
- ldrh r3, [r4]
- lsls r3, r3, #3
- add r3, r8
- movs r0, #2
- ldrsh r1, [r4, r0]
- movs r2, #2
- ldrsh r0, [r7, r2]
- adds r1, r1, r0
- ldr r2, _08011758 @ =0x000001FF
- adds r0, r2, #0
- ands r1, r0
- ldrh r2, [r3, #2]
- mov r0, sb
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- add r1, r8
- ldrb r0, [r7, #4]
- ldrb r2, [r4, #4]
- adds r0, r0, r2
- strb r0, [r1]
- adds r4, #8
- adds r5, #1
- mov r0, ip
- ldrh r0, [r0]
- cmp r5, r0
- blt _080116A2
-_080116DC:
- ldrh r0, [r6]
- cmp r0, #1
- bne _08011730
- movs r0, #0x78
- strh r0, [r6, #2]
- movs r0, #0x50
- strh r0, [r6, #4]
- ldr r1, _08011750 @ =gOamBuffer
- mov r8, r1
- ldr r2, _08011754 @ =0xFFFFFE00
- mov sb, r2
- adds r4, r6, #0
- adds r4, #8
- ldr r0, _08011758 @ =0x000001FF
- mov ip, r0
- movs r5, #1
-_080116FC:
- ldrh r3, [r4]
- lsls r3, r3, #3
- add r3, r8
- movs r2, #2
- ldrsh r1, [r4, r2]
- movs r2, #2
- ldrsh r0, [r6, r2]
- adds r1, r1, r0
- mov r0, ip
- ands r1, r0
- ldrh r2, [r3, #2]
- mov r0, sb
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- add r1, r8
- ldrb r0, [r6, #4]
- ldrb r2, [r4, #4]
- adds r0, r0, r2
- strb r0, [r1]
- adds r4, #8
- subs r5, #1
- cmp r5, #0
- bge _080116FC
-_08011730:
- movs r0, #0
- strh r0, [r7]
- strh r0, [r6]
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08011744: .4byte gTitlescreen
-_08011748: .4byte gUnknown_0200B3B8
-_0801174C: .4byte gUnknown_086A96E4
-_08011750: .4byte gOamBuffer
-_08011754: .4byte 0xFFFFFE00
-_08011758: .4byte 0x000001FF
-
- thumb_func_start sub_1175C
-sub_1175C: @ 0x0801175C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- ldr r2, _08011810 @ =gMain
- ldrh r0, [r2, #0x38]
- movs r0, #0x84
- lsls r0, r0, #2
- strh r0, [r2, #0x38]
- ldrh r0, [r2, #0x3a]
- ldr r0, _08011814 @ =0x00000808
- strh r0, [r2, #0x3a]
- ldr r1, _08011818 @ =0x04000050
- ldrh r0, [r2, #0x38]
- strh r0, [r1]
- adds r1, #2
- ldrh r0, [r2, #0x3a]
- strh r0, [r1]
- ldr r3, _0801181C @ =gTitlescreen
- movs r0, #0xa
- ldrsb r0, [r3, r0]
- movs r1, #0xb8
- muls r0, r1, r0
- movs r4, #0xbe
- lsls r4, r4, #2
- adds r2, r2, r4
- adds r0, r0, r2
- mov sl, r0
- movs r0, #0xc
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov sb, r0
- movs r0, #0xe
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov r8, r0
- movs r0, #0xb
- ldrsb r0, [r3, r0]
- mov r6, sl
- strh r0, [r6]
- movs r0, #0xd
- ldrsb r0, [r3, r0]
- mov r7, sb
- strh r0, [r7]
- movs r0, #0xf
- ldrsb r0, [r3, r0]
- mov r1, r8
- strh r0, [r1]
- ldr r4, _08011820 @ =gUnknown_0201C190
- adds r0, r4, #0
- movs r1, #7
- bl LoadSpriteSets
- ldrh r0, [r6]
- cmp r0, #1
- bne _0801187C
- movs r0, #0x78
- strh r0, [r6, #2]
- movs r0, #0x66
- strh r0, [r6, #4]
- ldr r4, [r4, #0x18]
- mov ip, r4
- movs r2, #0
- str r2, [sp]
- ldrh r3, [r4]
- cmp r2, r3
- bge _0801187C
- ldr r6, _08011824 @ =gOamBuffer
- mov r4, sl
- adds r4, #8
- mov r5, ip
-_080117F2:
- ldrh r0, [r5, #8]
- cmp r0, #1
- bne _08011828
- ldrh r2, [r4]
- lsls r2, r2, #3
- adds r2, r2, r6
- ldrb r1, [r2, #1]
- movs r0, #0xd
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strb r0, [r2, #1]
- b _08011838
- .align 2, 0
-_08011810: .4byte gMain
-_08011814: .4byte 0x00000808
-_08011818: .4byte 0x04000050
-_0801181C: .4byte gTitlescreen
-_08011820: .4byte gUnknown_0201C190
-_08011824: .4byte gOamBuffer
-_08011828:
- ldrh r0, [r4]
- lsls r0, r0, #3
- adds r0, r0, r6
- ldrb r2, [r0, #1]
- movs r1, #0xd
- rsbs r1, r1, #0
- ands r1, r2
- strb r1, [r0, #1]
-_08011838:
- ldrh r3, [r4]
- lsls r3, r3, #3
- adds r3, r3, r6
- movs r7, #2
- ldrsh r1, [r4, r7]
- mov r2, sl
- movs r7, #2
- ldrsh r0, [r2, r7]
- adds r1, r1, r0
- ldr r2, _08011950 @ =0x000001FF
- adds r0, r2, #0
- ands r1, r0
- ldrh r2, [r3, #2]
- ldr r0, _08011954 @ =0xFFFFFE00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- adds r1, r1, r6
- mov r3, sl
- ldrb r0, [r3, #4]
- ldrb r7, [r4, #4]
- adds r0, r0, r7
- strb r0, [r1]
- adds r4, #8
- adds r5, #8
- ldr r0, [sp]
- adds r0, #1
- str r0, [sp]
- mov r1, ip
- ldrh r1, [r1]
- cmp r0, r1
- blt _080117F2
-_0801187C:
- mov r2, sb
- ldrh r0, [r2]
- cmp r0, #1
- bne _080118D8
- ldr r2, _08011958 @ =gUnknown_086A9684
- ldr r1, _0801195C @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- mov r3, sb
- strh r0, [r3, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r3, #4]
- mov r5, sb
- adds r5, #8
- ldr r4, _08011960 @ =gOamBuffer
- ldrh r2, [r3, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r6, #2
- ldrsh r1, [r5, r6]
- movs r7, #2
- ldrsh r0, [r3, r7]
- adds r1, r1, r0
- ldr r3, _08011950 @ =0x000001FF
- adds r0, r3, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011954 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- mov r6, sb
- ldrh r1, [r6, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r6, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_080118D8:
- mov r7, r8
- ldrh r0, [r7]
- cmp r0, #1
- bne _08011930
- ldr r2, _08011964 @ =gUnknown_086A9694
- ldr r1, _0801195C @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- strh r0, [r7, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r7, #4]
- mov r5, r8
- adds r5, #8
- ldr r4, _08011960 @ =gOamBuffer
- ldrh r2, [r7, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r0, #2
- ldrsh r1, [r5, r0]
- movs r3, #2
- ldrsh r0, [r7, r3]
- adds r1, r1, r0
- ldr r6, _08011950 @ =0x000001FF
- adds r0, r6, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011954 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- ldrh r1, [r7, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r7, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_08011930:
- movs r0, #0
- mov r7, sl
- strh r0, [r7]
- mov r1, sb
- strh r0, [r1]
- mov r2, r8
- strh r0, [r2]
- add sp, #4
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08011950: .4byte 0x000001FF
-_08011954: .4byte 0xFFFFFE00
-_08011958: .4byte gUnknown_086A9684
-_0801195C: .4byte gTitlescreen
-_08011960: .4byte gOamBuffer
-_08011964: .4byte gUnknown_086A9694
-
- thumb_func_start sub_11968
-sub_11968: @ 0x08011968
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- ldr r2, _08011A1C @ =gMain
- ldrh r0, [r2, #0x38]
- movs r0, #0x84
- lsls r0, r0, #2
- strh r0, [r2, #0x38]
- ldrh r0, [r2, #0x3a]
- ldr r0, _08011A20 @ =0x00000808
- strh r0, [r2, #0x3a]
- ldr r1, _08011A24 @ =0x04000050
- ldrh r0, [r2, #0x38]
- strh r0, [r1]
- adds r1, #2
- ldrh r0, [r2, #0x3a]
- strh r0, [r1]
- ldr r3, _08011A28 @ =gTitlescreen
- movs r0, #0xa
- ldrsb r0, [r3, r0]
- movs r1, #0xb8
- muls r0, r1, r0
- movs r4, #0xbe
- lsls r4, r4, #2
- adds r2, r2, r4
- adds r0, r0, r2
- mov sl, r0
- movs r0, #0xc
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov sb, r0
- movs r0, #0xe
- ldrsb r0, [r3, r0]
- muls r0, r1, r0
- adds r0, r0, r2
- mov r8, r0
- movs r0, #0xb
- ldrsb r0, [r3, r0]
- mov r6, sl
- strh r0, [r6]
- movs r0, #0xd
- ldrsb r0, [r3, r0]
- mov r7, sb
- strh r0, [r7]
- movs r0, #0xf
- ldrsb r0, [r3, r0]
- mov r1, r8
- strh r0, [r1]
- ldr r4, _08011A2C @ =gUnknown_0202BE00
- adds r0, r4, #0
- movs r1, #7
- bl LoadSpriteSets
- ldrh r0, [r6]
- cmp r0, #1
- bne _08011A88
- movs r0, #0x78
- strh r0, [r6, #2]
- movs r0, #0x66
- strh r0, [r6, #4]
- ldr r4, [r4, #0x18]
- mov ip, r4
- movs r2, #0
- str r2, [sp]
- ldrh r3, [r4]
- cmp r2, r3
- bge _08011A88
- ldr r6, _08011A30 @ =gOamBuffer
- mov r4, sl
- adds r4, #8
- mov r5, ip
-_080119FE:
- ldrh r0, [r5, #8]
- cmp r0, #1
- bne _08011A34
- ldrh r2, [r4]
- lsls r2, r2, #3
- adds r2, r2, r6
- ldrb r1, [r2, #1]
- movs r0, #0xd
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strb r0, [r2, #1]
- b _08011A44
- .align 2, 0
-_08011A1C: .4byte gMain
-_08011A20: .4byte 0x00000808
-_08011A24: .4byte 0x04000050
-_08011A28: .4byte gTitlescreen
-_08011A2C: .4byte gUnknown_0202BE00
-_08011A30: .4byte gOamBuffer
-_08011A34:
- ldrh r0, [r4]
- lsls r0, r0, #3
- adds r0, r0, r6
- ldrb r2, [r0, #1]
- movs r1, #0xd
- rsbs r1, r1, #0
- ands r1, r2
- strb r1, [r0, #1]
-_08011A44:
- ldrh r3, [r4]
- lsls r3, r3, #3
- adds r3, r3, r6
- movs r7, #2
- ldrsh r1, [r4, r7]
- mov r2, sl
- movs r7, #2
- ldrsh r0, [r2, r7]
- adds r1, r1, r0
- ldr r2, _08011B5C @ =0x000001FF
- adds r0, r2, #0
- ands r1, r0
- ldrh r2, [r3, #2]
- ldr r0, _08011B60 @ =0xFFFFFE00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, #2]
- ldrh r1, [r4]
- lsls r1, r1, #3
- adds r1, r1, r6
- mov r3, sl
- ldrb r0, [r3, #4]
- ldrb r7, [r4, #4]
- adds r0, r0, r7
- strb r0, [r1]
- adds r4, #8
- adds r5, #8
- ldr r0, [sp]
- adds r0, #1
- str r0, [sp]
- mov r1, ip
- ldrh r1, [r1]
- cmp r0, r1
- blt _080119FE
-_08011A88:
- mov r2, sb
- ldrh r0, [r2]
- cmp r0, #1
- bne _08011AE4
- ldr r2, _08011B64 @ =gUnknown_086A96AC
- ldr r1, _08011B68 @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- mov r3, sb
- strh r0, [r3, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r3, #4]
- mov r5, sb
- adds r5, #8
- ldr r4, _08011B6C @ =gOamBuffer
- ldrh r2, [r3, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r6, #2
- ldrsh r1, [r5, r6]
- movs r7, #2
- ldrsh r0, [r3, r7]
- adds r1, r1, r0
- ldr r3, _08011B5C @ =0x000001FF
- adds r0, r3, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011B60 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- mov r6, sb
- ldrh r1, [r6, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r6, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_08011AE4:
- mov r7, r8
- ldrh r0, [r7]
- cmp r0, #1
- bne _08011B3C
- ldr r2, _08011B70 @ =gUnknown_086A96C0
- ldr r1, _08011B68 @ =gTitlescreen
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0]
- strh r0, [r7, #2]
- movs r0, #0
- ldrsb r0, [r1, r0]
- lsls r0, r0, #2
- adds r0, r0, r2
- ldrh r0, [r0, #2]
- strh r0, [r7, #4]
- mov r5, r8
- adds r5, #8
- ldr r4, _08011B6C @ =gOamBuffer
- ldrh r2, [r7, #8]
- lsls r2, r2, #3
- adds r2, r2, r4
- movs r0, #2
- ldrsh r1, [r5, r0]
- movs r3, #2
- ldrsh r0, [r7, r3]
- adds r1, r1, r0
- ldr r6, _08011B5C @ =0x000001FF
- adds r0, r6, #0
- ands r1, r0
- ldrh r3, [r2, #2]
- ldr r0, _08011B60 @ =0xFFFFFE00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, #2]
- ldrh r1, [r7, #8]
- lsls r1, r1, #3
- adds r1, r1, r4
- ldrb r0, [r7, #4]
- ldrb r5, [r5, #4]
- adds r0, r0, r5
- strb r0, [r1]
-_08011B3C:
- movs r0, #0
- mov r7, sl
- strh r0, [r7]
- mov r1, sb
- strh r0, [r1]
- mov r2, r8
- strh r0, [r2]
- add sp, #4
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08011B5C: .4byte 0x000001FF
-_08011B60: .4byte 0xFFFFFE00
-_08011B64: .4byte gUnknown_086A96AC
-_08011B68: .4byte gTitlescreen
-_08011B6C: .4byte gOamBuffer
-_08011B70: .4byte gUnknown_086A96C0
-
- thumb_func_start sub_11B74
-sub_11B74: @ 0x08011B74
- push {lr}
- bl sub_52C64
- bl sub_52B30
- ldr r0, _08011B94 @ =gMain
- movs r1, #0
- str r1, [r0, #0x40]
- adds r0, #0x40
- ldr r1, _08011B98 @ =0x0E000544
- movs r2, #4
- bl sub_55654
- pop {r0}
- bx r0
- .align 2, 0
-_08011B94: .4byte gMain
-_08011B98: .4byte 0x0E000544
diff --git a/asm/unknown_lib.s b/asm/unknown_lib.s
deleted file mode 100755
index a96898d..0000000
--- a/asm/unknown_lib.s
+++ /dev/null
@@ -1,230 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/gba_constants.inc"
-
- @ extern
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_554F0
-sub_554F0: @ 0x080554F0
- push {r4, r5, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r3, r2, #0
- ldr r2, _08055528 @ =0x04000204
- ldrh r0, [r2]
- ldr r1, _0805552C @ =0x0000FFFC
- ands r0, r1
- movs r1, #3
- orrs r0, r1
- strh r0, [r2]
- subs r3, #1
- movs r0, #1
- rsbs r0, r0, #0
- cmp r3, r0
- beq _08055520
- adds r1, r0, #0
-_08055512:
- ldrb r0, [r5]
- strb r0, [r4]
- adds r5, #1
- adds r4, #1
- subs r3, #1
- cmp r3, r1
- bne _08055512
-_08055520:
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055528: .4byte 0x04000204
-_0805552C: .4byte 0x0000FFFC
-
- thumb_func_start sub_55530
-sub_55530: @ 0x08055530
- push {r4, r5, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r3, r2, #0
- ldr r2, _08055568 @ =0x04000204
- ldrh r0, [r2]
- ldr r1, _0805556C @ =0x0000FFFC
- ands r0, r1
- movs r1, #3
- orrs r0, r1
- strh r0, [r2]
- subs r3, #1
- movs r0, #1
- rsbs r0, r0, #0
- cmp r3, r0
- beq _08055560
- adds r1, r0, #0
-_08055552:
- ldrb r0, [r5]
- strb r0, [r4]
- adds r5, #1
- adds r4, #1
- subs r3, #1
- cmp r3, r1
- bne _08055552
-_08055560:
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055568: .4byte 0x04000204
-_0805556C: .4byte 0x0000FFFC
-
- thumb_func_start sub_55570
-sub_55570: @ 0x08055570
- push {r4, r5, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r3, r2, #0
- ldr r2, _080555A4 @ =0x04000204
- ldrh r0, [r2]
- ldr r1, _080555A8 @ =0x0000FFFC
- ands r0, r1
- movs r1, #3
- orrs r0, r1
- strh r0, [r2]
- subs r3, #1
- movs r0, #1
- rsbs r0, r0, #0
- cmp r3, r0
- beq _080555B2
- adds r2, r0, #0
-_08055592:
- ldrb r1, [r4]
- ldrb r0, [r5]
- adds r5, #1
- adds r4, #1
- cmp r1, r0
- beq _080555AC
- subs r0, r4, #1
- b _080555B4
- .align 2, 0
-_080555A4: .4byte 0x04000204
-_080555A8: .4byte 0x0000FFFC
-_080555AC:
- subs r3, #1
- cmp r3, r2
- bne _08055592
-_080555B2:
- movs r0, #0
-_080555B4:
- pop {r4, r5}
- pop {r1}
- bx r1
-
- thumb_func_start sub_555BC
-sub_555BC: @ 0x080555BC
- ldr r2, _080555D0 @ =sub_554F0
- movs r0, #1
- eors r2, r0
- ldr r3, _080555D4 @ =gUnknown_02002FD8
- ldr r0, _080555D8 @ =sub_55530
- ldr r1, _080555D0 @ =sub_554F0
- subs r0, r0, r1
- lsls r0, r0, #0xf
- b _080555E8
- .align 2, 0
-_080555D0: .4byte sub_554F0
-_080555D4: .4byte gUnknown_02002FD8
-_080555D8: .4byte sub_55530
-_080555DC:
- ldrh r0, [r2]
- strh r0, [r3]
- adds r2, #2
- adds r3, #2
- subs r0, r1, #1
- lsls r0, r0, #0x10
-_080555E8:
- lsrs r1, r0, #0x10
- cmp r1, #0
- bne _080555DC
- ldr r1, _08055608 @ =gUnknown_02032FF0
- ldr r0, _0805560C @ =gUnknown_02002FD9
- str r0, [r1]
- ldr r2, _08055610 @ =sub_55570
- movs r0, #1
- eors r2, r0
- ldr r3, _08055614 @ =gUnknown_02002F38
- ldr r0, _08055618 @ =sub_555BC
- ldr r1, _08055610 @ =sub_55570
- subs r0, r0, r1
- lsls r0, r0, #0xf
- b _08055628
- .align 2, 0
-_08055608: .4byte gUnknown_02032FF0
-_0805560C: .4byte gUnknown_02002FD9
-_08055610: .4byte sub_55570
-_08055614: .4byte gUnknown_02002F38
-_08055618: .4byte sub_555BC
-_0805561C:
- ldrh r0, [r2]
- strh r0, [r3]
- adds r2, #2
- adds r3, #2
- subs r0, r1, #1
- lsls r0, r0, #0x10
-_08055628:
- lsrs r1, r0, #0x10
- cmp r1, #0
- bne _0805561C
- ldr r1, _08055644 @ =gUnknown_02032FF4
- ldr r0, _08055648 @ =gUnknown_02002F39
- str r0, [r1]
- ldr r2, _0805564C @ =0x04000204
- ldrh r0, [r2]
- ldr r1, _08055650 @ =0x0000FFFC
- ands r0, r1
- movs r1, #3
- orrs r0, r1
- strh r0, [r2]
- bx lr
- .align 2, 0
-_08055644: .4byte gUnknown_02032FF4
-_08055648: .4byte gUnknown_02002F39
-_0805564C: .4byte 0x04000204
-_08055650: .4byte 0x0000FFFC
-
- thumb_func_start sub_55654
-sub_55654: @ 0x08055654
- push {r4, r5, r6, r7, lr}
- adds r6, r0, #0
- adds r5, r1, #0
- adds r4, r2, #0
- movs r7, #0
- b _08055666
-_08055660:
- adds r0, r7, #1
- lsls r0, r0, #0x18
- lsrs r7, r0, #0x18
-_08055666:
- cmp r7, #2
- bhi _08055688
- adds r0, r6, #0
- adds r1, r5, #0
- adds r2, r4, #0
- bl sub_55530
- ldr r0, _08055690 @ =gUnknown_02032FF4
- ldr r3, [r0]
- adds r0, r6, #0
- adds r1, r5, #0
- adds r2, r4, #0
- bl _call_via_r3
- adds r3, r0, #0
- cmp r3, #0
- bne _08055660
-_08055688:
- adds r0, r3, #0
- pop {r4, r5, r6, r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08055690: .4byte gUnknown_02032FF4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/unknown_lib_2.s b/asm/unknown_lib_2.s
deleted file mode 100755
index 8d72a45..0000000
--- a/asm/unknown_lib_2.s
+++ /dev/null
@@ -1,46 +0,0 @@
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_55A24
-sub_55A24: @ 0x08055A24
- push {r4, r5, lr}
- adds r1, r0, #0
- adds r5, r1, #0
- movs r0, #3
- ands r0, r1
- cmp r0, #0
- bne _08055A5C
- adds r2, r1, #0
- ldr r1, [r2]
- ldr r4, _08055A40 @ =0xFEFEFEFF
- adds r0, r1, r4
- bics r0, r1
- ldr r3, _08055A44 @ =0x80808080
- b _08055A50
- .align 2, 0
-_08055A40: .4byte 0xFEFEFEFF
-_08055A44: .4byte 0x80808080
-_08055A48:
- adds r2, #4
- ldr r1, [r2]
- adds r0, r1, r4
- bics r0, r1
-_08055A50:
- ands r0, r3
- cmp r0, #0
- beq _08055A48
- adds r1, r2, #0
- b _08055A5C
-_08055A5A:
- adds r1, #1
-_08055A5C:
- ldrb r0, [r1]
- cmp r0, #0
- bne _08055A5A
- subs r0, r1, r5
- pop {r4, r5, pc}
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/agb_sram.h b/include/agb_sram.h
new file mode 100644
index 0000000..c609417
--- /dev/null
+++ b/include/agb_sram.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_AGB_SRAM_H
+#define GUARD_AGB_SRAM_H
+
+void SetSramFastFunc(void);
+void WriteSramFast(const u8 *src, u8 *dest, u32 size);
+extern void (*ReadSramFast)(const u8 *src, u8 *dest, u32 size);
+extern u32 (*VerifySramFast)(const u8 *src, u8 *dest, u32 size);
+u32 WriteAndVerifySramFast(const u8 *src, u8 *dest, u32 size);
+
+#endif // GUARD_AGB_SRAM_H \ No newline at end of file
diff --git a/include/functions.h b/include/functions.h
index 89b93dc..5846d0e 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -777,10 +777,10 @@ extern void sub_1090C(void);
//extern ? sub_52940();
extern void sub_52A18(void);
//extern ? sub_52A68();
-//extern ? sub_52B30();
+extern void sub_52B30(void);
//extern ? sub_52BB0();
extern void sub_52C44(void);
-//extern ? sub_52C64();
+extern void sub_52C64(void);
// asm/rom_9BC.s
@@ -830,16 +830,4 @@ extern void sub_1175C(void);
extern void sub_11968(void);
extern void sub_11B74(void);
-// asm/unknown_lib_2.s
-
-extern int sub_55A24(u8*); // Rumble Pak?
-
-// asm/unknown_lib.s
-
-//extern ? sub_554F0();
-//extern ? sub_55530();
-//extern ? sub_55570();
-//extern ? sub_555BC();
-//extern ? sub_55654();
-
#endif // GUARD_FUNCTIONS_H \ No newline at end of file
diff --git a/include/main.h b/include/main.h
index 4b97e5e..02f0a5f 100755
--- a/include/main.h
+++ b/include/main.h
@@ -38,6 +38,7 @@ struct Main
/*0x38*/ volatile u16 blendControl;
/*0x3A*/ volatile u16 blendAlpha;
/*0x3C*/ volatile u16 blendBrightness;
+ // may be a sub-struct. possibly save data?
/*0x40*/ int unk40;
/*0x44*/ u8 filler44[0x4];
/*0x48*/ int rngValue;
diff --git a/include/titlescreen.h b/include/titlescreen.h
index d1dd857..6cd6965 100755
--- a/include/titlescreen.h
+++ b/include/titlescreen.h
@@ -10,12 +10,12 @@ struct TitlescreenStruct
/*0x07*/ u8 unk7;
/*0x08*/ s8 unk8;
/*0x09*/ s8 unk9;
- /*0x0A*/ u8 unkA;
- /*0x0B*/ u8 unkB;
- /*0x0C*/ u8 unkC;
- /*0x0D*/ u8 unkD;
- /*0x0E*/ u8 unkE;
- /*0x0F*/ u8 unkF;
+ /*0x0A*/ s8 unkA;
+ /*0x0B*/ s8 unkB;
+ /*0x0C*/ s8 unkC;
+ /*0x0D*/ s8 unkD;
+ /*0x0E*/ s8 unkE;
+ /*0x0F*/ s8 unkF;
/*0x10*/ s8 unk10;
/*0x11*/ s8 unk11;
/*0x12*/ s16 idleFadeoutCounter;
diff --git a/include/types.h b/include/types.h
index af7a749..e43b6dc 100644
--- a/include/types.h
+++ b/include/types.h
@@ -34,4 +34,10 @@ struct SpriteGroup
};
// size: 0xB8
+struct Coord16
+{
+ u16 x;
+ u16 y;
+};
+
#endif // GUARD_TYPES_H
diff --git a/include/variables.h b/include/variables.h
index 6a74cb7..d8efc57 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -163,5 +163,9 @@ extern const u16 gTitlescreenSprites_Pals[];
//extern ? gMonPortraitsGroup11_Pals;
//extern ? gMonPortraitsGroup12_Pals;
//extern ? gMonPortraitsGroup13_Pals;
+extern struct Coord16 gUnknown_086A9684[];
+extern struct Coord16 gUnknown_086A9694[];
+extern struct Coord16 gUnknown_086A96AC[];
+extern struct Coord16 gUnknown_086A96C0[];
#endif // GUARD_VARIABLES_H \ No newline at end of file
diff --git a/ld_script.txt b/ld_script.txt
index 15cf11d..2f53a9e 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -42,7 +42,6 @@ SECTIONS
asm/high_scores.o(.text);
asm/rom_1068C.o(.text);
src/titlescreen.o(.text);
- asm/titlescreen.o(.text);
asm/rom_11B9C.o(.text);
src/rom_3219C.o(.text);
asm/rom_3219C.o(.text);
@@ -51,7 +50,7 @@ SECTIONS
asm/m4a_1.o(.text);
src/m4a.o(.text);
asm/libagbsyscall.o(.text);
- asm/unknown_lib.o(.text);
+ src/agb_sram.o(.text);
*libgcc.a:_call_via_rX.o(.text);
*libgcc.a:_divsi3.o(.text);
*libgcc.a:_dvmd_tls.o(.text);
@@ -60,7 +59,7 @@ SECTIONS
*libgcc.a:_umodsi3.o(.text);
*libc.a:memcpy.o(.text);
*libc.a:memset.o(.text);
- asm/unknown_lib_2.o(.text);
+ *libc.a:strlen.o(.text);
}=0
.rodata :
diff --git a/src/agb_sram.c b/src/agb_sram.c
new file mode 100644
index 0000000..b33003c
--- /dev/null
+++ b/src/agb_sram.c
@@ -0,0 +1,90 @@
+#include "global.h"
+#include "agb_sram.h"
+
+// this should be in .bss
+extern /*static*/ u16 verifySramFast_Work[80]; // buffer to hold code of VerifySramFast_Core
+extern /*static*/ u16 readSramFast_Work[64]; // buffer to hold code of ReadSramFast_Core
+
+u32 (*VerifySramFast)(const u8 *src, u8 *dest, u32 size); // pointer to verifySramFast_Work
+void (*ReadSramFast)(const u8 *src, u8 *dest, u32 size); // pointer to readSramFast_Work
+
+void ReadSramFast_Core(const u8 *src, u8 *dest, u32 size)
+{
+ REG_WAITCNT = (REG_WAITCNT & ~3) | 3;
+ while (--size != -1)
+ *dest++ = *src++;
+}
+
+void WriteSramFast(const u8 *src, u8 *dest, u32 size)
+{
+ REG_WAITCNT = (REG_WAITCNT & ~3) | 3;
+ while (--size != -1)
+ *dest++ = *src++;
+}
+
+u32 VerifySramFast_Core(const u8 *src, u8 *dest, u32 size)
+{
+ REG_WAITCNT = (REG_WAITCNT & ~3) | 3;
+ while (--size != -1)
+ {
+ if (*dest++ != *src++)
+ return (u32)(dest - 1);
+ }
+ return 0;
+}
+
+void SetSramFastFunc(void)
+{
+ u16 *src;
+ u16 *dest;
+ u16 size;
+
+ src = (u16 *)ReadSramFast_Core;
+ // clear the least significant bit so that we get the actual start address of the function
+ src = (u16 *)((uintptr_t)src ^ 1); // NOTE: In Fire Emblem 8, this is '& ~1' instead of '^ 1'.
+ dest = readSramFast_Work;
+ // get the size of the function by subtracting the address of the next function
+ size = ((uintptr_t)WriteSramFast - (uintptr_t)ReadSramFast_Core) / 2;
+ // copy the function into the WRAM buffer
+ while (size != 0)
+ {
+ *dest++ = *src++;
+ size--;
+ }
+ // add 1 to the address of the buffer so that we stay in THUMB mode when bx-ing to the address
+ ReadSramFast = (void *)((uintptr_t)readSramFast_Work + 1);
+
+ src = (u16 *)VerifySramFast_Core;
+ // clear the least significant bit so that we get the actual start address of the function
+ src = (u16 *)((uintptr_t)src ^ 1); // NOTE: In Fire Emblem 8, this is '& ~1' instead of '^ 1'.
+ dest = verifySramFast_Work;
+ // get the size of the function by subtracting the address of the next function
+ size = ((uintptr_t)SetSramFastFunc - (uintptr_t)VerifySramFast_Core) / 2;
+ // copy the function into the WRAM buffer
+ while (size != 0)
+ {
+ *dest++ = *src++;
+ size--;
+ }
+ // add 1 to the address of the buffer so that we stay in THUMB mode when bx-ing to the address
+ VerifySramFast = (void *)((uintptr_t)verifySramFast_Work + 1);
+
+ REG_WAITCNT = (REG_WAITCNT & ~3) | 3;
+}
+
+u32 WriteAndVerifySramFast(const u8 *src, u8 *dest, u32 size)
+{
+ u8 i;
+ u32 errorAddr;
+
+ // try writing and verifying the data 3 times
+ for (i = 0; i < 3; i++)
+ {
+ WriteSramFast(src, dest, size);
+ errorAddr = VerifySramFast(src, dest, size);
+ if (errorAddr == 0)
+ break;
+ }
+
+ return errorAddr;
+}
diff --git a/src/titlescreen.c b/src/titlescreen.c
index b013c2f..6a2bcac 100755
--- a/src/titlescreen.c
+++ b/src/titlescreen.c
@@ -1,11 +1,12 @@
#include "global.h"
-#include "titlescreen.h"
+#include "agb_sram.h"
#include "m4a.h"
+#include "titlescreen.h"
#include "main.h"
static void sub_114FC(void);
static void sub_1157C(void);
-/*static*/ extern void sub_11640(void);
+static void sub_11640(void);
// If the user doesn't press any buttons at the title screen,
// it will transition to a demo gameplay experience.
@@ -656,38 +657,201 @@ static void sub_1157C(void)
}
}
-// static void sub_11640(void)
-// {
-// int i;
-// const struct SpriteSet *spriteSet;
-// struct SpriteGroup *group1 = &gTitlescreen.unk8[gUnknown_0200B3B8];
-// struct SpriteGroup *group2 = &gTitlescreen.unk10[gUnknown_0200B3B8];
-// group1->available = gTitlescreen.unk9;
-// group2->available = gTitlescreen.unk11;
-// LoadSpriteSets(gUnknown_086A96E4, 5, gUnknown_0200B3B8);
-// if (group1->available == 1)
-// {
-// group1->baseX = 120;
-// group1->baseY = 102;
-// spriteSet = gUnknown_086A96E4[gTitlescreen.unk8];
-// for (i = 0; i < spriteSet->count; i++)
-// {
-// gOamBuffer[group1->oam[i].oamId].x = group1->oam[i].xOffset + group1->baseX;
-// gOamBuffer[group1->oam[i].oamId].y = group1->oam[i].yOffset + group1->baseY;
-// }
-// }
-
-// if (group2->available == 1)
-// {
-// group2->baseX = 120;
-// group2->baseY = 80;
-// for (i = 0; i < 2; i++)
-// {
-// gOamBuffer[group2->oam[i].oamId].x = group2->oam[i].xOffset + group2->baseX;
-// gOamBuffer[group2->oam[i].oamId].y = group2->oam[i].yOffset + group2->baseY;
-// }
-// }
-
-// group1->available = 0;
-// group2->available = 0;
-// }
+static void sub_11640(void)
+{
+ int i;
+ const struct SpriteSet *spriteSet;
+ struct SpriteGroup *group1 = &gTitlescreen.unk8[gUnknown_0200B3B8];
+ struct SpriteGroup *group2 = &gTitlescreen.unk10[gUnknown_0200B3B8];
+
+ group1->available = gTitlescreen.unk9;
+ group2->available = gTitlescreen.unk11;
+
+ LoadSpriteSets(gUnknown_086A96E4, 5, gUnknown_0200B3B8);
+
+ if (group1->available == 1)
+ {
+ group1->baseX = 120;
+ group1->baseY = 102;
+ spriteSet = gUnknown_086A96E4[gTitlescreen.unk8];
+ for (i = 0; i < spriteSet->count; i++)
+ {
+ gOamBuffer[group1->oam[i].oamId].x = group1->oam[i].xOffset + group1->baseX;
+ gOamBuffer[group1->oam[i].oamId].y = group1->oam[i].yOffset + group1->baseY;
+
+ asm(""); // needed to match
+ }
+ }
+
+ if (group2->available == 1)
+ {
+ group2->baseX = 120;
+ group2->baseY = 80;
+ for (i = 0; i < 2; i++)
+ {
+ gOamBuffer[group2->oam[i].oamId].x = group2->oam[i].xOffset + group2->baseX;
+ gOamBuffer[group2->oam[i].oamId].y = group2->oam[i].yOffset + group2->baseY;
+
+ asm(""); // needed to match
+ }
+ }
+
+ group1->available = 0;
+ group2->available = 0;
+}
+
+struct UnknownStruct1
+{
+ u16 count;
+ u8 filler2[6];
+};
+
+void sub_1175C(void)
+{
+ struct SpriteGroup *r10;
+ struct SpriteGroup *r9;
+ struct SpriteGroup *r8;
+ const struct UnknownStruct1 *r12;
+ int sp0;
+
+ gMain.blendControl = 0x210;
+ gMain.blendAlpha = 0x808;
+ REG_BLDCNT = gMain.blendControl;
+ REG_BLDALPHA = gMain.blendAlpha;
+
+ r10 = &gMain.spriteGroups[gTitlescreen.unkA];
+ r9 = &gMain.spriteGroups[gTitlescreen.unkC];
+ r8 = &gMain.spriteGroups[gTitlescreen.unkE];
+
+ r10->available = gTitlescreen.unkB;
+ r9->available = gTitlescreen.unkD;
+ r8->available = gTitlescreen.unkF;
+
+ LoadSpriteSets((const struct SpriteSet *const *)gUnknown_0201C190, 7, gMain.spriteGroups);
+
+ if (r10->available == 1)
+ {
+ r10->baseX = 0x78;
+ r10->baseY = 0x66;
+ r12 = (const struct UnknownStruct1 *)gUnknown_0201C190[6];
+ for (sp0 = 0; sp0 < r12->count; sp0++)
+ {
+ struct OamDataSimple *r4 = &r10->oam[sp0];
+ if (r12[sp0 + 1].count == 1) // dunno. wtf?
+ gOamBuffer[r4->oamId].objMode = 1;
+ else
+ gOamBuffer[r4->oamId].objMode = 0;
+ gOamBuffer[r4->oamId].x = r4->xOffset + r10->baseX;
+ gOamBuffer[r4->oamId].y = r4->yOffset + r10->baseY;
+ }
+ }
+
+ if (r9->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r9->baseX = gUnknown_086A9684[gTitlescreen.menuCursorIndex].x;
+ r9->baseY = gUnknown_086A9684[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r9->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r9->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r9->baseY;
+ }
+
+ if (r8->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r8->baseX = gUnknown_086A9694[gTitlescreen.menuCursorIndex].x;
+ r8->baseY = gUnknown_086A9694[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r8->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r8->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r8->baseY;
+ }
+
+ r10->available = 0;
+ r9->available = 0;
+ r8->available = 0;
+}
+
+void sub_11968(void)
+{
+ struct SpriteGroup *r10;
+ struct SpriteGroup *r9;
+ struct SpriteGroup *r8;
+ const struct UnknownStruct1 *r12;
+ int sp0;
+
+ gMain.blendControl = 0x210;
+ gMain.blendAlpha = 0x808;
+ REG_BLDCNT = gMain.blendControl;
+ REG_BLDALPHA = gMain.blendAlpha;
+
+ r10 = &gMain.spriteGroups[gTitlescreen.unkA];
+ r9 = &gMain.spriteGroups[gTitlescreen.unkC];
+ r8 = &gMain.spriteGroups[gTitlescreen.unkE];
+
+ r10->available = gTitlescreen.unkB;
+ r9->available = gTitlescreen.unkD;
+ r8->available = gTitlescreen.unkF;
+
+ LoadSpriteSets((const struct SpriteSet *const *)gUnknown_0202BE00, 7, gMain.spriteGroups);
+
+ if (r10->available == 1)
+ {
+ r10->baseX = 0x78;
+ r10->baseY = 0x66;
+ r12 = (const struct UnknownStruct1 *)gUnknown_0202BE00[6];
+ for (sp0 = 0; sp0 < r12->count; sp0++)
+ {
+ struct OamDataSimple *r4 = &r10->oam[sp0];
+ if (r12[sp0 + 1].count == 1) // dunno. wtf?
+ gOamBuffer[r4->oamId].objMode = 1;
+ else
+ gOamBuffer[r4->oamId].objMode = 0;
+ gOamBuffer[r4->oamId].x = r4->xOffset + r10->baseX;
+ gOamBuffer[r4->oamId].y = r4->yOffset + r10->baseY;
+ }
+ }
+
+ if (r9->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r9->baseX = gUnknown_086A96AC[gTitlescreen.menuCursorIndex].x;
+ r9->baseY = gUnknown_086A96AC[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r9->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r9->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r9->baseY;
+ }
+
+ if (r8->available == 1)
+ {
+ struct OamDataSimple *r5;
+
+ r8->baseX = gUnknown_086A96C0[gTitlescreen.menuCursorIndex].x;
+ r8->baseY = gUnknown_086A96C0[gTitlescreen.menuCursorIndex].y;
+
+ r5 = &r8->oam[0];
+
+ gOamBuffer[r5->oamId].x = r5->xOffset + r8->baseX;
+ gOamBuffer[r5->oamId].y = r5->yOffset + r8->baseY;
+ }
+
+ r10->available = 0;
+ r9->available = 0;
+ r8->available = 0;
+}
+
+void sub_11B74(void)
+{
+ sub_52C64();
+ sub_52B30();
+ gMain.unk40 = 0;
+ WriteAndVerifySramFast((const u8 *)&gMain.unk40, (void *)0x0E000544, 4);
+}
diff --git a/src/util.c b/src/util.c
index f0d0b05..d0f3f42 100755
--- a/src/util.c
+++ b/src/util.c
@@ -186,7 +186,7 @@ void sub_578(void)
void sub_678(u8 *arg0, s16 arg1, s16 arg2)
{
// Rumble Pak related?
- s16 var0 = sub_55A24(arg0) - 1;
+ s16 var0 = strlen(arg0) - 1;
u16 *dest = &gUnknown_03005C00[arg1 * 32 + arg2];
do
{
diff --git a/sym_common.txt b/sym_common.txt
index 93b48cf..433c13b 100755
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -2,8 +2,8 @@
gUnknown_02032FB0: @ 0x02032FB0
.space 0x40
-gUnknown_02032FF0: @ 0x02032FF0
+ReadSramFast: @ 0x02032FF0
.space 0x4
-gUnknown_02032FF4: @ 0x02032FF4
+VerifySramFast: @ 0x02032FF4
.space 0xF7C08C
gUnknown_02FAF080: @ 0x02FAF080
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 88ea13f..22057c0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -84,14 +84,10 @@ gUnknown_0200293A: @ 0x0200293A
.space 0x1E
gUnknown_02002958: @ 0x2002958
.space 0x5E0
-gUnknown_02002F38: @ 0x02002F38
- .space 0x1
-gUnknown_02002F39: @ 0x02002F39
- .space 0x9F
-gUnknown_02002FD8: @ 0x02002FD8
- .space 0x1
-gUnknown_02002FD9: @ 0x02002FD9
- .space 0x87
+verifySramFast_Work: @ 0x02002F38
+ .space 0xA0
+readSramFast_Work: @ 0x02002FD8
+ .space 0x88
gIntrTable: @ 0x2003060
.space 0x40
gUnknown_020030A0: @ 0x020030A0