summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2020-11-10 13:54:27 -0600
committerSeth Barberee <seth.barberee@gmail.com>2020-11-10 13:54:27 -0600
commit0578f4a0623b0e3078f922c37a587d6bbafdbf4d (patch)
treec7e5b9530cf4a43b322042fc030cd23999a4be1e
parentbfceb5d70946c5335d8023f7ec2d98951d33d475 (diff)
more work on music.c and few more funcs
-rw-r--r--asm/code_800C9CC.s512
-rw-r--r--asm/macros/music_voice.inc12
-rwxr-xr-xld_script.txt1
-rw-r--r--src/code_800558C.c142
-rw-r--r--src/code_800C9CC.c237
-rw-r--r--src/music.c184
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;
+}
+