diff options
author | Cameron Hall <cameronghall@cox.net> | 2019-08-05 21:48:30 -0500 |
---|---|---|
committer | Cameron Hall <cameronghall@cox.net> | 2019-08-05 21:48:30 -0500 |
commit | 66780ab02c2d26de2b74e64b07320467a47b42db (patch) | |
tree | 918340b38b16e9aba7d9f85d8e5e200f0649445d | |
parent | e1558f0801b1a28197a00cf6cf8cc703129aa36a (diff) |
decompile rom_1068C.s
-rwxr-xr-x | asm/rom_1068C.s | 348 | ||||
-rw-r--r-- | include/functions.h | 6 | ||||
-rwxr-xr-x | include/main.h | 1 | ||||
-rw-r--r-- | include/variables.h | 6 | ||||
-rwxr-xr-x | ld_script.txt | 2 | ||||
-rw-r--r-- | src/rom_1068C.c | 124 |
6 files changed, 133 insertions, 354 deletions
diff --git a/asm/rom_1068C.s b/asm/rom_1068C.s deleted file mode 100755 index 37c7a85..0000000 --- a/asm/rom_1068C.s +++ /dev/null @@ -1,348 +0,0 @@ - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_1068C -sub_1068C: @ 0x0801068C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r4, r0, #0 - adds r7, r2, #0 - mov sb, r3 - ldr r0, [sp, #0x24] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp] - movs r2, #0 - cmp r2, sb - bge _080106F0 - lsls r0, r1, #5 - adds r0, r0, r4 - mov sl, r0 -_080106B2: - movs r3, #0 - adds r6, r2, #1 - cmp r3, r7 - bge _080106E8 - lsls r0, r2, #5 - mov r1, sl - adds r5, r1, r0 - ldr r0, _08010700 @ =gUnknown_03005C00 - mov ip, r0 - ldr r1, _08010704 @ =0x00000FFF - mov r8, r1 - ldr r0, [sp] - lsls r4, r0, #0xc -_080106CC: - adds r1, r3, r5 - lsls r1, r1, #0x10 - lsrs r1, r1, #0xf - add r1, ip - ldrh r2, [r1] - mov r0, r8 - ands r0, r2 - orrs r0, r4 - strh r0, [r1] - adds r0, r3, #1 - lsls r0, r0, #0x10 - lsrs r3, r0, #0x10 - cmp r3, r7 - blt _080106CC -_080106E8: - lsls r0, r6, #0x10 - lsrs r2, r0, #0x10 - cmp r2, sb - blt _080106B2 -_080106F0: - 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 -_08010700: .4byte gUnknown_03005C00 -_08010704: .4byte 0x00000FFF - - thumb_func_start sub_10708 -sub_10708: @ 0x08010708 - push {r4, r5, lr} - sub sp, #8 - str r0, [sp] - str r1, [sp, #4] - lsls r2, r2, #0x10 - lsrs r0, r2, #0x10 - movs r4, #0 - lsls r3, r3, #0x10 - asrs r1, r3, #0x10 - cmp r4, r1 - bge _08010744 - ldr r2, _0801074C @ =0x040000D4 - lsls r0, r0, #0x10 - asrs r3, r0, #0xc - movs r0, #0x80 - lsls r0, r0, #0x18 - orrs r3, r0 - adds r5, r1, #0 -_0801072C: - lsls r1, r4, #0xa - ldr r0, [sp] - adds r0, r0, r1 - str r0, [r2] - ldr r0, [sp, #4] - adds r0, r0, r1 - str r0, [r2, #4] - str r3, [r2, #8] - ldr r0, [r2, #8] - adds r4, #1 - cmp r4, r5 - blt _0801072C -_08010744: - add sp, #8 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_0801074C: .4byte 0x040000D4 - - thumb_func_start sub_10750 -sub_10750: @ 0x08010750 - push {r4, r5, lr} - sub sp, #8 - str r0, [sp] - str r1, [sp, #4] - lsls r2, r2, #0x10 - lsrs r0, r2, #0x10 - movs r4, #0 - lsls r3, r3, #0x10 - asrs r1, r3, #0x10 - cmp r4, r1 - bge _0801078C - ldr r2, _08010794 @ =0x040000D4 - lsls r0, r0, #0x10 - asrs r3, r0, #0x10 - movs r0, #0x80 - lsls r0, r0, #0x18 - orrs r3, r0 - adds r5, r1, #0 -_08010774: - lsls r1, r4, #6 - ldr r0, [sp] - adds r0, r0, r1 - str r0, [r2] - ldr r0, [sp, #4] - adds r0, r0, r1 - str r0, [r2, #4] - str r3, [r2, #8] - ldr r0, [r2, #8] - adds r4, #1 - cmp r4, r5 - blt _08010774 -_0801078C: - add sp, #8 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08010794: .4byte 0x040000D4 - - thumb_func_start sub_10798 -sub_10798: @ 0x08010798 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - mov r8, r2 - ldr r4, _08010818 @ =0x040000D4 - str r0, [r4] - ldr r2, _0801081C @ =gUnknown_0201A920 - str r2, [r4, #4] - ldr r0, _08010820 @ =0x80000100 - str r0, [r4, #8] - ldr r3, [r4, #8] - str r1, [r4] - movs r1, #0x80 - lsls r1, r1, #3 - adds r3, r2, r1 - str r3, [r4, #4] - str r0, [r4, #8] - ldr r0, [r4, #8] - mov r1, sp - ldr r5, _08010824 @ =0x00007FFF - adds r0, r5, #0 - strh r0, [r1] - str r1, [r4] - ldr r0, _08010828 @ =0xFFFFFC00 - adds r2, r2, r0 - str r2, [r4, #4] - ldr r0, _0801082C @ =0x81000200 - str r0, [r4, #8] - ldr r0, [r4, #8] - str r2, [r4] - str r3, [r4, #4] - ldr r5, _08010830 @ =0x80000200 - str r5, [r4, #8] - ldr r0, [r4, #8] - str r3, [r4] - movs r6, #0xa0 - lsls r6, r6, #0x13 - str r6, [r4, #4] - str r5, [r4, #8] - ldr r0, [r4, #8] - bl sub_1050C - ldr r1, _08010834 @ =gMain - movs r0, #0x80 - lsls r0, r0, #0x13 - ldrh r0, [r0] - strh r0, [r1, #0x16] - movs r7, #0 -_080107FA: - mov r1, r8 - cmp r1, #0 - beq _08010804 - bl _call_via_r8 -_08010804: - adds r0, r7, #0 - bl sub_1001C - bl sub_D74 - cmp r7, #0x20 - bne _08010838 - ldr r0, _0801081C @ =gUnknown_0201A920 - b _0801083A - .align 2, 0 -_08010818: .4byte 0x040000D4 -_0801081C: .4byte gUnknown_0201A920 -_08010820: .4byte 0x80000100 -_08010824: .4byte 0x00007FFF -_08010828: .4byte 0xFFFFFC00 -_0801082C: .4byte 0x81000200 -_08010830: .4byte 0x80000200 -_08010834: .4byte gMain -_08010838: - ldr r0, _0801085C @ =gUnknown_0201AD20 -_0801083A: - str r0, [r4] - str r6, [r4, #4] - str r5, [r4, #8] - ldr r0, [r4, #8] - adds r0, r7, #0 - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r7, r0, #0x10 - cmp r7, #0x20 - bls _080107FA - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_0801085C: .4byte gUnknown_0201AD20 - - thumb_func_start sub_10860 -sub_10860: @ 0x08010860 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r5, r0, #0 - ldr r1, _080108C8 @ =0x040000D4 - movs r0, #0xa0 - lsls r0, r0, #0x13 - mov r8, r0 - str r0, [r1] - ldr r3, _080108CC @ =gUnknown_0201A520 - str r3, [r1, #4] - ldr r4, _080108D0 @ =0x80000200 - str r4, [r1, #8] - ldr r0, [r1, #8] - mov r2, sp - ldr r6, _080108D4 @ =0x00007FFF - adds r0, r6, #0 - strh r0, [r2] - str r2, [r1] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r3, r2 - str r0, [r1, #4] - ldr r0, _080108D8 @ =0x81000200 - str r0, [r1, #8] - ldr r0, [r1, #8] - str r3, [r1] - movs r6, #0x80 - lsls r6, r6, #4 - adds r3, r3, r6 - str r3, [r1, #4] - str r4, [r1, #8] - ldr r0, [r1, #8] - movs r7, #0 - adds r6, r1, #0 -_080108A8: - cmp r5, #0 - beq _080108B0 - bl _call_via_r5 -_080108B0: - adds r0, r7, #0 - bl sub_1001C - bl sub_D74 - cmp r7, #0x20 - bne _080108E0 - ldr r0, _080108DC @ =gUnknown_0201A920 - str r0, [r6] - mov r0, r8 - str r0, [r6, #4] - b _080108E8 - .align 2, 0 -_080108C8: .4byte 0x040000D4 -_080108CC: .4byte gUnknown_0201A520 -_080108D0: .4byte 0x80000200 -_080108D4: .4byte 0x00007FFF -_080108D8: .4byte 0x81000200 -_080108DC: .4byte gUnknown_0201A920 -_080108E0: - ldr r0, _08010908 @ =gUnknown_0201AD20 - str r0, [r6] - mov r2, r8 - str r2, [r6, #4] -_080108E8: - str r4, [r6, #8] - ldr r0, [r6, #8] - adds r0, r7, #0 - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r7, r0, #0x10 - cmp r7, #0x20 - bls _080108A8 - bl sub_D74 - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08010908: .4byte gUnknown_0201AD20 - - thumb_func_start sub_1090C -sub_1090C: @ 0x0801090C - ldr r1, _08010920 @ =gUnknown_0201A500 - movs r2, #0 - adds r0, r1, #0 - adds r0, #0xc -_08010914: - str r2, [r0] - subs r0, #4 - cmp r0, r1 - bge _08010914 - bx lr - .align 2, 0 -_08010920: .4byte gUnknown_0201A500 diff --git a/include/functions.h b/include/functions.h index e53d349..6698a17 100644 --- a/include/functions.h +++ b/include/functions.h @@ -171,12 +171,12 @@ extern void sub_FD5C(void (*func)(void)); extern void sub_FE04(void (*func)(void)); //extern ? sub_FEB8(); //extern ? sub_FF74(); -//extern ? sub_1001C(); +extern void sub_1001C(int); //extern ? sub_10170(); //extern ? sub_102A8(); //extern ? sub_10424(); //extern ? sub_10480(); -//extern ? sub_1050C(); +extern void sub_1050C(void); //extern ? sub_10528(); //extern ? sub_10544(); //extern ? sub_105A0(); @@ -389,7 +389,7 @@ extern void sub_FE04(void (*func)(void)); // asm/rom_1068C.s //extern ? sub_1068C(); -extern void sub_10708(void*, void*, u16, s16); +extern void sub_10708(void *volatile, void *volatile, s16, s16); //extern ? sub_10750(); //extern ? sub_10798(); //extern ? sub_10860(); diff --git a/include/main.h b/include/main.h index 435aa8d..126f6c2 100755 --- a/include/main.h +++ b/include/main.h @@ -80,7 +80,6 @@ extern void (*gUnknown_02017BD0)(void); extern void (*gUnknown_02017BD4)(void); extern StateFunc gMainFuncs[]; extern struct OamData gOamBuffer[128]; -extern u16 gUnknown_03005C00[0x600]; void sub_24C(void); void sub_2B4(void); diff --git a/include/variables.h b/include/variables.h index d8efc57..92bf425 100644 --- a/include/variables.h +++ b/include/variables.h @@ -3,10 +3,14 @@ // Place all external variable declarations in this file +extern u16 gUnknown_0201A520[]; +extern u16 gUnknown_0201AD20[]; +extern u32 gUnknown_0201A500[]; +extern u16 gUnknown_0201A920[]; extern u8 gUnknown_03000000[]; //extern ? gOamBuffer; //extern ? IntrMain_Buffer; -//extern ? gUnknown_03005C00; +extern u16 gUnknown_03005C00[0x600]; //extern ? SoundMainRAM_Buffer; extern u16 sGbPlayerCurKeys; extern u16 sGbPlayerPrevKeys; diff --git a/ld_script.txt b/ld_script.txt index 2f53a9e..a2f1ac2 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -40,7 +40,7 @@ SECTIONS asm/field_select.o(.text); asm/intro.o(.text); asm/high_scores.o(.text); - asm/rom_1068C.o(.text); + src/rom_1068C.o(.text); src/titlescreen.o(.text); asm/rom_11B9C.o(.text); src/rom_3219C.o(.text); diff --git a/src/rom_1068C.c b/src/rom_1068C.c new file mode 100644 index 0000000..4a5e619 --- /dev/null +++ b/src/rom_1068C.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "main.h" + +void sub_1068C(int a, int b, int c, int d, u16 e) +{ + u16 i; + u16 j; + + for (i = 0; i < d; i++) + { + for (j = 0; j < c; j++) + { + u16 index = b * 32 + a + i * 32 + j; + + gUnknown_03005C00[index] = (gUnknown_03005C00[index] & 0xFFF) | (e << 12); + } + } +} + +// This requires volatile parameters to match. There is no reason, *ever*, to do this. +void sub_10708(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY) +{ + int i; + + for (i = 0; i < numTilesY; i++) + { + DmaCopy16(3, (u8 *)src + 0x400 * i, (u8 *)dest + 0x400 * i, numTilesX * 32); + } +} + +void sub_10750(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY) +{ + int i; + + for (i = 0; i < numTilesY; i++) + { + DmaCopy16(3, (u8 *)src + 0x40 * i, (u8 *)dest + 0x40 * i, numTilesX * 2); + } +} + +void sub_10798(void *a, void *b, void (*func)(void)) +{ + u16 i; + + DmaCopy16(3, a, gUnknown_0201A920, 0x200); + DmaCopy16(3, b, gUnknown_0201A920 + 0x200, 0x200); + DmaFill16(3, 0x7FFF, gUnknown_0201A920 - 0x200, 0x400); + DmaCopy16(3, gUnknown_0201A920 - 0x200, gUnknown_0201A920 + 0x200, 0x400); + DmaCopy16(3, gUnknown_0201A920 + 0x200, (void *)PLTT, 0x400); + + sub_1050C(); + gMain.unk16 = REG_DISPCNT; + + for (i = 0; i <= 32; i += 16) + { + if (func != NULL) + func(); + sub_1001C(i); + sub_D74(); + if (i == 32) + { + DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400); + } + else + { + DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400); + } + } +} + +void sub_10860(void (*func)(void)) +{ + u16 i; + + DmaCopy16(3, (void *)PLTT, gUnknown_0201A520, 0x400); + DmaFill16(3, 0x7FFF, gUnknown_0201A520 + 0x200, 0x400); + DmaCopy16(3, gUnknown_0201A520, gUnknown_0201A520 + 0x400, 0x400); + + for (i = 0; i <= 32; i += 16) + { + if (func != NULL) + func(); + sub_1001C(i); + sub_D74(); + if (i == 32) + { + DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400); + } + else + { + DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400); + } + } + sub_D74(); +} + +#ifdef NONMATCHING +// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}' +void sub_1090C(void) +{ + int i; + + for (i = 0; i < 4; i++) + gUnknown_0201A500[i] = 0; +} +#else +NAKED +void sub_1090C(void) +{ + asm_unified("\n\ + ldr r1, _08010920 @ =gUnknown_0201A500\n\ + movs r2, #0\n\ + adds r0, r1, #0\n\ + adds r0, #0xc\n\ +_08010914:\n\ + str r2, [r0]\n\ + subs r0, #4\n\ + cmp r0, r1\n\ + bge _08010914\n\ + bx lr\n\ + .align 2, 0\n\ +_08010920: .4byte gUnknown_0201A500"); +} +#endif |