diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-10-19 17:04:03 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-10-19 17:04:03 -0500 |
commit | 684eb41feb95329d131b7480f0a34cc0ce7b259a (patch) | |
tree | a79f97fa5522fd4764d519d5d4140f96254fda1b | |
parent | 10c39b199b625b12b9aae21be793c82253c7ac58 (diff) |
Decompile more functions in main.s
-rwxr-xr-x | asm/field_select.s | 2 | ||||
-rwxr-xr-x | asm/high_scores.s | 10 | ||||
-rwxr-xr-x | asm/intro.s | 18 | ||||
-rwxr-xr-x | asm/options.s | 2 | ||||
-rwxr-xr-x | asm/pokedex.s | 2 | ||||
-rwxr-xr-x | asm/rom_11B9C.s | 36 | ||||
-rwxr-xr-x | asm/rom_24C.s | 580 | ||||
-rwxr-xr-x | asm/rom_25A4.s | 2 | ||||
-rwxr-xr-x | asm/rom_2C58.s | 2 | ||||
-rwxr-xr-x | asm/titlescreen.s | 6 | ||||
-rwxr-xr-x | include/gba/types.h | 4 | ||||
-rwxr-xr-x | include/main.h | 76 | ||||
-rwxr-xr-x | src/main.c | 241 | ||||
-rwxr-xr-x | sym_bss.txt | 7 |
14 files changed, 348 insertions, 640 deletions
diff --git a/asm/field_select.s b/asm/field_select.s index ea26acb..bc46a46 100755 --- a/asm/field_select.s +++ b/asm/field_select.s @@ -660,7 +660,7 @@ sub_8F94: @ 0x08008F94 ldr r0, _08009268 @ =0x086A6AD4 movs r1, #0x10 adds r2, r6, #0 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r4, #4] cmp r0, #1 bne _08009066 diff --git a/asm/high_scores.s b/asm/high_scores.s index 997d718..b85c26b 100755 --- a/asm/high_scores.s +++ b/asm/high_scores.s @@ -2612,7 +2612,7 @@ sub_E3A8: @ 0x0800E3A8 strh r0, [r5] ldr r0, _0800E450 @ =0x086A7DA8 movs r1, #2 - bl sub_358 + bl LoadSpriteSets ldr r2, _0800E454 @ =0x080797F0 ldr r0, [r4, #0xc] lsls r0, r0, #3 @@ -2747,7 +2747,7 @@ _0800E4B4: ldr r0, _0800E5E4 @ =0x086A7DB0 movs r1, #9 adds r2, r6, #0 - bl sub_358 + bl LoadSpriteSets movs r0, #0xdc strh r0, [r6, #2] movs r0, #0x90 @@ -2969,7 +2969,7 @@ _0800E67A: ldr r0, _0800E7A0 @ =0x086A7DB0 movs r1, #9 adds r2, r6, #0 - bl sub_358 + bl LoadSpriteSets movs r0, #4 mov r3, sl strh r0, [r3, #2] @@ -3171,7 +3171,7 @@ _0800E834: ldr r0, _0800E85C @ =0x086A7DB0 movs r1, #9 adds r2, r6, #0 - bl sub_358 + bl LoadSpriteSets _0800E846: movs r0, #0 strh r0, [r7] @@ -3206,7 +3206,7 @@ sub_E860: @ 0x0800E860 strh r0, [r5] ldr r0, _0800E8F4 @ =0x086A7DD4 movs r1, #5 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r5] cmp r0, #1 bne _0800E8DA diff --git a/asm/intro.s b/asm/intro.s index 51c1e07..5d3ff95 100755 --- a/asm/intro.s +++ b/asm/intro.s @@ -1248,7 +1248,7 @@ sub_9CB8: @ 0x08009CB8 adds r2, r2, r1 adds r0, r6, #0 movs r1, #0x31 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r5] cmp r0, #1 bne _08009D46 @@ -1337,7 +1337,7 @@ sub_9D70: @ 0x08009D70 ldr r2, _08009E74 @ =0xFFFFE340 add r2, r8 movs r1, #0x31 - bl sub_358 + bl LoadSpriteSets mov r2, r8 ldrh r0, [r2] cmp r0, #1 @@ -1528,7 +1528,7 @@ sub_9E90: @ 0x08009E90 ldr r5, _0800A144 @ =0x086A769C adds r0, r5, #0 movs r1, #0x31 - bl sub_358 + bl LoadSpriteSets mov r7, r8 ldrh r0, [r7] cmp r0, #1 @@ -2688,7 +2688,7 @@ sub_A87C: @ 0x0800A87C ldr r0, _0800A93C @ =0x086A795C movs r1, #1 adds r2, r5, #0 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r5] cmp r0, #1 bne _0800A91C @@ -3706,7 +3706,7 @@ sub_B0E8: @ 0x0800B0E8 ldr r0, _0800B2CC @ =0x086A79EC movs r1, #3 mov r2, r8 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r7] cmp r0, #1 bne _0800B1B8 @@ -4644,7 +4644,7 @@ sub_B7F8: @ 0x0800B7F8 adds r0, r4, #0 movs r1, #0x12 adds r2, r3, #0 - bl sub_358 + bl LoadSpriteSets movs r5, #0 str r6, [sp, #0x18] _0800B8EC: @@ -5631,7 +5631,7 @@ sub_C0D8: @ 0x0800C0D8 ldr r0, _0800C1F0 @ =0x086A7B74 movs r1, #1 mov r2, r8 - bl sub_358 + bl LoadSpriteSets mov r2, r8 ldrh r0, [r2] cmp r0, #1 @@ -6230,7 +6230,7 @@ sub_C4F0: @ 0x0800C4F0 strh r0, [r1] ldr r0, _0800C658 @ =0x086A7C24 movs r1, #0x11 - bl sub_358 + bl LoadSpriteSets mov r1, r8 ldrh r0, [r1] cmp r0, #1 @@ -7158,7 +7158,7 @@ sub_CD18: @ 0x0800CD18 ldr r0, _0800CE30 @ =0x086A7D20 movs r1, #0xb mov r2, r8 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r6] cmp r0, #1 bne _0800CDBA diff --git a/asm/options.s b/asm/options.s index 497e483..09f8a5b 100755 --- a/asm/options.s +++ b/asm/options.s @@ -1471,7 +1471,7 @@ _08051DCE: ldr r0, _08051F78 @ =0x086BB9EC movs r1, #0x20 ldr r2, _08051F7C @ =0x0200B3B8 - bl sub_358 + bl LoadSpriteSets ldr r2, _08051F80 @ =0x086BB968 movs r3, #0xa ldrsh r1, [r5, r3] diff --git a/asm/pokedex.s b/asm/pokedex.s index 5ba171f..8401b1d 100755 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -2483,7 +2483,7 @@ sub_51FC: @ 0x080051FC ldr r0, _08005388 @ =0x086A6148 movs r1, #0x1d adds r2, r4, #0 - bl sub_358 + bl LoadSpriteSets ldr r0, _0800538C @ =0x0201A4F0 ldrh r0, [r0] adds r0, #0x14 diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index 76c6a28..4e0cc2b 100755 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -70950,8 +70950,8 @@ _08035854: .4byte 0x000006C4 _08035858: .4byte 0x00000714 _0803585C: .4byte 0x000006EE - thumb_func_start sub_35860 -sub_35860: @ 0x08035860 + thumb_func_start LoadSpriteSets60 +LoadSpriteSets60: @ 0x08035860 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} @@ -76317,7 +76317,7 @@ _0803838E: ldr r0, _080383DC @ =0x0202D880 movs r1, #0x21 ldr r2, _080383E0 @ =0x0200B3B8 - bl sub_358 + bl LoadSpriteSets add sp, #0x74 pop {r3, r4, r5} mov r8, r3 @@ -123753,7 +123753,7 @@ _0805085A: adds r1, r1, r7 ldr r0, [r1] ldrh r1, [r1, #4] - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -123968,7 +123968,7 @@ _08050A90: movs r4, #0xbe lsls r4, r4, #2 adds r2, r5, r4 - bl sub_358 + bl LoadSpriteSets pop {r3} mov r8, r3 pop {r4, r5, r6, r7} @@ -124051,7 +124051,7 @@ _08050AE6: adds r1, r1, r7 ldr r0, [r1] ldrh r1, [r1, #4] - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124249,7 +124249,7 @@ _08050CC8: movs r2, #0xbe lsls r2, r2, #2 add r2, sb - bl sub_358 + bl LoadSpriteSets pop {r3, r4, r5} mov r8, r3 mov sb, r4 @@ -124335,7 +124335,7 @@ _08050D88: movs r3, #0xbe lsls r3, r3, #2 adds r2, r6, r3 - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124353,7 +124353,7 @@ sub_50DB8: @ 0x08050DB8 movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r0} bx r0 .align 2, 0 @@ -124490,7 +124490,7 @@ _08050E20: movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124586,7 +124586,7 @@ _08050F44: movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124606,7 +124606,7 @@ sub_50FAC: @ 0x08050FAC movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r0} bx r0 .align 2, 0 @@ -124683,7 +124683,7 @@ _08051014: movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124703,7 +124703,7 @@ sub_51068: @ 0x08051068 movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r0} bx r0 .align 2, 0 @@ -124780,7 +124780,7 @@ _080510D0: movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124801,7 +124801,7 @@ sub_51128: @ 0x08051128 movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r0} bx r0 .align 2, 0 @@ -124883,7 +124883,7 @@ _08051190: movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r4, r5, r6, r7} pop {r0} bx r0 @@ -124905,7 +124905,7 @@ sub_511F8: @ 0x080511F8 movs r3, #0xbe lsls r3, r3, #2 adds r2, r2, r3 - bl sub_358 + bl LoadSpriteSets pop {r0} bx r0 .align 2, 0 diff --git a/asm/rom_24C.s b/asm/rom_24C.s index c36f81a..4e4687a 100755 --- a/asm/rom_24C.s +++ b/asm/rom_24C.s @@ -4,586 +4,6 @@ .text - thumb_func_start sub_358 -sub_358: @ 0x08000358 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x10 - str r0, [sp] - str r2, [sp, #8] - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - str r1, [sp, #4] - ldr r4, _08000424 @ =gOamBuffer - movs r7, #0 - ldr r2, _08000428 @ =0x040000D4 - ldr r0, _0800042C @ =gEmptyOamData - str r0, [r2] - str r4, [r2, #4] - ldr r0, _08000430 @ =0x80000200 - str r0, [r2, #8] - ldr r0, [r2, #8] - movs r1, #0 - ldr r0, [sp, #4] - cmp r7, r0 - bhs _0800040E - mov ip, r2 -_0800038A: - movs r0, #0xb8 - muls r0, r1, r0 - ldr r2, [sp, #8] - adds r6, r2, r0 - ldrh r0, [r6] - adds r2, r1, #1 - str r2, [sp, #0xc] - cmp r0, #0 - beq _08000402 - lsls r0, r1, #2 - ldr r1, [sp] - adds r0, r0, r1 - ldr r0, [r0] - ldrh r5, [r0] - adds r0, #2 - mov r2, ip - str r0, [r2] - lsls r0, r7, #3 - ldr r1, _08000424 @ =gOamBuffer - adds r0, r0, r1 - str r0, [r2, #4] - lsls r0, r5, #2 - movs r1, #0x80 - lsls r1, r1, #0x18 - orrs r0, r1 - str r0, [r2, #8] - ldr r0, [r2, #8] - movs r3, #0 - cmp r3, r5 - bhs _08000402 - ldr r2, _08000424 @ =gOamBuffer - mov sb, r2 - ldr r0, _08000434 @ =0x000001FF - mov sl, r0 - movs r1, #0xff - mov r8, r1 -_080003D2: - adds r2, r7, #0 - lsls r0, r2, #3 - mov r1, sb - adds r4, r0, r1 - lsls r1, r3, #3 - adds r1, #8 - adds r1, r6, r1 - adds r0, r2, #1 - lsls r0, r0, #0x10 - lsrs r7, r0, #0x10 - strh r2, [r1] - ldrh r2, [r4, #2] - mov r0, sl - ands r0, r2 - strh r0, [r1, #2] - ldrh r2, [r4] - mov r0, r8 - ands r0, r2 - strh r0, [r1, #4] - adds r0, r3, #1 - lsls r0, r0, #0x10 - lsrs r3, r0, #0x10 - cmp r3, r5 - blo _080003D2 -_08000402: - ldr r2, [sp, #0xc] - lsls r0, r2, #0x10 - lsrs r1, r0, #0x10 - ldr r0, [sp, #4] - cmp r1, r0 - blo _0800038A -_0800040E: - lsls r0, r7, #0x10 - asrs r0, r0, #0x10 - add sp, #0x10 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - .align 2, 0 -_08000424: .4byte gOamBuffer -_08000428: .4byte 0x040000D4 -_0800042C: .4byte gEmptyOamData -_08000430: .4byte 0x80000200 -_08000434: .4byte 0x000001FF - - thumb_func_start sub_438 -sub_438: @ 0x08000438 - push {r4, r5, r6, lr} - ldr r4, _0800048C @ =gMain - ldrh r0, [r4, #0x16] - movs r2, #0x80 - movs r6, #0 - movs r5, #0 - orrs r0, r2 - strh r0, [r4, #0x16] - movs r1, #0x80 - lsls r1, r1, #0x13 - ldrh r0, [r1] - orrs r0, r2 - strh r0, [r1] - bl sub_490 - bl sub_518 - bl sub_578 - strb r6, [r4, #0xf] - strb r6, [r4, #0x10] - str r5, [r4, #0x50] - strb r6, [r4, #0x11] - strh r5, [r4, #0x12] - strh r5, [r4, #0x14] - movs r0, #0x90 - strh r0, [r4, #0x26] - strh r5, [r4, #0x28] - strh r5, [r4, #0x2a] - adds r0, r4, #0 - adds r0, #0x36 - strb r6, [r0] - ldrh r0, [r4, #0x38] - strh r5, [r4, #0x38] - ldrh r0, [r4, #0x3a] - strh r5, [r4, #0x3a] - ldrh r0, [r4, #0x3c] - strh r5, [r4, #0x3c] - strh r5, [r4, #0x2c] - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_0800048C: .4byte gMain - - thumb_func_start sub_490 -sub_490: @ 0x08000490 - sub sp, #8 - mov r1, sp - movs r0, #0 - strh r0, [r1] - ldr r1, _08000504 @ =0x040000D4 - mov r0, sp - str r0, [r1] - movs r0, #0xc0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _08000508 @ =0x8100C000 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0 - str r2, [sp, #4] - add r0, sp, #4 - str r0, [r1] - movs r0, #0xe0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _0800050C @ =0x85000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - mov r0, sp - strh r2, [r0] - str r0, [r1] - movs r0, #0xa0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _08000510 @ =0x81000200 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, _08000514 @ =0x04000010 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #2 - strh r2, [r0] - adds r0, #0x32 - strh r2, [r0] - adds r0, #4 - strh r2, [r0] - subs r0, #0x50 - strh r2, [r0] - adds r0, #0x4e - strh r2, [r0] - add sp, #8 - bx lr - .align 2, 0 -_08000504: .4byte 0x040000D4 -_08000508: .4byte 0x8100C000 -_0800050C: .4byte 0x85000100 -_08000510: .4byte 0x81000200 -_08000514: .4byte 0x04000010 - - thumb_func_start sub_518 -sub_518: @ 0x08000518 - push {r4, r5, r6, lr} - sub sp, #4 - mov r1, sp - movs r0, #0 - strh r0, [r1] - ldr r1, _08000564 @ =0x040000D4 - mov r0, sp - str r0, [r1] - ldr r0, _08000568 @ =0x03005C00 - str r0, [r1, #4] - ldr r0, _0800056C @ =0x81000600 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r1, #0 - ldr r6, _08000570 @ =gMain - movs r5, #0xba - lsls r5, r5, #2 - movs r3, #0 - ldr r4, _08000574 @ =0x000002EA -_0800053E: - lsls r0, r1, #0x10 - asrs r0, r0, #0x10 - lsls r1, r0, #2 - adds r1, r1, r6 - adds r2, r1, r5 - strh r3, [r2] - adds r1, r1, r4 - strh r3, [r1] - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r1, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _0800053E - add sp, #4 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_08000564: .4byte 0x040000D4 -_08000568: .4byte 0x03005C00 -_0800056C: .4byte 0x81000600 -_08000570: .4byte gMain -_08000574: .4byte 0x000002EA - - thumb_func_start sub_578 -sub_578: @ 0x08000578 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - movs r5, #0 - ldr r6, _08000660 @ =gMain - movs r0, #0xb8 - mov sb, r0 - movs r4, #0 - movs r1, #0xc0 - lsls r1, r1, #2 - mov r8, r1 - ldr r3, _08000664 @ =0x00000302 - mov ip, r3 - movs r7, #0xc1 - lsls r7, r7, #2 - mov sl, r7 -_0800059C: - mov r2, sb - muls r2, r5, r2 - adds r1, r2, r6 - movs r3, #0xbe - lsls r3, r3, #2 - adds r0, r1, r3 - strh r4, [r0] - ldr r7, _08000668 @ =0x000002FA - adds r0, r1, r7 - strh r4, [r0] - movs r0, #0xbf - lsls r0, r0, #2 - adds r1, r1, r0 - strh r4, [r1] - movs r3, #0 -_080005BA: - lsls r0, r3, #3 - adds r0, r0, r2 - adds r0, r0, r6 - mov r7, r8 - adds r1, r0, r7 - strh r4, [r1] - mov r7, ip - adds r1, r0, r7 - strh r4, [r1] - add r0, sl - strh r4, [r0] - adds r0, r3, #1 - lsls r0, r0, #0x10 - lsrs r3, r0, #0x10 - cmp r3, #0x15 - bls _080005BA - adds r0, r5, #1 - lsls r0, r0, #0x10 - lsrs r5, r0, #0x10 - cmp r5, #0x63 - bls _0800059C - movs r5, #0 - mov sl, r5 - movs r0, #0xd - rsbs r0, r0, #0 - mov ip, r0 - movs r1, #0x11 - rsbs r1, r1, #0 - mov sb, r1 - movs r3, #0x21 - rsbs r3, r3, #0 - mov r8, r3 - movs r4, #0x3f - ldr r6, _0800066C @ =0xFFFFFE00 - adds r3, #0x12 -_08000600: - lsls r2, r5, #3 - ldr r7, _08000670 @ =gOamBuffer - adds r2, r2, r7 - movs r0, #0xf4 - strb r0, [r2] - movs r0, #0 - strb r0, [r2, #1] - ldrh r1, [r2, #2] - adds r0, r6, #0 - ands r0, r1 - movs r7, #0xfa - lsls r7, r7, #1 - adds r1, r7, #0 - orrs r0, r1 - strh r0, [r2, #2] - ldrb r1, [r2, #3] - adds r0, r3, #0 - ands r0, r1 - mov r1, sb - ands r0, r1 - mov r7, r8 - ands r0, r7 - ands r0, r4 - strb r0, [r2, #3] - ldrh r1, [r2, #4] - ldr r0, _08000674 @ =0xFFFFFC00 - ands r0, r1 - strh r0, [r2, #4] - ldrb r1, [r2, #5] - mov r0, ip - ands r0, r1 - movs r1, #0xf - ands r0, r1 - strb r0, [r2, #5] - mov r0, sl - strh r0, [r2, #6] - adds r0, r5, #1 - lsls r0, r0, #0x10 - lsrs r5, r0, #0x10 - cmp r5, #0x7f - bls _08000600 - 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 -_08000660: .4byte gMain -_08000664: .4byte 0x00000302 -_08000668: .4byte 0x000002FA -_0800066C: .4byte 0xFFFFFE00 -_08000670: .4byte gOamBuffer -_08000674: .4byte 0xFFFFFC00 - - thumb_func_start sub_678 -sub_678: @ 0x08000678 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r4, r1, #0 - adds r5, r2, #0 - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - lsls r5, r5, #0x10 - lsrs r5, r5, #0x10 - bl sub_55A24 - subs r0, #1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - lsls r4, r4, #0x10 - asrs r4, r4, #0xb - lsls r5, r5, #0x10 - asrs r5, r5, #0x10 - adds r4, r4, r5 - lsls r4, r4, #1 - ldr r0, _080006C4 @ =0x03005C00 - adds r4, r4, r0 -_080006A2: - ldrb r0, [r6] - subs r0, #0x20 - strh r0, [r4] - adds r6, #1 - adds r4, #2 - adds r1, r2, #0 - lsls r0, r1, #0x10 - ldr r2, _080006C8 @ =0xFFFF0000 - adds r0, r0, r2 - lsrs r2, r0, #0x10 - lsls r1, r1, #0x10 - cmp r1, #0 - bgt _080006A2 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_080006C4: .4byte 0x03005C00 -_080006C8: .4byte 0xFFFF0000 - - thumb_func_start sub_6CC -sub_6CC: @ 0x080006CC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r5, r1, #0 - adds r4, r2, #0 - lsls r3, r3, #0x10 - lsrs r3, r3, #0x10 - cmp r6, #0 - bge _080006E8 - movs r0, #0x2d - strb r0, [r5] - adds r5, #1 - rsbs r6, r6, #0 -_080006E8: - lsls r7, r3, #0x10 - movs r0, #0x30 - mov r8, r0 -_080006EE: - cmp r4, #1 - ble _08000708 - subs r4, #1 - movs r0, #0xa - adds r1, r4, #0 - bl sub_780 - cmp r6, r0 - bge _08000708 - mov r0, r8 - strb r0, [r5] - adds r5, #1 - b _080006EE -_08000708: - asrs r4, r7, #0x10 - cmp r4, #0 - beq _0800071A - adds r0, r6, #0 - adds r1, r5, #0 - movs r2, #0xa - bl sub_734 - b _08000726 -_0800071A: - adds r0, r6, #0 - adds r1, r5, #0 - movs r2, #0xa - bl sub_734 - strb r4, [r0] -_08000726: - adds r0, r5, #0 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - - thumb_func_start sub_734 -sub_734: @ 0x08000734 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r7, r1, #0 - adds r6, r2, #0 - adds r1, r6, #0 - bl __umodsi3 - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - mov r8, r5 - adds r0, r4, #0 - adds r1, r6, #0 - bl __udivsi3 - cmp r0, #0 - beq _08000762 - adds r1, r7, #0 - adds r2, r6, #0 - bl sub_734 - adds r7, r0, #0 -_08000762: - cmp r5, #9 - bhi _0800076C - adds r0, r5, #0 - adds r0, #0x30 - b _08000770 -_0800076C: - mov r0, r8 - adds r0, #0x57 -_08000770: - strb r0, [r7] - adds r0, r7, #1 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - - thumb_func_start sub_780 -sub_780: @ 0x08000780 - push {r4, r5, lr} - adds r3, r0, #0 - adds r2, r1, #0 - cmp r1, #0 - bge _0800078C - rsbs r2, r1, #0 -_0800078C: - movs r4, #1 - cmp r2, #0 - beq _080007AA - movs r5, #1 -_08000794: - adds r0, r2, #0 - ands r0, r5 - cmp r0, #0 - beq _0800079E - muls r4, r3, r4 -_0800079E: - adds r0, r3, #0 - muls r0, r3, r0 - adds r3, r0, #0 - asrs r2, r2, #1 - cmp r2, #0 - bne _08000794 -_080007AA: - cmp r1, #0 - bge _080007B8 - movs r0, #1 - adds r1, r4, #0 - bl __divsi3 - b _080007BA -_080007B8: - adds r0, r4, #0 -_080007BA: - pop {r4, r5} - pop {r1} - bx r1 - thumb_func_start sub_7C0 sub_7C0: @ 0x080007C0 push {r4, r5, r6, lr} diff --git a/asm/rom_25A4.s b/asm/rom_25A4.s index b273117..3c41293 100755 --- a/asm/rom_25A4.s +++ b/asm/rom_25A4.s @@ -571,7 +571,7 @@ _08002A3C: mov r0, ip movs r1, #0x10 ldr r2, _08002C3C @ =0x0200B3B8 - bl sub_358 + bl LoadSpriteSets movs r1, #0 _08002A70: lsls r2, r1, #2 diff --git a/asm/rom_2C58.s b/asm/rom_2C58.s index 98f28f6..da52ca9 100755 --- a/asm/rom_2C58.s +++ b/asm/rom_2C58.s @@ -1550,7 +1550,7 @@ sub_394C: @ 0x0800394C strh r0, [r1] ldr r0, _080039B0 @ =0x086A54D8 movs r1, #0xd - bl sub_358 + bl LoadSpriteSets ldrh r0, [r7] cmp r0, #1 bne _08003A18 diff --git a/asm/titlescreen.s b/asm/titlescreen.s index 6bb72f2..a5cb4dc 100755 --- a/asm/titlescreen.s +++ b/asm/titlescreen.s @@ -30,7 +30,7 @@ sub_11640: @ 0x08011640 ldr r5, _0801174C @ =0x086A96E4 adds r0, r5, #0 movs r1, #5 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r7] cmp r0, #1 bne _080116DC @@ -203,7 +203,7 @@ sub_1175C: @ 0x0801175C ldr r4, _08011820 @ =0x0201C190 adds r0, r4, #0 movs r1, #7 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r6] cmp r0, #1 bne _0801187C @@ -461,7 +461,7 @@ sub_11968: @ 0x08011968 ldr r4, _08011A2C @ =0x0202BE00 adds r0, r4, #0 movs r1, #7 - bl sub_358 + bl LoadSpriteSets ldrh r0, [r6] cmp r0, #1 bne _08011A88 diff --git a/include/gba/types.h b/include/gba/types.h index a7dbf3e..31f53ce 100755 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -57,7 +57,9 @@ struct OamData u32 shape:2; // 0x40, 0x80 -> 0xC0 /*0x02*/ u32 x:9; - u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode + u32 matrixNum:3; // This is not using its full 5 bits? + u32 hFlip:1; + u32 vFlip:1; u32 size:2; /*0x04*/ u16 tileNum:10; // 0x3FF diff --git a/include/main.h b/include/main.h index 2eb4842..1e47a6a 100755 --- a/include/main.h +++ b/include/main.h @@ -3,8 +3,39 @@ #include "global.h" +#define NUM_SPRITE_GROUPS 100 +#define MAX_SPRITES_IN_GROUP 22 + typedef void (*StateFunc)(void); +struct MainUnk2E8 +{ + u16 unk0; + u16 unk2; +}; + +struct SpriteSet +{ + u16 count; + u8 oamData[0]; +}; + +struct OamDataSimple +{ + u16 oamId; + u16 xOffset; + u16 yOffset; +}; + +struct SpriteGroup +{ + u16 available; + u16 baseX; + u16 baseY; + struct OamDataSimple oam[MAX_SPRITES_IN_GROUP]; +}; +// size: 0xB8 + struct Main { /*0x00*/ u8 filler0[0x2]; @@ -12,37 +43,46 @@ struct Main /*0x03*/ u8 subState; /*0x04*/ u8 filler4[0x9]; /*0x0D*/ u8 unkD; - /*0x0E*/ u8 fillerE[0x8]; + /*0x0E*/ u8 fillerE[0x1]; + /*0x0F*/ u8 unkF; + /*0x10*/ u8 unk10; + /*0x11*/ u8 unk11; + /*0x12*/ s16 unk12; + /*0x14*/ s16 unk14; /*0x16*/ u16 unk16; /*0x18*/ u16 newKeys; /*0x1A*/ u16 releasedKeys; /*0x1C*/ u16 heldKeys; - /*0x1E*/ u8 filler1E[0x22]; + /*0x1E*/ u8 filler1E[0x8]; + /*0x26*/ u16 unk26; + /*0x28*/ u16 unk28; + /*0x2A*/ u16 unk2A; + /*0x2C*/ u16 unk2C; + /*0x2E*/ u8 filler2E[0x8]; + /*0x36*/ u8 unk36; + /*0x38*/ volatile u16 unk38; + /*0x3A*/ volatile u16 unk3A; + /*0x3C*/ volatile u16 unk3C; /*0x40*/ int unk40; -}; - -struct Unk0200B3B8_2 -{ - -}; - -struct Unk0200B3B8 -{ - u16 unk0; - u16 unk2; - u16 unk4; - u8 filler6[0x2]; - u16 unk8; - u8 fillerA[0xAE]; + /*0x44*/ u8 filler44[0xC]; + /*0x50*/ int unk50; + /*0x54*/ u8 filler54[0x294]; + /*0x2E8*/ struct MainUnk2E8 unk2E8[4]; + /*0x2F8*/ struct SpriteGroup spriteGroups[NUM_SPRITE_GROUPS]; }; extern struct Main gMain; -extern struct Unk0200B3B8 gUnknown_0200B3B8[]; +extern struct SpriteGroup gUnknown_0200B3B8[]; extern StateFunc gMainFuncs[]; +extern struct OamData gOamBuffer[128]; +extern u16 gUnknown_03005C00[0x600]; void SetMainGameState(u16); void sub_24C(void); void sub_2B4(void); +void sub_490(void); +void sub_518(void); +void sub_578(void); void sub_D74(void); #endif // GUARD_MAIN_H @@ -1,6 +1,12 @@ #include "global.h" #include "main.h" +extern const struct OamData gEmptyOamData[128]; +extern int sub_55A24(u8*); // Rumble Pak? + +static u8 *sub_734(u32, u8*, u32); +static int sub_780(int, int); + void SetMainGameState(u16 mainState) { gMain.mainState = mainState; @@ -58,3 +64,238 @@ void sub_2B4(void) REG_BLDCNT = 0; REG_BLDY = 0; } + +s16 LoadSpriteSets(const struct SpriteSet **spriteSets, u16 numSpriteSets, struct SpriteGroup *spriteGroups) +{ + u16 i, j; + struct SpriteGroup *spriteGroup; + struct OamDataSimple *oamSimple; + u16 *oamData = (u16 *)(&gOamBuffer[0]); + u16 loadedCount = 0; + + DmaCopy16(3, gEmptyOamData, oamData, sizeof(gEmptyOamData)); + for (i = 0; i < numSpriteSets; i++) + { + spriteGroup = &spriteGroups[i]; + if (spriteGroup->available) + { + u16 curSpriteSetCount = spriteSets[i]->count; + DmaCopy16(3, spriteSets[i]->oamData, &gOamBuffer[loadedCount], curSpriteSetCount * sizeof(struct OamData)); + for (j = 0; j < curSpriteSetCount; j++) + { + oamData = (u16 *)(&gOamBuffer[loadedCount]); + oamSimple = &spriteGroup->oam[j]; + oamSimple->oamId = loadedCount++; + oamSimple->xOffset = oamData[1] & 0x1FF; + oamSimple->yOffset = oamData[0] & 0xFF; + } + } + } + + return loadedCount; +} + +void sub_438(void) +{ + gMain.unk16 |= DISPCNT_FORCED_BLANK; + REG_DISPCNT |= DISPCNT_FORCED_BLANK; + sub_490(); + sub_518(); + sub_578(); + gMain.unkF = 0; + gMain.unk10 = 0; + gMain.unk50 = 0; + gMain.unk11 = 0; + gMain.unk12 = 0; + gMain.unk14 = 0; + gMain.unk26 = 0x90; + gMain.unk28 = 0; + gMain.unk2A = 0; + gMain.unk36 = 0; + gMain.unk38 = 0; + gMain.unk3A = 0; + gMain.unk3C = 0; + gMain.unk2C = 0; +} + +void sub_490(void) +{ + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)PLTT, BG_PLTT_SIZE + OBJ_PLTT_SIZE); + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BLDCNT = 0; + REG_BLDY = 0; + REG_DISPSTAT = 0; + REG_BLDALPHA = 0; +} + +void sub_518(void) +{ + s16 i; + + DmaFill16(3, 0, gUnknown_03005C00, sizeof(gUnknown_03005C00)); + for (i = 0; i < 4; i++) + { + gMain.unk2E8[i].unk0 = 0; + gMain.unk2E8[i].unk2 = 0; + } +} + +void sub_578(void) +{ + u16 i, j; + + for (i = 0; i < NUM_SPRITE_GROUPS; i++) + { + gMain.spriteGroups[i].available = 0; + gMain.spriteGroups[i].baseX = 0; + gMain.spriteGroups[i].baseY = 0; + for (j = 0; j < MAX_SPRITES_IN_GROUP; j++) + { + gMain.spriteGroups[i].oam[j].oamId = 0; + gMain.spriteGroups[i].oam[j].xOffset = 0; + gMain.spriteGroups[i].oam[j].yOffset = 0; + } + } + + for (i = 0; i < 128; i++) + { + gOamBuffer[i].y = 244; + gOamBuffer[i].affineMode = 0; + gOamBuffer[i].objMode = 0; + gOamBuffer[i].mosaic = 0; + gOamBuffer[i].bpp = 0; + gOamBuffer[i].shape = 0; + gOamBuffer[i].x = 500; + gOamBuffer[i].matrixNum = 0; + gOamBuffer[i].hFlip = 0; + gOamBuffer[i].vFlip = 0; + gOamBuffer[i].size = 0; + gOamBuffer[i].tileNum = 0; + gOamBuffer[i].priority = 0; + gOamBuffer[i].paletteNum = 0; + gOamBuffer[i].affineParam = 0; + } +} + +void sub_678(u8 *arg0, s16 arg1, s16 arg2) +{ + // Rumble Pak related? + s16 var0 = sub_55A24(arg0) - 1; + u16 *dest = &gUnknown_03005C00[arg1 * 32 + arg2]; + do + { + *dest = (*arg0) - 32; + arg0++; + dest++; + } while (var0-- > 0); +} + +u8 *sub_6CC(int arg0, u8 *arg1, int arg2, s16 arg3) +{ + if (arg0 < 0) + { + *arg1 = 0x2D; + arg1++; + arg0 = -arg0; + } + + while (1) + { + if (arg2 < 2) + break; + + arg2--; + if (arg0 < sub_780(10, arg2)) + { + *arg1 = 0x30; + arg1++; + } + else + { + break; + } + } + + if (arg3) + { + sub_734(arg0, arg1, 10); + } + else + { + u8 *ptr = sub_734(arg0, arg1, 10); + *ptr = 0; + } + + return arg1; +} + +static u8 *sub_734(u32 arg0, u8 *arg1, u32 arg2) +{ + u8 mod = arg0 % arg2; + int div = arg0 / arg2; + if (div != 0) + arg1 = sub_734(div, arg1, arg2); + + if (mod < 10) + *arg1 = mod + 48; + else + *arg1 = mod + 87; + + return arg1 + 1; +} + +static int sub_780(int arg0, int arg1) +{ + int var0; + int var1 = arg1; + + if (arg1 < 0) + var1 = -var1; + + var0 = 1; + while (var1) + { + if (var1 & 1) + var0 *= arg0; + + arg0 *= arg0; + var1 >>= 1; + } + + if (arg1 >= 0) + return var0; + else + return 1 / var0; +} + +// struct OamMatrix +// { +// s16 a; +// s16 b; +// s16 c; +// s16 d; +// }; +// +// void sub_7C0(s16 arg0, s16 arg1, s16 matrixNum) +// { +// u16 a = 0x10000 / arg0; +// u16 d = 0x10000 / arg1; +// volatile s16 a2 = a; +// volatile s16 b2 = 0; +// volatile s16 c2 = 0; +// volatile s16 d2 = d; + +// gOamBuffer[matrixNum * 4 ].affineParam = a2; +// gOamBuffer[matrixNum * 4 + 1].affineParam = b2; +// gOamBuffer[matrixNum * 4 + 2].affineParam = c2; +// gOamBuffer[matrixNum * 4 + 3].affineParam = d; +// } diff --git a/sym_bss.txt b/sym_bss.txt index b1343d6..fe78a61 100755 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -3,7 +3,12 @@ gUnknown_03000000: @ 0x3000000 .space 0x5000 gOamBuffer: @ 0x3005000 - .space 0x2400 + .space 0xC00 + +gUnknown_03005C00: @ 0x3005C00 + .space 0xC00 + + .space 0xC00 SoundMainRAM_Buffer: @ 0x3007400 .space 0x800 |