diff options
author | huderlem <huderlem@gmail.com> | 2019-08-05 17:02:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-05 17:02:39 -0500 |
commit | 08bd3049160f9a6d05aa680a3106854015798f58 (patch) | |
tree | ea3e8d61c7276c9a23697a3c8c1d883575316aa4 | |
parent | d824a2b4266e6cfa885ef08b23c43e38dbbafcd7 (diff) | |
parent | bcd0c961fa3643240d9f9785e5bf5b037158aa98 (diff) |
Merge pull request #6 from camthesaxman/titlescreen
decompile the rest of titlescreen.s and import agb_sram library and strlen function
-rwxr-xr-x | Makefile | 3 | ||||
-rwxr-xr-x | asm/rom_3219C.s | 8 | ||||
-rwxr-xr-x | asm/rom_528AC.s | 18 | ||||
-rwxr-xr-x | asm/titlescreen.s | 681 | ||||
-rwxr-xr-x | asm/unknown_lib.s | 230 | ||||
-rwxr-xr-x | asm/unknown_lib_2.s | 46 | ||||
-rw-r--r-- | include/agb_sram.h | 10 | ||||
-rw-r--r-- | include/functions.h | 16 | ||||
-rwxr-xr-x | include/main.h | 1 | ||||
-rwxr-xr-x | include/titlescreen.h | 12 | ||||
-rw-r--r-- | include/types.h | 6 | ||||
-rw-r--r-- | include/variables.h | 4 | ||||
-rwxr-xr-x | ld_script.txt | 5 | ||||
-rw-r--r-- | src/agb_sram.c | 90 | ||||
-rwxr-xr-x | src/titlescreen.c | 238 | ||||
-rwxr-xr-x | src/util.c | 2 | ||||
-rwxr-xr-x | sym_common.txt | 4 | ||||
-rw-r--r-- | sym_ewram.txt | 12 |
18 files changed, 345 insertions, 1041 deletions
@@ -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); +} @@ -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 |