diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2020-11-10 13:54:27 -0600 |
---|---|---|
committer | Seth Barberee <seth.barberee@gmail.com> | 2020-11-10 13:54:27 -0600 |
commit | 0578f4a0623b0e3078f922c37a587d6bbafdbf4d (patch) | |
tree | c7e5b9530cf4a43b322042fc030cd23999a4be1e | |
parent | bfceb5d70946c5335d8023f7ec2d98951d33d475 (diff) |
more work on music.c and few more funcs
-rw-r--r-- | asm/code_800C9CC.s | 512 | ||||
-rw-r--r-- | asm/macros/music_voice.inc | 12 | ||||
-rwxr-xr-x | ld_script.txt | 1 | ||||
-rw-r--r-- | src/code_800558C.c | 142 | ||||
-rw-r--r-- | src/code_800C9CC.c | 237 | ||||
-rw-r--r-- | src/music.c | 184 |
6 files changed, 450 insertions, 638 deletions
diff --git a/asm/code_800C9CC.s b/asm/code_800C9CC.s index 99fd217..8f34a57 100644 --- a/asm/code_800C9CC.s +++ b/asm/code_800C9CC.s @@ -5,518 +5,6 @@ .text - thumb_func_start sub_800CA38 -sub_800CA38: - push {r4,lr} - adds r4, r0, 0 - bl IsBGSong - lsls r0, 24 - cmp r0, 0 - beq _0800CA54 - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_800CAE0 - lsls r0, 16 - cmp r0, 0 - beq _0800CA70 -_0800CA54: - adds r0, r4, 0 - bl sub_800CACC - lsls r0, 24 - cmp r0, 0 - beq _0800CA74 - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_800CAE0 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _0800CA90 -_0800CA70: - movs r0, 0x1 - b _0800CA92 -_0800CA74: - adds r0, r4, 0 - bl sub_800CAAC - lsls r0, 24 - cmp r0, 0 - beq _0800CA90 - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_800CAE0 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0800CA70 -_0800CA90: - movs r0, 0 -_0800CA92: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_800CA38 - - thumb_func_start nullsub_19 -nullsub_19: - bx lr - thumb_func_end nullsub_19 - - thumb_func_start IsBGSong -IsBGSong: - push {lr} - cmp r0, 128 @ Anything less than/equal 128 is a BG song - bls _0800CAA6 - movs r0, 0 - b _0800CAA8 -_0800CAA6: - movs r0, 0x1 -_0800CAA8: - pop {r1} - bx r1 - thumb_func_end IsBGSong - - thumb_func_start sub_800CAAC -sub_800CAAC: - push {lr} - ldr r1, _0800CABC - adds r0, r1 - ldr r1, _0800CAC0 - cmp r0, r1 - bls _0800CAC4 - movs r0, 0 - b _0800CAC6 - .align 2, 0 -_0800CABC: .4byte 0xfffffed4 @ -299 -_0800CAC0: .4byte 0x0000027f -_0800CAC4: - movs r0, 0x1 -_0800CAC6: - pop {r1} - bx r1 - thumb_func_end sub_800CAAC - - thumb_func_start sub_800CACC -sub_800CACC: - push {lr} - @ Checking a table between 200 and 219... level up/trap sound effects? - subs r0, 0xC8 - cmp r0, 0x13 - bls _0800CAD8 - movs r0, 0 - b _0800CADA -_0800CAD8: - movs r0, 0x1 -_0800CADA: - pop {r1} - bx r1 - thumb_func_end sub_800CACC - - thumb_func_start sub_800CAE0 -sub_800CAE0: - lsls r0, 16 - ldr r1, _0800CAEC - lsrs r0, 13 - adds r0, r1 - ldrh r0, [r0, 0x4] - bx lr - .align 2, 0 -_0800CAEC: .4byte gSongTable - thumb_func_end sub_800CAE0 - - thumb_func_start sub_800CAF0 -sub_800CAF0: - push {lr} - lsls r0, 16 - lsrs r0, 16 - ldr r2, _0800CB0C - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldr r0, [r1] - ldrh r0, [r0, 0x4] - cmp r0, 0 - beq _0800CB10 - movs r0, 0x1 - b _0800CB12 - .align 2, 0 -_0800CB0C: .4byte gMPlayTable -_0800CB10: - movs r0, 0 -_0800CB12: - pop {r1} - bx r1 - thumb_func_end sub_800CAF0 - - thumb_func_start nullsub_20 -nullsub_20: - bx lr - thumb_func_end nullsub_20 - - thumb_func_start nullsub_21 -nullsub_21: - bx lr - thumb_func_end nullsub_21 - - thumb_func_start sub_800CB20 -sub_800CB20: - push {lr} - bl sub_800BA5C - ldr r1, _0800CB48 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldr r0, _0800CB4C - ldrh r1, [r0] - movs r0, 0x5 - ands r0, r1 - cmp r0, 0 - beq _0800CB3E - bl Random -_0800CB3E: - bl Random - pop {r0} - bx r0 - .align 2, 0 -_0800CB48: .4byte gUnknown_203B0B8 -_0800CB4C: .4byte gUnknown_203B0BC - thumb_func_end sub_800CB20 - - thumb_func_start sub_800CB50 -sub_800CB50: - ldr r0, _0800CB58 - ldr r0, [r0] - bx lr - .align 2, 0 -_0800CB58: .4byte gUnknown_203B0B8 - thumb_func_end sub_800CB50 - - thumb_func_start nullsub_180 -nullsub_180: - bx lr - thumb_func_end nullsub_180 - - thumb_func_start xxx_call_update_bg_sound_input -xxx_call_update_bg_sound_input: - push {lr} - bl xxx_update_bg_sound_input - pop {r0} - bx r0 - thumb_func_end xxx_call_update_bg_sound_input - - thumb_func_start nullsub_181 -nullsub_181: - bx lr - thumb_func_end nullsub_181 - - thumb_func_start sub_800CB70 -sub_800CB70: - movs r0, 0 - bx lr - thumb_func_end sub_800CB70 - - thumb_func_start ReadKeyInput -ReadKeyInput: - push {r4,lr} - adds r2, r0, 0 - ldr r0, _0800CC38 - ldrh r1, [r0] - ldr r3, _0800CC3C - adds r0, r3, 0 - adds r3, r0, 0 - eors r3, r1 - movs r0, 0 - strh r0, [r2] - movs r1, 0x40 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0800CB94 - strh r1, [r2] -_0800CB94: - movs r0, 0x80 - ands r0, r3 - cmp r0, 0 - beq _0800CBA4 - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] -_0800CBA4: - movs r0, 0x20 - ands r0, r3 - cmp r0, 0 - beq _0800CBB4 - ldrh r0, [r2] - movs r1, 0x20 - orrs r0, r1 - strh r0, [r2] -_0800CBB4: - movs r0, 0x10 - ands r0, r3 - cmp r0, 0 - beq _0800CBC4 - ldrh r0, [r2] - movs r1, 0x10 - orrs r0, r1 - strh r0, [r2] -_0800CBC4: - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _0800CBD4 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] -_0800CBD4: - movs r0, 0x2 - ands r0, r3 - cmp r0, 0 - beq _0800CBE4 - ldrh r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strh r0, [r2] -_0800CBE4: - movs r0, 0x8 - ands r0, r3 - cmp r0, 0 - beq _0800CBF4 - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] -_0800CBF4: - movs r0, 0x4 - ands r0, r3 - cmp r0, 0 - beq _0800CC04 - ldrh r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strh r0, [r2] -_0800CC04: - movs r4, 0x80 - lsls r4, 1 - adds r0, r3, 0 - ands r0, r4 - cmp r0, 0 - beq _0800CC18 - ldrh r1, [r2] - adds r0, r4, 0 - orrs r0, r1 - strh r0, [r2] -_0800CC18: - movs r4, 0x80 - lsls r4, 2 - adds r0, r3, 0 - ands r0, r4 - cmp r0, 0 - beq _0800CC2C - ldrh r1, [r2] - adds r0, r4, 0 - orrs r0, r1 - strh r0, [r2] -_0800CC2C: - ldr r0, _0800CC40 - strh r3, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800CC38: .4byte 0x04000130 -_0800CC3C: .4byte 0x000003ff -_0800CC40: .4byte gUnknown_203B0BC - thumb_func_end ReadKeyInput - - thumb_func_start sub_800CC44 -sub_800CC44: - push {lr} - adds r2, r1, 0 - cmp r0, 0 - bge _0800CC50 - movs r0, 0 - b _0800CC56 -_0800CC50: - cmp r0, 0x10 - ble _0800CC56 - movs r0, 0x10 -_0800CC56: - cmp r2, 0 - bge _0800CC5E - movs r2, 0 - b _0800CC64 -_0800CC5E: - cmp r2, 0x10 - ble _0800CC64 - movs r2, 0x10 -_0800CC64: - ldr r1, _0800CC7C - strb r0, [r1] - ldr r0, _0800CC80 - strb r2, [r0] - ldr r2, _0800CC84 - ldrb r1, [r1] - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0800CC7C: .4byte gUnknown_202D6B8 -_0800CC80: .4byte gUnknown_202D6B9 -_0800CC84: .4byte gUnknown_202D7FA - thumb_func_end sub_800CC44 - - thumb_func_start sub_800CC88 -sub_800CC88: - ldr r2, _0800CC90 - strh r0, [r2, 0x4] - strh r1, [r2, 0x6] - bx lr - .align 2, 0 -_0800CC90: .4byte gUnknown_202D698 - thumb_func_end sub_800CC88 - - thumb_func_start sub_800CC94 -sub_800CC94: - ldr r2, _0800CC9C - strh r0, [r2, 0x4] - strh r1, [r2, 0x6] - bx lr - .align 2, 0 -_0800CC9C: .4byte gUnknown_202D6A0 - thumb_func_end sub_800CC94 - - thumb_func_start sub_800CCA0 -sub_800CCA0: - ldr r2, _0800CCA8 - strh r0, [r2, 0x4] - strh r1, [r2, 0x6] - bx lr - .align 2, 0 -_0800CCA8: .4byte gUnknown_202D6A8 - thumb_func_end sub_800CCA0 - - thumb_func_start sub_800CCAC -sub_800CCAC: - ldr r2, _0800CCB4 - strh r0, [r2, 0x4] - strh r1, [r2, 0x6] - bx lr - .align 2, 0 -_0800CCB4: .4byte gUnknown_202D6B0 - thumb_func_end sub_800CCAC - - thumb_func_start sub_800CCB8 -sub_800CCB8: - push {lr} - cmp r0, 0x1 - beq _0800CCD4 - cmp r0, 0x1 - ble _0800CCCA - cmp r0, 0x2 - beq _0800CCDE - cmp r0, 0x3 - beq _0800CCE8 -_0800CCCA: - adds r0, r1, 0 - adds r1, r2, 0 - bl sub_800CC88 - b _0800CCF0 -_0800CCD4: - adds r0, r1, 0 - adds r1, r2, 0 - bl sub_800CC94 - b _0800CCF0 -_0800CCDE: - adds r0, r1, 0 - adds r1, r2, 0 - bl sub_800CCA0 - b _0800CCF0 -_0800CCE8: - adds r0, r1, 0 - adds r1, r2, 0 - bl sub_800CCAC -_0800CCF0: - pop {r0} - bx r0 - thumb_func_end sub_800CCB8 - - thumb_func_start sub_800CCF4 -sub_800CCF4: - push {lr} - cmp r0, 0x1 - beq _0800CD10 - cmp r0, 0x1 - ble _0800CD06 - cmp r0, 0x2 - beq _0800CD18 - cmp r0, 0x3 - beq _0800CD20 -_0800CD06: - ldr r0, _0800CD0C - b _0800CD22 - .align 2, 0 -_0800CD0C: .4byte gUnknown_202D698 -_0800CD10: - ldr r0, _0800CD14 - b _0800CD22 - .align 2, 0 -_0800CD14: .4byte gUnknown_202D6A0 -_0800CD18: - ldr r0, _0800CD1C - b _0800CD22 - .align 2, 0 -_0800CD1C: .4byte gUnknown_202D6A8 -_0800CD20: - ldr r0, _0800CD28 -_0800CD22: - strh r1, [r0, 0x4] - pop {r0} - bx r0 - .align 2, 0 -_0800CD28: .4byte gUnknown_202D6B0 - thumb_func_end sub_800CCF4 - - thumb_func_start sub_800CD2C -sub_800CD2C: - push {lr} - cmp r0, 0x1 - beq _0800CD48 - cmp r0, 0x1 - ble _0800CD3E - cmp r0, 0x2 - beq _0800CD50 - cmp r0, 0x3 - beq _0800CD58 -_0800CD3E: - ldr r0, _0800CD44 - b _0800CD5A - .align 2, 0 -_0800CD44: .4byte gUnknown_202D698 -_0800CD48: - ldr r0, _0800CD4C - b _0800CD5A - .align 2, 0 -_0800CD4C: .4byte gUnknown_202D6A0 -_0800CD50: - ldr r0, _0800CD54 - b _0800CD5A - .align 2, 0 -_0800CD54: .4byte gUnknown_202D6A8 -_0800CD58: - ldr r0, _0800CD60 -_0800CD5A: - strh r1, [r0, 0x6] - pop {r0} - bx r0 - .align 2, 0 -_0800CD60: .4byte gUnknown_202D6B0 - thumb_func_end sub_800CD2C - thumb_func_start sub_800CD64 sub_800CD64: ldr r2, _0800CD7C diff --git a/asm/macros/music_voice.inc b/asm/macros/music_voice.inc index 64dd382..7dd6c74 100644 --- a/asm/macros/music_voice.inc +++ b/asm/macros/music_voice.inc @@ -138,15 +138,3 @@ .4byte \voice_group_pointer .4byte 0 .endm - - .macro cry sample:req - .byte 0x20, 60, 0, 0 - .4byte \sample - .byte 0xff, 0, 0xff, 0 - .endm - - .macro cry2 sample:req - .byte 0x30, 60, 0, 0 - .4byte \sample - .byte 0xff, 0, 0xff, 0 - .endm diff --git a/ld_script.txt b/ld_script.txt index a2985df..19f31e4 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -74,6 +74,7 @@ SECTIONS { src/code_800B5F0.o(.text); asm/code_800B5F0.o(.text); src/music.o(.text); + src/code_800C9CC.o(.text); asm/code_800C9CC.o(.text); src/flash.o(.text); asm/code_800D090.o(.text); diff --git a/src/code_800558C.c b/src/code_800558C.c index 4cc90e9..13e3255 100644 --- a/src/code_800558C.c +++ b/src/code_800558C.c @@ -6,146 +6,68 @@ extern u32 gUnknown_203B47C; extern u8 gUnknown_2026E38; extern u32 gUnknown_2026E3C; extern u16 gUnknown_2026E4E; -extern u32 gUnknown_2026E50; -extern u32 gUnknown_2026E54; +extern bool32 gUnknown_2026E50; +extern bool32 gUnknown_2026E54; extern u32 gUnknown_2026E58; -extern void sub_800CC44(u32 r0, u32 r1); +extern void sub_800CC44(s32 r0, s32 r1); // Unused -#ifndef NONMATCHING -NAKED -#endif void sub_80060A8(void) { -#ifdef NONMATCHING - // TODO ordering of statements is wrong but regs are good so f*** it. - // My mv/ldr stuff for temp is out of order - u32 temp; + + bool32 temp; + bool32 preload; + bool32 preload2; + gUnknown_2026E3C = gUnknown_2026E58; - temp = 0; - if (gUnknown_2026E54 == 0) + preload = gUnknown_2026E54; + temp = FALSE; + if (!gUnknown_2026E54) { - temp = 1; + temp = TRUE; } gUnknown_2026E54 = temp; - temp = 0; - - if (gUnknown_2026E50 == 0) + preload2 = gUnknown_2026E50; + temp = FALSE; + if (!gUnknown_2026E50) { - temp = 1; + temp = TRUE; } gUnknown_2026E50 = temp; - gUnknown_2026E38 = 0; -#else - asm_unified("\tpush {lr}\n" - "\tldr r1, _080060D8\n" - "\tldr r0, _080060DC\n" - "\tldr r0, [r0]\n" - "\tstr r0, [r1]\n" - "\tldr r2, _080060E0\n" - "\tmovs r1, 0\n" - "\tldr r0, [r2]\n" - "\tcmp r0, 0\n" - "\tbne _080060BE\n" - "\tmovs r1, 0x1\n" -"_080060BE:\n" - "\tstr r1, [r2]\n" - "\tldr r2, _080060E4\n" - "\tmovs r1, 0\n" - "\tldr r0, [r2]\n" - "\tcmp r0, 0\n" - "\tbne _080060CC\n" - "\tmovs r1, 0x1\n" -"_080060CC:\n" - "\tstr r1, [r2]\n" - "\tldr r1, _080060E8\n" - "\tmovs r0, 0\n" - "\tstrb r0, [r1]\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_080060D8: .4byte gUnknown_2026E3C\n" -"_080060DC: .4byte gUnknown_2026E58\n" -"_080060E0: .4byte gUnknown_2026E54\n" -"_080060E4: .4byte gUnknown_2026E50\n" -"_080060E8: .4byte gUnknown_2026E38"); - -#endif + gUnknown_2026E38 = FALSE; } -#ifndef NONMATCHING -NAKED -#endif void sub_80060EC(void) { -#ifdef NONMATCHING - // TODO ordering of statements is wrong but regs are good so f*** it. - u32 temp; + bool32 temp; + bool32 preload; + bool32 preload2; + gUnknown_2026E3C = gUnknown_2026E58; - temp = 0; - if (gUnknown_2026E54 == 0) + preload = gUnknown_2026E54; + temp = FALSE; + + if (!gUnknown_2026E54) { - temp = 1; + temp = TRUE; } gUnknown_2026E54 = temp; - temp = 0; + + preload2 = gUnknown_2026E50; + temp = FALSE; - if (gUnknown_2026E50 == 0) + if (!gUnknown_2026E50) { - temp = 1; + temp = TRUE; } gUnknown_2026E50 = temp; sub_800CC44((gUnknown_2026E4E & (0xF8 << 5)) >> 8, gUnknown_2026E4E & 0x1F); - gUnknown_2026E38 = 1; -#else - asm_unified("\tpush {lr}\n" - "\tldr r1, _08006130\n" - "\tldr r0, _08006134\n" - "\tldr r0, [r0]\n" - "\tstr r0, [r1]\n" - "\tldr r2, _08006138\n" - "\tmovs r1, 0\n" - "\tldr r0, [r2]\n" - "\tcmp r0, 0\n" - "\tbne _08006102\n" - "\tmovs r1, 0x1\n" - "_08006102:\n" - "\tstr r1, [r2]\n" - "\tldr r2, _0800613C\n" - "\tmovs r1, 0\n" - "\tldr r0, [r2]\n" - "\tcmp r0, 0\n" - "\tbne _08006110\n" - "\tmovs r1, 0x1\n" - "_08006110:\n" - "\tstr r1, [r2]\n" - "\tldr r0, _08006140\n" - "\tldrh r2, [r0]\n" - "\tmovs r0, 0xF8\n" - "\tlsls r0, 5\n" - "\tands r0, r2\n" - "\tlsrs r0, 8\n" - "\tmovs r1, 0x1F\n" - "\tands r1, r2\n" - "\tbl sub_800CC44\n" - "\tldr r1, _08006144\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08006130: .4byte gUnknown_2026E3C\n" - "_08006134: .4byte gUnknown_2026E58\n" - "_08006138: .4byte gUnknown_2026E54\n" - "_0800613C: .4byte gUnknown_2026E50\n" - "_08006140: .4byte gUnknown_2026E4E\n" - "_08006144: .4byte gUnknown_2026E38"); -#endif + gUnknown_2026E38 = TRUE; } diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c new file mode 100644 index 0000000..27445f0 --- /dev/null +++ b/src/code_800C9CC.c @@ -0,0 +1,237 @@ +#include "global.h" +#include "input.h" + +struct unkStruct_809CC88 +{ + u16 padding; + u16 unk2; + u16 unk4; + u16 unk6; +}; + +extern u16 gUnknown_203B0BC; +extern u8 gUnknown_202D6B8; +extern u8 gUnknown_202D6B9; +extern u16 gUnknown_202D7FA; + +extern struct unkStruct_809CC88 gUnknown_202D698; +extern struct unkStruct_809CC88 gUnknown_202D6A0; +extern struct unkStruct_809CC88 gUnknown_202D6A8; +extern struct unkStruct_809CC88 gUnknown_202D6B0; + +void ReadKeyInput(struct UnkInputStruct1 *r0) +{ + u16 keyInput = REG_KEYINPUT ^ KEYS_MASK; + r0->unk0 = 0; + + if((keyInput & DPAD_UP) != 0) + { + r0->unk0 = DPAD_UP; + } + + if((keyInput & DPAD_DOWN) != 0) + { + r0->unk0 |= DPAD_DOWN; + } + + if((keyInput & DPAD_LEFT) != 0) + { + r0->unk0 |= DPAD_LEFT; + } + + if((keyInput & DPAD_RIGHT) != 0) + { + r0->unk0 |= DPAD_RIGHT; + } + + if((keyInput & A_BUTTON) != 0) + { + r0->unk0 |= A_BUTTON; + } + + if((keyInput & B_BUTTON) != 0) + { + r0->unk0 |= B_BUTTON; + } + + if((keyInput & START_BUTTON) != 0) + { + r0->unk0 |= START_BUTTON; + } + + if((keyInput & SELECT_BUTTON) != 0) + { + r0->unk0 |= SELECT_BUTTON; + } + + if((keyInput & R_BUTTON) != 0) + { + r0->unk0 |= R_BUTTON; + } + + if((keyInput & L_BUTTON) != 0) + { + r0->unk0 |= L_BUTTON; + } + gUnknown_203B0BC = keyInput; +} + +void sub_800CC44(s32 r0, s32 r1) +{ + u32 preload1; + u8 preload2; + u8 preload3; + + if(r0 < 0) + { + r0 = 0; + } + else + { + if(r0 > 0x10) + { + r0 = 0x10; + } + } + if(r1 < 0) + { + r1 = 0; + } + else + { + if(r1 > 0x10) + { + r1 = 0x10; + } + } + gUnknown_202D6B8 = r0; + gUnknown_202D6B9 = r1; + + // Forcing the correct loads + preload1 = gUnknown_202D7FA; + preload2 = gUnknown_202D6B8; + preload3 = gUnknown_202D6B9; + + gUnknown_202D7FA = (gUnknown_202D6B9 << 8) | gUnknown_202D6B8; + +} + +void sub_800CC88(u32 r0, u32 r1) +{ + gUnknown_202D698.unk4 = r0; + gUnknown_202D698.unk6 = r1; +} + +void sub_800CC94(u32 r0, u32 r1) +{ + gUnknown_202D6A0.unk4 = r0; + gUnknown_202D6A0.unk6 = r1; +} + +void sub_800CCA0(u32 r0, u32 r1) +{ + gUnknown_202D6A8.unk4 = r0; + gUnknown_202D6A8.unk6 = r1; +} + +void sub_800CCAC(u32 r0, u32 r1) +{ + gUnknown_202D6B0.unk4 = r0; + gUnknown_202D6B0.unk6 = r1; +} + +void sub_800CCB8(s32 r0, u32 r1, u32 r2) +{ + if(r0 == 1) + { + goto _0800CCD4; + } + if(r0 <= 1) + { + goto _0800CCCA; + } + if(r0 == 2) + { + goto _0800CCDE; + } + if(r0 == 3) + { + goto _0800CCE8; + } + + _0800CCCA: + sub_800CC88(r1, r2); + return; + _0800CCD4: + sub_800CC94(r1, r2); + return; + _0800CCDE: + sub_800CCA0(r1, r2); + return; + _0800CCE8: + sub_800CCAC(r1, r2); +} + +void sub_800CCF4(s32 r0, u32 r1) +{ + if(r0 == 1) + { + goto _0800CD10; + } + if(r0 <= 1) + { + goto _0800CD06; + } + if(r0 == 2) + { + goto _0800CD18; + } + if(r0 == 3) + { + goto _0800CD20; + } + + _0800CD06: + gUnknown_202D698.unk4 = r1; + return; + _0800CD10: + gUnknown_202D6A0.unk4 = r1; + return; + _0800CD18: + gUnknown_202D6A8.unk4 = r1; + return; + _0800CD20: + gUnknown_202D6B0.unk4 = r1; +} + +void sub_800CD2C(s32 r0, u32 r1) +{ + if(r0 == 1) + { + goto _0800CD48; + } + if(r0 <= 1) + { + goto _0800CD3E; + } + if(r0 == 2) + { + goto _0800CD50; + } + if(r0 == 3) + { + goto _0800CD58; + } + + _0800CD3E: + gUnknown_202D698.unk6 = r1; + return; + _0800CD48: + gUnknown_202D6A0.unk6 = r1; + return; + _0800CD50: + gUnknown_202D6A8.unk6 = r1; + return; + _0800CD58: + gUnknown_202D6B0.unk6 = r1; +} diff --git a/src/music.c b/src/music.c index b6fed30..7767f16 100644 --- a/src/music.c +++ b/src/music.c @@ -1,6 +1,8 @@ #include "global.h" #include "gba/m4a_internal.h" +#define NUM_BG_SONGS 128 + extern u8 sub_80023E4(u32); extern void sub_80118C4(u16); extern void sub_809C730(); @@ -13,18 +15,23 @@ extern void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo); extern void m4aSoundVSyncOff(); extern void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo); -extern u16 sub_800CAE0(u16); -extern u8 sub_800CACC(u32); -extern u8 sub_800CAAC(u32); extern void sub_800C3F8(u16, u16); - +extern void Random(); +extern void sub_800BA5C(); +extern void xxx_update_bg_sound_input(); extern u16 gUnknown_202D690; extern u16 gUnknown_202D68A; extern u16 gUnknown_202D688; extern u8 gUnknown_202D694; +extern u32 gUnknown_203B0B8; +extern u16 gUnknown_203B0BC; extern struct MusicPlayerInfo gUnknown_20008F0; +bool8 IsBGSong(u32); +bool8 sub_800CAAC(u32); +bool8 sub_800CACC(u32); +u16 sub_800CAE0(u16); void sub_800C93C(void) { @@ -98,3 +105,172 @@ void nullsub_179(void) { } +#ifndef NONMATCHING +NAKED +#endif +u8 sub_800CA38(u32 songIndex) +{ +#ifdef NONMATCHING + if(IsBGSong(songIndex)) + { + if(sub_800CAE0(songIndex) == 0) + { + return 1; + } + } + if(sub_800CACC(songIndex)) + { + // TODO compiler gets weird here wanted to skip to next check + if(sub_800CAE0(songIndex) == 1) + { + _0800CA70: + return 1; + } + } + if(sub_800CAAC(songIndex)) + { + if((sub_800CAE0(songIndex) > 1)) + { + goto _0800CA70; + } + } + return 0; +#else + asm_unified("\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tbl IsBGSong\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA54\n" + "\tlsls r0, r4, 16\n" + "\tlsrs r0, 16\n" + "\tbl sub_800CAE0\n" + "\tlsls r0, 16\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA70\n" +"_0800CA54:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_800CACC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA74\n" + "\tlsls r0, r4, 16\n" + "\tlsrs r0, 16\n" + "\tbl sub_800CAE0\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x1\n" + "\tbne _0800CA90\n" +"_0800CA70:\n" + "\tmovs r0, 0x1\n" + "\tb _0800CA92\n" +"_0800CA74:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_800CAAC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0800CA90\n" + "\tlsls r0, r4, 16\n" + "\tlsrs r0, 16\n" + "\tbl sub_800CAE0\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x1\n" + "\tbhi _0800CA70\n" +"_0800CA90:\n" + "\tmovs r0, 0\n" +"_0800CA92:\n" + "\tpop {r4}\n" + "\tpop {r1}\n" + "\tbx r1"); +#endif +} + +void nullsub_19(void) +{ +} + +bool8 IsBGSong(u32 songIndex) +{ + if(songIndex <= NUM_BG_SONGS) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_800CAAC(u32 songIndex) +{ + if(songIndex - 300 <= 639) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_800CACC(u32 songIndex) +{ + if(songIndex - 200 <= 19) + { + return TRUE; + } + return FALSE; +} + +u16 sub_800CAE0(u16 songIndex) +{ + return gSongTable[songIndex].ms; +} + +bool8 sub_800CAF0(u16 songIndex) +{ + // Had to cast this.. m4a_internal header has this as u32 + if((u16)gMPlayTable[songIndex].info->status == 0) + { + return 0; + } + return 1; +} + +void nullsub_20(void) +{ +} + +void nullsub_21(void) +{ +} + +void sub_800CB20(void) +{ + sub_800BA5C(); + gUnknown_203B0B8++; + if((gUnknown_203B0BC & 5) != 0) + { + Random(); + } + Random(); +} + +u32 sub_800CB50(void) +{ + return gUnknown_203B0B8; +} + +void nullsub_180(void) +{ +} + +void xxx_call_update_bg_sound_input(void) +{ + xxx_update_bg_sound_input(); +} + +void nullsub_181(void) +{ +} + +u32 sub_800CB70(void) +{ + return 0; +} + |