decompile audio

This commit is contained in:
Henny022p 2021-03-24 00:33:12 +01:00
parent c77414731d
commit 58b4df70b5
8 changed files with 148 additions and 269 deletions

View File

@ -981,59 +981,3 @@ _080A31FC:
_080A3200:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start InitSound
InitSound: @ 0xInitSound
push {lr}
bl sub_080A3210
bl m4aSoundInit
pop {pc}
thumb_func_start sub_080A3210
sub_080A3210: @ 0x080A3210
push {r4, lr}
ldr r4, _080A3230 @ =gUnk_02021EE0
adds r0, r4, #0
movs r1, #0x18
bl MemClear
bl sub_080A35C8
movs r0, #0x80
lsls r0, r0, #1
strh r0, [r4, #0x12]
strh r0, [r4, #4]
bl m4aMPlayAllStop
pop {r4, pc}
.align 2, 0
_080A3230: .4byte gUnk_02021EE0
thumb_func_start sub_080A3234
sub_080A3234: @ 0x080A3234
push {lr}
ldr r1, _080A3244 @ =gUnk_02021EE0
strh r0, [r1, #8]
strh r0, [r1, #0xa]
ldrh r0, [r1, #0x14]
bl sub_080A353C
pop {pc}
.align 2, 0
_080A3244: .4byte gUnk_02021EE0
thumb_func_start sub_080A3248
sub_080A3248: @ 0x080A3248
push {lr}
ldr r1, _080A3258 @ =gUnk_02021EE0
strh r0, [r1, #0x10]
strh r0, [r1, #0xe]
ldrh r0, [r1, #0x14]
bl sub_080A353C
pop {pc}
.align 2, 0
_080A3258: .4byte gUnk_02021EE0
thumb_func_start sub_080A325C
sub_080A325C: @ 0x080A325C
ldr r1, _080A3264 @ =gUnk_02021EE0
strh r0, [r1, #0x12]
bx lr
.align 2, 0
_080A3264: .4byte gUnk_02021EE0

View File

@ -6,201 +6,6 @@
.text
thumb_func_start sub_080A3480
sub_080A3480: @ 0x080A3480
push {r4, lr}
ldr r4, _080A34A4 @ =gUnk_02021EE0
movs r0, #0xa
ldrsh r1, [r4, r0]
movs r2, #8
ldrsh r0, [r4, r2]
cmp r1, r0
beq _080A34C4
adds r0, r1, #0
movs r2, #8
ldrsh r1, [r4, r2]
bl sub_080A3518
adds r1, r0, #0
cmp r1, #0
bne _080A34A8
ldrh r0, [r4, #0xa]
b _080A34AC
.align 2, 0
_080A34A4: .4byte gUnk_02021EE0
_080A34A8:
ldrh r0, [r4, #8]
adds r0, r0, r1
_080A34AC:
strh r0, [r4, #8]
movs r1, #8
ldrsh r0, [r4, r1]
cmp r0, #0
bge _080A34BC
movs r0, #0
strh r0, [r4, #0xa]
strh r0, [r4, #8]
_080A34BC:
ldrh r0, [r4, #0x14]
bl sub_080A353C
b _080A3516
_080A34C4:
movs r2, #0x10
ldrsh r1, [r4, r2]
movs r2, #0xe
ldrsh r0, [r4, r2]
cmp r1, r0
beq _080A3516
adds r0, r1, #0
movs r2, #0xe
ldrsh r1, [r4, r2]
bl sub_080A3518
adds r1, r0, #0
cmp r1, #0
bne _080A34FC
ldrb r0, [r4, #2]
ldrh r2, [r4, #0x10]
cmp r0, #0
beq _080A34F8
cmp r2, #0
bne _080A34F8
strb r1, [r4, #2]
strh r1, [r4, #0x14]
movs r0, #0
bl m4aSongNumStop
b _080A3502
_080A34F8:
strh r2, [r4, #0xe]
b _080A3502
_080A34FC:
ldrh r0, [r4, #0xe]
adds r0, r0, r1
strh r0, [r4, #0xe]
_080A3502:
movs r1, #0xe
ldrsh r0, [r4, r1]
cmp r0, #0
bge _080A3510
movs r0, #0
strh r0, [r4, #0x10]
strh r0, [r4, #0xe]
_080A3510:
ldrh r0, [r4, #0x14]
bl sub_080A353C
_080A3516:
pop {r4, pc}
thumb_func_start sub_080A3518
sub_080A3518: @ 0x080A3518
push {lr}
adds r2, r0, #0
subs r0, r2, r1
cmp r0, #0
ble _080A352C
adds r1, #4
cmp r2, r1
ble _080A3532
movs r0, #4
b _080A353A
_080A352C:
subs r1, #4
cmp r2, r1
blt _080A3536
_080A3532:
movs r0, #0
b _080A353A
_080A3536:
movs r0, #4
rsbs r0, r0, #0
_080A353A:
pop {pc}
thumb_func_start sub_080A353C
sub_080A353C: @ 0x080A353C
push {r4, r5, lr}
adds r3, r0, #0
cmp r3, #0
beq _080A358C
subs r0, r3, #1
cmp r0, #0x62
bhi _080A3558
ldr r0, _080A3554 @ =gUnk_02021EE0
movs r1, #0xe
ldrsh r5, [r0, r1]
b _080A355E
.align 2, 0
_080A3554: .4byte gUnk_02021EE0
_080A3558:
ldr r0, _080A3590 @ =gUnk_02021EE0
movs r1, #0x12
ldrsh r5, [r0, r1]
_080A355E:
movs r1, #8
ldrsh r0, [r0, r1]
muls r0, r5, r0
lsrs r5, r0, #8
ldr r2, _080A3594 @ =gMPlayTable
ldr r1, _080A3598 @ =gSongTable
lsls r0, r3, #3
adds r0, r0, r1
ldrh r1, [r0, #4]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
adds r0, r0, r2
ldr r4, [r0]
adds r0, r4, #0
bl m4aMPlayImmInit
ldr r1, _080A359C @ =0x0000FFFF
lsls r2, r5, #0x10
lsrs r2, r2, #0x10
adds r0, r4, #0
bl m4aMPlayVolumeControl
_080A358C:
pop {r4, r5, pc}
.align 2, 0
_080A3590: .4byte gUnk_02021EE0
_080A3594: .4byte gMPlayTable
_080A3598: .4byte gSongTable
_080A359C: .4byte 0x0000FFFF
thumb_func_start sub_080A35A0
sub_080A35A0: @ 0x080A35A0
push {lr}
ldr r2, _080A35B0 @ =gUnk_02021EE0
movs r1, #0x80
lsls r1, r1, #1
strh r1, [r2, #0xa]
bl sub_080A353C
pop {pc}
.align 2, 0
_080A35B0: .4byte gUnk_02021EE0
thumb_func_start sub_080A35B4
sub_080A35B4: @ 0x080A35B4
push {lr}
ldr r2, _080A35C4 @ =gUnk_02021EE0
movs r1, #0
strh r1, [r2, #0xa]
bl sub_080A353C
pop {pc}
.align 2, 0
_080A35C4: .4byte gUnk_02021EE0
thumb_func_start sub_080A35C8
sub_080A35C8: @ 0x080A35C8
ldr r1, _080A35DC @ =gUnk_02021EE0
movs r0, #0x80
lsls r0, r0, #1
strh r0, [r1, #6]
strh r0, [r1, #8]
strh r0, [r1, #0xa]
strh r0, [r1, #0xc]
strh r0, [r1, #0xe]
strh r0, [r1, #0x10]
bx lr
.align 2, 0
_080A35DC: .4byte gUnk_02021EE0
thumb_func_start HandleCreditsScreen
HandleCreditsScreen: @ 0x080A35E0
push {lr}

View File

@ -1,6 +1,6 @@
.section .rodata
song_08DCC48C:: @ 08DCC48C
sfxNone:: @ 08DCC48C
.incbin "baserom.gba", 0xDCC48C, 0x0000240
bgmCastleTournament:: @ 08DCC6CC

View File

@ -23,7 +23,7 @@ typedef enum {
BGM_VAATI_THEME,
BGM_EZLO_THEME,
BGM_STORY,
BGM_FESTIVAL_APPROACH, //0x10
BGM_FESTIVAL_APPROACH,
BGM_BEAT_VAATI,
BGM_UNUSED_12,
BGM_BEANSTALK,
@ -39,7 +39,7 @@ typedef enum {
BGM_MINISH_WOODS,
BGM_CRENEL_STORM,
BGM_CASTOR_WILDS,
BGM_HYRULE_TOWN, //0x20
BGM_HYRULE_TOWN,
BGM_ROYAL_VALLEY,
BGM_CLOUD_TOPS,
BGM_DARK_HYRULE_CASTLE,
@ -55,7 +55,7 @@ typedef enum {
BGM_FIGHT_THEME,
BGM_BOSS_THEME,
BGM_VAATI_REBORN,
BGM_VAATI_TRANSFIGURED, // 0x30
BGM_VAATI_TRANSFIGURED,
BGM_CASTLE_COLLAPSE,
BGM_VAATI_WRATH,
BGM_FIGHT_THEME2,
@ -71,7 +71,7 @@ typedef enum {
BGM_UNUSED_3D,
BGM_UNUSED_3E,
BGM_UNUSED_3F,
BGM_UNUSED_40, // 0x40
BGM_UNUSED_40,
BGM_UNUSED_41,
BGM_UNUSED_42,
BGM_UNUSED_43,
@ -152,7 +152,7 @@ typedef enum {
SFX_VO_EZLO1,
SFX_VO_EZLO2,
SFX_VO_EZLO3,
SFX_VO_EZLO4, //0x90
SFX_VO_EZLO4,
SFX_VO_EZLO5,
SFX_VO_EZLO6,
SFX_VO_EZLO7,
@ -574,6 +574,7 @@ typedef enum {
SONG_UNK_11 = 0x80110000,
} Sound;
void InitSound(void);
void SoundReq(Sound sound);
#endif // AUDIO_H

View File

@ -60,11 +60,14 @@ typedef struct MusicPlayer {
extern const MusicPlayer gMPlayTable[];
extern const Song gSongTable[];
void m4aSoundInit(void);
void m4aSongNumStart(u16 n);
void m4aSongNumStartOrContinue(u16 n);
void m4aSongNumStop(u16 n);
void m4aMPlayAllStop(void);
void m4aMPlayImmInit(MusicPlayerInfo* mplayInfo);
void m4aMPlayTempoControl(MusicPlayerInfo* mplayInfo, u16 tempo);
void m4aMPlayVolumeControl(MusicPlayerInfo* mplayInfo, u16 trackBits, u16 volume);
void m4aSoundVSyncOn(void);
void m4aSoundVSyncOff(void);

View File

@ -79,7 +79,6 @@ extern UI gUnk_02032EC0;
void InitScreen(u32 screen);
extern void InitSound(void);
extern void sub_08056208(void);
extern void sub_0804FFE4(void);
extern void sub_080ADD30(void);

View File

@ -190,10 +190,10 @@ typedef struct struct_02021EE0 {
s16 unk_06;
s16 unk_08;
s16 unk_0a;
u16 unk_0c;
u16 unk_0e;
u16 unk_10;
u16 unk_12;
s16 unk_0c;
s16 unk_0e;
s16 unk_10;
s16 unk_12;
u16 currentBgm;
} struct_02021EE0;

View File

@ -2,17 +2,49 @@
#include "main.h"
#include "gba/m4a.h"
#include "audio.h"
#include "utils.h"
#include "structures.h"
extern void sub_080A35A0(u32);
extern void sub_080A35C8(void);
extern void sub_080A353C(u32);
extern void sub_080A3234(u32);
extern void sub_080A35B4(u32);
s32 sub_080A3518(s32, s32);
void sub_080A353C(u32);
void sub_080A35A0(u32);
void sub_080A35B4(u32);
void sub_080A35C8(void);
#define IS_BGM(song) (song) - 1 <= NUM_BGM - 1
#define IS_SFX(song) (song) - 1 > NUM_BGM - 1
void sub_080A3210(void);
void InitSound(void){
sub_080A3210();
m4aSoundInit();
}
void sub_080A3210(void){
MemClear(&gUnk_02021EE0, 0x18);
sub_080A35C8();
gUnk_02021EE0.unk_12 = 0x100;
gUnk_02021EE0.unk_04 = 0x100;
m4aMPlayAllStop();
}
void sub_080A3234(u32 arg){
gUnk_02021EE0.unk_08 = arg;
gUnk_02021EE0.unk_0a = arg;
sub_080A353C(gUnk_02021EE0.currentBgm);
}
void sub_080A3248(u32 arg){
gUnk_02021EE0.unk_10 = arg;
gUnk_02021EE0.unk_0e = arg;
sub_080A353C(gUnk_02021EE0.currentBgm);
}
void sub_080A325C(u32 arg){
gUnk_02021EE0.unk_12 = arg;
}
void SoundReq(Sound sound) {
u32 song;
struct_02021EE0* ptr;
@ -111,7 +143,102 @@ void SoundReq(Sound sound) {
}
}
extern const SongHeader song_08DCC48C;
void sub_080A3480(void) {
u32 iVar2;
struct_02021EE0* ptr = &gUnk_02021EE0;
if (ptr->unk_0a != ptr->unk_08) {
iVar2 = sub_080A3518(ptr->unk_0a, ptr->unk_08);
if (iVar2 == 0) {
ptr->unk_08 = ptr->unk_0a;
} else {
ptr->unk_08 = ptr->unk_08 + iVar2;
}
if (ptr->unk_08 < 0) {
ptr->unk_0a = 0;
ptr->unk_08 = 0;
}
sub_080A353C(ptr->currentBgm);
} else {
if (ptr->unk_10 != ptr->unk_0e) {
iVar2 = sub_080A3518(ptr->unk_10, ptr->unk_0e);
if (iVar2 == 0) {
if (ptr->unk_02 != 0 && ptr->unk_10 == 0) {
ptr->unk_02 = 0;
ptr->currentBgm = 0;
m4aSongNumStop(0);
} else {
ptr->unk_0e = ptr->unk_10;
}
} else {
ptr->unk_0e += iVar2;
}
if (ptr->unk_0e < 0) {
ptr->unk_10 = 0;
ptr->unk_0e = 0;
}
sub_080A353C(ptr->currentBgm);
}
}
}
s32 sub_080A3518(s32 unk_1, s32 unk_2){
if (unk_1 - unk_2 >= 1) {
unk_2 += 4;
if (unk_1 > unk_2)
return 4;
else
return 0;
} else {
unk_2 -= 4;
if (unk_1 < unk_2)
return -4;
else
return 0;
}
}
void sub_080A353C(u32 song){
u32 volume;
u32 iVar2;
MusicPlayerInfo* musicPlayerInfo;
if(song == 0)
return;
if (IS_BGM(song)) {
volume = gUnk_02021EE0.unk_0e;
}
else{
volume = gUnk_02021EE0.unk_12;
}
iVar2 = gUnk_02021EE0.unk_08;
volume = iVar2 * volume / 0x100;
musicPlayerInfo = gMPlayTable[gSongTable[song].ms].info;
m4aMPlayImmInit(musicPlayerInfo);
m4aMPlayVolumeControl(musicPlayerInfo, 0xffff, volume);
}
void sub_080A35A0(u32 song){
gUnk_02021EE0.unk_0a = 0x100;
sub_080A353C(song);
}
void sub_080A35B4(u32 song){
gUnk_02021EE0.unk_0a = 0;
sub_080A353C(song);
}
void sub_080A35C8(){
gUnk_02021EE0.unk_06 = 0x100;
gUnk_02021EE0.unk_08 = 0x100;
gUnk_02021EE0.unk_0a = 0x100;
gUnk_02021EE0.unk_0c = 0x100;
gUnk_02021EE0.unk_0e = 0x100;
gUnk_02021EE0.unk_10 = 0x100;
}
extern const SongHeader sfxNone;
extern const SongHeader bgmCastleTournament;
extern const SongHeader bgmVaatiMotif;
extern const SongHeader bgmTitleScreen;
@ -621,7 +748,7 @@ extern const SongHeader sfx220;
extern const SongHeader sfx221;
const Song gSongTable[] = {
{ &song_08DCC48C, 0x001f, 0x001f },
{ &sfxNone, 0x001f, 0x001f },
{ &bgmCastleTournament, 0x001f, 0x001f },
{ &bgmVaatiMotif, 0x001f, 0x001f },
{ &bgmTitleScreen, 0x001f, 0x001f },