summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com>2018-11-20 13:17:30 +0800
committernullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com>2018-11-20 15:04:02 +0800
commitc7045ae3694f677b634f3908c1ea935c2998727e (patch)
treeb4aa509751cfa3d71897ae9442c39875db8cbc21
parentf4ef62bb4134498a4b4a9c4d61b99bda24c98680 (diff)
Identify, split, decompile m4a, and more
ResetSprites, gCharMemCursor, gSpriteCount; analysed subheaps; identified more file pointers
-rwxr-xr-xMakefile3
-rw-r--r--asm/code.s4
-rw-r--r--asm/code_800B540.s100
-rw-r--r--asm/code_800D090.s4
-rw-r--r--asm/code_8012A18.s32
-rw-r--r--asm/m4a.s4627
-rw-r--r--asm/m4a_1.s1647
-rw-r--r--asm/m4a_2.s70
-rw-r--r--asm/m4a_3.s574
-rw-r--r--asm/sprite.s22
-rw-r--r--data/data_80B9BB8.s39
-rw-r--r--data/sound_data.s8
-rw-r--r--include/memory.h6
-rwxr-xr-xld_script.txt28
-rw-r--r--src/bg_palette_buffer.c6
-rw-r--r--src/m4a_2.c834
-rw-r--r--src/m4a_4.c384
-rw-r--r--src/m4a_tables.c223
-rw-r--r--src/memory.c12
-rw-r--r--src/save1.c2
-rw-r--r--src/sprite.c6
-rw-r--r--sym_ewram.txt11
-rw-r--r--sym_ewram2.txt11
23 files changed, 3858 insertions, 4795 deletions
diff --git a/Makefile b/Makefile
index 59e6caf..b998e1e 100755
--- a/Makefile
+++ b/Makefile
@@ -60,6 +60,9 @@ $(BUILD_DIR)/src/agb_flash.o : CC1FLAGS := -O -mthumb-interwork
$(BUILD_DIR)/src/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork
$(BUILD_DIR)/src/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork
+$(BUILD_DIR)/src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc
+$(BUILD_DIR)/src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc
+
#### Main Rules ####
ALL_BUILDS := red
diff --git a/asm/code.s b/asm/code.s
index ba969d1..8a85646 100644
--- a/asm/code.s
+++ b/asm/code.s
@@ -198,7 +198,7 @@ _08000406:
movs r0, 0x2
bl sub_800A8F8
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl xxx_update_some_bg_tiles
bl sub_80097B0
@@ -431,7 +431,7 @@ xxx_update_stuff:
bl sub_8009908
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r0}
bx r0
.align 2, 0
diff --git a/asm/code_800B540.s b/asm/code_800B540.s
index 1f7afbc..85105f7 100644
--- a/asm/code_800B540.s
+++ b/asm/code_800B540.s
@@ -1062,7 +1062,7 @@ sub_800BD08:
ands r3, r1
strh r3, [r0, 0xA]
ldrh r0, [r0, 0xA]
- bl sub_80AEF24
+ bl m4aSoundInit
ldr r0, _0800BDB8
movs r2, 0
strh r2, [r0]
@@ -1184,7 +1184,7 @@ _0800BE4C:
movs r0, 0x1
strh r0, [r1]
adds r0, r6, 0
- bl sub_80AEFA8
+ bl m4aSongNumStart
_0800BE70:
cmp r4, 0
beq _0800BE78
@@ -1258,19 +1258,19 @@ _0800BEE0:
movs r1, 0x1
strh r1, [r0]
adds r0, r6, 0
- bl sub_80AEFA8
+ bl m4aSongNumStart
ldr r4, _0800BF44
adds r0, r4, 0
- bl sub_80AF198
+ bl m4aMPlayImmInit
adds r0, r4, 0
movs r1, 0xFF
movs r2, 0
- bl sub_80AFF50
+ bl m4aMPlayVolumeControl
adds r0, r6, 0
- bl sub_80AF074
+ bl m4aSongNumStop
adds r0, r4, 0
adds r1, r5, 0
- bl sub_80AF170
+ bl m4aMPlayFadeIn
_0800BF26:
cmp r7, 0
beq _0800BF2E
@@ -1333,7 +1333,7 @@ sub_800BF80:
cmp r1, r0
beq _0800BFA2
ldr r0, _0800BFC8
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800BFA2:
ldr r0, _0800BFC0
ldr r2, _0800BFC4
@@ -1392,7 +1392,7 @@ _0800BFE8:
strh r0, [r1]
ldr r0, _0800C028
adds r1, r4, 0
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C044
.align 2, 0
_0800C018: .4byte gUnknown_202D690
@@ -1403,7 +1403,7 @@ _0800C028: .4byte gUnknown_20008F0
_0800C02C:
strh r2, [r3]
ldr r0, _0800C038
- bl sub_80AF7C0
+ bl m4aMPlayStop
b _0800C044
.align 2, 0
_0800C038: .4byte gUnknown_20008F0
@@ -1506,7 +1506,7 @@ _0800C0B4:
strb r2, [r0]
ldr r0, _0800C11C
movs r1, 0x1
- bl sub_80AF150
+ bl m4aMPlayFadeOutTemporarily
b _0800C15E
.align 2, 0
_0800C0FC: .4byte 0x000003e5
@@ -1529,9 +1529,9 @@ _0800C12C:
movs r0, 0x3
strh r0, [r4]
ldr r0, _0800C140
- bl sub_80AF7C0
+ bl m4aMPlayStop
ldrh r0, [r6]
- bl sub_80AEFA8
+ bl m4aSongNumStart
b _0800C15E
.align 2, 0
_0800C140: .4byte gUnknown_20008F0
@@ -1542,9 +1542,9 @@ _0800C144:
cmp r0, 0x1
bls _0800C15E
ldr r0, _0800C17C
- bl sub_80AF7C0
+ bl m4aMPlayStop
ldrh r0, [r6]
- bl sub_80AEFA8
+ bl m4aSongNumStart
movs r0, 0x3
_0800C15C:
strh r0, [r4]
@@ -1618,7 +1618,7 @@ _0800C1DC:
lsls r0, 24
lsrs r5, r0, 24
mov r0, r8
- bl sub_80AEFA8
+ bl m4aSongNumStart
movs r0, 0x1
strh r0, [r4]
mov r0, r8
@@ -1693,7 +1693,7 @@ _0800C22C:
mov r0, r8
movs r1, 0xF
adds r2, r7, 0
- bl sub_80AFF50
+ bl m4aMPlayVolumeControl
_0800C27E:
cmp r6, 0
beq _0800C286
@@ -1705,7 +1705,7 @@ _0800C286:
pop {r0}
bx r0
.align 2, 0
-_0800C290: .4byte gUnknown_9E8665C
+_0800C290: .4byte gMPlayTable
_0800C294: .4byte gUnknown_3000FD8
thumb_func_end sub_800C214
@@ -1736,7 +1736,7 @@ sub_800C298:
movs r5, 0x4
_0800C2C8:
ldr r0, [r6]
- bl sub_80AF7C0
+ bl m4aMPlayStop
strh r7, [r4]
mov r2, r8
strh r2, [r4, 0x2]
@@ -1756,7 +1756,7 @@ _0800C2C8:
.align 2, 0
_0800C2F0: .4byte 0x000003e5
_0800C2F4: .4byte gUnknown_3000FE8
-_0800C2F8: .4byte gUnknown_9E8665C
+_0800C2F8: .4byte gMPlayTable
_0800C2FC:
adds r0, r5, 0
bl sub_800CAAC
@@ -1782,7 +1782,7 @@ _0800C2FC:
bl nullsub_21
b _0800C3DE
.align 2, 0
-_0800C330: .4byte gUnknown_9E8665C
+_0800C330: .4byte gMPlayTable
_0800C334: .4byte gUnknown_3000FD8
_0800C338:
bl sub_800B620
@@ -1792,7 +1792,7 @@ _0800C338:
cmp r0, r5
bne _0800C35A
adds r0, r7, 0
- bl sub_80AF7C0
+ bl m4aMPlayStop
movs r1, 0
movs r0, 0
strh r0, [r4]
@@ -1823,7 +1823,7 @@ _0800C364:
mov r0, r8
strh r0, [r1]
ldr r0, _0800C3A4
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C38C:
cmp r4, 0
beq _0800C3DE
@@ -1854,7 +1854,7 @@ _0800C3A8:
mov r2, r8
strh r2, [r1]
ldr r0, _0800C3F4
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C3D6:
cmp r4, 0
beq _0800C3DE
@@ -1924,15 +1924,15 @@ _0800C43E:
beq _0800C46C
ldr r0, [r6]
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C47E
.align 2, 0
_0800C460: .4byte 0x000003e5
_0800C464: .4byte gUnknown_3000FE8
-_0800C468: .4byte gUnknown_9E8665C
+_0800C468: .4byte gMPlayTable
_0800C46C:
ldr r0, [r6]
- bl sub_80AF7C0
+ bl m4aMPlayStop
strh r4, [r5]
mov r1, r8
strh r1, [r5, 0x2]
@@ -1985,14 +1985,14 @@ _0800C496:
beq _0800C4EC
adds r0, r6, 0
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C4FE
.align 2, 0
_0800C4E4: .4byte gUnknown_3000FD8
-_0800C4E8: .4byte gUnknown_9E8665C
+_0800C4E8: .4byte gMPlayTable
_0800C4EC:
adds r0, r6, 0
- bl sub_80AF7C0
+ bl m4aMPlayStop
movs r0, 0
strh r4, [r5]
mov r1, r8
@@ -2026,7 +2026,7 @@ _0800C508:
beq _0800C54C
ldr r0, _0800C548
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C556
.align 2, 0
_0800C53C: .4byte 0x000003e6
@@ -2035,7 +2035,7 @@ _0800C544: .4byte gUnknown_202D68E
_0800C548: .4byte gUnknown_2000970
_0800C54C:
ldr r0, _0800C560
- bl sub_80AF7C0
+ bl m4aMPlayStop
mov r0, r8
strh r0, [r4]
_0800C556:
@@ -2069,7 +2069,7 @@ _0800C564:
beq _0800C5AC
ldr r0, _0800C5A8
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C5B6
.align 2, 0
_0800C5A0: .4byte gUnknown_202D690
@@ -2077,7 +2077,7 @@ _0800C5A4: .4byte gUnknown_202D68E
_0800C5A8: .4byte gUnknown_2000970
_0800C5AC:
ldr r0, _0800C5CC
- bl sub_80AF7C0
+ bl m4aMPlayStop
mov r1, r8
strh r1, [r5]
_0800C5B6:
@@ -2246,7 +2246,7 @@ _0800C6D8:
beq _0800C718
ldrh r0, [r2]
_0800C6E4:
- bl sub_80AEFA8
+ bl m4aSongNumStart
movs r0, 0x3
strh r0, [r4]
b _0800C8A2
@@ -2297,7 +2297,7 @@ _0800C74C: .4byte gUnknown_202D68E
_0800C750: .4byte 0x000003e5
_0800C754:
ldr r0, _0800C76C
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C75A:
ldr r1, _0800C770
ldrh r0, [r1]
@@ -2324,7 +2324,7 @@ _0800C774:
cmp r0, 0
beq _0800C7A4
ldrh r0, [r3]
- bl sub_80AEFA8
+ bl m4aSongNumStart
b _0800C7BE
.align 2, 0
_0800C794: .4byte gUnknown_202D68A
@@ -2334,7 +2334,7 @@ _0800C7A0: .4byte gUnknown_202D694
_0800C7A4:
ldr r0, _0800C7B0
movs r1, 0x4
- bl sub_80AF170
+ bl m4aMPlayFadeIn
b _0800C7BE
.align 2, 0
_0800C7B0: .4byte gUnknown_20008F0
@@ -2342,7 +2342,7 @@ _0800C7B4:
ldr r0, _0800C7CC
strh r2, [r0]
ldr r0, _0800C7D0
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C7BE:
ldr r1, _0800C7D4
movs r0, 0
@@ -2402,7 +2402,7 @@ _0800C834: .4byte gUnknown_202D68A
_0800C838: .4byte 0x000003e7
_0800C83C:
ldr r0, _0800C854
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C842:
ldr r1, _0800C858
movs r0, 0
@@ -2436,7 +2436,7 @@ _0800C864:
ldr r0, _0800C898
strh r2, [r0]
adds r0, r1, 0
- bl sub_80AEFA8
+ bl m4aSongNumStart
strh r4, [r6]
b _0800C8A2
.align 2, 0
@@ -2503,10 +2503,10 @@ _0800C8F0:
ldr r0, [r0]
ldrh r2, [r4, 0x4]
movs r1, 0xFF
- bl sub_80AFF50
+ bl m4aMPlayVolumeControl
b _0800C926
.align 2, 0
-_0800C918: .4byte gUnknown_9E8665C
+_0800C918: .4byte gMPlayTable
_0800C91C:
strh r0, [r4]
mov r1, r8
@@ -2579,8 +2579,8 @@ _0800C9A8:
strh r0, [r4]
_0800C9AC:
ldr r0, _0800C9C8
- bl sub_80AF7C0
- bl sub_80AF5AC
+ bl m4aMPlayStop
+ bl m4aSoundVSyncOff
cmp r5, 0
beq _0800C9BE
bl sub_800B5F0
@@ -2599,7 +2599,7 @@ sub_800C9CC:
bl sub_800B620
lsls r0, 24
lsrs r4, r0, 24
- bl sub_80AF628
+ bl m4aSoundVSyncOn
ldr r0, _0800CA08
ldrh r0, [r0]
cmp r0, 0
@@ -2620,7 +2620,7 @@ sub_800C9CC:
cmp r0, 0
beq _0800CA1C
ldrh r0, [r2]
- bl sub_80AEFA8
+ bl m4aSongNumStart
b _0800CA22
.align 2, 0
_0800CA08: .4byte gUnknown_202D690
@@ -2630,7 +2630,7 @@ _0800CA14: .4byte gUnknown_202D688
_0800CA18: .4byte gUnknown_202D694
_0800CA1C:
ldr r0, _0800CA30
- bl sub_80AF108
+ bl m4aMPlayContinue
_0800CA22:
cmp r4, 0
beq _0800CA2A
@@ -2762,7 +2762,7 @@ sub_800CAE0:
ldrh r0, [r0, 0x4]
bx lr
.align 2, 0
-_0800CAEC: .4byte gUnknown_9E866BC
+_0800CAEC: .4byte gSongTable
thumb_func_end sub_800CAE0
thumb_func_start sub_800CAF0
@@ -2782,7 +2782,7 @@ sub_800CAF0:
movs r0, 0x1
b _0800CB12
.align 2, 0
-_0800CB0C: .4byte gUnknown_9E8665C
+_0800CB0C: .4byte gMPlayTable
_0800CB10:
movs r0, 0
_0800CB12:
diff --git a/asm/code_800D090.s b/asm/code_800D090.s
index 583fe83..4f43b66 100644
--- a/asm/code_800D090.s
+++ b/asm/code_800D090.s
@@ -7661,7 +7661,7 @@ sub_8010960:
bl xxx_call_update_bg_sound_input
bl sub_8011860
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r4-r6}
pop {r0}
bx r0
@@ -9290,7 +9290,7 @@ sub_801169C:
bl xxx_call_update_bg_sound_input
bl sub_8011860
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
add sp, 0x8
pop {r4-r6}
pop {r0}
diff --git a/asm/code_8012A18.s b/asm/code_8012A18.s
index b1327f4..e462a67 100644
--- a/asm/code_8012A18.s
+++ b/asm/code_8012A18.s
@@ -25,7 +25,7 @@ sub_8012A18:
bl sub_8009908
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r0}
bx r0
.align 2, 0
@@ -17484,7 +17484,7 @@ sub_801B3C0:
push {r4,r5,lr}
adds r5, r0, 0
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
ldr r4, _0801B40C
movs r0, 0x94
movs r1, 0x8
@@ -19806,7 +19806,7 @@ sub_801C620:
lsls r4, 24
lsrs r4, 24
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
ldr r5, _0801C670
movs r0, 0x94
movs r1, 0x8
@@ -26163,7 +26163,7 @@ sub_801F808:
push {r4,r5,lr}
adds r4, r0, 0
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
ldr r5, _0801F88C
movs r0, 0xD4
movs r1, 0x8
@@ -41273,7 +41273,7 @@ _0802706E:
sub_8027074:
push {r4,lr}
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
ldr r4, _080270A0
movs r0, 0xF0
lsls r0, 1
@@ -73146,7 +73146,7 @@ sub_8036FDC:
movs r2, 0x1
bl sub_800641C
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
ldr r5, _080370C0
ldr r0, [r5]
cmp r0, 0
@@ -73610,7 +73610,7 @@ sub_80373C4:
bl sub_8009908
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r0}
bx r0
thumb_func_end sub_80373C4
@@ -76245,7 +76245,7 @@ sub_8038830:
add r0, r12
str r5, [r0]
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r4,r5}
pop {r0}
bx r0
@@ -86815,7 +86815,7 @@ _0803DB88: .4byte gUnknown_83B0000
_0803DB8C: .4byte gDungeonNameBannerPalette
_0803DB90: .4byte gUnknown_80F6100
_0803DB94: .4byte gDungeonNameBannerFontFile
-_0803DB98: .4byte gDungeonNameBannerFontFile + 4
+_0803DB98: .4byte gDungeonNameBannerFont
_0803DB9C: .4byte 0x06000140
_0803DBA0: .4byte gUnknown_203B418
_0803DBA4: .4byte 0x00000645
@@ -87287,7 +87287,7 @@ _0803DF08:
adds r0, r2, r0
b _0803DF3A
.align 2, 0
-_0803DF1C: .4byte gDungeonNameBannerFontFile + 4
+_0803DF1C: .4byte gDungeonNameBannerFont
_0803DF20:
lsls r0, r1, 3
adds r0, r5
@@ -88114,7 +88114,7 @@ _0803E5A2:
bl sub_8011860
bl sub_8040B60
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
ldr r1, _0803E664
@@ -88186,7 +88186,7 @@ sub_803E668:
strb r1, [r0]
bl sub_8011860
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
ldr r0, [r4]
@@ -273046,7 +273046,7 @@ _080995AE:
_08099604:
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
mov r2, r9
cmp r2, 0
beq _08099524
@@ -299178,7 +299178,7 @@ _080A6434:
_080A6444:
strh r0, [r5, 0xA]
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0x1
bl nullsub_10
pop {r3,r4}
@@ -299342,7 +299342,7 @@ sub_80A658C:
push {r4,lr}
bl sub_800DB7C
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
bl sub_8005180
@@ -300572,7 +300572,7 @@ _080A6E56:
sub_80A6E68:
push {lr}
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
bl sub_800E970
diff --git a/asm/m4a.s b/asm/m4a.s
deleted file mode 100644
index 602f9b9..0000000
--- a/asm/m4a.s
+++ /dev/null
@@ -1,4627 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/gba_constants.inc"
- .include "constants/m4a_constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start umul3232H32
-umul3232H32:
- adr r2, _080AE268
- bx r2
- .arm
-_080AE268:
- umull r2, r3, r0, r1
- add r0, r3, 0
- bx lr
- thumb_func_end umul3232H32
-
- thumb_func_start SoundMain
-SoundMain:
- ldr r0, lt_SOUND_INFO_PTR
- ldr r0, [r0]
- ldr r2, lt_ID_NUMBER
- ldr r3, [r0, o_SoundInfo_ident]
- cmp r2, r3
- beq SoundMain_1
- bx lr @ Exit the function if ident doesn't match ID_NUMBER.
-SoundMain_1:
- adds r3, 1
- str r3, [r0, o_SoundInfo_ident]
- push {r4-r7,lr}
- mov r1, r8
- mov r2, r9
- mov r3, r10
- mov r4, r11
- push {r0-r4}
- sub sp, 0x18
- ldrb r1, [r0, o_SoundInfo_maxLines]
- cmp r1, 0 @ if maxLines is 0, there is no maximum
- beq SoundMain_3
- ldr r2, lt_REG_VCOUNT
- ldrb r2, [r2]
- cmp r2, VCOUNT_VBLANK
- bhs SoundMain_2
- adds r2, TOTAL_SCANLINES
-SoundMain_2:
- adds r1, r2
-SoundMain_3:
- str r1, [sp, 0x14]
- ldr r3, [r0, o_SoundInfo_func]
- cmp r3, 0
- beq SoundMain_4
- ldr r0, [r0, o_SoundInfo_intp]
- bl call_r3
- ldr r0, [sp, 0x18]
-SoundMain_4:
- ldr r3, [r0, o_SoundInfo_CgbSound]
- bl call_r3
- ldr r0, [sp, 0x18]
- ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank]
- mov r8, r3
- ldr r5, lt_o_SoundInfo_pcmBuffer
- adds r5, r0
- ldrb r4, [r0, o_SoundInfo_pcmDmaCounter]
- subs r7, r4, 1
- bls SoundMain_5
- ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
- subs r1, r7
- mov r2, r8
- muls r2, r1
- adds r5, r2
-SoundMain_5:
- str r5, [sp, 0x8]
- ldr r6, lt_PCM_DMA_BUF_SIZE
- ldr r3, lt_SoundMainRAM_Buffer
- bx r3
-
- .align 2, 0
-lt_SOUND_INFO_PTR: .word SOUND_INFO_PTR
-lt_ID_NUMBER: .word ID_NUMBER
-lt_SoundMainRAM_Buffer: .word SoundMainRAM_Buffer + 1
-lt_REG_VCOUNT: .word REG_VCOUNT
-lt_o_SoundInfo_pcmBuffer: .word o_SoundInfo_pcmBuffer
-lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE
- thumb_func_end SoundMain
-
- thumb_func_start SoundMainRAM
-SoundMainRAM:
- ldrb r3, [r0, o_SoundInfo_reverb]
- cmp r3, 0
- beq SoundMainRAM_NoReverb
- adr r1, SoundMainRAM_Reverb
- bx r1
- .arm
-SoundMainRAM_Reverb:
- cmp r4, 0x2
- addeq r7, r0, o_SoundInfo_pcmBuffer
- addne r7, r5, r8
- mov r4, r8
-_080AE314:
- ldrsb r0, [r5, r6]
- ldrsb r1, [r5]
- add r0, r0, r1
- ldrsb r1, [r7, r6]
- add r0, r0, r1
- ldrsb r1, [r7], 0x1
- add r0, r0, r1
- mul r1, r0, r3
- mov r0, r1, asr 9
- tst r0, 0x80
- addne r0, r0, 0x1
- strb r0, [r5, r6]
- strb r0, [r5], 0x1
- subs r4, r4, 0x1
- bgt _080AE314
- add r0, pc, 0x2F
- bx r0
- .thumb
-SoundMainRAM_NoReverb:
- movs r0, 0
- mov r1, r8
- adds r6, r5
- lsrs r1, 3
- bcc SoundMainRAM_NoReverb_Ok
- stm r5!, {r0}
- stm r6!, {r0}
-SoundMainRAM_NoReverb_Ok:
- lsrs r1, 1
- bcc SoundMainRAM_NoReverb_Loop
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
-SoundMainRAM_NoReverb_Loop:
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
- subs r1, 0x1
- bgt SoundMainRAM_NoReverb_Loop
-_080AE386:
- ldr r4, [sp, 0x18]
- ldr r0, [r4, o_SoundInfo_divFreq]
- mov r12, r0
- ldrb r0, [r4, o_SoundInfo_maxChans]
- adds r4, o_SoundInfo_chans
-SoundMainRAM_ChanLoop:
- str r0, [sp, 0x4]
- ldr r3, [r4, o_SoundChannel_wav]
- ldr r0, [sp, 0x14]
- cmp r0, 0
- beq _080AE3B0
- ldr r1, =REG_VCOUNT
- ldrb r1, [r1]
- cmp r1, VCOUNT_VBLANK
- bhs _080AE3A4
- adds r1, TOTAL_SCANLINES
-_080AE3A4:
- cmp r1, r0
- bcc _080AE3B0
- b _080AE682
-
- .pool
-
-_080AE3B0:
- ldrb r6, [r4, o_SoundChannel_status]
- movs r0, 0xC7
- tst r0, r6
- bne _080AE3BA
- b _080AE678
-_080AE3BA:
- movs r0, 0x80
- tst r0, r6
- beq _080AE3EA
- movs r0, 0x40
- tst r0, r6
- bne _080AE3FA
- movs r6, 0x3
- strb r6, [r4, o_SoundChannel_status]
- adds r0, r3, 0
- adds r0, 0x10
- str r0, [r4, o_SoundChannel_cp]
- ldr r0, [r3, 0xC]
- str r0, [r4, o_SoundChannel_ct]
- movs r5, 0
- strb r5, [r4, o_SoundChannel_ev]
- str r5, [r4, o_SoundChannel_fw]
- ldrb r2, [r3, 0x3]
- movs r0, 0xC0
- tst r0, r2
- beq _080AE442
- movs r0, 0x10
- orrs r6, r0
- strb r6, [r4, o_SoundChannel_status]
- b _080AE442
-_080AE3EA:
- ldrb r5, [r4, o_SoundChannel_ev]
- movs r0, 0x4
- tst r0, r6
- beq _080AE400
- ldrb r0, [r4, o_SoundChannel_iel]
- subs r0, 0x1
- strb r0, [r4, o_SoundChannel_iel]
- bhi _080AE450
-_080AE3FA:
- movs r0, 0
- strb r0, [r4, o_SoundChannel_status]
- b _080AE678
-_080AE400:
- movs r0, 0x40
- tst r0, r6
- beq _080AE420
- ldrb r0, [r4, o_SoundChannel_release]
- muls r5, r0
- lsrs r5, 8
- ldrb r0, [r4, o_SoundChannel_iev]
- cmp r5, r0
- bhi _080AE450
-_080AE412:
- ldrb r5, [r4, o_SoundChannel_iev]
- cmp r5, 0
- beq _080AE3FA
- movs r0, 0x4
- orrs r6, r0
- strb r6, [r4, o_SoundChannel_status]
- b _080AE450
-_080AE420:
- movs r2, 0x3
- ands r2, r6
- cmp r2, 0x2
- bne _080AE43E
- ldrb r0, [r4, o_SoundChannel_decay]
- muls r5, r0
- lsrs r5, 8
- ldrb r0, [r4, o_SoundChannel_sustain]
- cmp r5, r0
- bhi _080AE450
- adds r5, r0, 0
- beq _080AE412
- subs r6, 0x1
- strb r6, [r4, o_SoundChannel_status]
- b _080AE450
-_080AE43E:
- cmp r2, 0x3
- bne _080AE450
-_080AE442:
- ldrb r0, [r4, o_SoundChannel_attack]
- adds r5, r0
- cmp r5, 0xFF
- bcc _080AE450
- movs r5, 0xFF
- subs r6, 0x1
- strb r6, [r4, o_SoundChannel_status]
-_080AE450:
- strb r5, [r4, o_SoundChannel_ev]
- ldr r0, [sp, 0x18]
- ldrb r0, [r0, o_SoundChannel_release]
- adds r0, 0x1
- muls r0, r5
- lsrs r5, r0, 4
- ldrb r0, [r4, o_SoundChannel_rightVolume]
- muls r0, r5
- lsrs r0, 8
- strb r0, [r4, o_SoundChannel_er]
- ldrb r0, [r4, o_SoundChannel_leftVolume]
- muls r0, r5
- lsrs r0, 8
- strb r0, [r4, o_SoundChannel_el]
- movs r0, 0x10
- ands r0, r6
- str r0, [sp, 0x10]
- beq _080AE484
- adds r0, r3, 0
- adds r0, 0x10
- ldr r1, [r3, 0x8]
- adds r0, r1
- str r0, [sp, 0xC]
- ldr r0, [r3, 0xC]
- subs r0, r1
- str r0, [sp, 0x10]
-_080AE484:
- ldr r5, [sp, 0x8]
- ldr r2, [r4, o_SoundChannel_ct]
- ldr r3, [r4, o_SoundChannel_cp]
- adr r0, _080AE490
- bx r0
- .arm
-_080AE490:
- str r8, [sp]
- ldrb r10, [r4, o_SoundChannel_er]
- ldrb r11, [r4, o_SoundChannel_el]
- mov r10, r10, lsl 16
- mov r11, r11, lsl 16
- ldrb r0, [r4, o_SoundChannel_type]
- tst r0, 0x8
- beq _080AE5D0
-_080AE4B0:
- cmp r2, 0x4
- ble _080AE520
- subs r2, r2, r8
- movgt lr, 0
- bgt _080AE4DC
- mov lr, r8
- add r2, r2, r8
- sub r8, r2, 0x4
- sub lr, lr, r8
- ands r2, r2, 0x3
- moveq r2, 0x4
-_080AE4DC:
- ldr r6, [r5]
- ldr r7, [r5, 0x630]
-_080AE4E4:
- ldrsb r0, [r3], 0x1
- mul r1, r10, r0
- bic r1, r1, 0xFF0000
- add r6, r1, r6, ror 8
- mul r1, r11, r0
- bic r1, r1, 0xFF0000
- add r7, r1, r7, ror 8
- adds r5, r5, 0x40000000
- bcc _080AE4E4
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- subs r8, r8, 0x4
- bgt _080AE4DC
- adds r8, r8, lr
- beq _080AE664
-_080AE520:
- ldr r6, [r5]
- ldr r7, [r5, 0x630]
-_080AE528:
- ldrsb r0, [r3], 0x1
- mul r1, r10, r0
- bic r1, r1, 0xFF0000
- add r6, r1, r6, ror 8
- mul r1, r11, r0
- bic r1, r1, 0xFF0000
- add r7, r1, r7, ror 8
- subs r2, r2, 0x1
- beq _080AE598
-_080AE54C:
- adds r5, r5, 0x40000000
- bcc _080AE528
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- subs r8, r8, 0x4
- bgt _080AE4B0
- b _080AE664
-_080AE568:
- ldr r0, [sp, 0x18]
- cmp r0, 0
- beq _080AE58C
- ldr r3, [sp, 0x14]
- rsb r9, r2, 0
-_080AE57C:
- adds r2, r0, r2
- bgt _080AE634
- sub r9, r9, r0
- b _080AE57C
-_080AE58C:
- ldmia sp!, {r4,r12}
- mov r2, 0
- b _080AE5A8
-_080AE598:
- ldr r2, [sp, 0x10]
- cmp r2, 0
- ldrne r3, [sp, 0xC]
- bne _080AE54C
-_080AE5A8:
- strb r2, [r4, o_SoundChannel_status]
- mov r0, r5, lsr 30
- bic r5, r5, 0xC0000000
- rsb r0, r0, 0x3
- mov r0, r0, lsl 3
- mov r6, r6, ror r0
- mov r7, r7, ror r0
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- b _080AE66C
-_080AE5D0:
- stmdb sp!, {r4,r12}
- ldr lr, [r4, o_SoundChannel_fw]
- ldr r1, [r4, o_SoundChannel_freq]
- mul r4, r12, r1
- ldrsb r0, [r3]
- ldrsb r1, [r3, 0x1]!
- sub r1, r1, r0
-_080AE5EC:
- ldr r6, [r5]
- ldr r7, [r5, 0x630]
-_080AE5F4:
- mul r9, lr, r1
- add r9, r0, r9, asr 23
- mul r12, r10, r9
- bic r12, r12, 0xFF0000
- add r6, r12, r6, ror 8
- mul r12, r11, r9
- bic r12, r12, 0xFF0000
- add r7, r12, r7, ror 8
- add lr, lr, r4
- movs r9, lr, lsr 23
- beq _080AE640
- bic lr, lr, 0x3F800000
- subs r2, r2, r9
- ble _080AE568
- subs r9, r9, 0x1
- addeq r0, r0, r1
-_080AE634:
- ldrsbne r0, [r3, r9]!
- ldrsb r1, [r3, 0x1]!
- sub r1, r1, r0
-_080AE640:
- adds r5, r5, 0x40000000
- bcc _080AE5F4
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- subs r8, r8, 0x4
- bgt _080AE5EC
- sub r3, r3, 0x1
- ldmia sp!, {r4,r12}
- str lr, [r4, o_SoundChannel_fw]
-_080AE664:
- str r2, [r4, o_SoundChannel_ct]
- str r3, [r4, o_SoundChannel_cp]
-_080AE66C:
- ldr r8, [sp]
- add r0, pc, 0x1
- bx r0
- .thumb
-_080AE678:
- ldr r0, [sp, 0x4]
- subs r0, 0x1
- ble _080AE682
- adds r4, SoundChannel_size
- b SoundMainRAM_ChanLoop
-_080AE682:
- ldr r0, [sp, 0x18]
- ldr r3, =ID_NUMBER
- str r3, [r0]
- add sp, 0x1C
- pop {r0-r7}
- mov r8, r0
- mov r9, r1
- mov r10, r2
- mov r11, r3
- pop {r3}
-
-call_r3:
- bx r3
- .pool
- thumb_func_end SoundMainRAM
-
- thumb_func_start sub_80AE69C
-sub_80AE69C:
- mov r12, r4
- movs r1, 0
- movs r2, 0
- movs r3, 0
- movs r4, 0
- stm r0!, {r1-r4}
- stm r0!, {r1-r4}
- stm r0!, {r1-r4}
- stm r0!, {r1-r4}
- mov r4, r12
- bx lr
- thumb_func_end sub_80AE69C
-
- thumb_func_start sub_80AE6B4
-sub_80AE6B4:
- ldr r3, [r0, 0x2C]
- cmp r3, 0
- beq _080AE6D2
- ldr r1, [r0, 0x34]
- ldr r2, [r0, 0x30]
- cmp r2, 0
- beq _080AE6C6
- str r1, [r2, 0x34]
- b _080AE6C8
-_080AE6C6:
- str r1, [r3, 0x20]
-_080AE6C8:
- cmp r1, 0
- beq _080AE6CE
- str r2, [r1, 0x30]
-_080AE6CE:
- movs r1, 0
- str r1, [r0, 0x2C]
-_080AE6D2:
- bx lr
- thumb_func_end sub_80AE6B4
-
- thumb_func_start sub_80AE6D4
-sub_80AE6D4:
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AE6F8
-_080AE6DE:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AE6EC
- movs r0, 0x40
- orrs r1, r0
- strb r1, [r4]
-_080AE6EC:
- adds r0, r4, 0
- bl sub_80AE6B4
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AE6DE
-_080AE6F8:
- movs r0, 0
- strb r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80AE6D4
-
- thumb_func_start sub_80AE704
-sub_80AE704:
- mov r12, lr
- movs r1, 0x24
- ldr r2, _080AE734
-_080AE70A:
- ldr r3, [r2]
- bl _080AE71E
- stm r0!, {r3}
- adds r2, 0x4
- subs r1, 0x1
- bgt _080AE70A
- bx r12
- thumb_func_end sub_80AE704
-
- .align 2, 0
- .thumb_func
-_080AE71C:
- ldrb r3, [r2]
-
- .thumb_func
-_080AE71E:
- push {r0}
- lsrs r0, r2, 25
- bne _080AE730
- ldr r0, _080AE734
- cmp r2, r0
- bcc _080AE72E
- lsrs r0, r2, 14
- beq _080AE730
-_080AE72E:
- movs r3, 0
-_080AE730:
- pop {r0}
- bx lr
- .align 2, 0
-_080AE734: .4byte gUnknown_826F98C
-
- thumb_func_start sub_80AE738
-sub_80AE738:
- ldr r2, [r1, 0x40]
-_080AE73A:
- adds r3, r2, 0x1
- str r3, [r1, 0x40]
- ldrb r3, [r2]
- b _080AE71E
- thumb_func_end sub_80AE738
-
- thumb_func_start sub_80AE744
-sub_80AE744:
- push {lr}
-_080AE746:
- ldr r2, [r1, 0x40]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- ldrb r3, [r2, 0x2]
- orrs r0, r3
- lsls r0, 8
- ldrb r3, [r2, 0x1]
- orrs r0, r3
- lsls r0, 8
- bl _080AE71C
- orrs r0, r3
- str r0, [r1, 0x40]
- pop {r0}
- bx r0
- thumb_func_end sub_80AE744
-
- thumb_func_start sub_80AE764
-sub_80AE764:
- ldrb r2, [r1, 0x2]
- cmp r2, 0x3
- bcs _080AE77C
- lsls r2, 2
- adds r3, r1, r2
- ldr r2, [r1, 0x40]
- adds r2, 0x4
- str r2, [r3, 0x44]
- ldrb r2, [r1, 0x2]
- adds r2, 0x1
- strb r2, [r1, 0x2]
- b sub_80AE744
-_080AE77C:
- b sub_80AE6D4
- thumb_func_end sub_80AE764
-
- thumb_func_start sub_80AE780
-sub_80AE780:
- ldrb r2, [r1, 0x2]
- cmp r2, 0
- beq _080AE792
- subs r2, 0x1
- strb r2, [r1, 0x2]
- lsls r2, 2
- adds r3, r1, r2
- ldr r2, [r3, 0x44]
- str r2, [r1, 0x40]
-_080AE792:
- bx lr
- thumb_func_end sub_80AE780
-
- thumb_func_start sub_80AE794
-sub_80AE794:
- push {lr}
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- cmp r3, 0
- bne _080AE7A4
- adds r2, 0x1
- str r2, [r1, 0x40]
- b _080AE746
-_080AE7A4:
- ldrb r3, [r1, 0x3]
- adds r3, 0x1
- strb r3, [r1, 0x3]
- mov r12, r3
- bl sub_80AE738
- cmp r12, r3
- bcs _080AE7B6
- b _080AE746
-_080AE7B6:
- movs r3, 0
- strb r3, [r1, 0x3]
- adds r2, 0x5
- str r2, [r1, 0x40]
- pop {r0}
- bx r0
- thumb_func_end sub_80AE794
-
- thumb_func_start sub_80AE7C4
-sub_80AE7C4:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0x1D]
- bx r12
- thumb_func_end sub_80AE7C4
-
- thumb_func_start sub_80AE7D0
-sub_80AE7D0:
- mov r12, lr
- bl sub_80AE738
- lsls r3, 1
- strh r3, [r0, 0x1C]
- ldrh r2, [r0, 0x1E]
- muls r3, r2
- lsrs r3, 8
- strh r3, [r0, 0x20]
- bx r12
- thumb_func_end sub_80AE7D0
-
- thumb_func_start sub_80AE7E4
-sub_80AE7E4:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0xA]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE7E4
-
- thumb_func_start sub_80AE7F8
-sub_80AE7F8:
- mov r12, lr
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- adds r2, 0x1
- str r2, [r1, 0x40]
- lsls r2, r3, 1
- adds r2, r3
- lsls r2, 2
- ldr r3, [r0, 0x30]
- adds r2, r3
- ldr r3, [r2]
- bl _080AE71E
- str r3, [r1, 0x24]
- ldr r3, [r2, 0x4]
- bl _080AE71E
- str r3, [r1, 0x28]
- ldr r3, [r2, 0x8]
- bl _080AE71E
- str r3, [r1, 0x2C]
- bx r12
- thumb_func_end sub_80AE7F8
-
- thumb_func_start sub_80AE828
-sub_80AE828:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0x12]
- ldrb r3, [r1]
- movs r2, 0x3
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE828
-
- thumb_func_start sub_80AE83C
-sub_80AE83C:
- mov r12, lr
- bl sub_80AE738
- subs r3, 0x40
- strb r3, [r1, 0x14]
- ldrb r3, [r1]
- movs r2, 0x3
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE83C
-
- thumb_func_start sub_80AE850
-sub_80AE850:
- mov r12, lr
- bl sub_80AE738
- subs r3, 0x40
- strb r3, [r1, 0xE]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE850
-
- thumb_func_start sub_80AE864
-sub_80AE864:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0xF]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE864
-
- thumb_func_start sub_80AE878
-sub_80AE878:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0x1B]
- bx r12
- thumb_func_end sub_80AE878
-
- thumb_func_start sub_80AE884
-sub_80AE884:
- mov r12, lr
- bl sub_80AE738
- ldrb r0, [r1, 0x18]
- cmp r0, r3
- beq _080AE89A
- strb r3, [r1, 0x18]
- ldrb r3, [r1]
- movs r2, 0xF
- orrs r3, r2
- strb r3, [r1]
-_080AE89A:
- bx r12
- thumb_func_end sub_80AE884
-
- thumb_func_start sub_80AE89C
-sub_80AE89C:
- mov r12, lr
- bl sub_80AE738
- subs r3, 0x40
- strb r3, [r1, 0xC]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE89C
-
- thumb_func_start sub_80AE8B0
-sub_80AE8B0:
- mov r12, lr
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- adds r2, 0x1
- ldr r0, _080AE8C4
- adds r0, r3
- bl _080AE73A
- strb r3, [r0]
- bx r12
- .align 2, 0
-_080AE8C4: .4byte 0x04000060
- thumb_func_end sub_80AE8B0
-
- thumb_func_start m4aSoundVSync
-m4aSoundVSync:
- ldr r0, _080AEB74
- ldr r0, [r0]
- ldr r2, _080AEB78
- ldr r3, [r0]
- subs r3, r2
- cmp r3, 0x1
- bhi _080AE908
- ldrb r1, [r0, 0x4]
- subs r1, 0x1
- strb r1, [r0, 0x4]
- bgt _080AE908
- ldrb r1, [r0, 0xB]
- strb r1, [r0, 0x4]
- ldr r2, _080AE90C
- ldr r1, [r2, 0x8]
- lsls r1, 7
- bcc _080AE8EE
- ldr r1, _080AE910
- str r1, [r2, 0x8]
-_080AE8EE:
- ldr r1, [r2, 0x14]
- lsls r1, 7
- bcc _080AE8F8
- ldr r1, _080AE910
- str r1, [r2, 0x14]
-_080AE8F8:
- movs r1, 0x4
- lsls r1, 8
- strh r1, [r2, 0xA]
- strh r1, [r2, 0x16]
- movs r1, 0xB6
- lsls r1, 8
- strh r1, [r2, 0xA]
- strh r1, [r2, 0x16]
-_080AE908:
- bx lr
- .align 2, 0
-_080AE90C: .4byte 0x040000bc
-_080AE910: .4byte 0x84400004
- thumb_func_end m4aSoundVSync
-
- thumb_func_start sub_80AE914
-sub_80AE914:
- ldr r2, _080AEB78
- ldr r3, [r0, 0x34]
- cmp r2, r3
- beq _080AE91E
- bx lr
-_080AE91E:
- adds r3, 0x1
- str r3, [r0, 0x34]
- push {r0,lr}
- ldr r3, [r0, 0x38]
- cmp r3, 0
- beq _080AE930
- ldr r0, [r0, 0x3C]
- bl _080AEB6C
-_080AE930:
- pop {r0}
- push {r4-r7}
- mov r4, r8
- mov r5, r9
- mov r6, r10
- mov r7, r11
- push {r4-r7}
- adds r7, r0, 0
- ldr r0, [r7, 0x4]
- cmp r0, 0
- bge _080AE948
- b _080AEB5C
-_080AE948:
- ldr r0, _080AEB74
- ldr r0, [r0]
- mov r8, r0
- adds r0, r7, 0
- bl sub_80AF800
- ldr r0, [r7, 0x4]
- cmp r0, 0
- bge _080AE95C
- b _080AEB5C
-_080AE95C:
- ldrh r0, [r7, 0x22]
- ldrh r1, [r7, 0x20]
- adds r0, r1
- b _080AEAAC
-_080AE964:
- ldrb r6, [r7, 0x8]
- ldr r5, [r7, 0x2C]
- movs r3, 0x1
- movs r4, 0
-_080AE96C:
- ldrb r0, [r5]
- movs r1, 0x80
- tst r1, r0
- bne _080AE976
- b _080AEA88
-_080AE976:
- mov r10, r3
- orrs r4, r3
- mov r11, r4
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AE9AA
-_080AE982:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AE99E
- ldrb r0, [r4, 0x10]
- cmp r0, 0
- beq _080AE9A4
- subs r0, 0x1
- strb r0, [r4, 0x10]
- bne _080AE9A4
- movs r0, 0x40
- orrs r1, r0
- strb r1, [r4]
- b _080AE9A4
-_080AE99E:
- adds r0, r4, 0
- bl sub_80AF2FC
-_080AE9A4:
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AE982
-_080AE9AA:
- ldrb r3, [r5]
- movs r0, 0x40
- tst r0, r3
- beq _080AEA28
- adds r0, r5, 0
- bl sub_80AF310
- movs r0, 0x80
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0xF]
- movs r0, 0x40
- strb r0, [r5, 0x13]
- movs r0, 0x16
- strb r0, [r5, 0x19]
- movs r0, 0x1
- adds r1, r5, 0x6
- strb r0, [r1, 0x1E]
- b _080AEA28
-_080AE9D0:
- ldr r2, [r5, 0x40]
- ldrb r1, [r2]
- cmp r1, 0x80
- bcs _080AE9DC
- ldrb r1, [r5, 0x7]
- b _080AE9E6
-_080AE9DC:
- adds r2, 0x1
- str r2, [r5, 0x40]
- cmp r1, 0xBD
- bcc _080AE9E6
- strb r1, [r5, 0x7]
-_080AE9E6:
- cmp r1, 0xCF
- bcc _080AE9FC
- mov r0, r8
- ldr r3, [r0, 0x38]
- adds r0, r1, 0
- subs r0, 0xCF
- adds r1, r7, 0
- adds r2, r5, 0
- bl _080AEB6C
- b _080AEA28
-_080AE9FC:
- cmp r1, 0xB0
- bls _080AEA1E
- adds r0, r1, 0
- subs r0, 0xB1
- strb r0, [r7, 0xA]
- mov r3, r8
- ldr r3, [r3, 0x34]
- lsls r0, 2
- ldr r3, [r3, r0]
- adds r0, r7, 0
- adds r1, r5, 0
- bl _080AEB6C
- ldrb r0, [r5]
- cmp r0, 0
- beq _080AEA84
- b _080AEA28
-_080AEA1E:
- ldr r0, _080AEB70
- subs r1, 0x80
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r5, 0x1]
-_080AEA28:
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- beq _080AE9D0
- subs r0, 0x1
- strb r0, [r5, 0x1]
- ldrb r1, [r5, 0x19]
- cmp r1, 0
- beq _080AEA84
- ldrb r0, [r5, 0x17]
- cmp r0, 0
- beq _080AEA84
- ldrb r0, [r5, 0x1C]
- cmp r0, 0
- beq _080AEA4A
- subs r0, 0x1
- strb r0, [r5, 0x1C]
- b _080AEA84
-_080AEA4A:
- ldrb r0, [r5, 0x1A]
- adds r0, r1
- strb r0, [r5, 0x1A]
- adds r1, r0, 0
- subs r0, 0x40
- lsls r0, 24
- bpl _080AEA5E
- lsls r2, r1, 24
- asrs r2, 24
- b _080AEA62
-_080AEA5E:
- movs r0, 0x80
- subs r2, r0, r1
-_080AEA62:
- ldrb r0, [r5, 0x17]
- muls r0, r2
- asrs r2, r0, 6
- ldrb r0, [r5, 0x16]
- eors r0, r2
- lsls r0, 24
- beq _080AEA84
- strb r2, [r5, 0x16]
- ldrb r0, [r5]
- ldrb r1, [r5, 0x18]
- cmp r1, 0
- bne _080AEA7E
- movs r1, 0xC
- b _080AEA80
-_080AEA7E:
- movs r1, 0x3
-_080AEA80:
- orrs r0, r1
- strb r0, [r5]
-_080AEA84:
- mov r3, r10
- mov r4, r11
-_080AEA88:
- subs r6, 0x1
- ble _080AEA94
- movs r0, 0x50
- adds r5, r0
- lsls r3, 1
- b _080AE96C
-_080AEA94:
- ldr r0, [r7, 0xC]
- adds r0, 0x1
- str r0, [r7, 0xC]
- cmp r4, 0
- bne _080AEAA6
- movs r0, 0x80
- lsls r0, 24
- str r0, [r7, 0x4]
- b _080AEB5C
-_080AEAA6:
- str r4, [r7, 0x4]
- ldrh r0, [r7, 0x22]
- subs r0, 0x96
-_080AEAAC:
- strh r0, [r7, 0x22]
- cmp r0, 0x96
- bcc _080AEAB4
- b _080AE964
-_080AEAB4:
- ldrb r2, [r7, 0x8]
- ldr r5, [r7, 0x2C]
-_080AEAB8:
- ldrb r0, [r5]
- movs r1, 0x80
- tst r1, r0
- beq _080AEB52
- movs r1, 0xF
- tst r1, r0
- beq _080AEB52
- mov r9, r2
- adds r0, r7, 0
- adds r1, r5, 0
- bl sub_80AF8C8
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AEB48
-_080AEAD6:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- bne _080AEAE6
- adds r0, r4, 0
- bl sub_80AF2FC
- b _080AEB42
-_080AEAE6:
- ldrb r0, [r4, 0x1]
- movs r6, 0x7
- ands r6, r0
- ldrb r3, [r5]
- movs r0, 0x3
- tst r0, r3
- beq _080AEB04
- bl sub_80AEBC0
- cmp r6, 0
- beq _080AEB04
- ldrb r0, [r4, 0x1D]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1D]
-_080AEB04:
- ldrb r3, [r5]
- movs r0, 0xC
- tst r0, r3
- beq _080AEB42
- ldrb r1, [r4, 0x8]
- movs r0, 0x8
- ldrsb r0, [r5, r0]
- adds r2, r1, r0
- bpl _080AEB18
- movs r2, 0
-_080AEB18:
- cmp r6, 0
- beq _080AEB36
- mov r0, r8
- ldr r3, [r0, 0x30]
- adds r1, r2, 0
- ldrb r2, [r5, 0x9]
- adds r0, r6, 0
- bl _080AEB6C
- str r0, [r4, 0x20]
- ldrb r0, [r4, 0x1D]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4, 0x1D]
- b _080AEB42
-_080AEB36:
- adds r1, r2, 0
- ldrb r2, [r5, 0x9]
- ldr r0, [r4, 0x24]
- bl sub_80AEE80
- str r0, [r4, 0x20]
-_080AEB42:
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AEAD6
-_080AEB48:
- ldrb r0, [r5]
- movs r1, 0xF0
- ands r0, r1
- strb r0, [r5]
- mov r2, r9
-_080AEB52:
- subs r2, 0x1
- ble _080AEB5C
- movs r0, 0x50
- adds r5, r0
- bgt _080AEAB8
-_080AEB5C:
- ldr r0, _080AEB78
- str r0, [r7, 0x34]
- pop {r0-r7}
- mov r8, r0
- mov r9, r1
- mov r10, r2
- mov r11, r3
- pop {r3}
-_080AEB6C:
- bx r3
- .align 2, 0
-_080AEB70: .4byte gUnknown_826FC00
-_080AEB74: .4byte SOUND_INFO_PTR
-_080AEB78: .4byte 0x68736d53
- thumb_func_end sub_80AE914
-
- thumb_func_start sub_80AEB7C
-sub_80AEB7C:
- push {r4-r6,lr}
- adds r5, r1, 0
- ldrb r1, [r5]
- movs r0, 0x80
- tst r0, r1
- beq _080AEBB4
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AEBB2
- movs r6, 0
-_080AEB90:
- ldrb r0, [r4]
- cmp r0, 0
- beq _080AEBAA
- ldrb r0, [r4, 0x1]
- movs r3, 0x7
- ands r0, r3
- beq _080AEBA8
- ldr r3, _080AEBBC
- ldr r3, [r3]
- ldr r3, [r3, 0x2C]
- bl _080AEB6C
-_080AEBA8:
- strb r6, [r4]
-_080AEBAA:
- str r6, [r4, 0x2C]
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AEB90
-_080AEBB2:
- str r4, [r5, 0x20]
-_080AEBB4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEBBC: .4byte SOUND_INFO_PTR
- thumb_func_end sub_80AEB7C
-
- thumb_func_start sub_80AEBC0
-sub_80AEBC0:
- ldrb r1, [r4, 0x12]
- movs r0, 0x14
- ldrsb r2, [r4, r0]
- movs r3, 0x80
- adds r3, r2
- muls r3, r1
- ldrb r0, [r5, 0x10]
- muls r0, r3
- asrs r0, 14
- cmp r0, 0xFF
- bls _080AEBD8
- movs r0, 0xFF
-_080AEBD8:
- strb r0, [r4, 0x2]
- movs r3, 0x7F
- subs r3, r2
- muls r3, r1
- ldrb r0, [r5, 0x11]
- muls r0, r3
- asrs r0, 14
- cmp r0, 0xFF
- bls _080AEBEC
- movs r0, 0xFF
-_080AEBEC:
- strb r0, [r4, 0x3]
- bx lr
- thumb_func_end sub_80AEBC0
-
- thumb_func_start sub_80AEBF0
-sub_80AEBF0:
- push {r4-r7,lr}
- mov r4, r8
- mov r5, r9
- mov r6, r10
- mov r7, r11
- push {r4-r7}
- sub sp, 0x18
- str r1, [sp]
- adds r5, r2, 0
- ldr r1, _080AEDE8
- ldr r1, [r1]
- str r1, [sp, 0x4]
- ldr r1, _080AEDEC
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r5, 0x4]
- ldr r3, [r5, 0x40]
- ldrb r0, [r3]
- cmp r0, 0x80
- bcs _080AEC36
- strb r0, [r5, 0x5]
- adds r3, 0x1
- ldrb r0, [r3]
- cmp r0, 0x80
- bcs _080AEC34
- strb r0, [r5, 0x6]
- adds r3, 0x1
- ldrb r0, [r3]
- cmp r0, 0x80
- bcs _080AEC34
- ldrb r1, [r5, 0x4]
- adds r1, r0
- strb r1, [r5, 0x4]
- adds r3, 0x1
-_080AEC34:
- str r3, [r5, 0x40]
-_080AEC36:
- movs r0, 0
- str r0, [sp, 0x14]
- adds r4, r5, 0
- adds r4, 0x24
- ldrb r2, [r4]
- movs r0, 0xC0
- tst r0, r2
- beq _080AEC88
- ldrb r3, [r5, 0x5]
- movs r0, 0x40
- tst r0, r2
- beq _080AEC56
- ldr r1, [r5, 0x2C]
- adds r1, r3
- ldrb r0, [r1]
- b _080AEC58
-_080AEC56:
- adds r0, r3, 0
-_080AEC58:
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r0, [r5, 0x28]
- adds r1, r0
- mov r9, r1
- mov r6, r9
- ldrb r1, [r6]
- movs r0, 0xC0
- tst r0, r1
- beq _080AEC70
- b _080AEDD6
-_080AEC70:
- movs r0, 0x80
- tst r0, r2
- beq _080AEC8C
- ldrb r1, [r6, 0x3]
- movs r0, 0x80
- tst r0, r1
- beq _080AEC84
- subs r1, 0xC0
- lsls r1, 1
- str r1, [sp, 0x14]
-_080AEC84:
- ldrb r3, [r6, 0x1]
- b _080AEC8C
-_080AEC88:
- mov r9, r4
- ldrb r3, [r5, 0x5]
-_080AEC8C:
- str r3, [sp, 0x8]
- ldr r6, [sp]
- ldrb r1, [r6, 0x9]
- ldrb r0, [r5, 0x1D]
- adds r0, r1
- cmp r0, 0xFF
- bls _080AEC9C
- movs r0, 0xFF
-_080AEC9C:
- str r0, [sp, 0x10]
- mov r6, r9
- ldrb r0, [r6]
- movs r6, 0x7
- ands r6, r0
- str r6, [sp, 0xC]
- beq _080AECDC
- ldr r0, [sp, 0x4]
- ldr r4, [r0, 0x1C]
- cmp r4, 0
- bne _080AECB4
- b _080AEDD6
-_080AECB4:
- subs r6, 0x1
- lsls r0, r6, 6
- adds r4, r0
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AED30
- movs r0, 0x40
- tst r0, r1
- bne _080AED30
- ldrb r1, [r4, 0x13]
- ldr r0, [sp, 0x10]
- cmp r1, r0
- bcc _080AED30
- beq _080AECD4
- b _080AEDD6
-_080AECD4:
- ldr r0, [r4, 0x2C]
- cmp r0, r5
- bcs _080AED30
- b _080AEDD6
-_080AECDC:
- ldr r6, [sp, 0x10]
- adds r7, r5, 0
- movs r2, 0
- mov r8, r2
- ldr r4, [sp, 0x4]
- ldrb r3, [r4, 0x6]
- adds r4, 0x50
-_080AECEA:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AED30
- movs r0, 0x40
- tst r0, r1
- beq _080AED04
- cmp r2, 0
- bne _080AED08
- adds r2, 0x1
- ldrb r6, [r4, 0x13]
- ldr r7, [r4, 0x2C]
- b _080AED22
-_080AED04:
- cmp r2, 0
- bne _080AED24
-_080AED08:
- ldrb r0, [r4, 0x13]
- cmp r0, r6
- bcs _080AED14
- adds r6, r0, 0
- ldr r7, [r4, 0x2C]
- b _080AED22
-_080AED14:
- bhi _080AED24
- ldr r0, [r4, 0x2C]
- cmp r0, r7
- bls _080AED20
- adds r7, r0, 0
- b _080AED22
-_080AED20:
- bcc _080AED24
-_080AED22:
- mov r8, r4
-_080AED24:
- adds r4, 0x40
- subs r3, 0x1
- bgt _080AECEA
- mov r4, r8
- cmp r4, 0
- beq _080AEDD6
-_080AED30:
- adds r0, r4, 0
- bl sub_80AF2FC
- movs r1, 0
- str r1, [r4, 0x30]
- ldr r3, [r5, 0x20]
- str r3, [r4, 0x34]
- cmp r3, 0
- beq _080AED44
- str r4, [r3, 0x30]
-_080AED44:
- str r4, [r5, 0x20]
- str r5, [r4, 0x2C]
- ldrb r0, [r5, 0x1B]
- strb r0, [r5, 0x1C]
- cmp r0, r1
- beq _080AED56
- adds r1, r5, 0
- bl sub_80AEE30
-_080AED56:
- ldr r0, [sp]
- adds r1, r5, 0
- bl sub_80AF8C8
- ldr r0, [r5, 0x4]
- str r0, [r4, 0x10]
- ldr r0, [sp, 0x10]
- strb r0, [r4, 0x13]
- ldr r0, [sp, 0x8]
- strb r0, [r4, 0x8]
- ldr r0, [sp, 0x14]
- strb r0, [r4, 0x14]
- mov r6, r9
- ldrb r0, [r6]
- strb r0, [r4, 0x1]
- ldr r7, [r6, 0x4]
- str r7, [r4, 0x24]
- ldr r0, [r6, 0x8]
- str r0, [r4, 0x4]
- ldrh r0, [r5, 0x1E]
- strh r0, [r4, 0xC]
- bl sub_80AEBC0
- ldrb r1, [r4, 0x8]
- movs r0, 0x8
- ldrsb r0, [r5, r0]
- adds r3, r1, r0
- bpl _080AED90
- movs r3, 0
-_080AED90:
- ldr r6, [sp, 0xC]
- cmp r6, 0
- beq _080AEDBE
- mov r6, r9
- ldrb r0, [r6, 0x2]
- strb r0, [r4, 0x1E]
- ldrb r1, [r6, 0x3]
- movs r0, 0x80
- tst r0, r1
- bne _080AEDAA
- movs r0, 0x70
- tst r0, r1
- bne _080AEDAC
-_080AEDAA:
- movs r1, 0x8
-_080AEDAC:
- strb r1, [r4, 0x1F]
- ldrb r2, [r5, 0x9]
- adds r1, r3, 0
- ldr r0, [sp, 0xC]
- ldr r3, [sp, 0x4]
- ldr r3, [r3, 0x30]
- bl _080AEB6C
- b _080AEDC8
-_080AEDBE:
- ldrb r2, [r5, 0x9]
- adds r1, r3, 0
- adds r0, r7, 0
- bl sub_80AEE80
-_080AEDC8:
- str r0, [r4, 0x20]
- movs r0, 0x80
- strb r0, [r4]
- ldrb r1, [r5]
- movs r0, 0xF0
- ands r0, r1
- strb r0, [r5]
-_080AEDD6:
- add sp, 0x18
- pop {r0-r7}
- mov r8, r0
- mov r9, r1
- mov r10, r2
- mov r11, r3
- pop {r0}
- bx r0
- .align 2, 0
-_080AEDE8: .4byte SOUND_INFO_PTR
-_080AEDEC: .4byte gUnknown_826FC00
- thumb_func_end sub_80AEBF0
-
- thumb_func_start sub_80AEDF0
-sub_80AEDF0:
- push {r4,r5}
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- cmp r3, 0x80
- bcs _080AEE02
- strb r3, [r1, 0x5]
- adds r2, 0x1
- str r2, [r1, 0x40]
- b _080AEE04
-_080AEE02:
- ldrb r3, [r1, 0x5]
-_080AEE04:
- ldr r1, [r1, 0x20]
- cmp r1, 0
- beq _080AEE2C
- movs r4, 0x83
- movs r5, 0x40
-_080AEE0E:
- ldrb r2, [r1]
- tst r2, r4
- beq _080AEE26
- tst r2, r5
- bne _080AEE26
- ldrb r0, [r1, 0x11]
- cmp r0, r3
- bne _080AEE26
- movs r0, 0x40
- orrs r2, r0
- strb r2, [r1]
- b _080AEE2C
-_080AEE26:
- ldr r1, [r1, 0x34]
- cmp r1, 0
- bne _080AEE0E
-_080AEE2C:
- pop {r4,r5}
- bx lr
- thumb_func_end sub_80AEDF0
-
- thumb_func_start sub_80AEE30
-sub_80AEE30:
- movs r2, 0
- strb r2, [r1, 0x16]
- strb r2, [r1, 0x1A]
- ldrb r2, [r1, 0x18]
- cmp r2, 0
- bne _080AEE40
- movs r2, 0xC
- b _080AEE42
-_080AEE40:
- movs r2, 0x3
-_080AEE42:
- ldrb r3, [r1]
- orrs r3, r2
- strb r3, [r1]
- bx lr
- thumb_func_end sub_80AEE30
-
- thumb_func_start sub_80AEE4C
-sub_80AEE4C:
- ldr r2, [r1, 0x40]
- adds r3, r2, 0x1
- str r3, [r1, 0x40]
- ldrb r3, [r2]
- bx lr
- thumb_func_end sub_80AEE4C
-
- thumb_func_start sub_80AEE58
-sub_80AEE58:
- mov r12, lr
- bl sub_80AEE4C
- strb r3, [r1, 0x19]
- cmp r3, 0
- bne _080AEE68
- bl sub_80AEE30
-_080AEE68:
- bx r12
- thumb_func_end sub_80AEE58
-
- thumb_func_start sub_80AEE6C
-sub_80AEE6C:
- mov r12, lr
- bl sub_80AEE4C
- strb r3, [r1, 0x17]
- cmp r3, 0
- bne _080AEE7C
- bl sub_80AEE30
-_080AEE7C:
- bx r12
- thumb_func_end sub_80AEE6C
-
- thumb_func_start sub_80AEE80
-sub_80AEE80:
- push {r4-r7,lr}
- mov r12, r0
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r7, r2, 24
- cmp r6, 0xB2
- bls _080AEE94
- movs r6, 0xB2
- movs r7, 0xFF
- lsls r7, 24
-_080AEE94:
- ldr r3, _080AEEDC
- adds r0, r6, r3
- ldrb r5, [r0]
- ldr r4, _080AEEE0
- movs r2, 0xF
- adds r0, r5, 0
- ands r0, r2
- lsls r0, 2
- adds r0, r4
- lsrs r1, r5, 4
- ldr r5, [r0]
- lsrs r5, r1
- adds r0, r6, 0x1
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r1, 0
- ands r0, r2
- lsls r0, 2
- adds r0, r4
- lsrs r1, 4
- ldr r0, [r0]
- lsrs r0, r1
- mov r1, r12
- ldr r4, [r1, 0x4]
- subs r0, r5
- adds r1, r7, 0
- bl umul3232H32
- adds r1, r0, 0
- adds r1, r5, r1
- adds r0, r4, 0
- bl umul3232H32
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080AEEDC: .4byte gUnknown_826FA1C
-_080AEEE0: .4byte gUnknown_826FAD0
- thumb_func_end sub_80AEE80
-
- thumb_func_start nullsub_212
-nullsub_212:
- bx lr
- thumb_func_end nullsub_212
-
- thumb_func_start sub_80AEEE8
-sub_80AEEE8:
- adds r2, r0, 0
- ldr r3, [r2, 0x34]
- ldr r0, _080AEEFC
- cmp r3, r0
- bne _080AEEFA
- ldr r0, [r2, 0x4]
- ldr r1, _080AEF00
- ands r0, r1
- str r0, [r2, 0x4]
-_080AEEFA:
- bx lr
- .align 2, 0
-_080AEEFC: .4byte 0x68736d53
-_080AEF00: .4byte 0x7fffffff
- thumb_func_end sub_80AEEE8
-
- thumb_func_start sub_80AEF04
-sub_80AEF04:
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AEF20
- cmp r3, r0
- bne _080AEF1C
- strh r1, [r2, 0x26]
- strh r1, [r2, 0x24]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r2, 0x28]
-_080AEF1C:
- bx lr
- .align 2, 0
-_080AEF20: .4byte 0x68736d53
- thumb_func_end sub_80AEF04
-
- thumb_func_start sub_80AEF24
-sub_80AEF24:
- push {r4-r6,lr}
- ldr r0, _080AEF78
- movs r1, 0x2
- negs r1, r1
- ands r0, r1
- ldr r1, _080AEF7C
- ldr r2, _080AEF80
- bl CpuSet
- ldr r0, _080AEF84
- bl sub_80AF324
- ldr r0, _080AEF88
- bl sub_80AF1E0
- ldr r0, _080AEF8C
- bl sub_80AF4C0
- ldr r0, _080AEF90
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080AEF72
- ldr r5, _080AEF94
- adds r6, r0, 0
-_080AEF56:
- ldr r4, [r5]
- ldr r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- adds r0, r4, 0
- bl sub_80AF664
- ldrh r0, [r5, 0xA]
- strb r0, [r4, 0xB]
- ldr r0, _080AEF98
- str r0, [r4, 0x18]
- adds r5, 0xC
- subs r6, 0x1
- cmp r6, 0
- bne _080AEF56
-_080AEF72:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEF78: .4byte SoundMainRAM
-_080AEF7C: .4byte SoundMainRAM_Buffer
-_080AEF80: .4byte 0x04000100
-_080AEF84: .4byte gUnknown_2039ED0
-_080AEF88: .4byte gUnknown_203AF10
-_080AEF8C: .4byte 0x0096e500
-_080AEF90: .4byte 0x00000008
-_080AEF94: .4byte 0x09e8665c
-_080AEF98: .4byte gUnknown_2000A30
- thumb_func_end sub_80AEF24
-
- thumb_func_start m4aSoundMain
-m4aSoundMain:
- push {lr}
- bl SoundMain
- pop {r0}
- bx r0
- thumb_func_end m4aSoundMain
-
- thumb_func_start sub_80AEFA8
-sub_80AEFA8:
- push {lr}
- lsls r0, 16
- ldr r2, _080AEFCC
- ldr r1, _080AEFD0
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r2, [r1]
- ldr r1, [r0]
- adds r0, r2, 0
- bl sub_80AF6DC
- pop {r0}
- bx r0
- .align 2, 0
-_080AEFCC: .4byte 0x09e8665c
-_080AEFD0: .4byte 0x09e866bc
- thumb_func_end sub_80AEFA8
-
- thumb_func_start sub_80AEFD4
-sub_80AEFD4:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF000
- ldr r1, _080AF004
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- ldr r3, [r1]
- ldr r2, [r0]
- cmp r3, r2
- beq _080AF008
- adds r0, r1, 0
- adds r1, r2, 0
- bl sub_80AF6DC
- b _080AF01C
- .align 2, 0
-_080AF000: .4byte 0x09e8665c
-_080AF004: .4byte 0x09e866bc
-_080AF008:
- ldr r2, [r1, 0x4]
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- beq _080AF014
- cmp r2, 0
- bge _080AF01C
-_080AF014:
- adds r0, r1, 0
- adds r1, r3, 0
- bl sub_80AF6DC
-_080AF01C:
- pop {r0}
- bx r0
- thumb_func_end sub_80AEFD4
-
- thumb_func_start sub_80AF020
-sub_80AF020:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF04C
- ldr r1, _080AF050
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- ldr r3, [r1]
- ldr r2, [r0]
- cmp r3, r2
- beq _080AF054
- adds r0, r1, 0
- adds r1, r2, 0
- bl sub_80AF6DC
- b _080AF070
- .align 2, 0
-_080AF04C: .4byte 0x09e8665c
-_080AF050: .4byte 0x09e866bc
-_080AF054:
- ldr r2, [r1, 0x4]
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- bne _080AF066
- adds r0, r1, 0
- adds r1, r3, 0
- bl sub_80AF6DC
- b _080AF070
-_080AF066:
- cmp r2, 0
- bge _080AF070
- adds r0, r1, 0
- bl sub_80AEEE8
-_080AF070:
- pop {r0}
- bx r0
- thumb_func_end sub_80AF020
-
- thumb_func_start sub_80AF074
-sub_80AF074:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF0A0
- ldr r1, _080AF0A4
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r2, [r1]
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- bne _080AF09A
- adds r0, r2, 0
- bl sub_80AF7C0
-_080AF09A:
- pop {r0}
- bx r0
- .align 2, 0
-_080AF0A0: .4byte 0x09e8665c
-_080AF0A4: .4byte 0x09e866bc
- thumb_func_end sub_80AF074
-
- thumb_func_start sub_80AF0A8
-sub_80AF0A8:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF0D4
- ldr r1, _080AF0D8
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r2, [r1]
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- bne _080AF0CE
- adds r0, r2, 0
- bl sub_80AEEE8
-_080AF0CE:
- pop {r0}
- bx r0
- .align 2, 0
-_080AF0D4: .4byte 0x09e8665c
-_080AF0D8: .4byte 0x09e866bc
- thumb_func_end sub_80AF0A8
-
- thumb_func_start sub_80AF0DC
-sub_80AF0DC:
- push {r4,r5,lr}
- ldr r0, _080AF100
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080AF0FA
- ldr r5, _080AF104
- adds r4, r0, 0
-_080AF0EC:
- ldr r0, [r5]
- bl sub_80AF7C0
- adds r5, 0xC
- subs r4, 0x1
- cmp r4, 0
- bne _080AF0EC
-_080AF0FA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF100: .4byte 0x00000008
-_080AF104: .4byte 0x09e8665c
- thumb_func_end sub_80AF0DC
-
- thumb_func_start sub_80AF108
-sub_80AF108:
- push {lr}
- bl sub_80AEEE8
- pop {r0}
- bx r0
- thumb_func_end sub_80AF108
-
- thumb_func_start sub_80AF114
-sub_80AF114:
- push {r4,r5,lr}
- ldr r0, _080AF138
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080AF132
- ldr r5, _080AF13C
- adds r4, r0, 0
-_080AF124:
- ldr r0, [r5]
- bl sub_80AEEE8
- adds r5, 0xC
- subs r4, 0x1
- cmp r4, 0
- bne _080AF124
-_080AF132:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF138: .4byte 0x00000008
-_080AF13C: .4byte 0x09e8665c
- thumb_func_end sub_80AF114
-
- thumb_func_start sub_80AF140
-sub_80AF140:
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl sub_80AEF04
- pop {r0}
- bx r0
- thumb_func_end sub_80AF140
-
- thumb_func_start sub_80AF150
-sub_80AF150:
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AF168
- cmp r3, r0
- bne _080AF166
- strh r1, [r2, 0x26]
- strh r1, [r2, 0x24]
- ldr r0, _080AF16C
- strh r0, [r2, 0x28]
-_080AF166:
- bx lr
- .align 2, 0
-_080AF168: .4byte 0x68736d53
-_080AF16C: .4byte 0x00000101
- thumb_func_end sub_80AF150
-
- thumb_func_start sub_80AF170
-sub_80AF170:
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AF190
- cmp r3, r0
- bne _080AF18E
- strh r1, [r2, 0x26]
- strh r1, [r2, 0x24]
- movs r0, 0x2
- strh r0, [r2, 0x28]
- ldr r0, [r2, 0x4]
- ldr r1, _080AF194
- ands r0, r1
- str r0, [r2, 0x4]
-_080AF18E:
- bx lr
- .align 2, 0
-_080AF190: .4byte 0x68736d53
-_080AF194: .4byte 0x7fffffff
- thumb_func_end sub_80AF170
-
- thumb_func_start sub_80AF198
-sub_80AF198:
- push {r4-r7,lr}
- ldrb r5, [r0, 0x8]
- ldr r4, [r0, 0x2C]
- cmp r5, 0
- ble _080AF1DA
- movs r7, 0x80
-_080AF1A4:
- ldrb r1, [r4]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _080AF1D2
- movs r6, 0x40
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _080AF1D2
- adds r0, r4, 0
- bl sub_80AF310
- strb r7, [r4]
- movs r0, 0x2
- strb r0, [r4, 0xF]
- strb r6, [r4, 0x13]
- movs r0, 0x16
- strb r0, [r4, 0x19]
- adds r1, r4, 0
- adds r1, 0x24
- movs r0, 0x1
- strb r0, [r1]
-_080AF1D2:
- subs r5, 0x1
- adds r4, 0x50
- cmp r5, 0
- bgt _080AF1A4
-_080AF1DA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF198
-
- thumb_func_start sub_80AF1E0
-sub_80AF1E0:
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldr r1, _080AF2A8
- movs r0, 0x8F
- strh r0, [r1]
- ldr r3, _080AF2AC
- movs r2, 0
- strh r2, [r3]
- ldr r0, _080AF2B0
- movs r1, 0x8
- strb r1, [r0]
- adds r0, 0x6
- strb r1, [r0]
- adds r0, 0x10
- strb r1, [r0]
- subs r0, 0x14
- movs r1, 0x80
- strb r1, [r0]
- adds r0, 0x8
- strb r1, [r0]
- adds r0, 0x10
- strb r1, [r0]
- subs r0, 0xD
- strb r2, [r0]
- movs r0, 0x77
- strb r0, [r3]
- ldr r0, _080AF2B4
- ldr r4, [r0]
- ldr r6, [r4]
- ldr r0, _080AF2B8
- cmp r6, r0
- bne _080AF2A0
- adds r0, r6, 0x1
- str r0, [r4]
- ldr r1, _080AF2BC
- ldr r0, _080AF2C0
- str r0, [r1, 0x20]
- ldr r0, _080AF2C4
- str r0, [r1, 0x44]
- ldr r0, _080AF2C8
- str r0, [r1, 0x4C]
- ldr r0, _080AF2CC
- str r0, [r1, 0x70]
- ldr r0, _080AF2D0
- str r0, [r1, 0x74]
- ldr r0, _080AF2D4
- str r0, [r1, 0x78]
- ldr r0, _080AF2D8
- str r0, [r1, 0x7C]
- adds r2, r1, 0
- adds r2, 0x80
- ldr r0, _080AF2DC
- str r0, [r2]
- adds r1, 0x84
- ldr r0, _080AF2E0
- str r0, [r1]
- str r5, [r4, 0x1C]
- ldr r0, _080AF2E4
- str r0, [r4, 0x28]
- ldr r0, _080AF2E8
- str r0, [r4, 0x2C]
- ldr r0, _080AF2EC
- str r0, [r4, 0x30]
- ldr r0, _080AF2F0
- movs r1, 0
- strb r0, [r4, 0xC]
- str r1, [sp]
- ldr r2, _080AF2F4
- mov r0, sp
- adds r1, r5, 0
- bl CpuSet
- movs r0, 0x1
- strb r0, [r5, 0x1]
- movs r0, 0x11
- strb r0, [r5, 0x1C]
- adds r1, r5, 0
- adds r1, 0x41
- movs r0, 0x2
- strb r0, [r1]
- adds r1, 0x1B
- movs r0, 0x22
- strb r0, [r1]
- adds r1, 0x25
- movs r0, 0x3
- strb r0, [r1]
- adds r1, 0x1B
- movs r0, 0x44
- strb r0, [r1]
- adds r1, 0x24
- movs r0, 0x4
- strb r0, [r1, 0x1]
- movs r0, 0x88
- strb r0, [r1, 0x1C]
- str r6, [r4]
-_080AF2A0:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF2A8: .4byte 0x04000084
-_080AF2AC: .4byte 0x04000080
-_080AF2B0: .4byte 0x04000063
-_080AF2B4: .4byte SOUND_INFO_PTR
-_080AF2B8: .4byte 0x68736d53
-_080AF2BC: .4byte gUnknown_203AE80
-_080AF2C0: .4byte sub_80B019C
-_080AF2C4: .4byte sub_80AEE58
-_080AF2C8: .4byte sub_80AEE6C
-_080AF2CC: .4byte sub_80B02F4
-_080AF2D0: .4byte sub_80AEDF0
-_080AF2D4: .4byte sub_80AF41C
-_080AF2D8: .4byte sub_80AEB7C
-_080AF2DC: .4byte sub_80AF800
-_080AF2E0: .4byte sub_80AF8C8
-_080AF2E4: .4byte sub_80AFADC
-_080AF2E8: .4byte sub_80AFA24
-_080AF2EC: .4byte sub_80AF97C
-_080AF2F0: .4byte 0x00000000
-_080AF2F4: .4byte 0x05000040
- thumb_func_end sub_80AF1E0
-
- thumb_func_start sub_80AF2F8
-sub_80AF2F8:
- swi 0x2A
- bx lr
- thumb_func_end sub_80AF2F8
-
- thumb_func_start sub_80AF2FC
-sub_80AF2FC:
- push {lr}
- ldr r1, _080AF30C
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080AF30C: .4byte gUnknown_203AF08
- thumb_func_end sub_80AF2FC
-
- thumb_func_start sub_80AF310
-sub_80AF310:
- push {lr}
- ldr r1, _080AF320
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080AF320: .4byte gUnknown_203AF0C
- thumb_func_end sub_80AF310
-
- thumb_func_start sub_80AF324
-sub_80AF324:
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r3, 0
- str r3, [r5]
- ldr r1, _080AF3DC
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 18
- ands r0, r2
- cmp r0, 0
- beq _080AF340
- ldr r0, _080AF3E0
- str r0, [r1]
-_080AF340:
- ldr r1, _080AF3E4
- ldr r0, [r1]
- ands r0, r2
- cmp r0, 0
- beq _080AF34E
- ldr r0, _080AF3E0
- str r0, [r1]
-_080AF34E:
- ldr r0, _080AF3E8
- movs r2, 0x80
- lsls r2, 3
- adds r1, r2, 0
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- ldr r1, _080AF3EC
- movs r0, 0x8F
- strh r0, [r1]
- subs r1, 0x2
- ldr r2, _080AF3F0
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, _080AF3F4
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080AF3F8
- movs r2, 0xD4
- lsls r2, 2
- adds r0, r5, r2
- str r0, [r1]
- adds r1, 0x4
- ldr r0, _080AF3FC
- str r0, [r1]
- adds r1, 0x8
- movs r2, 0x98
- lsls r2, 4
- adds r0, r5, r2
- str r0, [r1]
- adds r1, 0x4
- ldr r0, _080AF400
- str r0, [r1]
- ldr r0, _080AF404
- str r5, [r0]
- str r3, [sp]
- ldr r2, _080AF408
- mov r0, sp
- adds r1, r5, 0
- bl CpuSet
- movs r0, 0x8
- strb r0, [r5, 0x6]
- movs r0, 0xF
- strb r0, [r5, 0x7]
- ldr r0, _080AF40C
- str r0, [r5, 0x38]
- ldr r0, _080AF410
- str r0, [r5, 0x28]
- str r0, [r5, 0x2C]
- str r0, [r5, 0x30]
- str r0, [r5, 0x3C]
- ldr r4, _080AF414
- adds r0, r4, 0
- bl sub_80AE704
- str r4, [r5, 0x34]
- movs r0, 0x80
- lsls r0, 11
- bl sub_80AF41C
- ldr r0, _080AF418
- str r0, [r5]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF3DC: .4byte 0x040000c4
-_080AF3E0: .4byte 0x84400004
-_080AF3E4: .4byte 0x040000d0
-_080AF3E8: .4byte 0x040000c6
-_080AF3EC: .4byte 0x04000084
-_080AF3F0: .4byte 0x0000a90e
-_080AF3F4: .4byte 0x04000089
-_080AF3F8: .4byte 0x040000bc
-_080AF3FC: .4byte 0x040000a0
-_080AF400: .4byte 0x040000a4
-_080AF404: .4byte SOUND_INFO_PTR
-_080AF408: .4byte 0x050003ec
-_080AF40C: .4byte sub_80AEBF0
-_080AF410: .4byte nullsub_139
-_080AF414: .4byte gUnknown_203AE80
-_080AF418: .4byte 0x68736d53
- thumb_func_end sub_80AF324
-
- thumb_func_start sub_80AF41C
-sub_80AF41C:
- push {r4-r6,lr}
- adds r2, r0, 0
- ldr r0, _080AF49C
- ldr r4, [r0]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r2
- lsrs r2, r0, 16
- movs r6, 0
- strb r2, [r4, 0x8]
- ldr r1, _080AF4A0
- subs r0, r2, 0x1
- lsls r0, 1
- adds r0, r1
- ldrh r5, [r0]
- str r5, [r4, 0x10]
- movs r0, 0xC6
- lsls r0, 3
- adds r1, r5, 0
- bl __divsi3
- strb r0, [r4, 0xB]
- ldr r0, _080AF4A4
- muls r0, r5
- ldr r1, _080AF4A8
- adds r0, r1
- ldr r1, _080AF4AC
- bl __divsi3
- adds r1, r0, 0
- str r1, [r4, 0x14]
- movs r0, 0x80
- lsls r0, 17
- bl __divsi3
- adds r0, 0x1
- asrs r0, 1
- str r0, [r4, 0x18]
- ldr r0, _080AF4B0
- strh r6, [r0]
- ldr r4, _080AF4B4
- ldr r0, _080AF4B8
- adds r1, r5, 0
- bl __divsi3
- negs r0, r0
- strh r0, [r4]
- bl sub_80AF628
- ldr r1, _080AF4BC
-_080AF480:
- ldrb r0, [r1]
- cmp r0, 0x9F
- beq _080AF480
- ldr r1, _080AF4BC
-_080AF488:
- ldrb r0, [r1]
- cmp r0, 0x9F
- bne _080AF488
- ldr r1, _080AF4B0
- movs r0, 0x80
- strh r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF49C: .4byte SOUND_INFO_PTR
-_080AF4A0: .4byte gUnknown_826FB00
-_080AF4A4: .4byte 0x00091d1b
-_080AF4A8: .4byte 0x00001388
-_080AF4AC: .4byte 0x00002710
-_080AF4B0: .4byte 0x04000102
-_080AF4B4: .4byte 0x04000100
-_080AF4B8: .4byte 0x00044940
-_080AF4BC: .4byte 0x04000006
- thumb_func_end sub_80AF41C
-
- thumb_func_start sub_80AF4C0
-sub_80AF4C0:
- push {r4,r5,lr}
- adds r3, r0, 0
- ldr r0, _080AF54C
- ldr r5, [r0]
- ldr r1, [r5]
- ldr r0, _080AF550
- cmp r1, r0
- bne _080AF546
- adds r0, r1, 0x1
- str r0, [r5]
- movs r4, 0xFF
- ands r4, r3
- cmp r4, 0
- beq _080AF4E2
- movs r0, 0x7F
- ands r4, r0
- strb r4, [r5, 0x5]
-_080AF4E2:
- movs r4, 0xF0
- lsls r4, 4
- ands r4, r3
- cmp r4, 0
- beq _080AF502
- lsrs r0, r4, 8
- strb r0, [r5, 0x6]
- movs r4, 0xC
- adds r0, r5, 0
- adds r0, 0x50
- movs r1, 0
-_080AF4F8:
- strb r1, [r0]
- subs r4, 0x1
- adds r0, 0x40
- cmp r4, 0
- bne _080AF4F8
-_080AF502:
- movs r4, 0xF0
- lsls r4, 8
- ands r4, r3
- cmp r4, 0
- beq _080AF510
- lsrs r0, r4, 12
- strb r0, [r5, 0x7]
-_080AF510:
- movs r4, 0xB0
- lsls r4, 16
- ands r4, r3
- cmp r4, 0
- beq _080AF52E
- movs r0, 0xC0
- lsls r0, 14
- ands r0, r4
- lsrs r4, r0, 14
- ldr r2, _080AF554
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r4
- strb r0, [r2]
-_080AF52E:
- movs r4, 0xF0
- lsls r4, 12
- ands r4, r3
- cmp r4, 0
- beq _080AF542
- bl sub_80AF5AC
- adds r0, r4, 0
- bl sub_80AF41C
-_080AF542:
- ldr r0, _080AF550
- str r0, [r5]
-_080AF546:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF54C: .4byte SOUND_INFO_PTR
-_080AF550: .4byte 0x68736d53
-_080AF554: .4byte 0x04000089
- thumb_func_end sub_80AF4C0
-
- thumb_func_start sub_80AF558
-sub_80AF558:
- push {r4-r7,lr}
- ldr r0, _080AF5A4
- ldr r6, [r0]
- ldr r1, [r6]
- ldr r0, _080AF5A8
- cmp r1, r0
- bne _080AF59E
- adds r0, r1, 0x1
- str r0, [r6]
- movs r5, 0xC
- adds r4, r6, 0
- adds r4, 0x50
- movs r0, 0
-_080AF572:
- strb r0, [r4]
- subs r5, 0x1
- adds r4, 0x40
- cmp r5, 0
- bgt _080AF572
- ldr r4, [r6, 0x1C]
- cmp r4, 0
- beq _080AF59A
- movs r5, 0x1
- movs r7, 0
-_080AF586:
- lsls r0, r5, 24
- lsrs r0, 24
- ldr r1, [r6, 0x2C]
- bl _call_via_r1
- strb r7, [r4]
- adds r5, 0x1
- adds r4, 0x40
- cmp r5, 0x4
- ble _080AF586
-_080AF59A:
- ldr r0, _080AF5A8
- str r0, [r6]
-_080AF59E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF5A4: .4byte SOUND_INFO_PTR
-_080AF5A8: .4byte 0x68736d53
- thumb_func_end sub_80AF558
-
- thumb_func_start sub_80AF5AC
-sub_80AF5AC:
- push {lr}
- sub sp, 0x4
- ldr r0, _080AF60C
- ldr r2, [r0]
- ldr r1, [r2]
- ldr r3, _080AF610
- adds r0, r1, r3
- cmp r0, 0x1
- bhi _080AF604
- adds r0, r1, 0
- adds r0, 0xA
- str r0, [r2]
- ldr r1, _080AF614
- ldr r0, [r1]
- movs r3, 0x80
- lsls r3, 18
- ands r0, r3
- cmp r0, 0
- beq _080AF5D6
- ldr r0, _080AF618
- str r0, [r1]
-_080AF5D6:
- ldr r1, _080AF61C
- ldr r0, [r1]
- ands r0, r3
- cmp r0, 0
- beq _080AF5E4
- ldr r0, _080AF618
- str r0, [r1]
-_080AF5E4:
- ldr r0, _080AF620
- movs r3, 0x80
- lsls r3, 3
- adds r1, r3, 0
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xD4
- lsls r0, 2
- adds r1, r2, r0
- ldr r2, _080AF624
- mov r0, sp
- bl CpuSet
-_080AF604:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080AF60C: .4byte SOUND_INFO_PTR
-_080AF610: .4byte 0x978c92ad
-_080AF614: .4byte 0x040000c4
-_080AF618: .4byte 0x84400004
-_080AF61C: .4byte 0x040000d0
-_080AF620: .4byte 0x040000c6
-_080AF624: .4byte 0x05000318
- thumb_func_end sub_80AF5AC
-
- thumb_func_start sub_80AF628
-sub_80AF628:
- push {r4,lr}
- ldr r0, _080AF658
- ldr r2, [r0]
- ldr r3, [r2]
- ldr r0, _080AF65C
- cmp r3, r0
- beq _080AF650
- ldr r0, _080AF660
- movs r4, 0xB6
- lsls r4, 8
- adds r1, r4, 0
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- ldrb r0, [r2, 0x4]
- movs r0, 0
- strb r0, [r2, 0x4]
- adds r0, r3, 0
- subs r0, 0xA
- str r0, [r2]
-_080AF650:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF658: .4byte SOUND_INFO_PTR
-_080AF65C: .4byte 0x68736d53
-_080AF660: .4byte 0x040000c6
- thumb_func_end sub_80AF628
-
- thumb_func_start sub_80AF664
-sub_80AF664:
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0
- beq _080AF6C8
- cmp r4, 0x10
- bls _080AF678
- movs r4, 0x10
-_080AF678:
- ldr r0, _080AF6D0
- ldr r5, [r0]
- ldr r1, [r5]
- ldr r0, _080AF6D4
- cmp r1, r0
- bne _080AF6C8
- adds r0, r1, 0x1
- str r0, [r5]
- adds r0, r7, 0
- bl sub_80AF310
- str r6, [r7, 0x2C]
- strb r4, [r7, 0x8]
- movs r0, 0x80
- lsls r0, 24
- str r0, [r7, 0x4]
- cmp r4, 0
- beq _080AF6AC
- movs r1, 0
-_080AF69E:
- strb r1, [r6]
- subs r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, 0x50
- cmp r4, 0
- bne _080AF69E
-_080AF6AC:
- ldr r0, [r5, 0x20]
- cmp r0, 0
- beq _080AF6BC
- str r0, [r7, 0x38]
- ldr r0, [r5, 0x24]
- str r0, [r7, 0x3C]
- movs r0, 0
- str r0, [r5, 0x20]
-_080AF6BC:
- str r7, [r5, 0x24]
- ldr r0, _080AF6D8
- str r0, [r5, 0x20]
- ldr r0, _080AF6D4
- str r0, [r5]
- str r0, [r7, 0x34]
-_080AF6C8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF6D0: .4byte SOUND_INFO_PTR
-_080AF6D4: .4byte 0x68736d53
-_080AF6D8: .4byte sub_80AE914
- thumb_func_end sub_80AF664
-
- thumb_func_start sub_80AF6DC
-sub_80AF6DC:
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- adds r7, r1, 0
- ldr r1, [r5, 0x34]
- ldr r0, _080AF7BC
- cmp r1, r0
- bne _080AF7B2
- ldrb r0, [r5, 0xB]
- ldrb r2, [r7, 0x2]
- cmp r0, 0
- beq _080AF71E
- ldr r0, [r5]
- cmp r0, 0
- beq _080AF708
- ldr r1, [r5, 0x2C]
- movs r0, 0x40
- ldrb r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _080AF714
-_080AF708:
- ldr r1, [r5, 0x4]
- ldrh r0, [r5, 0x4]
- cmp r0, 0
- beq _080AF71E
- cmp r1, 0
- blt _080AF71E
-_080AF714:
- ldrb r0, [r7, 0x2]
- adds r2, r0, 0
- ldrb r0, [r5, 0x9]
- cmp r0, r2
- bhi _080AF7B2
-_080AF71E:
- ldr r0, [r5, 0x34]
- adds r0, 0x1
- str r0, [r5, 0x34]
- movs r1, 0
- str r1, [r5, 0x4]
- str r7, [r5]
- ldr r0, [r7, 0x4]
- str r0, [r5, 0x30]
- strb r2, [r5, 0x9]
- str r1, [r5, 0xC]
- movs r0, 0x96
- strh r0, [r5, 0x1C]
- strh r0, [r5, 0x20]
- adds r0, 0x6A
- strh r0, [r5, 0x1E]
- strh r1, [r5, 0x22]
- strh r1, [r5, 0x24]
- movs r6, 0
- ldr r4, [r5, 0x2C]
- ldrb r1, [r7]
- cmp r6, r1
- bge _080AF77E
- ldrb r0, [r5, 0x8]
- cmp r6, r0
- bge _080AF79E
- mov r8, r6
-_080AF752:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80AEB7C
- movs r0, 0xC0
- strb r0, [r4]
- mov r1, r8
- str r1, [r4, 0x20]
- lsls r1, r6, 2
- adds r0, r7, 0
- adds r0, 0x8
- adds r0, r1
- ldr r0, [r0]
- str r0, [r4, 0x40]
- adds r6, 0x1
- adds r4, 0x50
- ldrb r0, [r7]
- cmp r6, r0
- bge _080AF77E
- ldrb r1, [r5, 0x8]
- cmp r6, r1
- blt _080AF752
-_080AF77E:
- ldrb r0, [r5, 0x8]
- cmp r6, r0
- bge _080AF79E
- movs r1, 0
- mov r8, r1
-_080AF788:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80AEB7C
- mov r0, r8
- strb r0, [r4]
- adds r6, 0x1
- adds r4, 0x50
- ldrb r1, [r5, 0x8]
- cmp r6, r1
- blt _080AF788
-_080AF79E:
- movs r0, 0x80
- ldrb r1, [r7, 0x3]
- ands r0, r1
- cmp r0, 0
- beq _080AF7AE
- ldrb r0, [r7, 0x3]
- bl sub_80AF4C0
-_080AF7AE:
- ldr r0, _080AF7BC
- str r0, [r5, 0x34]
-_080AF7B2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF7BC: .4byte 0x68736d53
- thumb_func_end sub_80AF6DC
-
- thumb_func_start sub_80AF7C0
-sub_80AF7C0:
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r1, [r6, 0x34]
- ldr r0, _080AF7FC
- cmp r1, r0
- bne _080AF7F6
- adds r0, r1, 0x1
- str r0, [r6, 0x34]
- ldr r0, [r6, 0x4]
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r6, 0x4]
- ldrb r4, [r6, 0x8]
- ldr r5, [r6, 0x2C]
- cmp r4, 0
- ble _080AF7F2
-_080AF7E2:
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_80AEB7C
- subs r4, 0x1
- adds r5, 0x50
- cmp r4, 0
- bgt _080AF7E2
-_080AF7F2:
- ldr r0, _080AF7FC
- str r0, [r6, 0x34]
-_080AF7F6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF7FC: .4byte 0x68736d53
- thumb_func_end sub_80AF7C0
-
- thumb_func_start sub_80AF800
-sub_80AF800:
- push {r4-r7,lr}
- adds r6, r0, 0
- ldrh r1, [r6, 0x24]
- cmp r1, 0
- beq _080AF8C2
- ldrh r0, [r6, 0x26]
- subs r0, 0x1
- strh r0, [r6, 0x26]
- ldr r3, _080AF840
- adds r2, r3, 0
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- bne _080AF8C2
- strh r1, [r6, 0x26]
- ldrh r1, [r6, 0x28]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080AF844
- adds r0, r1, 0
- adds r0, 0x10
- strh r0, [r6, 0x28]
- ands r0, r2
- cmp r0, 0xFF
- bls _080AF896
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r6, 0x28]
- strh r3, [r6, 0x24]
- b _080AF896
- .align 2, 0
-_080AF840: .4byte 0x0000ffff
-_080AF844:
- adds r0, r1, 0
- subs r0, 0x10
- strh r0, [r6, 0x28]
- ands r0, r2
- lsls r0, 16
- cmp r0, 0
- bgt _080AF896
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- cmp r5, 0
- ble _080AF876
-_080AF85A:
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_80AEB7C
- movs r0, 0x1
- ldrh r7, [r6, 0x28]
- ands r0, r7
- cmp r0, 0
- bne _080AF86E
- strb r0, [r4]
-_080AF86E:
- subs r5, 0x1
- adds r4, 0x50
- cmp r5, 0
- bgt _080AF85A
-_080AF876:
- movs r0, 0x1
- ldrh r1, [r6, 0x28]
- ands r0, r1
- cmp r0, 0
- beq _080AF88A
- ldr r0, [r6, 0x4]
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- b _080AF88E
-_080AF88A:
- movs r0, 0x80
- lsls r0, 24
-_080AF88E:
- str r0, [r6, 0x4]
- movs r0, 0
- strh r0, [r6, 0x24]
- b _080AF8C2
-_080AF896:
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- cmp r5, 0
- ble _080AF8C2
- movs r3, 0x80
- movs r7, 0
- movs r2, 0x3
-_080AF8A4:
- ldrb r1, [r4]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080AF8BA
- ldrh r7, [r6, 0x28]
- lsrs r0, r7, 2
- strb r0, [r4, 0x13]
- adds r0, r1, 0
- orrs r0, r2
- strb r0, [r4]
-_080AF8BA:
- subs r5, 0x1
- adds r4, 0x50
- cmp r5, 0
- bgt _080AF8A4
-_080AF8C2:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF800
-
- thumb_func_start sub_80AF8C8
-sub_80AF8C8:
- push {r4,lr}
- adds r2, r1, 0
- movs r0, 0x1
- ldrb r1, [r2]
- ands r0, r1
- cmp r0, 0
- beq _080AF92C
- ldrb r3, [r2, 0x13]
- ldrb r1, [r2, 0x12]
- adds r0, r3, 0
- muls r0, r1
- lsrs r3, r0, 5
- ldrb r4, [r2, 0x18]
- cmp r4, 0x1
- bne _080AF8F0
- movs r0, 0x16
- ldrsb r0, [r2, r0]
- adds r0, 0x80
- muls r0, r3
- lsrs r3, r0, 7
-_080AF8F0:
- movs r0, 0x14
- ldrsb r0, [r2, r0]
- lsls r0, 1
- movs r1, 0x15
- ldrsb r1, [r2, r1]
- adds r1, r0, r1
- cmp r4, 0x2
- bne _080AF906
- movs r0, 0x16
- ldrsb r0, [r2, r0]
- adds r1, r0
-_080AF906:
- movs r0, 0x80
- negs r0, r0
- cmp r1, r0
- bge _080AF912
- adds r1, r0, 0
- b _080AF918
-_080AF912:
- cmp r1, 0x7F
- ble _080AF918
- movs r1, 0x7F
-_080AF918:
- adds r0, r1, 0
- adds r0, 0x80
- muls r0, r3
- lsrs r0, 8
- strb r0, [r2, 0x10]
- movs r0, 0x7F
- subs r0, r1
- muls r0, r3
- lsrs r0, 8
- strb r0, [r2, 0x11]
-_080AF92C:
- ldrb r1, [r2]
- movs r0, 0x4
- ands r0, r1
- adds r3, r1, 0
- cmp r0, 0
- beq _080AF970
- movs r0, 0xE
- ldrsb r0, [r2, r0]
- ldrb r1, [r2, 0xF]
- muls r0, r1
- movs r1, 0xC
- ldrsb r1, [r2, r1]
- adds r1, r0
- lsls r1, 2
- movs r0, 0xA
- ldrsb r0, [r2, r0]
- lsls r0, 8
- adds r1, r0
- movs r0, 0xB
- ldrsb r0, [r2, r0]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0xD]
- adds r1, r0, r1
- ldrb r0, [r2, 0x18]
- cmp r0, 0
- bne _080AF96A
- movs r0, 0x16
- ldrsb r0, [r2, r0]
- lsls r0, 4
- adds r1, r0
-_080AF96A:
- asrs r0, r1, 8
- strb r0, [r2, 0x8]
- strb r1, [r2, 0x9]
-_080AF970:
- movs r0, 0xFA
- ands r0, r3
- strb r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF8C8
-
- thumb_func_start sub_80AF97C
-sub_80AF97C:
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r12, r2
- cmp r0, 0x4
- bne _080AF9B4
- cmp r5, 0x14
- bhi _080AF998
- movs r5, 0
- b _080AF9A6
-_080AF998:
- adds r0, r5, 0
- subs r0, 0x15
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3B
- bls _080AF9A6
- movs r5, 0x3B
-_080AF9A6:
- ldr r0, _080AF9B0
- adds r0, r5, r0
- ldrb r0, [r0]
- b _080AFA16
- .align 2, 0
-_080AF9B0: .4byte gUnknown_826FBB4
-_080AF9B4:
- cmp r5, 0x23
- bhi _080AF9C0
- movs r0, 0
- mov r12, r0
- movs r5, 0
- b _080AF9D2
-_080AF9C0:
- adds r0, r5, 0
- subs r0, 0x24
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x82
- bls _080AF9D2
- movs r5, 0x82
- movs r1, 0xFF
- mov r12, r1
-_080AF9D2:
- ldr r3, _080AFA1C
- adds r0, r5, r3
- ldrb r6, [r0]
- ldr r4, _080AFA20
- movs r2, 0xF
- adds r0, r6, 0
- ands r0, r2
- lsls r0, 1
- adds r0, r4
- movs r7, 0
- ldrsh r1, [r0, r7]
- asrs r0, r6, 4
- adds r6, r1, 0
- asrs r6, r0
- adds r0, r5, 0x1
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r1, 0
- ands r0, r2
- lsls r0, 1
- adds r0, r4
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r1, 4
- asrs r0, r1
- subs r0, r6
- mov r7, r12
- muls r7, r0
- adds r0, r7, 0
- asrs r0, 8
- adds r0, r6, r0
- movs r1, 0x80
- lsls r1, 4
- adds r0, r1
-_080AFA16:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080AFA1C: .4byte gUnknown_826FB18
-_080AFA20: .4byte gUnknown_826FB9C
- thumb_func_end sub_80AF97C
-
- thumb_func_start sub_80AFA24
-sub_80AFA24:
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x2
- beq _080AFA4C
- cmp r0, 0x2
- bgt _080AFA38
- cmp r0, 0x1
- beq _080AFA3E
- b _080AFA60
-_080AFA38:
- cmp r1, 0x3
- beq _080AFA54
- b _080AFA60
-_080AFA3E:
- ldr r1, _080AFA48
- movs r0, 0x8
- strb r0, [r1]
- adds r1, 0x2
- b _080AFA68
- .align 2, 0
-_080AFA48: .4byte 0x04000063
-_080AFA4C:
- ldr r1, _080AFA50
- b _080AFA62
- .align 2, 0
-_080AFA50: .4byte 0x04000069
-_080AFA54:
- ldr r1, _080AFA5C
- movs r0, 0
- b _080AFA6A
- .align 2, 0
-_080AFA5C: .4byte 0x04000070
-_080AFA60:
- ldr r1, _080AFA70
-_080AFA62:
- movs r0, 0x8
- strb r0, [r1]
- adds r1, 0x4
-_080AFA68:
- movs r0, 0x80
-_080AFA6A:
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080AFA70: .4byte 0x04000079
- thumb_func_end sub_80AFA24
-
- thumb_func_start sub_80AFA74
-sub_80AFA74:
- push {r4,lr}
- adds r1, r0, 0
- ldrb r0, [r1, 0x2]
- lsls r2, r0, 24
- lsrs r4, r2, 24
- ldrb r3, [r1, 0x3]
- lsls r0, r3, 24
- lsrs r3, r0, 24
- cmp r4, r3
- bcc _080AFA94
- lsrs r0, r2, 25
- cmp r0, r3
- bcc _080AFAA0
- movs r0, 0xF
- strb r0, [r1, 0x1B]
- b _080AFAAE
-_080AFA94:
- lsrs r0, 25
- cmp r0, r4
- bcc _080AFAA0
- movs r0, 0xF0
- strb r0, [r1, 0x1B]
- b _080AFAAE
-_080AFAA0:
- movs r0, 0xFF
- strb r0, [r1, 0x1B]
- ldrb r2, [r1, 0x3]
- ldrb r3, [r1, 0x2]
- adds r0, r2, r3
- lsrs r0, 4
- b _080AFABE
-_080AFAAE:
- ldrb r2, [r1, 0x3]
- ldrb r3, [r1, 0x2]
- adds r0, r2, r3
- lsrs r0, 4
- strb r0, [r1, 0xA]
- cmp r0, 0xF
- bls _080AFAC0
- movs r0, 0xF
-_080AFABE:
- strb r0, [r1, 0xA]
-_080AFAC0:
- ldrb r2, [r1, 0x6]
- ldrb r3, [r1, 0xA]
- adds r0, r2, 0
- muls r0, r3
- adds r0, 0xF
- asrs r0, 4
- strb r0, [r1, 0x19]
- ldrb r0, [r1, 0x1C]
- ldrb r2, [r1, 0x1B]
- ands r0, r2
- strb r0, [r1, 0x1B]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AFA74
-
- thumb_func_start sub_80AFADC
-sub_80AFADC:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r0, _080AFAFC
- ldr r0, [r0]
- str r0, [sp, 0x4]
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- beq _080AFB00
- subs r0, 0x1
- ldr r1, [sp, 0x4]
- strb r0, [r1, 0xA]
- b _080AFB06
- .align 2, 0
-_080AFAFC: .4byte SOUND_INFO_PTR
-_080AFB00:
- movs r0, 0xE
- ldr r2, [sp, 0x4]
- strb r0, [r2, 0xA]
-_080AFB06:
- movs r6, 0x1
- ldr r0, [sp, 0x4]
- ldr r4, [r0, 0x1C]
-_080AFB0C:
- ldrb r1, [r4]
- movs r0, 0xC7
- ands r0, r1
- adds r2, r6, 0x1
- mov r10, r2
- movs r2, 0x40
- adds r2, r4
- mov r9, r2
- cmp r0, 0
- bne _080AFB22
- b _080AFF0C
-_080AFB22:
- cmp r6, 0x2
- beq _080AFB54
- cmp r6, 0x2
- bgt _080AFB30
- cmp r6, 0x1
- beq _080AFB36
- b _080AFB8C
-_080AFB30:
- cmp r6, 0x3
- beq _080AFB6C
- b _080AFB8C
-_080AFB36:
- ldr r0, _080AFB48
- str r0, [sp, 0x8]
- ldr r7, _080AFB4C
- ldr r2, _080AFB50
- str r2, [sp, 0xC]
- adds r0, 0x4
- str r0, [sp, 0x10]
- adds r2, 0x2
- b _080AFB9C
- .align 2, 0
-_080AFB48: .4byte 0x04000060
-_080AFB4C: .4byte 0x04000062
-_080AFB50: .4byte 0x04000063
-_080AFB54:
- ldr r0, _080AFB60
- str r0, [sp, 0x8]
- ldr r7, _080AFB64
- ldr r2, _080AFB68
- b _080AFB94
- .align 2, 0
-_080AFB60: .4byte 0x04000061
-_080AFB64: .4byte 0x04000068
-_080AFB68: .4byte 0x04000069
-_080AFB6C:
- ldr r0, _080AFB80
- str r0, [sp, 0x8]
- ldr r7, _080AFB84
- ldr r2, _080AFB88
- str r2, [sp, 0xC]
- adds r0, 0x4
- str r0, [sp, 0x10]
- adds r2, 0x2
- b _080AFB9C
- .align 2, 0
-_080AFB80: .4byte 0x04000070
-_080AFB84: .4byte 0x04000072
-_080AFB88: .4byte 0x04000073
-_080AFB8C:
- ldr r0, _080AFBEC
- str r0, [sp, 0x8]
- ldr r7, _080AFBF0
- ldr r2, _080AFBF4
-_080AFB94:
- str r2, [sp, 0xC]
- adds r0, 0xB
- str r0, [sp, 0x10]
- adds r2, 0x4
-_080AFB9C:
- str r2, [sp, 0x14]
- ldr r0, [sp, 0x4]
- ldrb r0, [r0, 0xA]
- str r0, [sp]
- ldr r2, [sp, 0xC]
- ldrb r0, [r2]
- mov r8, r0
- adds r2, r1, 0
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080AFC92
- movs r3, 0x40
- adds r0, r3, 0
- ands r0, r2
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0x1
- mov r10, r0
- movs r1, 0x40
- adds r1, r4
- mov r9, r1
- cmp r5, 0
- bne _080AFCB6
- movs r0, 0x3
- strb r0, [r4]
- strb r0, [r4, 0x1D]
- adds r0, r4, 0
- str r3, [sp, 0x18]
- bl sub_80AFA74
- ldr r3, [sp, 0x18]
- cmp r6, 0x2
- beq _080AFC04
- cmp r6, 0x2
- bgt _080AFBF8
- cmp r6, 0x1
- beq _080AFBFE
- b _080AFC58
- .align 2, 0
-_080AFBEC: .4byte 0x04000071
-_080AFBF0: .4byte 0x04000078
-_080AFBF4: .4byte 0x04000079
-_080AFBF8:
- cmp r6, 0x3
- beq _080AFC10
- b _080AFC58
-_080AFBFE:
- ldrb r0, [r4, 0x1F]
- ldr r2, [sp, 0x8]
- strb r0, [r2]
-_080AFC04:
- ldr r0, [r4, 0x24]
- lsls r0, 6
- ldrb r1, [r4, 0x1E]
- adds r0, r1, r0
- strb r0, [r7]
- b _080AFC64
-_080AFC10:
- ldr r1, [r4, 0x24]
- ldr r0, [r4, 0x28]
- cmp r1, r0
- beq _080AFC38
- ldr r2, [sp, 0x8]
- strb r3, [r2]
- ldr r1, _080AFC4C
- ldr r2, [r4, 0x24]
- ldr r0, [r2]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0x4]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0x8]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0xC]
- str r0, [r1]
- str r2, [r4, 0x28]
-_080AFC38:
- ldr r0, [sp, 0x8]
- strb r5, [r0]
- ldrb r0, [r4, 0x1E]
- strb r0, [r7]
- ldrb r0, [r4, 0x1E]
- cmp r0, 0
- beq _080AFC50
- movs r0, 0xC0
- b _080AFC72
- .align 2, 0
-_080AFC4C: .4byte 0x04000090
-_080AFC50:
- movs r1, 0x80
- negs r1, r1
- strb r1, [r4, 0x1A]
- b _080AFC74
-_080AFC58:
- ldrb r0, [r4, 0x1E]
- strb r0, [r7]
- ldr r0, [r4, 0x24]
- lsls r0, 3
- ldr r2, [sp, 0x10]
- strb r0, [r2]
-_080AFC64:
- ldrb r0, [r4, 0x4]
- adds r0, 0x8
- mov r8, r0
- ldrb r0, [r4, 0x1E]
- cmp r0, 0
- beq _080AFC72
- movs r0, 0x40
-_080AFC72:
- strb r0, [r4, 0x1A]
-_080AFC74:
- ldrb r1, [r4, 0x4]
- movs r2, 0
- strb r1, [r4, 0xB]
- movs r0, 0xFF
- ands r0, r1
- adds r1, r6, 0x1
- mov r10, r1
- movs r1, 0x40
- adds r1, r4
- mov r9, r1
- cmp r0, 0
- bne _080AFC8E
- b _080AFDCA
-_080AFC8E:
- strb r2, [r4, 0x9]
- b _080AFDF8
-_080AFC92:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _080AFCC4
- ldrb r0, [r4, 0xD]
- subs r0, 0x1
- strb r0, [r4, 0xD]
- movs r2, 0xFF
- ands r0, r2
- lsls r0, 24
- adds r1, r6, 0x1
- mov r10, r1
- movs r2, 0x40
- adds r2, r4
- mov r9, r2
- cmp r0, 0
- ble _080AFCB6
- b _080AFE0A
-_080AFCB6:
- lsls r0, r6, 24
- lsrs r0, 24
- bl sub_80AFA24
- movs r0, 0
- strb r0, [r4]
- b _080AFF08
-_080AFCC4:
- movs r0, 0x40
- ands r0, r1
- adds r2, r6, 0x1
- mov r10, r2
- movs r2, 0x40
- adds r2, r4
- mov r9, r2
- cmp r0, 0
- beq _080AFD04
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _080AFD04
- movs r0, 0xFC
- ands r0, r1
- movs r2, 0
- strb r0, [r4]
- ldrb r1, [r4, 0x7]
- strb r1, [r4, 0xB]
- movs r0, 0xFF
- ands r0, r1
- cmp r0, 0
- beq _080AFD36
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
- cmp r6, 0x3
- beq _080AFDF8
- ldrb r2, [r4, 0x7]
- mov r8, r2
- b _080AFDF8
-_080AFD04:
- ldrb r0, [r4, 0xB]
- cmp r0, 0
- bne _080AFDF8
- cmp r6, 0x3
- bne _080AFD16
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
-_080AFD16:
- adds r0, r4, 0
- bl sub_80AFA74
- movs r0, 0x3
- ldrb r2, [r4]
- ands r0, r2
- cmp r0, 0
- bne _080AFD6A
- ldrb r0, [r4, 0x9]
- subs r0, 0x1
- strb r0, [r4, 0x9]
- movs r1, 0xFF
- ands r0, r1
- lsls r0, 24
- cmp r0, 0
- bgt _080AFD66
-_080AFD36:
- ldrb r2, [r4, 0xC]
- ldrb r1, [r4, 0xA]
- adds r0, r2, 0
- muls r0, r1
- adds r0, 0xFF
- asrs r0, 8
- movs r1, 0
- strb r0, [r4, 0x9]
- lsls r0, 24
- cmp r0, 0
- beq _080AFCB6
- movs r0, 0x4
- ldrb r2, [r4]
- orrs r0, r2
- strb r0, [r4]
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
- cmp r6, 0x3
- beq _080AFE0A
- movs r2, 0x8
- mov r8, r2
- b _080AFE0A
-_080AFD66:
- ldrb r0, [r4, 0x7]
- b _080AFDF6
-_080AFD6A:
- cmp r0, 0x1
- bne _080AFD76
-_080AFD6E:
- ldrb r0, [r4, 0x19]
- strb r0, [r4, 0x9]
- movs r0, 0x7
- b _080AFDF6
-_080AFD76:
- cmp r0, 0x2
- bne _080AFDBA
- ldrb r0, [r4, 0x9]
- subs r0, 0x1
- strb r0, [r4, 0x9]
- movs r1, 0xFF
- ands r0, r1
- lsls r0, 24
- ldrb r2, [r4, 0x19]
- lsls r1, r2, 24
- cmp r0, r1
- bgt _080AFDB6
-_080AFD8E:
- ldrb r0, [r4, 0x6]
- cmp r0, 0
- bne _080AFD9E
- movs r0, 0xFC
- ldrb r1, [r4]
- ands r0, r1
- strb r0, [r4]
- b _080AFD36
-_080AFD9E:
- ldrb r0, [r4]
- subs r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- ldrb r2, [r4, 0x1D]
- orrs r0, r2
- strb r0, [r4, 0x1D]
- cmp r6, 0x3
- beq _080AFD6E
- movs r0, 0x8
- mov r8, r0
- b _080AFD6E
-_080AFDB6:
- ldrb r0, [r4, 0x5]
- b _080AFDF6
-_080AFDBA:
- ldrb r0, [r4, 0x9]
- adds r0, 0x1
- strb r0, [r4, 0x9]
- movs r1, 0xFF
- ands r0, r1
- ldrb r2, [r4, 0xA]
- cmp r0, r2
- bcc _080AFDF4
-_080AFDCA:
- ldrb r0, [r4]
- subs r0, 0x1
- movs r2, 0
- strb r0, [r4]
- ldrb r1, [r4, 0x5]
- strb r1, [r4, 0xB]
- movs r0, 0xFF
- ands r0, r1
- cmp r0, 0
- beq _080AFD8E
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
- ldrb r0, [r4, 0xA]
- strb r0, [r4, 0x9]
- cmp r6, 0x3
- beq _080AFDF8
- ldrb r2, [r4, 0x5]
- mov r8, r2
- b _080AFDF8
-_080AFDF4:
- ldrb r0, [r4, 0x4]
-_080AFDF6:
- strb r0, [r4, 0xB]
-_080AFDF8:
- ldrb r0, [r4, 0xB]
- subs r0, 0x1
- strb r0, [r4, 0xB]
- ldr r0, [sp]
- cmp r0, 0
- bne _080AFE0A
- subs r0, 0x1
- str r0, [sp]
- b _080AFD04
-_080AFE0A:
- movs r0, 0x2
- ldrb r1, [r4, 0x1D]
- ands r0, r1
- cmp r0, 0
- beq _080AFE82
- cmp r6, 0x3
- bgt _080AFE4A
- movs r0, 0x8
- ldrb r2, [r4, 0x1]
- ands r0, r2
- cmp r0, 0
- beq _080AFE4A
- ldr r0, _080AFE34
- ldrb r0, [r0]
- cmp r0, 0x3F
- bgt _080AFE3C
- ldr r0, [r4, 0x20]
- adds r0, 0x2
- ldr r1, _080AFE38
- b _080AFE46
- .align 2, 0
-_080AFE34: .4byte 0x04000089
-_080AFE38: .4byte 0x000007fc
-_080AFE3C:
- cmp r0, 0x7F
- bgt _080AFE4A
- ldr r0, [r4, 0x20]
- adds r0, 0x1
- ldr r1, _080AFE58
-_080AFE46:
- ands r0, r1
- str r0, [r4, 0x20]
-_080AFE4A:
- cmp r6, 0x4
- beq _080AFE5C
- ldr r0, [r4, 0x20]
- ldr r1, [sp, 0x10]
- strb r0, [r1]
- b _080AFE6A
- .align 2, 0
-_080AFE58: .4byte 0x000007fe
-_080AFE5C:
- ldr r2, [sp, 0x10]
- ldrb r0, [r2]
- movs r1, 0x8
- ands r1, r0
- ldr r0, [r4, 0x20]
- orrs r0, r1
- strb r0, [r2]
-_080AFE6A:
- movs r0, 0xC0
- ldrb r1, [r4, 0x1A]
- ands r0, r1
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r0, r1, r0
- strb r0, [r4, 0x1A]
- movs r2, 0xFF
- ands r0, r2
- ldr r1, [sp, 0x14]
- strb r0, [r1]
-_080AFE82:
- movs r0, 0x1
- ldrb r2, [r4, 0x1D]
- ands r0, r2
- cmp r0, 0
- beq _080AFF08
- ldr r1, _080AFECC
- ldrb r0, [r1]
- ldrb r2, [r4, 0x1C]
- bics r0, r2
- ldrb r2, [r4, 0x1B]
- orrs r0, r2
- strb r0, [r1]
- cmp r6, 0x3
- bne _080AFED4
- ldr r0, _080AFED0
- ldrb r1, [r4, 0x9]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, [sp, 0xC]
- strb r0, [r2]
- movs r1, 0x80
- adds r0, r1, 0
- ldrb r2, [r4, 0x1A]
- ands r0, r2
- cmp r0, 0
- beq _080AFF08
- ldr r0, [sp, 0x8]
- strb r1, [r0]
- ldrb r0, [r4, 0x1A]
- ldr r1, [sp, 0x14]
- strb r0, [r1]
- movs r0, 0x7F
- ldrb r2, [r4, 0x1A]
- ands r0, r2
- strb r0, [r4, 0x1A]
- b _080AFF08
- .align 2, 0
-_080AFECC: .4byte 0x04000081
-_080AFED0: .4byte gUnknown_826FBF0
-_080AFED4:
- movs r0, 0xF
- mov r1, r8
- ands r1, r0
- mov r8, r1
- ldrb r2, [r4, 0x9]
- lsls r0, r2, 4
- add r0, r8
- ldr r1, [sp, 0xC]
- strb r0, [r1]
- movs r2, 0x80
- ldrb r0, [r4, 0x1A]
- orrs r0, r2
- ldr r1, [sp, 0x14]
- strb r0, [r1]
- cmp r6, 0x1
- bne _080AFF08
- ldr r0, [sp, 0x8]
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _080AFF08
- ldrb r0, [r4, 0x1A]
- orrs r0, r2
- ldr r1, [sp, 0x14]
- strb r0, [r1]
-_080AFF08:
- movs r0, 0
- strb r0, [r4, 0x1D]
-_080AFF0C:
- mov r6, r10
- mov r4, r9
- cmp r6, 0x4
- bgt _080AFF16
- b _080AFB0C
-_080AFF16:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AFADC
-
- thumb_func_start sub_80AFF28
-sub_80AFF28:
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AFF4C
- cmp r3, r0
- bne _080AFF44
- strh r1, [r2, 0x1E]
- ldrh r4, [r2, 0x1C]
- adds r0, r1, 0
- muls r0, r4
- asrs r0, 8
- strh r0, [r2, 0x20]
-_080AFF44:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFF4C: .4byte 0x68736d53
- thumb_func_end sub_80AFF28
-
- thumb_func_start sub_80AFF50
-sub_80AFF50:
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r6, r2, 16
- ldr r3, [r4, 0x34]
- ldr r0, _080AFFB4
- cmp r3, r0
- bne _080AFFA8
- adds r0, r3, 0x1
- str r0, [r4, 0x34]
- ldrb r2, [r4, 0x8]
- ldr r1, [r4, 0x2C]
- movs r5, 0x1
- cmp r2, 0
- ble _080AFFA4
- movs r0, 0x80
- mov r8, r0
- lsrs r6, 18
- movs r0, 0x3
- mov r12, r0
-_080AFF80:
- adds r0, r7, 0
- ands r0, r5
- cmp r0, 0
- beq _080AFF9A
- ldrb r3, [r1]
- mov r0, r8
- ands r0, r3
- cmp r0, 0
- beq _080AFF9A
- strb r6, [r1, 0x13]
- mov r0, r12
- orrs r0, r3
- strb r0, [r1]
-_080AFF9A:
- subs r2, 0x1
- adds r1, 0x50
- lsls r5, 1
- cmp r2, 0
- bgt _080AFF80
-_080AFFA4:
- ldr r0, _080AFFB4
- str r0, [r4, 0x34]
-_080AFFA8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFFB4: .4byte 0x68736d53
- thumb_func_end sub_80AFF50
-
- thumb_func_start sub_80AFFB8
-sub_80AFFB8:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r12, r1
- lsls r2, 16
- lsrs r6, r2, 16
- ldr r3, [r4, 0x34]
- ldr r0, _080B0028
- cmp r3, r0
- bne _080B001A
- adds r0, r3, 0x1
- str r0, [r4, 0x34]
- ldrb r2, [r4, 0x8]
- ldr r3, [r4, 0x2C]
- movs r5, 0x1
- cmp r2, 0
- ble _080B0016
- movs r0, 0x80
- mov r9, r0
- lsls r0, r6, 16
- asrs r7, r0, 24
- movs r0, 0xC
- mov r8, r0
-_080AFFF0:
- mov r0, r12
- ands r0, r5
- cmp r0, 0
- beq _080B000C
- ldrb r1, [r3]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- beq _080B000C
- strb r7, [r3, 0xB]
- strb r6, [r3, 0xD]
- mov r0, r8
- orrs r0, r1
- strb r0, [r3]
-_080B000C:
- subs r2, 0x1
- adds r3, 0x50
- lsls r5, 1
- cmp r2, 0
- bgt _080AFFF0
-_080B0016:
- ldr r0, _080B0028
- str r0, [r4, 0x34]
-_080B001A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0028: .4byte 0x68736d53
- thumb_func_end sub_80AFFB8
-
- thumb_func_start sub_80B002C
-sub_80B002C:
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r3, [r4, 0x34]
- ldr r0, _080B0090
- cmp r3, r0
- bne _080B0084
- adds r0, r3, 0x1
- str r0, [r4, 0x34]
- ldrb r2, [r4, 0x8]
- ldr r1, [r4, 0x2C]
- movs r5, 0x1
- cmp r2, 0
- ble _080B0080
- movs r0, 0x80
- mov r8, r0
- movs r0, 0x3
- mov r12, r0
-_080B005C:
- adds r0, r7, 0
- ands r0, r5
- cmp r0, 0
- beq _080B0076
- ldrb r3, [r1]
- mov r0, r8
- ands r0, r3
- cmp r0, 0
- beq _080B0076
- strb r6, [r1, 0x15]
- mov r0, r12
- orrs r0, r3
- strb r0, [r1]
-_080B0076:
- subs r2, 0x1
- adds r1, 0x50
- lsls r5, 1
- cmp r2, 0
- bgt _080B005C
-_080B0080:
- ldr r0, _080B0090
- str r0, [r4, 0x34]
-_080B0084:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0090: .4byte 0x68736d53
- thumb_func_end sub_80B002C
-
- thumb_func_start sub_80B0094
-sub_80B0094:
- adds r1, r0, 0
- movs r2, 0
- movs r0, 0
- strb r0, [r1, 0x1A]
- strb r0, [r1, 0x16]
- ldrb r0, [r1, 0x18]
- cmp r0, 0
- bne _080B00A8
- movs r0, 0xC
- b _080B00AA
-_080B00A8:
- movs r0, 0x3
-_080B00AA:
- ldrb r2, [r1]
- orrs r0, r2
- strb r0, [r1]
- bx lr
- thumb_func_end sub_80B0094
-
- thumb_func_start sub_80B00B4
-sub_80B00B4:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r1, [r6, 0x34]
- ldr r0, _080B0124
- cmp r1, r0
- bne _080B0114
- adds r0, r1, 0x1
- str r0, [r6, 0x34]
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- movs r7, 0x1
- cmp r5, 0
- ble _080B0110
- mov r9, r8
-_080B00E4:
- mov r0, r10
- ands r0, r7
- cmp r0, 0
- beq _080B0106
- movs r0, 0x80
- ldrb r1, [r4]
- ands r0, r1
- cmp r0, 0
- beq _080B0106
- mov r0, r8
- strb r0, [r4, 0x17]
- mov r1, r9
- cmp r1, 0
- bne _080B0106
- adds r0, r4, 0
- bl sub_80B0094
-_080B0106:
- subs r5, 0x1
- adds r4, 0x50
- lsls r7, 1
- cmp r5, 0
- bgt _080B00E4
-_080B0110:
- ldr r0, _080B0124
- str r0, [r6, 0x34]
-_080B0114:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0124: .4byte 0x68736d53
- thumb_func_end sub_80B00B4
-
- thumb_func_start sub_80B0128
-sub_80B0128:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r1, [r6, 0x34]
- ldr r0, _080B0198
- cmp r1, r0
- bne _080B0188
- adds r0, r1, 0x1
- str r0, [r6, 0x34]
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- movs r7, 0x1
- cmp r5, 0
- ble _080B0184
- mov r9, r8
-_080B0158:
- mov r0, r10
- ands r0, r7
- cmp r0, 0
- beq _080B017A
- movs r0, 0x80
- ldrb r1, [r4]
- ands r0, r1
- cmp r0, 0
- beq _080B017A
- mov r0, r8
- strb r0, [r4, 0x19]
- mov r1, r9
- cmp r1, 0
- bne _080B017A
- adds r0, r4, 0
- bl sub_80B0094
-_080B017A:
- subs r5, 0x1
- adds r4, 0x50
- lsls r7, 1
- cmp r5, 0
- bgt _080B0158
-_080B0184:
- ldr r0, _080B0198
- str r0, [r6, 0x34]
-_080B0188:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0198: .4byte 0x68736d53
- thumb_func_end sub_80B0128
-
- thumb_func_start sub_80B019C
-sub_80B019C:
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r1, [r6, 0x40]
- ldrb r5, [r1]
- adds r2, r1, 0x1
- str r2, [r6, 0x40]
- ldr r0, [r4, 0x18]
- ldrb r1, [r1, 0x1]
- adds r3, r1, r0
- adds r0, r2, 0x1
- str r0, [r6, 0x40]
- ldrb r2, [r2, 0x1]
- adds r0, 0x1
- str r0, [r6, 0x40]
- cmp r5, 0x11
- bls _080B01C0
- b _080B02EE
-_080B01C0:
- lsls r0, r5, 2
- ldr r1, _080B01CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080B01CC: .4byte _080B01D0
- .align 2, 0
-_080B01D0:
- .4byte _080B0218
- .4byte _080B021C
- .4byte _080B0224
- .4byte _080B022C
- .4byte _080B0236
- .4byte _080B0244
- .4byte _080B0252
- .4byte _080B025A
- .4byte _080B0262
- .4byte _080B026A
- .4byte _080B0272
- .4byte _080B027A
- .4byte _080B0282
- .4byte _080B0290
- .4byte _080B029E
- .4byte _080B02AC
- .4byte _080B02BA
- .4byte _080B02C8
-_080B0218:
- strb r2, [r3]
- b _080B02EE
-_080B021C:
- ldrb r1, [r3]
- adds r0, r1, r2
- strb r0, [r3]
- b _080B02EE
-_080B0224:
- ldrb r1, [r3]
- subs r0, r1, r2
- strb r0, [r3]
- b _080B02EE
-_080B022C:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r3]
- b _080B02EE
-_080B0236:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r1, [r3]
- ldrb r0, [r0]
- adds r0, r1, r0
- strb r0, [r3]
- b _080B02EE
-_080B0244:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r1, [r3]
- ldrb r0, [r0]
- subs r0, r1, r0
- strb r0, [r3]
- b _080B02EE
-_080B0252:
- ldrb r3, [r3]
- cmp r3, r2
- beq _080B02D4
- b _080B02E8
-_080B025A:
- ldrb r3, [r3]
- cmp r3, r2
- bne _080B02D4
- b _080B02E8
-_080B0262:
- ldrb r3, [r3]
- cmp r3, r2
- bhi _080B02D4
- b _080B02E8
-_080B026A:
- ldrb r3, [r3]
- cmp r3, r2
- bcs _080B02D4
- b _080B02E8
-_080B0272:
- ldrb r3, [r3]
- cmp r3, r2
- bls _080B02D4
- b _080B02E8
-_080B027A:
- ldrb r3, [r3]
- cmp r3, r2
- bcc _080B02D4
- b _080B02E8
-_080B0282:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- beq _080B02D4
- b _080B02E8
-_080B0290:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bne _080B02D4
- b _080B02E8
-_080B029E:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bhi _080B02D4
- b _080B02E8
-_080B02AC:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bcs _080B02D4
- b _080B02E8
-_080B02BA:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bls _080B02D4
- b _080B02E8
-_080B02C8:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bcs _080B02E8
-_080B02D4:
- ldr r0, _080B02E4
- ldr r2, [r0]
- adds r0, r4, 0
- adds r1, r6, 0
- bl _call_via_r2
- b _080B02EE
- .align 2, 0
-_080B02E4: .4byte gUnknown_203AE84
-_080B02E8:
- ldr r0, [r6, 0x40]
- adds r0, 0x4
- str r0, [r6, 0x40]
-_080B02EE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80B019C
-
- thumb_func_start sub_80B02F4
-sub_80B02F4:
- push {lr}
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- adds r2, 0x1
- str r2, [r1, 0x40]
- ldr r2, _080B0310
- lsls r3, 2
- adds r3, r2
- ldr r2, [r3]
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_080B0310: .4byte gUnknown_826FC34
- thumb_func_end sub_80B02F4
-
- thumb_func_start sub_80B0314
-sub_80B0314:
- push {lr}
- ldr r2, _080B0324
- ldr r2, [r2]
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_080B0324: .4byte gUnknown_203AE80
- thumb_func_end sub_80B0314
-
- thumb_func_start sub_80B0328
-sub_80B0328:
- push {r4,lr}
- ldr r2, [r1, 0x40]
- ldr r0, _080B0360
- ands r4, r0
- ldrb r0, [r2]
- orrs r4, r0
- ldrb r0, [r2, 0x1]
- lsls r3, r0, 8
- ldr r0, _080B0364
- ands r4, r0
- orrs r4, r3
- ldrb r0, [r2, 0x2]
- lsls r3, r0, 16
- ldr r0, _080B0368
- ands r4, r0
- orrs r4, r3
- ldrb r0, [r2, 0x3]
- lsls r3, r0, 24
- ldr r0, _080B036C
- ands r4, r0
- orrs r4, r3
- str r4, [r1, 0x28]
- adds r2, 0x4
- str r2, [r1, 0x40]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0360: .4byte 0xffffff00
-_080B0364: .4byte 0xffff00ff
-_080B0368: .4byte 0xff00ffff
-_080B036C: .4byte 0x00ffffff
- thumb_func_end sub_80B0328
-
- thumb_func_start sub_80B0370
-sub_80B0370:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- adds r0, r1, 0
- adds r0, 0x24
- strb r2, [r0]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B0370
-
- thumb_func_start sub_80B0384
-sub_80B0384:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- adds r0, r1, 0
- adds r0, 0x2C
- strb r2, [r0]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B0384
-
- thumb_func_start sub_80B0398
-sub_80B0398:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x2D
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B0398
-
- thumb_func_start sub_80B03AC
-sub_80B03AC:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x2E
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03AC
-
- thumb_func_start sub_80B03C0
-sub_80B03C0:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x2F
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03C0
-
- thumb_func_start sub_80B03D4
-sub_80B03D4:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- strb r2, [r1, 0x1E]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03D4
-
- thumb_func_start sub_80B03E0
-sub_80B03E0:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- strb r2, [r1, 0x1F]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03E0
-
- thumb_func_start sub_80B03EC
-sub_80B03EC:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x26
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03EC
-
- thumb_func_start ply_xswee
-ply_xswee:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x27
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end ply_xswee
-
- thumb_func_start nullsub_139
-nullsub_139:
- bx lr
- thumb_func_end nullsub_139
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/m4a_1.s b/asm/m4a_1.s
new file mode 100644
index 0000000..8c1d78a
--- /dev/null
+++ b/asm/m4a_1.s
@@ -0,0 +1,1647 @@
+ .include "asm/macros.inc"
+ .include "constants/gba_constants.inc"
+ .include "constants/m4a_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start umul3232H32
+umul3232H32:
+ adr r2, __umul3232H32
+ bx r2
+ .arm
+__umul3232H32:
+ umull r2, r3, r0, r1
+ add r0, r3, 0
+ bx lr
+ thumb_func_end umul3232H32
+
+ thumb_func_start SoundMain
+SoundMain:
+ ldr r0, lt_SOUND_INFO_PTR
+ ldr r0, [r0]
+ ldr r2, lt_ID_NUMBER
+ ldr r3, [r0, o_SoundInfo_ident]
+ cmp r2, r3
+ beq SoundMain_1
+ bx lr @ Exit the function if ident doesn't match ID_NUMBER.
+SoundMain_1:
+ adds r3, 1
+ str r3, [r0, o_SoundInfo_ident]
+ push {r4-r7,lr}
+ mov r1, r8
+ mov r2, r9
+ mov r3, r10
+ mov r4, r11
+ push {r0-r4}
+ sub sp, 0x18
+ ldrb r1, [r0, o_SoundInfo_maxLines]
+ cmp r1, 0 @ if maxLines is 0, there is no maximum
+ beq SoundMain_3
+ ldr r2, lt_REG_VCOUNT
+ ldrb r2, [r2]
+ cmp r2, VCOUNT_VBLANK
+ bhs SoundMain_2
+ adds r2, TOTAL_SCANLINES
+SoundMain_2:
+ adds r1, r2
+SoundMain_3:
+ str r1, [sp, 0x14]
+ ldr r3, [r0, o_SoundInfo_func]
+ cmp r3, 0
+ beq SoundMain_4
+ ldr r0, [r0, o_SoundInfo_intp]
+ bl call_r3
+ ldr r0, [sp, 0x18]
+SoundMain_4:
+ ldr r3, [r0, o_SoundInfo_CgbSound]
+ bl call_r3
+ ldr r0, [sp, 0x18]
+ ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank]
+ mov r8, r3
+ ldr r5, lt_o_SoundInfo_pcmBuffer
+ adds r5, r0
+ ldrb r4, [r0, o_SoundInfo_pcmDmaCounter]
+ subs r7, r4, 1
+ bls SoundMain_5
+ ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
+ subs r1, r7
+ mov r2, r8
+ muls r2, r1
+ adds r5, r2
+SoundMain_5:
+ str r5, [sp, 0x8]
+ ldr r6, lt_PCM_DMA_BUF_SIZE
+ ldr r3, lt_SoundMainRAM_Buffer
+ bx r3
+
+ .align 2, 0
+lt_SOUND_INFO_PTR: .word SOUND_INFO_PTR
+lt_ID_NUMBER: .word ID_NUMBER
+lt_SoundMainRAM_Buffer: .word SoundMainRAM_Buffer + 1
+lt_REG_VCOUNT: .word REG_VCOUNT
+lt_o_SoundInfo_pcmBuffer: .word o_SoundInfo_pcmBuffer
+lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE
+ thumb_func_end SoundMain
+
+ thumb_func_start SoundMainRAM
+SoundMainRAM:
+ ldrb r3, [r0, o_SoundInfo_reverb]
+ cmp r3, 0
+ beq SoundMainRAM_NoReverb
+ adr r1, SoundMainRAM_Reverb
+ bx r1
+ .arm
+SoundMainRAM_Reverb:
+ cmp r4, 0x2
+ addeq r7, r0, o_SoundInfo_pcmBuffer
+ addne r7, r5, r8
+ mov r4, r8
+_080AE314:
+ ldrsb r0, [r5, r6]
+ ldrsb r1, [r5]
+ add r0, r0, r1
+ ldrsb r1, [r7, r6]
+ add r0, r0, r1
+ ldrsb r1, [r7], 0x1
+ add r0, r0, r1
+ mul r1, r0, r3
+ mov r0, r1, asr 9
+ tst r0, 0x80
+ addne r0, r0, 0x1
+ strb r0, [r5, r6]
+ strb r0, [r5], 0x1
+ subs r4, r4, 0x1
+ bgt _080AE314
+ add r0, pc, 0x2F
+ bx r0
+ .thumb
+SoundMainRAM_NoReverb:
+ movs r0, 0
+ mov r1, r8
+ adds r6, r5
+ lsrs r1, 3
+ bcc SoundMainRAM_NoReverb_Ok
+ stm r5!, {r0}
+ stm r6!, {r0}
+SoundMainRAM_NoReverb_Ok:
+ lsrs r1, 1
+ bcc SoundMainRAM_NoReverb_Loop
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+SoundMainRAM_NoReverb_Loop:
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+ subs r1, 0x1
+ bgt SoundMainRAM_NoReverb_Loop
+_080AE386:
+ ldr r4, [sp, 0x18]
+ ldr r0, [r4, o_SoundInfo_divFreq]
+ mov r12, r0
+ ldrb r0, [r4, o_SoundInfo_maxChans]
+ adds r4, o_SoundInfo_chans
+SoundMainRAM_ChanLoop:
+ str r0, [sp, 0x4]
+ ldr r3, [r4, o_SoundChannel_wav]
+ ldr r0, [sp, 0x14]
+ cmp r0, 0
+ beq _080AE3B0
+ ldr r1, =REG_VCOUNT
+ ldrb r1, [r1]
+ cmp r1, VCOUNT_VBLANK
+ bhs _080AE3A4
+ adds r1, TOTAL_SCANLINES
+_080AE3A4:
+ cmp r1, r0
+ bcc _080AE3B0
+ b _080AE682
+
+ .pool
+
+_080AE3B0:
+ ldrb r6, [r4, o_SoundChannel_status]
+ movs r0, 0xC7
+ tst r0, r6
+ bne _080AE3BA
+ b _080AE678
+_080AE3BA:
+ movs r0, 0x80
+ tst r0, r6
+ beq _080AE3EA
+ movs r0, 0x40
+ tst r0, r6
+ bne _080AE3FA
+ movs r6, 0x3
+ strb r6, [r4, o_SoundChannel_status]
+ adds r0, r3, 0
+ adds r0, 0x10
+ str r0, [r4, o_SoundChannel_cp]
+ ldr r0, [r3, 0xC]
+ str r0, [r4, o_SoundChannel_ct]
+ movs r5, 0
+ strb r5, [r4, o_SoundChannel_ev]
+ str r5, [r4, o_SoundChannel_fw]
+ ldrb r2, [r3, 0x3]
+ movs r0, 0xC0
+ tst r0, r2
+ beq _080AE442
+ movs r0, 0x10
+ orrs r6, r0
+ strb r6, [r4, o_SoundChannel_status]
+ b _080AE442
+_080AE3EA:
+ ldrb r5, [r4, o_SoundChannel_ev]
+ movs r0, 0x4
+ tst r0, r6
+ beq _080AE400
+ ldrb r0, [r4, o_SoundChannel_iel]
+ subs r0, 0x1
+ strb r0, [r4, o_SoundChannel_iel]
+ bhi _080AE450
+_080AE3FA:
+ movs r0, 0
+ strb r0, [r4, o_SoundChannel_status]
+ b _080AE678
+_080AE400:
+ movs r0, 0x40
+ tst r0, r6
+ beq _080AE420
+ ldrb r0, [r4, o_SoundChannel_release]
+ muls r5, r0
+ lsrs r5, 8
+ ldrb r0, [r4, o_SoundChannel_iev]
+ cmp r5, r0
+ bhi _080AE450
+_080AE412:
+ ldrb r5, [r4, o_SoundChannel_iev]
+ cmp r5, 0
+ beq _080AE3FA
+ movs r0, 0x4
+ orrs r6, r0
+ strb r6, [r4, o_SoundChannel_status]
+ b _080AE450
+_080AE420:
+ movs r2, 0x3
+ ands r2, r6
+ cmp r2, 0x2
+ bne _080AE43E
+ ldrb r0, [r4, o_SoundChannel_decay]
+ muls r5, r0
+ lsrs r5, 8
+ ldrb r0, [r4, o_SoundChannel_sustain]
+ cmp r5, r0
+ bhi _080AE450
+ adds r5, r0, 0
+ beq _080AE412
+ subs r6, 0x1
+ strb r6, [r4, o_SoundChannel_status]
+ b _080AE450
+_080AE43E:
+ cmp r2, 0x3
+ bne _080AE450
+_080AE442:
+ ldrb r0, [r4, o_SoundChannel_attack]
+ adds r5, r0
+ cmp r5, 0xFF
+ bcc _080AE450
+ movs r5, 0xFF
+ subs r6, 0x1
+ strb r6, [r4, o_SoundChannel_status]
+_080AE450:
+ strb r5, [r4, o_SoundChannel_ev]
+ ldr r0, [sp, 0x18]
+ ldrb r0, [r0, o_SoundChannel_release]
+ adds r0, 0x1
+ muls r0, r5
+ lsrs r5, r0, 4
+ ldrb r0, [r4, o_SoundChannel_rightVolume]
+ muls r0, r5
+ lsrs r0, 8
+ strb r0, [r4, o_SoundChannel_er]
+ ldrb r0, [r4, o_SoundChannel_leftVolume]
+ muls r0, r5
+ lsrs r0, 8
+ strb r0, [r4, o_SoundChannel_el]
+ movs r0, 0x10
+ ands r0, r6
+ str r0, [sp, 0x10]
+ beq _080AE484
+ adds r0, r3, 0
+ adds r0, 0x10
+ ldr r1, [r3, 0x8]
+ adds r0, r1
+ str r0, [sp, 0xC]
+ ldr r0, [r3, 0xC]
+ subs r0, r1
+ str r0, [sp, 0x10]
+_080AE484:
+ ldr r5, [sp, 0x8]
+ ldr r2, [r4, o_SoundChannel_ct]
+ ldr r3, [r4, o_SoundChannel_cp]
+ adr r0, _080AE490
+ bx r0
+ .arm
+_080AE490:
+ str r8, [sp]
+ ldrb r10, [r4, o_SoundChannel_er]
+ ldrb r11, [r4, o_SoundChannel_el]
+ mov r10, r10, lsl 16
+ mov r11, r11, lsl 16
+ ldrb r0, [r4, o_SoundChannel_type]
+ tst r0, 0x8
+ beq _080AE5D0
+_080AE4B0:
+ cmp r2, 0x4
+ ble _080AE520
+ subs r2, r2, r8
+ movgt lr, 0
+ bgt _080AE4DC
+ mov lr, r8
+ add r2, r2, r8
+ sub r8, r2, 0x4
+ sub lr, lr, r8
+ ands r2, r2, 0x3
+ moveq r2, 0x4
+_080AE4DC:
+ ldr r6, [r5]
+ ldr r7, [r5, 0x630]
+_080AE4E4:
+ ldrsb r0, [r3], 0x1
+ mul r1, r10, r0
+ bic r1, r1, 0xFF0000
+ add r6, r1, r6, ror 8
+ mul r1, r11, r0
+ bic r1, r1, 0xFF0000
+ add r7, r1, r7, ror 8
+ adds r5, r5, 0x40000000
+ bcc _080AE4E4
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ subs r8, r8, 0x4
+ bgt _080AE4DC
+ adds r8, r8, lr
+ beq _080AE664
+_080AE520:
+ ldr r6, [r5]
+ ldr r7, [r5, 0x630]
+_080AE528:
+ ldrsb r0, [r3], 0x1
+ mul r1, r10, r0
+ bic r1, r1, 0xFF0000
+ add r6, r1, r6, ror 8
+ mul r1, r11, r0
+ bic r1, r1, 0xFF0000
+ add r7, r1, r7, ror 8
+ subs r2, r2, 0x1
+ beq _080AE598
+_080AE54C:
+ adds r5, r5, 0x40000000
+ bcc _080AE528
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ subs r8, r8, 0x4
+ bgt _080AE4B0
+ b _080AE664
+_080AE568:
+ ldr r0, [sp, 0x18]
+ cmp r0, 0
+ beq _080AE58C
+ ldr r3, [sp, 0x14]
+ rsb r9, r2, 0
+_080AE57C:
+ adds r2, r0, r2
+ bgt _080AE634
+ sub r9, r9, r0
+ b _080AE57C
+_080AE58C:
+ ldmia sp!, {r4,r12}
+ mov r2, 0
+ b _080AE5A8
+_080AE598:
+ ldr r2, [sp, 0x10]
+ cmp r2, 0
+ ldrne r3, [sp, 0xC]
+ bne _080AE54C
+_080AE5A8:
+ strb r2, [r4, o_SoundChannel_status]
+ mov r0, r5, lsr 30
+ bic r5, r5, 0xC0000000
+ rsb r0, r0, 0x3
+ mov r0, r0, lsl 3
+ mov r6, r6, ror r0
+ mov r7, r7, ror r0
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ b _080AE66C
+_080AE5D0:
+ stmdb sp!, {r4,r12}
+ ldr lr, [r4, o_SoundChannel_fw]
+ ldr r1, [r4, o_SoundChannel_freq]
+ mul r4, r12, r1
+ ldrsb r0, [r3]
+ ldrsb r1, [r3, 0x1]!
+ sub r1, r1, r0
+_080AE5EC:
+ ldr r6, [r5]
+ ldr r7, [r5, 0x630]
+_080AE5F4:
+ mul r9, lr, r1
+ add r9, r0, r9, asr 23
+ mul r12, r10, r9
+ bic r12, r12, 0xFF0000
+ add r6, r12, r6, ror 8
+ mul r12, r11, r9
+ bic r12, r12, 0xFF0000
+ add r7, r12, r7, ror 8
+ add lr, lr, r4
+ movs r9, lr, lsr 23
+ beq _080AE640
+ bic lr, lr, 0x3F800000
+ subs r2, r2, r9
+ ble _080AE568
+ subs r9, r9, 0x1
+ addeq r0, r0, r1
+_080AE634:
+ ldrsbne r0, [r3, r9]!
+ ldrsb r1, [r3, 0x1]!
+ sub r1, r1, r0
+_080AE640:
+ adds r5, r5, 0x40000000
+ bcc _080AE5F4
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ subs r8, r8, 0x4
+ bgt _080AE5EC
+ sub r3, r3, 0x1
+ ldmia sp!, {r4,r12}
+ str lr, [r4, o_SoundChannel_fw]
+_080AE664:
+ str r2, [r4, o_SoundChannel_ct]
+ str r3, [r4, o_SoundChannel_cp]
+_080AE66C:
+ ldr r8, [sp]
+ add r0, pc, 0x1
+ bx r0
+ .thumb
+_080AE678:
+ ldr r0, [sp, 0x4]
+ subs r0, 0x1
+ ble _080AE682
+ adds r4, SoundChannel_size
+ b SoundMainRAM_ChanLoop
+_080AE682:
+ ldr r0, [sp, 0x18]
+ ldr r3, =ID_NUMBER
+ str r3, [r0]
+ add sp, 0x1C
+ pop {r0-r7}
+ mov r8, r0
+ mov r9, r1
+ mov r10, r2
+ mov r11, r3
+ pop {r3}
+
+call_r3:
+ bx r3
+ .pool
+ thumb_func_end SoundMainRAM
+
+ thumb_func_start SoundMainBTM
+SoundMainBTM:
+ mov r12, r4
+ movs r1, 0
+ movs r2, 0
+ movs r3, 0
+ movs r4, 0
+ stm r0!, {r1-r4}
+ stm r0!, {r1-r4}
+ stm r0!, {r1-r4}
+ stm r0!, {r1-r4}
+ mov r4, r12
+ bx lr
+ thumb_func_end SoundMainBTM
+
+ thumb_func_start RealClearChain
+RealClearChain:
+ ldr r3, [r0, 0x2C]
+ cmp r3, 0
+ beq _080AE6D2
+ ldr r1, [r0, 0x34]
+ ldr r2, [r0, 0x30]
+ cmp r2, 0
+ beq _080AE6C6
+ str r1, [r2, 0x34]
+ b _080AE6C8
+_080AE6C6:
+ str r1, [r3, 0x20]
+_080AE6C8:
+ cmp r1, 0
+ beq _080AE6CE
+ str r2, [r1, 0x30]
+_080AE6CE:
+ movs r1, 0
+ str r1, [r0, 0x2C]
+_080AE6D2:
+ bx lr
+ thumb_func_end RealClearChain
+
+ thumb_func_start ply_fine
+ply_fine:
+ push {r4,r5,lr}
+ adds r5, r1, 0
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq ply_fine_done
+ply_fine_loop:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq ply_fine_ok
+ movs r0, 0x40
+ orrs r1, r0
+ strb r1, [r4]
+ply_fine_ok:
+ adds r0, r4, 0
+ bl RealClearChain
+ ldr r4, [r4, 0x34]
+ cmp r4, 0
+ bne ply_fine_loop
+ply_fine_done:
+ movs r0, 0
+ strb r0, [r5]
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ thumb_func_end ply_fine
+
+ thumb_func_start MPlayJumpTableCopy
+MPlayJumpTableCopy:
+ mov r12, lr
+ movs r1, 0x24
+ ldr r2, lt_MPlayJumpTableTemplate
+MPlayJumpTableCopy_Loop:
+ ldr r3, [r2]
+ bl chk_adr_r2
+ stm r0!, {r3}
+ adds r2, 0x4
+ subs r1, 0x1
+ bgt MPlayJumpTableCopy_Loop
+ bx r12
+ thumb_func_end MPlayJumpTableCopy
+
+ .align 2, 0
+ .thumb_func
+ldrb_r3_r2:
+ ldrb r3, [r2]
+
+ .thumb_func
+chk_adr_r2:
+ push {r0}
+ lsrs r0, r2, 25
+ bne chk_adr_r2_done
+ ldr r0, lt_MPlayJumpTableTemplate
+ cmp r2, r0
+ bcc chk_adr_r2_reject
+ lsrs r0, r2, 14
+ beq chk_adr_r2_done
+chk_adr_r2_reject:
+ movs r3, 0
+chk_adr_r2_done:
+ pop {r0}
+ bx lr
+ .align 2, 0
+lt_MPlayJumpTableTemplate: .word gMPlayJumpTableTemplate
+
+ thumb_func_start ld_r3_tp_adr_i
+ld_r3_tp_adr_i:
+ ldr r2, [r1, 0x40]
+_080AE73A:
+ adds r3, r2, 0x1
+ str r3, [r1, 0x40]
+ ldrb r3, [r2]
+ b chk_adr_r2
+ thumb_func_end ld_r3_tp_adr_i
+
+ thumb_func_start ply_goto
+ply_goto:
+ push {lr}
+ply_goto_1:
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r0, [r2, 0x3]
+ lsls r0, 8
+ ldrb r3, [r2, 0x2]
+ orrs r0, r3
+ lsls r0, 8
+ ldrb r3, [r2, 0x1]
+ orrs r0, r3
+ lsls r0, 8
+ bl ldrb_r3_r2
+ orrs r0, r3
+ str r0, [r1, o_MusicPlayerTrack_cmdPtr]
+ pop {r0}
+ bx r0
+ thumb_func_end ply_goto
+
+ thumb_func_start ply_patt
+ply_patt:
+ ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ cmp r2, 0x3
+ bcs _080AE77C
+ lsls r2, 2
+ adds r3, r1, r2
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ adds r2, 0x4
+ str r2, [r3, o_MusicPlayerTrack_patternStack]
+ ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ adds r2, 0x1
+ strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ b ply_goto
+_080AE77C:
+ b ply_fine
+ thumb_func_end ply_patt
+
+ thumb_func_start ply_pend
+ply_pend:
+ ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ cmp r2, 0
+ beq ply_pend_done
+ subs r2, 1
+ strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ lsls r2, 2
+ adds r3, r1, r2
+ ldr r2, [r3, o_MusicPlayerTrack_patternStack]
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ply_pend_done:
+ bx lr
+ thumb_func_end ply_pend
+
+ thumb_func_start ply_rept
+ply_rept:
+ push {lr}
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ cmp r3, 0
+ bne ply_rept_1
+ adds r2, 1
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ b ply_goto_1
+ply_rept_1:
+ ldrb r3, [r1, o_MusicPlayerTrack_repN]
+ adds r3, 1
+ strb r3, [r1, o_MusicPlayerTrack_repN]
+ mov r12, r3
+ bl ld_r3_tp_adr_i
+ cmp r12, r3
+ bhs ply_rept_2
+ b ply_goto_1
+ply_rept_2:
+ movs r3, 0
+ strb r3, [r1, o_MusicPlayerTrack_repN]
+ adds r2, 5
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ pop {r0}
+ bx r0
+ thumb_func_end ply_rept
+
+ thumb_func_start ply_prio
+ply_prio:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_priority]
+ bx r12
+ thumb_func_end ply_prio
+
+ thumb_func_start ply_tempo
+ply_tempo:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ lsls r3, 1
+ strh r3, [r0, o_MusicPlayerInfo_tempoD]
+ ldrh r2, [r0, o_MusicPlayerInfo_tempoU]
+ muls r3, r2
+ lsrs r3, 8
+ strh r3, [r0, o_MusicPlayerInfo_tempoI]
+ bx r12
+ thumb_func_end ply_tempo
+
+ thumb_func_start ply_keysh
+ply_keysh:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_keyShift]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_keysh
+
+ thumb_func_start ply_voice
+ply_voice:
+ mov r12, lr
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ adds r2, 1
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ lsls r2, r3, 1
+ adds r2, r3
+ lsls r2, 2
+ ldr r3, [r0, o_MusicPlayerInfo_tone]
+ adds r2, r3
+ ldr r3, [r2]
+ bl chk_adr_r2
+ str r3, [r1, o_MusicPlayerTrack_ToneData_type]
+ ldr r3, [r2, 0x4]
+ bl chk_adr_r2
+ str r3, [r1, o_MusicPlayerTrack_ToneData_wav]
+ ldr r3, [r2, 0x8]
+ bl chk_adr_r2
+ str r3, [r1, o_MusicPlayerTrack_ToneData_attack]
+ bx r12
+ thumb_func_end ply_voice
+
+ thumb_func_start ply_vol
+ply_vol:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_vol]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0x3
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_vol
+
+ thumb_func_start ply_pan
+ply_pan:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ subs r3, 0x40
+ strb r3, [r1, o_MusicPlayerTrack_pan]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0x3
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_pan
+
+ thumb_func_start ply_bend
+ply_bend:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ subs r3, 0x40
+ strb r3, [r1, o_MusicPlayerTrack_bend]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_bend
+
+ thumb_func_start ply_bendr
+ply_bendr:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_bendRange]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_bendr
+
+ thumb_func_start ply_lfodl
+ply_lfodl:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_lfoDelay]
+ bx r12
+ thumb_func_end ply_lfodl
+
+ thumb_func_start ply_modt
+ply_modt:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ ldrb r0, [r1, o_MusicPlayerTrack_modT]
+ cmp r0, r3
+ beq _080AE89A
+ strb r3, [r1, o_MusicPlayerTrack_modT]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xF
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+_080AE89A:
+ bx r12
+ thumb_func_end ply_modt
+
+ thumb_func_start ply_tune
+ply_tune:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ subs r3, 0x40
+ strb r3, [r1, o_MusicPlayerTrack_tune]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_tune
+
+ thumb_func_start ply_port
+ply_port:
+ mov r12, lr
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ adds r2, 0x1
+ ldr r0, =REG_SOUND1CNT_L @ sound register base address
+ adds r0, r3
+ bl _080AE73A
+ strb r3, [r0]
+ bx r12
+ .pool
+ thumb_func_end ply_port
+
+ thumb_func_start m4aSoundVSync
+m4aSoundVSync:
+ ldr r0, lt2_SOUND_INFO_PTR
+ ldr r0, [r0]
+
+ @ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1.
+ ldr r2, lt2_ID_NUMBER
+ ldr r3, [r0, o_SoundInfo_ident]
+ subs r3, r2
+ cmp r3, 0x1
+ bhi m4aSoundVSync_Done
+
+ @ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA.
+ ldrb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ subs r1, 0x1
+ strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ bgt m4aSoundVSync_Done
+
+ @ Reload the PCM DMA counter.
+ ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
+ strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+
+ ldr r2, =REG_DMA1
+
+ ldr r1, [r2, 0x8] @ DMA1CNT
+ lsls r1, 7
+ bcc m4aSoundVSync_SkipDMA1
+
+ ldr r1, =((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4
+ str r1, [r2, 0x8] @ DMA1CNT
+
+m4aSoundVSync_SkipDMA1:
+ ldr r1, [r2, 0xC + 0x8] @ DMA2CNT
+ lsls r1, 7
+ bcc m4aSoundVSync_SkipDMA2
+ ldr r1, =((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4
+ str r1, [r2, 0xC + 0x8] @ DMA2CNT
+
+m4aSoundVSync_SkipDMA2:
+ movs r1, DMA_32BIT >> 8
+ lsls r1, 8
+ strh r1, [r2, 0xA] @ DMA1CNT_H
+ strh r1, [r2, 0xC + 0xA] @ DMA2CNT_H
+
+ movs r1, (DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT) >> 8
+ lsls r1, 8 @ LSB is 0, so DMA_SRC_INC is used (destination is always fixed in FIFO mode)
+ strh r1, [r2, 0xA] @ DMA1CNT_H
+ strh r1, [r2, 0xC + 0xA] @ DMA2CNT_H
+
+m4aSoundVSync_Done:
+ bx lr
+
+ .pool
+ thumb_func_end m4aSoundVSync
+
+ thumb_func_start MPlayMain
+MPlayMain:
+ ldr r2, lt2_ID_NUMBER
+ ldr r3, [r0, o_MusicPlayerInfo_ident]
+ cmp r2, r3
+ beq _080AE91E
+ bx lr
+_080AE91E:
+ adds r3, 0x1
+ str r3, [r0, o_MusicPlayerInfo_ident]
+ push {r0,lr}
+ ldr r3, [r0, o_MusicPlayerInfo_func]
+ cmp r3, 0
+ beq _080AE930
+ ldr r0, [r0, o_MusicPlayerInfo_intp]
+ bl call_r3_2
+_080AE930:
+ pop {r0}
+ push {r4-r7}
+ mov r4, r8
+ mov r5, r9
+ mov r6, r10
+ mov r7, r11
+ push {r4-r7}
+ adds r7, r0, 0
+ ldr r0, [r7, o_MusicPlayerInfo_status]
+ cmp r0, 0
+ bge _080AE948
+ b _080AEB5C
+_080AE948:
+ ldr r0, lt2_SOUND_INFO_PTR
+ ldr r0, [r0]
+ mov r8, r0
+ adds r0, r7, 0
+ bl FadeOutBody
+ ldr r0, [r7, o_MusicPlayerInfo_status]
+ cmp r0, 0
+ bge _080AE95C
+ b _080AEB5C
+_080AE95C:
+ ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
+ ldrh r1, [r7, o_MusicPlayerInfo_tempoI]
+ adds r0, r1
+ b _080AEAAC
+_080AE964:
+ ldrb r6, [r7, o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, o_MusicPlayerInfo_tracks]
+ movs r3, 0x1
+ movs r4, 0
+_080AE96C:
+ ldrb r0, [r5]
+ movs r1, 0x80
+ tst r1, r0
+ bne _080AE976
+ b _080AEA88
+_080AE976:
+ mov r10, r3
+ orrs r4, r3
+ mov r11, r4
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq _080AE9AA
+_080AE982:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq _080AE99E
+ ldrb r0, [r4, 0x10]
+ cmp r0, 0
+ beq _080AE9A4
+ subs r0, 0x1
+ strb r0, [r4, 0x10]
+ bne _080AE9A4
+ movs r0, 0x40
+ orrs r1, r0
+ strb r1, [r4]
+ b _080AE9A4
+_080AE99E:
+ adds r0, r4, 0
+ bl ClearChain
+_080AE9A4:
+ ldr r4, [r4, 0x34]
+ cmp r4, 0
+ bne _080AE982
+_080AE9AA:
+ ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0x40
+ tst r0, r3
+ beq _080AEA28
+ adds r0, r5, 0
+ bl Clear64byte
+ movs r0, 0x80
+ strb r0, [r5]
+ movs r0, 0x2
+ strb r0, [r5, o_MusicPlayerTrack_bendRange]
+ movs r0, 0x40
+ strb r0, [r5, o_MusicPlayerTrack_volX]
+ movs r0, 0x16
+ strb r0, [r5, o_MusicPlayerTrack_lfoSpeed]
+ movs r0, 0x1
+ adds r1, r5, 0x6
+ strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6]
+ b _080AEA28
+_080AE9D0:
+ ldr r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ ldrb r1, [r2]
+ cmp r1, 0x80
+ bcs _080AE9DC
+ ldrb r1, [r5, o_MusicPlayerTrack_runningStatus]
+ b _080AE9E6
+_080AE9DC:
+ adds r2, 0x1
+ str r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ cmp r1, 0xBD
+ bcc _080AE9E6
+ strb r1, [r5, o_MusicPlayerTrack_runningStatus]
+_080AE9E6:
+ cmp r1, 0xCF
+ bcc _080AE9FC
+ mov r0, r8
+ ldr r3, [r0, o_SoundInfo_plynote]
+ adds r0, r1, 0
+ subs r0, 0xCF
+ adds r1, r7, 0
+ adds r2, r5, 0
+ bl call_r3_2
+ b _080AEA28
+_080AE9FC:
+ cmp r1, 0xB0
+ bls _080AEA1E
+ adds r0, r1, 0
+ subs r0, 0xB1
+ strb r0, [r7, o_MusicPlayerInfo_cmd]
+ mov r3, r8
+ ldr r3, [r3, o_SoundInfo_MPlayJumpTable]
+ lsls r0, 2
+ ldr r3, [r3, r0]
+ adds r0, r7, 0
+ adds r1, r5, 0
+ bl call_r3_2
+ ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ cmp r0, 0
+ beq _080AEA84
+ b _080AEA28
+_080AEA1E:
+ ldr r0, lt_gClockTable
+ subs r1, 0x80
+ adds r1, r0
+ ldrb r0, [r1]
+ strb r0, [r5, o_MusicPlayerTrack_wait]
+_080AEA28:
+ ldrb r0, [r5, o_MusicPlayerTrack_wait]
+ cmp r0, 0
+ beq _080AE9D0
+ subs r0, 0x1
+ strb r0, [r5, o_MusicPlayerTrack_wait]
+ ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed]
+ cmp r1, 0
+ beq _080AEA84
+ ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ cmp r0, 0
+ beq _080AEA84
+ ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ cmp r0, 0
+ beq _080AEA4A
+ subs r0, 0x1
+ strb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ b _080AEA84
+_080AEA4A:
+ ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ adds r0, r1
+ strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ adds r1, r0, 0
+ subs r0, 0x40
+ lsls r0, 24
+ bpl _080AEA5E
+ lsls r2, r1, 24
+ asrs r2, 24
+ b _080AEA62
+_080AEA5E:
+ movs r0, 0x80
+ subs r2, r0, r1
+_080AEA62:
+ ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ muls r0, r2
+ asrs r2, r0, 6
+ ldrb r0, [r5, o_MusicPlayerTrack_modM]
+ eors r0, r2
+ lsls r0, 24
+ beq _080AEA84
+ strb r2, [r5, o_MusicPlayerTrack_modM]
+ ldrb r0, [r5]
+ ldrb r1, [r5, o_MusicPlayerTrack_modT]
+ cmp r1, 0
+ bne _080AEA7E
+ movs r1, 0xC
+ b _080AEA80
+_080AEA7E:
+ movs r1, 0x3
+_080AEA80:
+ orrs r0, r1
+ strb r0, [r5, o_MusicPlayerTrack_flags]
+_080AEA84:
+ mov r3, r10
+ mov r4, r11
+_080AEA88:
+ subs r6, 0x1
+ ble _080AEA94
+ movs r0, 0x50
+ adds r5, r0
+ lsls r3, 1
+ b _080AE96C
+_080AEA94:
+ ldr r0, [r7, o_MusicPlayerInfo_clock]
+ adds r0, 0x1
+ str r0, [r7, o_MusicPlayerInfo_clock]
+ cmp r4, 0
+ bne _080AEAA6
+ movs r0, 0x80
+ lsls r0, 24
+ str r0, [r7, o_MusicPlayerInfo_status]
+ b _080AEB5C
+_080AEAA6:
+ str r4, [r7, o_MusicPlayerInfo_status]
+ ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
+ subs r0, 0x96
+_080AEAAC:
+ strh r0, [r7, o_MusicPlayerInfo_tempoC]
+ cmp r0, 0x96
+ bcc _080AEAB4
+ b _080AE964
+_080AEAB4:
+ ldrb r2, [r7, o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, o_MusicPlayerInfo_tracks]
+_080AEAB8:
+ ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ movs r1, 0x80
+ tst r1, r0
+ beq _080AEB52
+ movs r1, 0xF
+ tst r1, r0
+ beq _080AEB52
+ mov r9, r2
+ adds r0, r7, 0
+ adds r1, r5, 0
+ bl TrkVolPitSet
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq _080AEB48
+_080AEAD6:
+ ldrb r1, [r4, o_SoundChannel_status]
+ movs r0, 0xC7
+ tst r0, r1
+ bne _080AEAE6
+ adds r0, r4, 0
+ bl ClearChain
+ b _080AEB42
+_080AEAE6:
+ ldrb r0, [r4, o_SoundChannel_type]
+ movs r6, 0x7
+ ands r6, r0
+ ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0x3
+ tst r0, r3
+ beq _080AEB04
+ bl ChnVolSetAsm
+ cmp r6, 0
+ beq _080AEB04
+ ldrb r0, [r4, o_CgbChannel_mo]
+ movs r1, 0x1
+ orrs r0, r1
+ strb r0, [r4, o_CgbChannel_mo]
+_080AEB04:
+ ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0xC
+ tst r0, r3
+ beq _080AEB42
+ ldrb r1, [r4, o_SoundChannel_ky]
+ movs r0, 0x8
+ ldrsb r0, [r5, r0]
+ adds r2, r1, r0
+ bpl _080AEB18
+ movs r2, 0
+_080AEB18:
+ cmp r6, 0
+ beq _080AEB36
+ mov r0, r8
+ ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq]
+ adds r1, r2, 0
+ ldrb r2, [r5, o_MusicPlayerTrack_pitM]
+ adds r0, r6, 0
+ bl call_r3_2
+ str r0, [r4, o_CgbChannel_fr]
+ ldrb r0, [r4, o_CgbChannel_mo]
+ movs r1, 0x2
+ orrs r0, r1
+ strb r0, [r4, o_CgbChannel_mo]
+ b _080AEB42
+_080AEB36:
+ adds r1, r2, 0
+ ldrb r2, [r5, o_MusicPlayerTrack_pitM]
+ ldr r0, [r4, o_SoundChannel_wav]
+ bl MidiKeyToFreq
+ str r0, [r4, o_SoundChannel_freq]
+_080AEB42:
+ ldr r4, [r4, o_SoundChannel_np]
+ cmp r4, 0
+ bne _080AEAD6
+_080AEB48:
+ ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ movs r1, 0xF0
+ ands r0, r1
+ strb r0, [r5, o_MusicPlayerTrack_flags]
+ mov r2, r9
+_080AEB52:
+ subs r2, 0x1
+ ble _080AEB5C
+ movs r0, 0x50
+ adds r5, r0
+ bgt _080AEAB8
+_080AEB5C:
+ ldr r0, lt2_ID_NUMBER
+ str r0, [r7, o_MusicPlayerInfo_ident]
+ pop {r0-r7}
+ mov r8, r0
+ mov r9, r1
+ mov r10, r2
+ mov r11, r3
+ pop {r3}
+call_r3_2:
+ bx r3
+ .align 2, 0
+
+lt_gClockTable: .word gClockTable
+lt2_SOUND_INFO_PTR: .word SOUND_INFO_PTR
+lt2_ID_NUMBER: .word ID_NUMBER
+ thumb_func_end MPlayMain
+
+ thumb_func_start TrackStop
+TrackStop:
+ push {r4-r6,lr}
+ adds r5, r1, 0
+ ldrb r1, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0x80
+ tst r0, r1
+ beq TrackStop_Done
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq TrackStop_3
+ movs r6, 0
+TrackStop_Loop:
+ ldrb r0, [r4, o_SoundChannel_status]
+ cmp r0, 0
+ beq TrackStop_2
+ ldrb r0, [r4, o_SoundChannel_type]
+ movs r3, 0x7
+ ands r0, r3
+ beq TrackStop_1
+ ldr r3, =SOUND_INFO_PTR
+ ldr r3, [r3]
+ ldr r3, [r3, o_SoundInfo_CgbOscOff]
+ bl call_r3_2
+TrackStop_1:
+ strb r6, [r4, o_SoundChannel_status]
+TrackStop_2:
+ str r6, [r4, o_SoundChannel_track]
+ ldr r4, [r4, o_SoundChannel_np]
+ cmp r4, 0
+ bne TrackStop_Loop
+TrackStop_3:
+ str r4, [r5, o_MusicPlayerTrack_chan]
+TrackStop_Done:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end TrackStop
+
+ thumb_func_start ChnVolSetAsm
+ChnVolSetAsm:
+ ldrb r1, [r4, 0x12]
+ movs r0, 0x14
+ ldrsb r2, [r4, r0]
+ movs r3, 0x80
+ adds r3, r2
+ muls r3, r1
+ ldrb r0, [r5, 0x10]
+ muls r0, r3
+ asrs r0, 14
+ cmp r0, 0xFF
+ bls _080AEBD8
+ movs r0, 0xFF
+_080AEBD8:
+ strb r0, [r4, 0x2]
+ movs r3, 0x7F
+ subs r3, r2
+ muls r3, r1
+ ldrb r0, [r5, 0x11]
+ muls r0, r3
+ asrs r0, 14
+ cmp r0, 0xFF
+ bls _080AEBEC
+ movs r0, 0xFF
+_080AEBEC:
+ strb r0, [r4, 0x3]
+ bx lr
+ thumb_func_end ChnVolSetAsm
+
+ thumb_func_start ply_note
+ply_note:
+ push {r4-r7,lr}
+ mov r4, r8
+ mov r5, r9
+ mov r6, r10
+ mov r7, r11
+ push {r4-r7}
+ sub sp, 0x18
+ str r1, [sp]
+ adds r5, r2, 0
+ ldr r1, =SOUND_INFO_PTR
+ ldr r1, [r1]
+ str r1, [sp, 0x4]
+ ldr r1, =gClockTable
+ adds r0, r1
+ ldrb r0, [r0]
+ strb r0, [r5, o_MusicPlayerTrack_gateTime]
+ ldr r3, [r5, o_MusicPlayerTrack_cmdPtr]
+ ldrb r0, [r3]
+ cmp r0, 0x80
+ bcs _080AEC36
+ strb r0, [r5, o_MusicPlayerTrack_key]
+ adds r3, 0x1
+ ldrb r0, [r3]
+ cmp r0, 0x80
+ bcs _080AEC34
+ strb r0, [r5, o_MusicPlayerTrack_velocity]
+ adds r3, 0x1
+ ldrb r0, [r3]
+ cmp r0, 0x80
+ bcs _080AEC34
+ ldrb r1, [r5, o_MusicPlayerTrack_gateTime]
+ adds r1, r0
+ strb r1, [r5, o_MusicPlayerTrack_gateTime]
+ adds r3, 0x1
+_080AEC34:
+ str r3, [r5, o_MusicPlayerTrack_cmdPtr]
+_080AEC36:
+ movs r0, 0
+ str r0, [sp, 0x14]
+ adds r4, r5, 0
+ adds r4, o_MusicPlayerTrack_ToneData_type
+ ldrb r2, [r4]
+ movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL
+ tst r0, r2
+ beq _080AEC88
+ ldrb r3, [r5, o_MusicPlayerTrack_key]
+ movs r0, TONEDATA_TYPE_SPL
+ tst r0, r2
+ beq _080AEC56
+ ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable]
+ adds r1, r3
+ ldrb r0, [r1]
+ b _080AEC58
+_080AEC56:
+ adds r0, r3, 0
+_080AEC58:
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav]
+ adds r1, r0
+ mov r9, r1
+ mov r6, r9
+ ldrb r1, [r6]
+ movs r0, 0xC0
+ tst r0, r1
+ beq _080AEC70
+ b _080AEDD6
+_080AEC70:
+ movs r0, 0x80
+ tst r0, r2
+ beq _080AEC8C
+ ldrb r1, [r6, 0x3]
+ movs r0, 0x80
+ tst r0, r1
+ beq _080AEC84
+ subs r1, 0xC0
+ lsls r1, 1
+ str r1, [sp, 0x14]
+_080AEC84:
+ ldrb r3, [r6, 0x1]
+ b _080AEC8C
+_080AEC88:
+ mov r9, r4
+ ldrb r3, [r5, 0x5]
+_080AEC8C:
+ str r3, [sp, 0x8]
+ ldr r6, [sp]
+ ldrb r1, [r6, 0x9]
+ ldrb r0, [r5, 0x1D]
+ adds r0, r1
+ cmp r0, 0xFF
+ bls _080AEC9C
+ movs r0, 0xFF
+_080AEC9C:
+ str r0, [sp, 0x10]
+ mov r6, r9
+ ldrb r0, [r6]
+ movs r6, 0x7
+ ands r6, r0
+ str r6, [sp, 0xC]
+ beq _080AECDC
+ ldr r0, [sp, 0x4]
+ ldr r4, [r0, 0x1C]
+ cmp r4, 0
+ bne _080AECB4
+ b _080AEDD6
+_080AECB4:
+ subs r6, 0x1
+ lsls r0, r6, 6
+ adds r4, r0
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq _080AED30
+ movs r0, 0x40
+ tst r0, r1
+ bne _080AED30
+ ldrb r1, [r4, 0x13]
+ ldr r0, [sp, 0x10]
+ cmp r1, r0
+ bcc _080AED30
+ beq _080AECD4
+ b _080AEDD6
+_080AECD4:
+ ldr r0, [r4, 0x2C]
+ cmp r0, r5
+ bcs _080AED30
+ b _080AEDD6
+_080AECDC:
+ ldr r6, [sp, 0x10]
+ adds r7, r5, 0
+ movs r2, 0
+ mov r8, r2
+ ldr r4, [sp, 0x4]
+ ldrb r3, [r4, 0x6]
+ adds r4, 0x50
+_080AECEA:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq _080AED30
+ movs r0, 0x40
+ tst r0, r1
+ beq _080AED04
+ cmp r2, 0
+ bne _080AED08
+ adds r2, 0x1
+ ldrb r6, [r4, 0x13]
+ ldr r7, [r4, 0x2C]
+ b _080AED22
+_080AED04:
+ cmp r2, 0
+ bne _080AED24
+_080AED08:
+ ldrb r0, [r4, 0x13]
+ cmp r0, r6
+ bcs _080AED14
+ adds r6, r0, 0
+ ldr r7, [r4, 0x2C]
+ b _080AED22
+_080AED14:
+ bhi _080AED24
+ ldr r0, [r4, 0x2C]
+ cmp r0, r7
+ bls _080AED20
+ adds r7, r0, 0
+ b _080AED22
+_080AED20:
+ bcc _080AED24
+_080AED22:
+ mov r8, r4
+_080AED24:
+ adds r4, 0x40
+ subs r3, 0x1
+ bgt _080AECEA
+ mov r4, r8
+ cmp r4, 0
+ beq _080AEDD6
+_080AED30:
+ adds r0, r4, 0
+ bl ClearChain
+ movs r1, 0
+ str r1, [r4, 0x30]
+ ldr r3, [r5, 0x20]
+ str r3, [r4, 0x34]
+ cmp r3, 0
+ beq _080AED44
+ str r4, [r3, 0x30]
+_080AED44:
+ str r4, [r5, 0x20]
+ str r5, [r4, 0x2C]
+ ldrb r0, [r5, 0x1B]
+ strb r0, [r5, 0x1C]
+ cmp r0, r1
+ beq _080AED56
+ adds r1, r5, 0
+ bl clear_modM
+_080AED56:
+ ldr r0, [sp]
+ adds r1, r5, 0
+ bl TrkVolPitSet
+ ldr r0, [r5, 0x4]
+ str r0, [r4, 0x10]
+ ldr r0, [sp, 0x10]
+ strb r0, [r4, 0x13]
+ ldr r0, [sp, 0x8]
+ strb r0, [r4, 0x8]
+ ldr r0, [sp, 0x14]
+ strb r0, [r4, 0x14]
+ mov r6, r9
+ ldrb r0, [r6]
+ strb r0, [r4, 0x1]
+ ldr r7, [r6, 0x4]
+ str r7, [r4, 0x24]
+ ldr r0, [r6, 0x8]
+ str r0, [r4, 0x4]
+ ldrh r0, [r5, 0x1E]
+ strh r0, [r4, 0xC]
+ bl ChnVolSetAsm
+ ldrb r1, [r4, 0x8]
+ movs r0, 0x8
+ ldrsb r0, [r5, r0]
+ adds r3, r1, r0
+ bpl _080AED90
+ movs r3, 0
+_080AED90:
+ ldr r6, [sp, 0xC]
+ cmp r6, 0
+ beq _080AEDBE
+ mov r6, r9
+ ldrb r0, [r6, 0x2]
+ strb r0, [r4, 0x1E]
+ ldrb r1, [r6, 0x3]
+ movs r0, 0x80
+ tst r0, r1
+ bne _080AEDAA
+ movs r0, 0x70
+ tst r0, r1
+ bne _080AEDAC
+_080AEDAA:
+ movs r1, 0x8
+_080AEDAC:
+ strb r1, [r4, 0x1F]
+ ldrb r2, [r5, 0x9]
+ adds r1, r3, 0
+ ldr r0, [sp, 0xC]
+ ldr r3, [sp, 0x4]
+ ldr r3, [r3, 0x30]
+ bl call_r3_2
+ b _080AEDC8
+_080AEDBE:
+ ldrb r2, [r5, 0x9]
+ adds r1, r3, 0
+ adds r0, r7, 0
+ bl MidiKeyToFreq
+_080AEDC8:
+ str r0, [r4, 0x20]
+ movs r0, 0x80
+ strb r0, [r4]
+ ldrb r1, [r5]
+ movs r0, 0xF0
+ ands r0, r1
+ strb r0, [r5]
+_080AEDD6:
+ add sp, 0x18
+ pop {r0-r7}
+ mov r8, r0
+ mov r9, r1
+ mov r10, r2
+ mov r11, r3
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end ply_note
+
+ thumb_func_start ply_endtie
+ply_endtie:
+ push {r4,r5}
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ cmp r3, 0x80
+ bcs _080AEE02
+ strb r3, [r1, o_MusicPlayerTrack_key]
+ adds r2, 0x1
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ b _080AEE04
+_080AEE02:
+ ldrb r3, [r1, o_MusicPlayerTrack_key]
+_080AEE04:
+ ldr r1, [r1, o_MusicPlayerTrack_chan]
+ cmp r1, 0
+ beq _080AEE2C
+ movs r4, 0x83
+ movs r5, 0x40
+_080AEE0E:
+ ldrb r2, [r1, o_SoundChannel_status]
+ tst r2, r4
+ beq _080AEE26
+ tst r2, r5
+ bne _080AEE26
+ ldrb r0, [r1, o_SoundChannel_mk]
+ cmp r0, r3
+ bne _080AEE26
+ movs r0, 0x40
+ orrs r2, r0
+ strb r2, [r1, o_SoundChannel_status]
+ b _080AEE2C
+_080AEE26:
+ ldr r1, [r1, o_SoundChannel_np]
+ cmp r1, 0
+ bne _080AEE0E
+_080AEE2C:
+ pop {r4,r5}
+ bx lr
+ thumb_func_end ply_endtie
+
+ thumb_func_start clear_modM
+clear_modM:
+ movs r2, 0
+ strb r2, [r1, o_MusicPlayerTrack_modM]
+ strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC]
+ ldrb r2, [r1, o_MusicPlayerTrack_modT]
+ cmp r2, 0
+ bne _080AEE40
+ movs r2, 0xC
+ b _080AEE42
+_080AEE40:
+ movs r2, 0x3
+_080AEE42:
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx lr
+ thumb_func_end clear_modM
+
+ thumb_func_start ld_r3_tp_adr_i_unchecked
+ld_r3_tp_adr_i_unchecked:
+ ldr r2, [r1, 0x40]
+ adds r3, r2, 0x1
+ str r3, [r1, 0x40]
+ ldrb r3, [r2]
+ bx lr
+ thumb_func_end ld_r3_tp_adr_i_unchecked
+
+ thumb_func_start ply_lfos
+ply_lfos:
+ mov r12, lr
+ bl ld_r3_tp_adr_i_unchecked
+ strb r3, [r1, o_MusicPlayerTrack_lfoSpeed]
+ cmp r3, 0
+ bne _080AEE68
+ bl clear_modM
+_080AEE68:
+ bx r12
+ thumb_func_end ply_lfos
+
+ thumb_func_start ply_mod
+ply_mod:
+ mov r12, lr
+ bl ld_r3_tp_adr_i_unchecked
+ strb r3, [r1, o_MusicPlayerTrack_mod]
+ cmp r3, 0
+ bne _080AEE7C
+ bl clear_modM
+_080AEE7C:
+ bx r12
+ thumb_func_end ply_mod
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/m4a_2.s b/asm/m4a_2.s
new file mode 100644
index 0000000..eb525ce
--- /dev/null
+++ b/asm/m4a_2.s
@@ -0,0 +1,70 @@
+ .include "asm/macros.inc"
+ .include "constants/gba_constants.inc"
+ .include "constants/m4a_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start CgbModVol
+CgbModVol:
+ push {r4,lr}
+ adds r1, r0, 0
+ ldrb r0, [r1, 0x2]
+ lsls r2, r0, 24
+ lsrs r4, r2, 24
+ ldrb r3, [r1, 0x3]
+ lsls r0, r3, 24
+ lsrs r3, r0, 24
+ cmp r4, r3
+ bcc _080AFA94
+ lsrs r0, r2, 25
+ cmp r0, r3
+ bcc _080AFAA0
+ movs r0, 0xF
+ strb r0, [r1, 0x1B]
+ b _080AFAAE
+_080AFA94:
+ lsrs r0, 25
+ cmp r0, r4
+ bcc _080AFAA0
+ movs r0, 0xF0
+ strb r0, [r1, 0x1B]
+ b _080AFAAE
+_080AFAA0:
+ movs r0, 0xFF
+ strb r0, [r1, 0x1B]
+ ldrb r2, [r1, 0x3]
+ ldrb r3, [r1, 0x2]
+ adds r0, r2, r3
+ lsrs r0, 4
+ b _080AFABE
+_080AFAAE:
+ ldrb r2, [r1, 0x3]
+ ldrb r3, [r1, 0x2]
+ adds r0, r2, r3
+ lsrs r0, 4
+ strb r0, [r1, 0xA]
+ cmp r0, 0xF
+ bls _080AFAC0
+ movs r0, 0xF
+_080AFABE:
+ strb r0, [r1, 0xA]
+_080AFAC0:
+ ldrb r2, [r1, 0x6]
+ ldrb r3, [r1, 0xA]
+ adds r0, r2, 0
+ muls r0, r3
+ adds r0, 0xF
+ asrs r0, 4
+ strb r0, [r1, 0x19]
+ ldrb r0, [r1, 0x1C]
+ ldrb r2, [r1, 0x1B]
+ ands r0, r2
+ strb r0, [r1, 0x1B]
+ pop {r4}
+ pop {r0}
+ bx r0
+ thumb_func_end CgbModVol
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/m4a_3.s b/asm/m4a_3.s
new file mode 100644
index 0000000..4747b3f
--- /dev/null
+++ b/asm/m4a_3.s
@@ -0,0 +1,574 @@
+ .include "asm/macros.inc"
+ .include "constants/gba_constants.inc"
+ .include "constants/m4a_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start CgbSound
+CgbSound:
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x1C
+ ldr r0, =SOUND_INFO_PTR
+ ldr r0, [r0]
+ str r0, [sp, 0x4]
+ ldrb r0, [r0, 0xA]
+ cmp r0, 0
+ beq _080AFB00
+ subs r0, 0x1
+ ldr r1, [sp, 0x4]
+ strb r0, [r1, 0xA]
+ b _080AFB06
+ .pool
+_080AFB00:
+ movs r0, 0xE
+ ldr r2, [sp, 0x4]
+ strb r0, [r2, 0xA]
+_080AFB06:
+ movs r6, 0x1
+ ldr r0, [sp, 0x4]
+ ldr r4, [r0, 0x1C]
+_080AFB0C:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ ands r0, r1
+ adds r2, r6, 0x1
+ mov r10, r2
+ movs r2, 0x40
+ adds r2, r4
+ mov r9, r2
+ cmp r0, 0
+ bne _080AFB22
+ b _080AFF0C
+_080AFB22:
+ cmp r6, 0x2
+ beq _080AFB54
+ cmp r6, 0x2
+ bgt _080AFB30
+ cmp r6, 0x1
+ beq _080AFB36
+ b _080AFB8C
+_080AFB30:
+ cmp r6, 0x3
+ beq _080AFB6C
+ b _080AFB8C
+_080AFB36:
+ ldr r0, =REG_NR10
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR11
+ ldr r2, =REG_NR12
+ str r2, [sp, 0xC]
+ adds r0, 0x4
+ str r0, [sp, 0x10]
+ adds r2, 0x2
+ b _080AFB9C
+ .pool
+_080AFB54:
+ ldr r0, =REG_NR10 + 1
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR21
+ ldr r2, =REG_NR22
+ b _080AFB94
+ .pool
+_080AFB6C:
+ ldr r0, =REG_NR30
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR31
+ ldr r2, =REG_NR32
+ str r2, [sp, 0xC]
+ adds r0, 0x4
+ str r0, [sp, 0x10]
+ adds r2, 0x2
+ b _080AFB9C
+ .pool
+_080AFB8C:
+ ldr r0, =REG_NR30 + 1
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR41
+ ldr r2, =REG_NR42
+_080AFB94:
+ str r2, [sp, 0xC]
+ adds r0, 0xB
+ str r0, [sp, 0x10]
+ adds r2, 0x4
+_080AFB9C:
+ str r2, [sp, 0x14]
+ ldr r0, [sp, 0x4]
+ ldrb r0, [r0, 0xA]
+ str r0, [sp]
+ ldr r2, [sp, 0xC]
+ ldrb r0, [r2]
+ mov r8, r0
+ adds r2, r1, 0
+ movs r0, 0x80
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFC92
+ movs r3, 0x40
+ adds r0, r3, 0
+ ands r0, r2
+ lsls r0, 24
+ lsrs r5, r0, 24
+ adds r0, r6, 0x1
+ mov r10, r0
+ movs r1, 0x40
+ adds r1, r4
+ mov r9, r1
+ cmp r5, 0
+ bne _080AFCB6
+ movs r0, 0x3
+ strb r0, [r4]
+ strb r0, [r4, 0x1D]
+ adds r0, r4, 0
+ str r3, [sp, 0x18]
+ bl CgbModVol
+ ldr r3, [sp, 0x18]
+ cmp r6, 0x2
+ beq _080AFC04
+ cmp r6, 0x2
+ bgt _080AFBF8
+ cmp r6, 0x1
+ beq _080AFBFE
+ b _080AFC58
+ .pool
+_080AFBF8:
+ cmp r6, 0x3
+ beq _080AFC10
+ b _080AFC58
+_080AFBFE:
+ ldrb r0, [r4, 0x1F]
+ ldr r2, [sp, 0x8]
+ strb r0, [r2]
+_080AFC04:
+ ldr r0, [r4, 0x24]
+ lsls r0, 6
+ ldrb r1, [r4, 0x1E]
+ adds r0, r1, r0
+ strb r0, [r7]
+ b _080AFC64
+_080AFC10:
+ ldr r1, [r4, 0x24]
+ ldr r0, [r4, 0x28]
+ cmp r1, r0
+ beq _080AFC38
+ ldr r2, [sp, 0x8]
+ strb r3, [r2]
+ ldr r1, =REG_WAVE_RAM
+ ldr r2, [r4, 0x24]
+ ldr r0, [r2]
+ str r0, [r1]
+ adds r1, 0x4
+ ldr r0, [r2, 0x4]
+ str r0, [r1]
+ adds r1, 0x4
+ ldr r0, [r2, 0x8]
+ str r0, [r1]
+ adds r1, 0x4
+ ldr r0, [r2, 0xC]
+ str r0, [r1]
+ str r2, [r4, 0x28]
+_080AFC38:
+ ldr r0, [sp, 0x8]
+ strb r5, [r0]
+ ldrb r0, [r4, 0x1E]
+ strb r0, [r7]
+ ldrb r0, [r4, 0x1E]
+ cmp r0, 0
+ beq _080AFC50
+ movs r0, 0xC0
+ b _080AFC72
+ .pool
+_080AFC50:
+ movs r1, 0x80
+ negs r1, r1
+ strb r1, [r4, 0x1A]
+ b _080AFC74
+_080AFC58:
+ ldrb r0, [r4, 0x1E]
+ strb r0, [r7]
+ ldr r0, [r4, 0x24]
+ lsls r0, 3
+ ldr r2, [sp, 0x10]
+ strb r0, [r2]
+_080AFC64:
+ ldrb r0, [r4, 0x4]
+ adds r0, 0x8
+ mov r8, r0
+ ldrb r0, [r4, 0x1E]
+ cmp r0, 0
+ beq _080AFC72
+ movs r0, 0x40
+_080AFC72:
+ strb r0, [r4, 0x1A]
+_080AFC74:
+ ldrb r1, [r4, 0x4]
+ movs r2, 0
+ strb r1, [r4, 0xB]
+ movs r0, 0xFF
+ ands r0, r1
+ adds r1, r6, 0x1
+ mov r10, r1
+ movs r1, 0x40
+ adds r1, r4
+ mov r9, r1
+ cmp r0, 0
+ bne _080AFC8E
+ b _080AFDCA
+_080AFC8E:
+ strb r2, [r4, 0x9]
+ b _080AFDF8
+_080AFC92:
+ movs r0, 0x4
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFCC4
+ ldrb r0, [r4, 0xD]
+ subs r0, 0x1
+ strb r0, [r4, 0xD]
+ movs r2, 0xFF
+ ands r0, r2
+ lsls r0, 24
+ adds r1, r6, 0x1
+ mov r10, r1
+ movs r2, 0x40
+ adds r2, r4
+ mov r9, r2
+ cmp r0, 0
+ ble _080AFCB6
+ b _080AFE0A
+_080AFCB6:
+ lsls r0, r6, 24
+ lsrs r0, 24
+ bl CgbOscOff
+ movs r0, 0
+ strb r0, [r4]
+ b _080AFF08
+_080AFCC4:
+ movs r0, 0x40
+ ands r0, r1
+ adds r2, r6, 0x1
+ mov r10, r2
+ movs r2, 0x40
+ adds r2, r4
+ mov r9, r2
+ cmp r0, 0
+ beq _080AFD04
+ movs r0, 0x3
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFD04
+ movs r0, 0xFC
+ ands r0, r1
+ movs r2, 0
+ strb r0, [r4]
+ ldrb r1, [r4, 0x7]
+ strb r1, [r4, 0xB]
+ movs r0, 0xFF
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFD36
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+ cmp r6, 0x3
+ beq _080AFDF8
+ ldrb r2, [r4, 0x7]
+ mov r8, r2
+ b _080AFDF8
+_080AFD04:
+ ldrb r0, [r4, 0xB]
+ cmp r0, 0
+ bne _080AFDF8
+ cmp r6, 0x3
+ bne _080AFD16
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+_080AFD16:
+ adds r0, r4, 0
+ bl CgbModVol
+ movs r0, 0x3
+ ldrb r2, [r4]
+ ands r0, r2
+ cmp r0, 0
+ bne _080AFD6A
+ ldrb r0, [r4, 0x9]
+ subs r0, 0x1
+ strb r0, [r4, 0x9]
+ movs r1, 0xFF
+ ands r0, r1
+ lsls r0, 24
+ cmp r0, 0
+ bgt _080AFD66
+_080AFD36:
+ ldrb r2, [r4, 0xC]
+ ldrb r1, [r4, 0xA]
+ adds r0, r2, 0
+ muls r0, r1
+ adds r0, 0xFF
+ asrs r0, 8
+ movs r1, 0
+ strb r0, [r4, 0x9]
+ lsls r0, 24
+ cmp r0, 0
+ beq _080AFCB6
+ movs r0, 0x4
+ ldrb r2, [r4]
+ orrs r0, r2
+ strb r0, [r4]
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+ cmp r6, 0x3
+ beq _080AFE0A
+ movs r2, 0x8
+ mov r8, r2
+ b _080AFE0A
+_080AFD66:
+ ldrb r0, [r4, 0x7]
+ b _080AFDF6
+_080AFD6A:
+ cmp r0, 0x1
+ bne _080AFD76
+_080AFD6E:
+ ldrb r0, [r4, 0x19]
+ strb r0, [r4, 0x9]
+ movs r0, 0x7
+ b _080AFDF6
+_080AFD76:
+ cmp r0, 0x2
+ bne _080AFDBA
+ ldrb r0, [r4, 0x9]
+ subs r0, 0x1
+ strb r0, [r4, 0x9]
+ movs r1, 0xFF
+ ands r0, r1
+ lsls r0, 24
+ ldrb r2, [r4, 0x19]
+ lsls r1, r2, 24
+ cmp r0, r1
+ bgt _080AFDB6
+_080AFD8E:
+ ldrb r0, [r4, 0x6]
+ cmp r0, 0
+ bne _080AFD9E
+ movs r0, 0xFC
+ ldrb r1, [r4]
+ ands r0, r1
+ strb r0, [r4]
+ b _080AFD36
+_080AFD9E:
+ ldrb r0, [r4]
+ subs r0, 0x1
+ strb r0, [r4]
+ movs r0, 0x1
+ ldrb r2, [r4, 0x1D]
+ orrs r0, r2
+ strb r0, [r4, 0x1D]
+ cmp r6, 0x3
+ beq _080AFD6E
+ movs r0, 0x8
+ mov r8, r0
+ b _080AFD6E
+_080AFDB6:
+ ldrb r0, [r4, 0x5]
+ b _080AFDF6
+_080AFDBA:
+ ldrb r0, [r4, 0x9]
+ adds r0, 0x1
+ strb r0, [r4, 0x9]
+ movs r1, 0xFF
+ ands r0, r1
+ ldrb r2, [r4, 0xA]
+ cmp r0, r2
+ bcc _080AFDF4
+_080AFDCA:
+ ldrb r0, [r4]
+ subs r0, 0x1
+ movs r2, 0
+ strb r0, [r4]
+ ldrb r1, [r4, 0x5]
+ strb r1, [r4, 0xB]
+ movs r0, 0xFF
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFD8E
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+ ldrb r0, [r4, 0xA]
+ strb r0, [r4, 0x9]
+ cmp r6, 0x3
+ beq _080AFDF8
+ ldrb r2, [r4, 0x5]
+ mov r8, r2
+ b _080AFDF8
+_080AFDF4:
+ ldrb r0, [r4, 0x4]
+_080AFDF6:
+ strb r0, [r4, 0xB]
+_080AFDF8:
+ ldrb r0, [r4, 0xB]
+ subs r0, 0x1
+ strb r0, [r4, 0xB]
+ ldr r0, [sp]
+ cmp r0, 0
+ bne _080AFE0A
+ subs r0, 0x1
+ str r0, [sp]
+ b _080AFD04
+_080AFE0A:
+ movs r0, 0x2
+ ldrb r1, [r4, 0x1D]
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFE82
+ cmp r6, 0x3
+ bgt _080AFE4A
+ movs r0, 0x8
+ ldrb r2, [r4, 0x1]
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFE4A
+ ldr r0, =REG_SOUNDBIAS + 1
+ ldrb r0, [r0]
+ cmp r0, 0x3F
+ bgt _080AFE3C
+ ldr r0, [r4, 0x20]
+ adds r0, 0x2
+ ldr r1, =0x000007fc
+ b _080AFE46
+ .pool
+_080AFE3C:
+ cmp r0, 0x7F
+ bgt _080AFE4A
+ ldr r0, [r4, 0x20]
+ adds r0, 0x1
+ ldr r1, =0x000007fe
+_080AFE46:
+ ands r0, r1
+ str r0, [r4, 0x20]
+_080AFE4A:
+ cmp r6, 0x4
+ beq _080AFE5C
+ ldr r0, [r4, 0x20]
+ ldr r1, [sp, 0x10]
+ strb r0, [r1]
+ b _080AFE6A
+ .pool
+_080AFE5C:
+ ldr r2, [sp, 0x10]
+ ldrb r0, [r2]
+ movs r1, 0x8
+ ands r1, r0
+ ldr r0, [r4, 0x20]
+ orrs r0, r1
+ strb r0, [r2]
+_080AFE6A:
+ movs r0, 0xC0
+ ldrb r1, [r4, 0x1A]
+ ands r0, r1
+ adds r1, r4, 0
+ adds r1, 0x21
+ ldrb r1, [r1]
+ adds r0, r1, r0
+ strb r0, [r4, 0x1A]
+ movs r2, 0xFF
+ ands r0, r2
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+_080AFE82:
+ movs r0, 0x1
+ ldrb r2, [r4, 0x1D]
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFF08
+ ldr r1, =REG_NR51
+ ldrb r0, [r1]
+ ldrb r2, [r4, 0x1C]
+ bics r0, r2
+ ldrb r2, [r4, 0x1B]
+ orrs r0, r2
+ strb r0, [r1]
+ cmp r6, 0x3
+ bne _080AFED4
+ ldr r0, =gCgb3Vol
+ ldrb r1, [r4, 0x9]
+ adds r0, r1, r0
+ ldrb r0, [r0]
+ ldr r2, [sp, 0xC]
+ strb r0, [r2]
+ movs r1, 0x80
+ adds r0, r1, 0
+ ldrb r2, [r4, 0x1A]
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFF08
+ ldr r0, [sp, 0x8]
+ strb r1, [r0]
+ ldrb r0, [r4, 0x1A]
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+ movs r0, 0x7F
+ ldrb r2, [r4, 0x1A]
+ ands r0, r2
+ strb r0, [r4, 0x1A]
+ b _080AFF08
+ .pool
+_080AFED4:
+ movs r0, 0xF
+ mov r1, r8
+ ands r1, r0
+ mov r8, r1
+ ldrb r2, [r4, 0x9]
+ lsls r0, r2, 4
+ add r0, r8
+ ldr r1, [sp, 0xC]
+ strb r0, [r1]
+ movs r2, 0x80
+ ldrb r0, [r4, 0x1A]
+ orrs r0, r2
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+ cmp r6, 0x1
+ bne _080AFF08
+ ldr r0, [sp, 0x8]
+ ldrb r1, [r0]
+ movs r0, 0x8
+ ands r0, r1
+ cmp r0, 0
+ bne _080AFF08
+ ldrb r0, [r4, 0x1A]
+ orrs r0, r2
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+_080AFF08:
+ movs r0, 0
+ strb r0, [r4, 0x1D]
+_080AFF0C:
+ mov r6, r10
+ mov r4, r9
+ cmp r6, 0x4
+ bgt _080AFF16
+ b _080AFB0C
+_080AFF16:
+ add sp, 0x1C
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end CgbSound
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/sprite.s b/asm/sprite.s
index 06d87f0..284526c 100644
--- a/asm/sprite.s
+++ b/asm/sprite.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_8004D8C
-sub_8004D8C:
+ thumb_func_start ResetSprites
+ResetSprites:
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -120,8 +120,8 @@ _08004E50:
pop {r0}
bx r0
.align 2, 0
-_08004E68: .4byte gUnknown_20266A8
-_08004E6C: .4byte gUnknown_2026E30
+_08004E68: .4byte gSpriteCount
+_08004E6C: .4byte gCharMemCursor
_08004E70: .4byte 0x06010000
_08004E74: .4byte gUnknown_203B074
_08004E78: .4byte gUnknown_20266B0
@@ -129,7 +129,7 @@ _08004E7C: .4byte gUnknown_20256A0
_08004E80: .4byte gUnknown_20262A8
_08004E84: .4byte gUnknown_2025EA8
_08004E88: .4byte 0x00000804
- thumb_func_end sub_8004D8C
+ thumb_func_end ResetSprites
thumb_func_start sub_8004E8C
sub_8004E8C:
@@ -230,7 +230,7 @@ _08004F20:
strh r0, [r1, 0x2]
b _08004F86
.align 2, 0
-_08004F40: .4byte gUnknown_20266A8
+_08004F40: .4byte gSpriteCount
_08004F44: .4byte 0x0000fcff
_08004F48: .4byte 0x0000f1ff
_08004F4C: .4byte 0x000003ff
@@ -448,7 +448,7 @@ _080050D8:
strh r0, [r2, 0x2]
b _08005128
.align 2, 0
-_080050F4: .4byte gUnknown_20266A8
+_080050F4: .4byte gSpriteCount
_080050F8: .4byte gUnknown_20262A8
_080050FC:
ldrh r1, [r6]
@@ -513,7 +513,7 @@ _08005168:
bx r0
.align 2, 0
_08005174: .4byte gUnknown_2025EA8
-_08005178: .4byte gUnknown_20266A8
+_08005178: .4byte gSpriteCount
_0800517C: .4byte gUnknown_20256A0
thumb_func_end AddSprite
@@ -728,8 +728,8 @@ _080052F2:
bx r0
.align 2, 0
_080052F8: .4byte gUnknown_203B074
-_080052FC: .4byte gUnknown_2026E30
-_08005300: .4byte gUnknown_2026E30
+_080052FC: .4byte gCharMemCursor
+_08005300: .4byte gCharMemCursor
thumb_func_end sub_80052BC
thumb_func_start sub_8005304
@@ -790,7 +790,7 @@ sub_800533C:
str r0, [r1]
b _0800538E
.align 2, 0
-_08005368: .4byte gUnknown_2026E30
+_08005368: .4byte gCharMemCursor
_0800536C: .4byte 0x06010000
_08005370:
cmp r6, 0
diff --git a/data/data_80B9BB8.s b/data/data_80B9BB8.s
index 3b51eba..6c98e87 100644
--- a/data/data_80B9BB8.s
+++ b/data/data_80B9BB8.s
@@ -11966,42 +11966,3 @@ gUnknown_812F1F8: @ 812F1F8
gUnknown_813237C: @ 813237C
.incbin "baserom.gba", 0x13237C, 0x13D610
- .global gUnknown_826F98C
-gUnknown_826F98C: @ 826F98C
- .incbin "baserom.gba", 0x26F98C, 0x90
-
- .global gUnknown_826FA1C
-gUnknown_826FA1C: @ 826FA1C
- .incbin "baserom.gba", 0x26FA1C, 0xB4
-
- .global gUnknown_826FAD0
-gUnknown_826FAD0: @ 826FAD0
- .incbin "baserom.gba", 0x26FAD0, 0x30
-
- .global gUnknown_826FB00
-gUnknown_826FB00: @ 826FB00
- .incbin "baserom.gba", 0x26FB00, 0x18
-
- .global gUnknown_826FB18
-gUnknown_826FB18: @ 826FB18
- .incbin "baserom.gba", 0x26FB18, 0x84
-
- .global gUnknown_826FB9C
-gUnknown_826FB9C: @ 826FB9C
- .incbin "baserom.gba", 0x26FB9C, 0x18
-
- .global gUnknown_826FBB4
-gUnknown_826FBB4: @ 826FBB4
- .incbin "baserom.gba", 0x26FBB4, 0x3C
-
- .global gUnknown_826FBF0
-gUnknown_826FBF0: @ 826FBF0
- .incbin "baserom.gba", 0x26FBF0, 0x10
-
- .global gUnknown_826FC00
-gUnknown_826FC00: @ 826FC00
- .incbin "baserom.gba", 0x26FC00, 0x34
-
- .global gUnknown_826FC34
-gUnknown_826FC34: @ 826FC34
- .incbin "baserom.gba", 0x26FC34, 0x30
diff --git a/data/sound_data.s b/data/sound_data.s
index 043b59a..0987088 100644
--- a/data/sound_data.s
+++ b/data/sound_data.s
@@ -1,9 +1,9 @@
.section .rodata
- .global gUnknown_9E8665C
-gUnknown_9E8665C: @ 9E8665C
+ .global gMPlayTable
+gMPlayTable: @ 9E8665C
.incbin "baserom.gba", 0x1E8665C, 0x60
- .global gUnknown_9E866BC
-gUnknown_9E866BC: @ 9E866BC
+ .global gSongTable
+gSongTable: @ 9E866BC
.incbin "baserom.gba", 0x1E866BC
diff --git a/include/memory.h b/include/memory.h
index 99b03e0..4b1e587 100644
--- a/include/memory.h
+++ b/include/memory.h
@@ -26,7 +26,7 @@ struct HeapFreeListElement
struct HeapDescriptor
{
u32 unk0;
- u32 unk4;
+ struct HeapDescriptor *parentHeap;
struct HeapFreeListElement *freeList;
s32 freeCount;
u32 freeListLength;
@@ -51,6 +51,6 @@ void MemoryCopy32(u32 *dest, u32 *src, s32 size);
void InitHeapInternal(void);
void DoInitHeap(struct HeapDescriptor *, struct HeapSettings *, struct HeapFreeListElement *, u32);
-void InitSubHeap(struct HeapDescriptor *, struct HeapFreeListElement *, u32);
+void InitSubHeap(struct HeapDescriptor *, struct HeapMemoryBlock *, u32);
-#endif // GUARD_MEMORY_H \ No newline at end of file
+#endif // GUARD_MEMORY_H
diff --git a/ld_script.txt b/ld_script.txt
index 304c9c8..214812f 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -1,5 +1,8 @@
ENTRY(Start)
+gNumMusicPlayers = 8;
+gMaxLines = 0;
+
SECTIONS {
. = 0x2000000;
@@ -8,23 +11,15 @@ SECTIONS {
{
ewram_start = .;
INCLUDE "sym_ewram.ld"
- . = ALIGN(4);
src/agb_flash.o(.bss);
- . = ALIGN(4);
tools/agbcc/lib/libgcc.a:fp-bit.o(.bss);
- . = ALIGN(4);
tools/agbcc/lib/libgcc.a:dp-bit.o(.bss);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:syscalls.o(.bss);
. = ALIGN(16);
INCLUDE "sym_ewram2.ld"
- . = ALIGN(4);
tools/agbcc/lib/libc.a:impure.o(.data);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:locale.o(.data);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:mallocr.o(.data);
- . = ALIGN(4);
gUnknown_203BC04 = .;
. = 0x40000;
}
@@ -73,7 +68,11 @@ SECTIONS {
asm/save.o(.text);
src/save1.o(.text);
asm/code_8012A18.o(.text);
- asm/m4a.o(.text);
+ asm/m4a_1.o(.text);
+ src/m4a_2.o(.text);
+ asm/m4a_2.o(.text);
+ asm/m4a_3.o(.text);
+ src/m4a_4.o(.text);
asm/syscall.o(.text);
src/agb_flash.o(.text);
src/agb_flash_1m.o(.text);
@@ -138,23 +137,17 @@ SECTIONS {
data/data.o(.rodata);
src/file_system.o(.rodata);
data/data_80B9BB8.o(.rodata);
+ src/m4a_tables.o(.rodata);
src/agb_flash.o(.rodata);
src/agb_flash_1m.o(.rodata);
src/agb_flash_mx.o(.rodata);
src/agb_flash_le.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:sprintf.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:vfprintf.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:dtoa.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:impure.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:locale.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:mprec.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:syscalls.o(.rodata);
. = ALIGN(4);
data/data_8270000.o(.rodata);
@@ -169,7 +162,8 @@ SECTIONS {
unk_code_end = .;
}
- unk_code_ram_end = unk_code_ram + (unk_code_end - unk_code);
+ unk_code_section_size = (unk_code_end - unk_code);
+ unk_code_ram_end = unk_code_ram + unk_code_section_size;
end = unk_code_ram_end;
. = 0x8300000;
diff --git a/src/bg_palette_buffer.c b/src/bg_palette_buffer.c
index 6301bfa..e36176d 100644
--- a/src/bg_palette_buffer.c
+++ b/src/bg_palette_buffer.c
@@ -18,7 +18,7 @@ void InitBGPaletteBuffer(void)
u8* p;
- ptr = gUnknown_20251F0;
+ ptr = gBGPaletteBuffer;
i = 0x80;
i <<= 2;
@@ -30,12 +30,12 @@ void InitBGPaletteBuffer(void)
paletteUsed = TRUE;
- p = gUnknown_20251D0;
+ p = gBGPaletteUsed;
p += 31;
do
*p-- = paletteUsed;
- while ((s32) p >= (s32) &gUnknown_20251D0);
+ while ((s32) p >= (s32) &gBGPaletteUsed);
}
void SetBGPaletteBufferColorRGB(s32 index, u8 *RGBArray, s32 a3, u8 *a4)
{
diff --git a/src/m4a_2.c b/src/m4a_2.c
new file mode 100644
index 0000000..176910e
--- /dev/null
+++ b/src/m4a_2.c
@@ -0,0 +1,834 @@
+#include "gba/m4a_internal.h"
+
+extern char SoundMainRAM_Buffer[0x400];
+
+extern struct SoundInfo gSoundInfo;
+
+
+u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
+{
+ u32 val1;
+ u32 val2;
+ u32 fineAdjustShifted = fineAdjust << 24;
+
+ if (key > 178)
+ {
+ key = 178;
+ fineAdjustShifted = 255 << 24;
+ }
+
+ val1 = gScaleTable[key];
+ val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gScaleTable[key + 1];
+ val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
+}
+
+void UnusedDummyFunc()
+{
+}
+
+void MPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aSoundInit(void)
+{
+ s32 i;
+
+ CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer));
+
+ SoundInit(&gSoundInfo);
+ MPlayExtender(gCgbChans);
+ m4aSoundMode(SOUND_MODE_DA_BIT_8
+ | SOUND_MODE_FREQ_18157
+ | (14 << SOUND_MODE_MASVOL_SHIFT)
+ | (5 << SOUND_MODE_MAXCHN_SHIFT));
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ {
+ struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
+ MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
+ mplayInfo->unk_B = gMPlayTable[i].unk_A;
+ mplayInfo->memAccArea = gMPlayMemAccArea;
+ }
+}
+
+void m4aSoundMain(void)
+{
+ SoundMain();
+}
+
+void m4aSongNumStart(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ MPlayStart(mplay->info, song->header);
+}
+
+void m4aSongNumStartOrChange(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ else
+ {
+ if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE))
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ }
+}
+
+void m4aSongNumStartOrContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ MPlayStart(mplay->info, song->header);
+ else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0)
+ MPlayStart(mplay->info, song->header);
+ else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)
+ MPlayContinue(mplay->info);
+}
+
+
+void m4aSongNumStop(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ m4aMPlayStop(mplay->info);
+}
+
+void m4aSongNumContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ MPlayContinue(mplay->info);
+}
+
+void m4aMPlayAllStop(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ m4aMPlayStop(gMPlayTable[i].info);
+}
+
+void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ MPlayContinue(mplayInfo);
+}
+
+void m4aMPlayAllContinue(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ MPlayContinue(gMPlayTable[i].info);
+}
+
+void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ MPlayFadeOut(mplayInfo, speed);
+}
+
+void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 trackCount = mplayInfo->trackCount;
+ struct MusicPlayerTrack *track = mplayInfo->tracks;
+
+ while (trackCount > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ if (track->flags & MPT_FLG_START)
+ {
+ Clear64byte(track);
+ track->flags = MPT_FLG_EXIST;
+ track->bendRange = 2;
+ track->volX = 64;
+ track->lfoSpeed = 22;
+ track->tone.type = 1;
+ }
+ }
+
+ trackCount--;
+ track++;
+ }
+}
+
+void MPlayExtender(struct CgbChannel *cgbChans)
+{
+ struct SoundInfo *soundInfo;
+ u32 ident;
+
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_L = 0; // set master volume to zero
+ REG_NR12 = 0x8;
+ REG_NR22 = 0x8;
+ REG_NR42 = 0x8;
+ REG_NR14 = 0x80;
+ REG_NR24 = 0x80;
+ REG_NR44 = 0x80;
+ REG_NR30 = 0;
+ REG_NR50 = 0x77;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ ident = soundInfo->ident;
+
+ if (ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ gMPlayJumpTable[8] = ply_memacc;
+ gMPlayJumpTable[17] = ply_lfos;
+ gMPlayJumpTable[19] = ply_mod;
+ gMPlayJumpTable[28] = ply_xcmd;
+ gMPlayJumpTable[29] = ply_endtie;
+ gMPlayJumpTable[30] = SampleFreqSet;
+ gMPlayJumpTable[31] = TrackStop;
+ gMPlayJumpTable[32] = FadeOutBody;
+ gMPlayJumpTable[33] = TrkVolPitSet;
+
+ soundInfo->cgbChans = (struct CgbChannel *)cgbChans;
+ soundInfo->CgbSound = CgbSound;
+ soundInfo->CgbOscOff = CgbOscOff;
+ soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq;
+ soundInfo->maxLines = MAX_LINES;
+
+ CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
+
+ cgbChans[0].ty = 1;
+ cgbChans[0].panMask = 0x11;
+ cgbChans[1].ty = 2;
+ cgbChans[1].panMask = 0x22;
+ cgbChans[2].ty = 3;
+ cgbChans[2].panMask = 0x44;
+ cgbChans[3].ty = 4;
+ cgbChans[3].panMask = 0x88;
+
+ soundInfo->ident = ident;
+}
+
+void MusicPlayerJumpTableCopy(void)
+{
+ asm("swi 0x2A");
+}
+
+void ClearChain(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[34]);
+ func(x);
+}
+
+void Clear64byte(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[35]);
+ func(x);
+}
+
+void SoundInit(struct SoundInfo *soundInfo)
+{
+ soundInfo->ident = 0;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
+ | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
+ | SOUND_ALL_MIX_FULL;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
+
+ REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
+ REG_DMA1DAD = (s32)&REG_FIFO_A;
+ REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
+ REG_DMA2DAD = (s32)&REG_FIFO_B;
+
+ SOUND_INFO_PTR = soundInfo;
+ CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
+
+ soundInfo->maxChans = 8;
+ soundInfo->masterVolume = 15;
+ soundInfo->plynote = (u32)ply_note;
+ soundInfo->CgbSound = DummyFunc;
+ soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
+ soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
+ soundInfo->ExtVolPit = (u32)DummyFunc;
+
+ MPlayJumpTableCopy(gMPlayJumpTable);
+
+ soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+
+ SampleFreqSet(SOUND_MODE_FREQ_13379);
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SampleFreqSet(u32 freq)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ freq = (freq & 0xF0000) >> 16;
+ soundInfo->freq = freq;
+ soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
+ soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
+
+ // LCD refresh rate 59.7275Hz
+ soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000;
+
+ // CPU frequency 16.78Mhz
+ soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1;
+
+ // Turn off timer 0.
+ REG_TM0CNT_H = 0;
+
+ // cycles per LCD fresh 280896
+ REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank);
+
+ m4aSoundVSyncOn();
+
+ while (*(vu8 *)REG_ADDR_VCOUNT == 159)
+ ;
+
+ while (*(vu8 *)REG_ADDR_VCOUNT != 159)
+ ;
+
+ REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK;
+}
+
+void m4aSoundMode(u32 mode)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 temp;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL);
+
+ if (temp)
+ soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL;
+
+ temp = mode & SOUND_MODE_MAXCHN;
+
+ if (temp)
+ {
+ struct SoundChannel *chan;
+
+ soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
+
+ temp = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (temp != 0)
+ {
+ chan->status = 0;
+ temp--;
+ chan++;
+ }
+ }
+
+ temp = mode & SOUND_MODE_MASVOL;
+
+ if (temp)
+ soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT;
+
+ temp = mode & SOUND_MODE_DA_BIT;
+
+ if (temp)
+ {
+ temp = (temp & 0x300000) >> 14;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp;
+ }
+
+ temp = mode & SOUND_MODE_FREQ;
+
+ if (temp)
+ {
+ m4aSoundVSyncOff();
+ SampleFreqSet(temp);
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SoundClear(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ s32 i;
+ void *chan;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ i = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (i > 0)
+ {
+ ((struct SoundChannel *)chan)->status = 0;
+ i--;
+ chan = (void *)((s32)chan + sizeof(struct SoundChannel));
+ }
+
+ chan = soundInfo->cgbChans;
+
+ if (chan)
+ {
+ i = 1;
+
+ while (i <= 4)
+ {
+ soundInfo->CgbOscOff(i);
+ ((struct CgbChannel *)chan)->sf = 0;
+ i++;
+ chan = (void *)((s32)chan + sizeof(struct CgbChannel));
+ }
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void m4aSoundVSyncOff(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
+ {
+ soundInfo->ident += 10;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+
+ CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
+ }
+}
+
+void m4aSoundVSyncOn(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 ident = soundInfo->ident;
+
+ if (ident == ID_NUMBER)
+ return;
+
+ REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+ REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+
+ soundInfo->pcmDmaCounter = 0;
+ soundInfo->ident = ident - 10;
+}
+
+void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount)
+{
+ struct SoundInfo *soundInfo;
+
+ if (trackCount == 0)
+ return;
+
+ if (trackCount > MAX_MUSICPLAYER_TRACKS)
+ trackCount = MAX_MUSICPLAYER_TRACKS;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ Clear64byte(mplayInfo);
+
+ mplayInfo->tracks = tracks;
+ mplayInfo->trackCount = trackCount;
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ while (trackCount != 0)
+ {
+ tracks->flags = 0;
+ trackCount--;
+ tracks++;
+ }
+
+ if (soundInfo->func != 0)
+ {
+ mplayInfo->func = soundInfo->func;
+ mplayInfo->intp = soundInfo->intp;
+ soundInfo->func = 0;
+ }
+
+ soundInfo->intp = (u32)mplayInfo;
+ soundInfo->func = (u32)MPlayMain;
+ soundInfo->ident = ID_NUMBER;
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader)
+{
+ s32 i;
+ u8 unk_B;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ unk_B = mplayInfo->unk_B;
+
+ if (!unk_B
+ || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START))
+ && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE)))
+ || (mplayInfo->priority <= songHeader->priority))
+ {
+ mplayInfo->ident++;
+ mplayInfo->status = 0;
+ mplayInfo->songHeader = songHeader;
+ mplayInfo->tone = songHeader->tone;
+ mplayInfo->priority = songHeader->priority;
+ mplayInfo->clock = 0;
+ mplayInfo->tempoD = 150;
+ mplayInfo->tempoI = 150;
+ mplayInfo->tempoU = 0x100;
+ mplayInfo->tempoC = 0;
+ mplayInfo->fadeOI = 0;
+
+ i = 0;
+ track = mplayInfo->tracks;
+
+ while (i < songHeader->trackCount && i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = MPT_FLG_EXIST | MPT_FLG_START;
+ track->chan = 0;
+ track->cmdPtr = songHeader->part[i];
+ i++;
+ track++;
+ }
+
+ while (i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = 0;
+ i++;
+ track++;
+ }
+
+ if (songHeader->reverb & 0x80)
+ m4aSoundMode(songHeader->reverb);
+
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ TrackStop(mplayInfo, track);
+ i--;
+ track++;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+ u16 fadeOI = mplayInfo->fadeOI;
+ register u32 temp asm("r3");
+ register u16 mask asm("r2");
+
+ if (fadeOI == 0)
+ return;
+
+ mplayInfo->fadeOC--;
+
+ temp = 0xFFFF;
+ mask = temp;
+
+ if (mplayInfo->fadeOC != 0)
+ return;
+
+ mplayInfo->fadeOC = fadeOI;
+
+ if (mplayInfo->fadeOV & FADE_IN)
+ {
+ mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
+
+ if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
+ {
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->fadeOI = 0;
+ }
+ }
+ else
+ {
+ mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
+
+ if ((s16)(mplayInfo->fadeOV & mask) <= 0)
+ {
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ register u32 fadeOV asm("r7");
+ u32 val;
+
+ TrackStop(mplayInfo, track);
+
+ val = TEMPORARY_FADE;
+ fadeOV = mplayInfo->fadeOV;
+ val &= fadeOV;
+
+ if (!val)
+ track->flags = 0;
+
+ i--;
+ track++;
+ }
+
+ if (mplayInfo->fadeOV & TEMPORARY_FADE)
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+ else
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ mplayInfo->fadeOI = 0;
+ return;
+ }
+ }
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT);
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+
+ i--;
+ track++;
+ }
+}
+
+void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ if (track->flags & MPT_FLG_VOLSET)
+ {
+ s32 x;
+ s32 y;
+
+ x = (u32)(track->vol * track->volX) >> 5;
+
+ if (track->modT == 1)
+ x = (u32)(x * (track->modM + 128)) >> 7;
+
+ y = 2 * track->pan + track->panX;
+
+ if (track->modT == 2)
+ y += track->modM;
+
+ if (y < -128)
+ y = -128;
+ else if (y > 127)
+ y = 127;
+
+ track->volMR = (u32)((y + 128) * x) >> 8;
+ track->volML = (u32)((127 - y) * x) >> 8;
+ }
+
+ if (track->flags & MPT_FLG_PITSET)
+ {
+ s32 bend = track->bend * track->bendRange;
+ register s32 x asm("r1") = track->tune;
+ x += bend;
+ x *= 4;
+ x += (track->keyShift << 8);
+ x += (track->keyShiftX << 8);
+ x += track->pitX;
+
+ if (track->modT == 0)
+ x += 16 * track->modM;
+
+ track->keyM = x >> 8;
+ track->pitM = x;
+ }
+
+ track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET);
+}
+
+u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust)
+{
+ if (chanNum == 4)
+ {
+ if (key <= 20)
+ {
+ key = 0;
+ }
+ else
+ {
+ key -= 21;
+ if (key > 59)
+ key = 59;
+ }
+
+ return gNoiseTable[key];
+ }
+ else
+ {
+ s32 val1;
+ s32 val2;
+
+ if (key <= 35)
+ {
+ fineAdjust = 0;
+ key = 0;
+ }
+ else
+ {
+ key -= 36;
+ if (key > 130)
+ {
+ key = 130;
+ fineAdjust = 255;
+ }
+ }
+
+ val1 = gCgbScaleTable[key];
+ val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gCgbScaleTable[key + 1];
+ val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048;
+ }
+}
+
+void CgbOscOff(u8 chanNum)
+{
+ switch (chanNum)
+ {
+ case 1:
+ REG_NR12 = 8;
+ REG_NR14 = 0x80;
+ break;
+ case 2:
+ REG_NR22 = 8;
+ REG_NR24 = 0x80;
+ break;
+ case 3:
+ REG_NR30 = 0;
+ break;
+ default:
+ REG_NR42 = 8;
+ REG_NR44 = 0x80;
+ }
+}
diff --git a/src/m4a_4.c b/src/m4a_4.c
new file mode 100644
index 0000000..595ea5a
--- /dev/null
+++ b/src/m4a_4.c
@@ -0,0 +1,384 @@
+#include "gba/m4a_internal.h"
+
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->tempoU = tempo;
+ mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->volX = volume / 4;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->keyShiftX = pitch >> 8;
+ track->pitX = pitch;
+ track->flags |= MPT_FLG_PITCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->panX = pan;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void ClearModM(struct MusicPlayerTrack *track)
+{
+ track->lfoSpeedC = 0;
+ track->modM = 0;
+
+ if (track->modT == 0)
+ track->flags |= MPT_FLG_PITCHG;
+ else
+ track->flags |= MPT_FLG_VOLCHG;
+}
+
+void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->mod = modDepth;
+
+ if (!track->mod)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->lfoSpeed = lfoSpeed;
+
+ if (!track->lfoSpeed)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+#define MEMACC_COND_JUMP(cond) \
+if (cond) \
+ goto cond_true; \
+else \
+ goto cond_false; \
+
+void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 op;
+ u8 *addr;
+ u8 data;
+
+ op = *track->cmdPtr;
+ track->cmdPtr++;
+
+ addr = mplayInfo->memAccArea + *track->cmdPtr;
+ track->cmdPtr++;
+
+ data = *track->cmdPtr;
+ track->cmdPtr++;
+
+ switch (op)
+ {
+ case 0:
+ *addr = data;
+ return;
+ case 1:
+ *addr += data;
+ return;
+ case 2:
+ *addr -= data;
+ return;
+ case 3:
+ *addr = mplayInfo->memAccArea[data];
+ return;
+ case 4:
+ *addr += mplayInfo->memAccArea[data];
+ return;
+ case 5:
+ *addr -= mplayInfo->memAccArea[data];
+ return;
+ case 6:
+ MEMACC_COND_JUMP(*addr == data)
+ return;
+ case 7:
+ MEMACC_COND_JUMP(*addr != data)
+ return;
+ case 8:
+ MEMACC_COND_JUMP(*addr > data)
+ return;
+ case 9:
+ MEMACC_COND_JUMP(*addr >= data)
+ return;
+ case 10:
+ MEMACC_COND_JUMP(*addr <= data)
+ return;
+ case 11:
+ MEMACC_COND_JUMP(*addr < data)
+ return;
+ case 12:
+ MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data])
+ return;
+ case 13:
+ MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data])
+ return;
+ case 14:
+ MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data])
+ return;
+ case 15:
+ MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data])
+ return;
+ case 16:
+ MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data])
+ return;
+ case 17:
+ MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data])
+ return;
+ default:
+ return;
+ }
+
+cond_true:
+ {
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]);
+ func(mplayInfo, track);
+ return;
+ }
+
+cond_false:
+ track->cmdPtr += 4;
+}
+
+void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 n = *track->cmdPtr;
+ track->cmdPtr++;
+
+ gXcmdTable[n](mplayInfo, track);
+}
+
+void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]);
+ func(mplayInfo, track);
+}
+
+#define READ_XCMD_BYTE(var, n) \
+{ \
+ u32 byte = track->cmdPtr[(n)]; \
+ byte <<= n * 8; \
+ (var) &= ~(0xFF << (n * 8)); \
+ (var) |= byte; \
+}
+
+void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 wav;
+
+ READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(wav, 1)
+ READ_XCMD_BYTE(wav, 2)
+ READ_XCMD_BYTE(wav, 3)
+
+ track->tone.wav = (struct WaveData *)wav;
+ track->cmdPtr += 4;
+}
+
+void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.type = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.attack = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.decay = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.sustain = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.release = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoVolume = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoLength = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.length = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.pan_sweep = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void DummyFunc()
+{
+ ;
+}
diff --git a/src/m4a_tables.c b/src/m4a_tables.c
new file mode 100644
index 0000000..fd289a6
--- /dev/null
+++ b/src/m4a_tables.c
@@ -0,0 +1,223 @@
+#include "gba/m4a_internal.h"
+
+// Some of these functions have different signatures, so we need to make this
+// an array of void pointers or a struct. It's simpler to just make it an array
+// for now.
+void * const gMPlayJumpTableTemplate[] =
+{
+ ply_fine,
+ ply_goto,
+ ply_patt,
+ ply_pend,
+ ply_rept,
+ ply_fine,
+ ply_fine,
+ ply_fine,
+ ply_fine,
+ ply_prio,
+ ply_tempo,
+ ply_keysh,
+ ply_voice,
+ ply_vol,
+ ply_pan,
+ ply_bend,
+ ply_bendr,
+ ply_lfos,
+ ply_lfodl,
+ ply_mod,
+ ply_modt,
+ ply_fine,
+ ply_fine,
+ ply_tune,
+ ply_fine,
+ ply_fine,
+ ply_fine,
+ ply_port,
+ ply_fine,
+ ply_endtie,
+ SampleFreqSet,
+ TrackStop,
+ FadeOutBody,
+ TrkVolPitSet,
+ RealClearChain,
+ SoundMainBTM,
+};
+
+const u8 gScaleTable[] =
+{
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
+};
+
+const u32 gFreqTable[] =
+{
+ 2147483648u,
+ 2275179671u,
+ 2410468894u,
+ 2553802834u,
+ 2705659852u,
+ 2866546760u,
+ 3037000500u,
+ 3217589947u,
+ 3408917802u,
+ 3611622603u,
+ 3826380858u,
+ 4053909305u,
+};
+
+const u16 gPcmSamplesPerVBlankTable[] =
+{
+ 96,
+ 132,
+ 176,
+ 224,
+ 264,
+ 304,
+ 352,
+ 448,
+ 528,
+ 608,
+ 672,
+ 704,
+};
+
+const u8 gCgbScaleTable[] =
+{
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
+};
+
+const s16 gCgbFreqTable[] =
+{
+ -2004,
+ -1891,
+ -1785,
+ -1685,
+ -1591,
+ -1501,
+ -1417,
+ -1337,
+ -1262,
+ -1192,
+ -1125,
+ -1062,
+};
+
+const u8 gNoiseTable[] =
+{
+ 0xD7, 0xD6, 0xD5, 0xD4,
+ 0xC7, 0xC6, 0xC5, 0xC4,
+ 0xB7, 0xB6, 0xB5, 0xB4,
+ 0xA7, 0xA6, 0xA5, 0xA4,
+ 0x97, 0x96, 0x95, 0x94,
+ 0x87, 0x86, 0x85, 0x84,
+ 0x77, 0x76, 0x75, 0x74,
+ 0x67, 0x66, 0x65, 0x64,
+ 0x57, 0x56, 0x55, 0x54,
+ 0x47, 0x46, 0x45, 0x44,
+ 0x37, 0x36, 0x35, 0x34,
+ 0x27, 0x26, 0x25, 0x24,
+ 0x17, 0x16, 0x15, 0x14,
+ 0x07, 0x06, 0x05, 0x04,
+ 0x03, 0x02, 0x01, 0x00,
+};
+
+const u8 gCgb3Vol[] =
+{
+ 0x00, 0x00,
+ 0x60, 0x60, 0x60, 0x60,
+ 0x40, 0x40, 0x40, 0x40,
+ 0x80, 0x80, 0x80, 0x80,
+ 0x20, 0x20,
+};
+
+const u8 gClockTable[] =
+{
+ 0x00,
+ 0x01,
+ 0x02,
+ 0x03,
+ 0x04,
+ 0x05,
+ 0x06,
+ 0x07,
+ 0x08,
+ 0x09,
+ 0x0A,
+ 0x0B,
+ 0x0C,
+ 0x0D,
+ 0x0E,
+ 0x0F,
+ 0x10,
+ 0x11,
+ 0x12,
+ 0x13,
+ 0x14,
+ 0x15,
+ 0x16,
+ 0x17,
+ 0x18,
+ 0x1C,
+ 0x1E,
+ 0x20,
+ 0x24,
+ 0x28,
+ 0x2A,
+ 0x2C,
+ 0x30,
+ 0x34,
+ 0x36,
+ 0x38,
+ 0x3C,
+ 0x40,
+ 0x42,
+ 0x44,
+ 0x48,
+ 0x4C,
+ 0x4E,
+ 0x50,
+ 0x54,
+ 0x58,
+ 0x5A,
+ 0x5C,
+ 0x60,
+};
+
+const XcmdFunc gXcmdTable[] =
+{
+ ply_xxx,
+ ply_xwave,
+ ply_xtype,
+ ply_xxx,
+ ply_xatta,
+ ply_xdeca,
+ ply_xsust,
+ ply_xrele,
+ ply_xiecv,
+ ply_xiecl,
+ ply_xleng,
+ ply_xswee
+};
diff --git a/src/memory.c b/src/memory.c
index 0d282d5..05c89a2 100644
--- a/src/memory.c
+++ b/src/memory.c
@@ -113,7 +113,7 @@ void DoInitHeap(struct HeapDescriptor *descriptor, struct HeapSettings *settings
descriptor->start = settings->start;
descriptor->size = aligned_size;
descriptor->unk0 = 2;
- descriptor->unk4 = 0;
+ descriptor->parentHeap = NULL;
descriptor->freeList = freeList;
descriptor->freeCount = 1;
descriptor->freeListLength = freeListLength;
@@ -126,7 +126,7 @@ void DoInitHeap(struct HeapDescriptor *descriptor, struct HeapSettings *settings
freeList->grp = 0;
}
-void InitSubHeap(struct HeapDescriptor *parentHeap, struct HeapFreeListElement *start, u32 freeListMax)
+void InitSubHeap(struct HeapDescriptor *parentHeap, struct HeapMemoryBlock *block, u32 freeListMax)
{
u32 freeListSize;
u32 aligned_size;
@@ -137,9 +137,9 @@ void InitSubHeap(struct HeapDescriptor *parentHeap, struct HeapFreeListElement *
freeListSize = freeListMax * 3;
alignment = ~3;
freeListSize *= 8;
- aligned_size = (start->atb - freeListSize) & alignment; //possible struct misalignment?
- freeList = (struct HeapFreeListElement *)start->unk_atb;
- settings.start = &((u8 *)start->unk_atb)[freeListSize];
+ aligned_size = (block->size - freeListSize) & alignment;
+ freeList = (struct HeapFreeListElement *)block->start;
+ settings.start = &((u8 *)block->start)[freeListSize];
settings.size = aligned_size;
DoInitHeap(parentHeap, &settings, freeList, freeListMax);
-} \ No newline at end of file
+}
diff --git a/src/save1.c b/src/save1.c
index 94f9c2b..b7de6c6 100644
--- a/src/save1.c
+++ b/src/save1.c
@@ -10,4 +10,4 @@ void sub_80129FC()
MemoryFree(gUnknown_203B194);
gUnknown_203B194 = NULL;
}
-} \ No newline at end of file
+}
diff --git a/src/sprite.c b/src/sprite.c
index 41a2a96..d741fce 100644
--- a/src/sprite.c
+++ b/src/sprite.c
@@ -1,10 +1,10 @@
#include "global.h"
-void sub_8004D8C(u32);
+void ResetSprites(bool32);
void SetSavingIconCoords(u32);
void InitSprites(void)
{
- sub_8004D8C(1);
+ ResetSprites(1);
SetSavingIconCoords(0);
-} \ No newline at end of file
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 517dfc5..a627dcf 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -6,7 +6,7 @@ gUnknown_20008F0 = .; /* 20008F0 */
gUnknown_2000970 = .; /* 2000970 */
. += 0xC0;
-gUnknown_2000A30 = .; /* 2000A30 */
+gMPlayMemAccArea = .; /* 2000A30 */
. += 0x50;
gUnknown_2000A80 = .; /* 2000A80 */
@@ -82,13 +82,13 @@ gUnknown_2025EA8 = .; /* 2025EA8 */
gUnknown_20262A8 = .; /* 20262A8 */
. += 0x400;
-gUnknown_20266A8 = .; /* 20266A8 */
+gSpriteCount = .; /* 20266A8 */
. += 0x8;
gUnknown_20266B0 = .; /* 20266B0 */
. += 0x780;
-gUnknown_2026E30 = .; /* 2026E30 */
+gCharMemCursor = .; /* 2026E30 */
. += 0x8;
gUnknown_2026E38 = .; /* 2026E38 */
@@ -519,7 +519,10 @@ gDungeonNameBannerPalette = .; /* 202EC88 */
. += 0x4;
gDungeonNameBannerFontFile = .; /* 202EC8C */
- . += 0x8;
+ . += 0x4;
+
+gDungeonNameBannerFont = .; /* 202EC90 */
+ . += 0x4;
gUnknown_202EC94 = .; /* 202EC94 */
. += 0x4;
diff --git a/sym_ewram2.txt b/sym_ewram2.txt
index 6e71482..0f91946 100644
--- a/sym_ewram2.txt
+++ b/sym_ewram2.txt
@@ -1,13 +1,10 @@
. = ALIGN(2);
-gUnknown_2039ED0 = .; /* 2039ED0 */
+gSoundInfo = .; /* 2039ED0 */
. += 0xFB0;
-gUnknown_203AE80 = .; /* 203AE80 */
- . += 0x4;
-
-gUnknown_203AE84 = .; /* 203AE84 */
- . += 0x84;
+gMPlayJumpTable = .; /* 203AE80 */
+ . += 0x88;
gUnknown_203AF08 = .; /* 203AF08 */
. += 0x4;
@@ -15,7 +12,7 @@ gUnknown_203AF08 = .; /* 203AF08 */
gUnknown_203AF0C = .; /* 203AF0C */
. += 0x4;
-gUnknown_203AF10 = .; /* 203AF10 */
+gCgbChans = .; /* 203AF10 */
. += 0x100;
gFlashTimeoutFlag = .; /* 203B010 */