diff options
-rwxr-xr-x | Makefile | 3 | ||||
-rw-r--r-- | asm/code.s | 4 | ||||
-rw-r--r-- | asm/code_800B540.s | 100 | ||||
-rw-r--r-- | asm/code_800D090.s | 4 | ||||
-rw-r--r-- | asm/code_8012A18.s | 32 | ||||
-rw-r--r-- | asm/m4a.s | 4627 | ||||
-rw-r--r-- | asm/m4a_1.s | 1647 | ||||
-rw-r--r-- | asm/m4a_2.s | 70 | ||||
-rw-r--r-- | asm/m4a_3.s | 574 | ||||
-rw-r--r-- | asm/sprite.s | 22 | ||||
-rw-r--r-- | data/data_80B9BB8.s | 39 | ||||
-rw-r--r-- | data/sound_data.s | 8 | ||||
-rw-r--r-- | include/memory.h | 6 | ||||
-rwxr-xr-x | ld_script.txt | 28 | ||||
-rw-r--r-- | src/bg_palette_buffer.c | 6 | ||||
-rw-r--r-- | src/m4a_2.c | 834 | ||||
-rw-r--r-- | src/m4a_4.c | 384 | ||||
-rw-r--r-- | src/m4a_tables.c | 223 | ||||
-rw-r--r-- | src/memory.c | 12 | ||||
-rw-r--r-- | src/save1.c | 2 | ||||
-rw-r--r-- | src/sprite.c | 6 | ||||
-rw-r--r-- | sym_ewram.txt | 11 | ||||
-rw-r--r-- | sym_ewram2.txt | 11 |
23 files changed, 3858 insertions, 4795 deletions
@@ -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 @@ -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)®_FIFO_A; + REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (s32)®_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 */ |