From f9f0c6e9ba8b01b92c07794f5f6be893b8dc4c6b Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Tue, 11 Aug 2020 16:51:17 -0500 Subject: [PATCH] c: func_80001728 --- .../unknown_001050/func_800015F8.s | 33 +------ .../unknown_003260/audioNewThread.s | 4 +- data/dkr.data.s | 2 +- include/PR/libaudio.h | 1 + src/unknown_001050.c | 90 +++++++++++++------ src/unknown_003260.c | 75 ++++++++++++---- undefined_syms.txt | 4 +- 7 files changed, 133 insertions(+), 76 deletions(-) diff --git a/asm/non_matchings/unknown_001050/func_800015F8.s b/asm/non_matchings/unknown_001050/func_800015F8.s index cf62d33b..b2760604 100644 --- a/asm/non_matchings/unknown_001050/func_800015F8.s +++ b/asm/non_matchings/unknown_001050/func_800015F8.s @@ -3,8 +3,8 @@ glabel func_800015F8 /* 0021FC 800015FC AFBF0014 */ sw $ra, 0x14($sp) /* 002200 80001600 0C031E34 */ jal osGetCount /* 002204 80001604 00000000 */ nop -/* 002208 80001608 3C04800E */ lui $a0, %hi(D_800DC64C) # $a0, 0x800e -/* 00220C 8000160C 8C84C64C */ lw $a0, %lo(D_800DC64C)($a0) +/* 002208 80001608 3C04800E */ lui $a0, %hi(audioPrevCount) # $a0, 0x800e +/* 00220C 8000160C 8C84C64C */ lw $a0, %lo(audioPrevCount)($a0) /* 002210 80001610 3C198011 */ lui $t9, %hi(D_80115D40) # $t9, 0x8011 /* 002214 80001614 0082082B */ sltu $at, $a0, $v0 /* 002218 80001618 10200013 */ beqz $at, .L80001668 @@ -61,7 +61,7 @@ glabel func_800015F8 /* 0022D0 800016D0 C42A49E8 */ lwc1 $f10, %lo(D_800E49E8)($at) /* 0022D4 800016D4 468034A0 */ cvt.s.w $f18, $f6 /* 0022D8 800016D8 C4620000 */ lwc1 $f2, ($v1) -/* 0022DC 800016DC 3C01800E */ lui $at, %hi(D_800DC64C) # $at, 0x800e +/* 0022DC 800016DC 3C01800E */ lui $at, %hi(audioPrevCount) # $at, 0x800e /* 0022E0 800016E0 46125303 */ div.s $f12, $f10, $f18 /* 0022E4 800016E4 4602603C */ c.lt.s $f12, $f2 /* 0022E8 800016E8 00000000 */ nop @@ -78,32 +78,7 @@ glabel func_800015F8 /* 002310 80001710 00000000 */ nop /* 002314 80001714 8FBF0014 */ lw $ra, 0x14($sp) .L80001718: -/* 002318 80001718 AC22C64C */ sw $v0, %lo(D_800DC64C)($at) +/* 002318 80001718 AC22C64C */ sw $v0, %lo(audioPrevCount)($at) /* 00231C 8000171C 27BD0018 */ addiu $sp, $sp, 0x18 /* 002320 80001720 03E00008 */ jr $ra /* 002324 80001724 460C1003 */ div.s $f0, $f2, $f12 - -/* 002328 80001728 3C038011 */ lui $v1, %hi(D_80115D1C) # $v1, 0x8011 -/* 00232C 8000172C 24635D1C */ addiu $v1, %lo(D_80115D1C) # addiu $v1, $v1, 0x5d1c -/* 002330 80001730 308E00FF */ andi $t6, $a0, 0xff -/* 002334 80001734 8C6F0000 */ lw $t7, ($v1) -/* 002338 80001738 000E1080 */ sll $v0, $t6, 2 -/* 00233C 8000173C 004E1023 */ subu $v0, $v0, $t6 -/* 002340 80001740 AFA40000 */ sw $a0, ($sp) -/* 002344 80001744 01E2C021 */ addu $t8, $t7, $v0 -/* 002348 80001748 93190001 */ lbu $t9, 1($t8) -/* 00234C 8000174C 00000000 */ nop -/* 002350 80001750 A0B90000 */ sb $t9, ($a1) -/* 002354 80001754 8C680000 */ lw $t0, ($v1) -/* 002358 80001758 00000000 */ nop -/* 00235C 8000175C 01024821 */ addu $t1, $t0, $v0 -/* 002360 80001760 912A0000 */ lbu $t2, ($t1) -/* 002364 80001764 00000000 */ nop -/* 002368 80001768 A0CA0000 */ sb $t2, ($a2) -/* 00236C 8000176C 8C6B0000 */ lw $t3, ($v1) -/* 002370 80001770 00000000 */ nop -/* 002374 80001774 01626021 */ addu $t4, $t3, $v0 -/* 002378 80001778 918D0002 */ lbu $t5, 2($t4) -/* 00237C 8000177C 03E00008 */ jr $ra -/* 002380 80001780 A0ED0000 */ sb $t5, ($a3) - diff --git a/asm/non_matchings/unknown_003260/audioNewThread.s b/asm/non_matchings/unknown_003260/audioNewThread.s index 8949fd01..4ebc9122 100644 --- a/asm/non_matchings/unknown_003260/audioNewThread.s +++ b/asm/non_matchings/unknown_003260/audioNewThread.s @@ -245,10 +245,10 @@ glabel audioNewThread /* 003600 80002A00 8FB9004C */ lw $t9, 0x4c($sp) /* 003604 80002A04 3C188012 */ lui $t8, %hi(D_80119230) # $t8, 0x8012 /* 003608 80002A08 27189230 */ addiu $t8, %lo(D_80119230) # addiu $t8, $t8, -0x6dd0 -/* 00360C 80002A0C 3C048011 */ lui $a0, %hi(D_80115FB0) # $a0, 0x8011 +/* 00360C 80002A0C 3C048011 */ lui $a0, %hi(audioThread) # $a0, 0x8011 /* 003610 80002A10 3C068000 */ lui $a2, %hi(D_80002A98) # $a2, 0x8000 /* 003614 80002A14 24C62A98 */ addiu $a2, %lo(D_80002A98) # addiu $a2, $a2, 0x2a98 -/* 003618 80002A18 24845FB0 */ addiu $a0, %lo(D_80115FB0) # addiu $a0, $a0, 0x5fb0 +/* 003618 80002A18 24845FB0 */ addiu $a0, %lo(audioThread) # addiu $a0, $a0, 0x5fb0 /* 00361C 80002A1C AFB80010 */ sw $t8, 0x10($sp) /* 003620 80002A20 24050004 */ li $a1, 4 /* 003624 80002A24 00003825 */ move $a3, $zero diff --git a/data/dkr.data.s b/data/dkr.data.s index 5806f731..0d66d672 100644 --- a/data/dkr.data.s +++ b/data/dkr.data.s @@ -27,7 +27,7 @@ glabel D_800DC644 glabel D_800DC648 .word 0x00000000 -glabel D_800DC64C +glabel audioPrevCount .word 0x00000000 glabel D_800DC650 diff --git a/include/PR/libaudio.h b/include/PR/libaudio.h index 80bc3186..93f0ef3a 100644 --- a/include/PR/libaudio.h +++ b/include/PR/libaudio.h @@ -265,6 +265,7 @@ typedef struct { ALHeap *heap; s32 outputRate; /* output sample rate */ ALFxId fxType; + u8 unk1d; s32 *params; } ALSynConfig; diff --git a/src/unknown_001050.c b/src/unknown_001050.c index 6bd69466..971f5a01 100644 --- a/src/unknown_001050.c +++ b/src/unknown_001050.c @@ -29,7 +29,7 @@ extern u8 D_800DC63C; extern u8 D_800DC640; extern u8 D_800DC644; extern s32 D_800DC648; -extern s32 D_800DC64C; +extern s32 audioPrevCount; extern f32 D_800DC650; extern s32 musicVolumeSliderPercentage; extern s32 D_800DC658; @@ -107,18 +107,6 @@ typedef struct audioMgrConfig_s{ u16 unk10; } audioMgrConfig; -typedef struct musicConfig_s{ - u32 unk00; - u32 unk04; - u32 unk08; - u32 unk0c; - u32 unk10; - ALHeap *heap; - u32 unk18; - u8 unk1c; - u8 unk1d; -} musicConfig; - void func_80000968(s32 arg0); ALCSPlayer* func_80002224(s32, s32); void func_8000B010(ALCSPlayer*, u8); @@ -128,8 +116,7 @@ void *alHeapDBAlloc(u8 *file, s32 line, ALHeap *hp, s32 num, s32 size); void audio_init(u32 arg0){ s32 iCnt; - s32 tmp; - musicConfig mConfig; + ALSynConfig synth_config; u32 *reg_s2; u32 seqfSize; u32 seq_max_len; @@ -179,15 +166,15 @@ void audio_init(u32 arg0){ } - mConfig.unk00 = 40; - mConfig.unk04 = 40; - mConfig.unk08 = 96; - mConfig.unk10 = 0; - mConfig.unk1c = 6; - mConfig.unk1d = 2; - mConfig.unk18 = 0; - mConfig.heap = &gALHeap; - audioNewThread(&mConfig, 12, arg0); + synth_config.maxVVoices = 40; + synth_config.maxPVoices = 40; + synth_config.maxUpdates = 96; + synth_config.dmaproc = NULL; + synth_config.fxType = 6; + synth_config.unk1d = 2; + synth_config.outputRate = 0; + synth_config.heap = &gALHeap; + audioNewThread(&synth_config, 12, arg0); gMusicPlayer = func_80002224(24, 120); func_8000B010(gMusicPlayer, 18); gSndFxPlayer = func_80002224(16, 50); @@ -284,7 +271,7 @@ void func_80000B34(u8 arg0) { func_800022BC(D_80115D04, gMusicPlayer); } musicTempo = alCSPGetTempo(gMusicPlayer); - D_800DC64C = osGetCount(); + audioPrevCount = osGetCount(); D_80115D40 = 1; D_80115F7C = -1; } @@ -565,7 +552,53 @@ u8 musicIsPlaying(void) { return (alCSPGetState(gMusicPlayer) == AL_PLAYING); } + +extern f32 D_800E49E0; +extern f32 D_800E49E8; +extern f32 D_80115D34; + +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_001050/func_800015F8.s") +#else +f32 func_800015F8(void){ + u32 current_cnt = osGetCount(); + u32 delta; + f32 delta_f; + f32 tmp; + f32* tmp2 = &D_80115D34; + if(audioPrevCount < current_cnt){ + delta = current_cnt - audioPrevCount; + delta_f = (delta < 0) + ? (f32) delta + 4294967296.000000f + : delta; + D_80115D34 = delta_f/D_800E49E0 + *tmp2; + } + else{ + delta = audioPrevCount - current_cnt; + delta_f = (delta + -1); + delta_f = (delta < 0) + ? (f32) delta + 4294967296.000000f + : delta; + *tmp2 = delta_f/D_800E49E0 + D_80115D34; + } + if(D_80115D40 == 0){ + D_80115D30 = 182; + } + tmp = D_800E49E8/(f32) D_80115D30; + while(D_80115D34 > tmp){ + D_80115D34 -= tmp; + } + audioPrevCount = current_cnt; + return D_80115D34/tmp; + +} +#endif + +void func_80001728(u8 arg0, u8* arg1, u8* arg2, u8* arg3){ + *arg1 = D_80115D1C[arg0].unk1; + *arg2 = D_80115D1C[arg0].unk0; + *arg3 = D_80115D1C[arg0].unk2; +} u32 func_80001C08(void); @@ -740,8 +773,13 @@ void func_80001F14(u16 arg0, u32 *arg1){ } } - +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_001050/func_80001FB8.s") +#else +void func_80001FB8(u16 arg0){ + arg0*10 + D_80115D18[0].unk00; +} +#endif u16 func_800020E8(void) { return D_80115D14->bankArray[0]->instArray[0]->soundCount; diff --git a/src/unknown_003260.c b/src/unknown_003260.c index 618cb96a..5e358562 100644 --- a/src/unknown_003260.c +++ b/src/unknown_003260.c @@ -16,45 +16,88 @@ typedef struct unk800DC6BC { s32 unk48; } unk800DC6BC; +typedef struct unk80119240 +{ + ALLink node; + u32 unk08; + u32 unk0C; + void* unk10; +} unk80119240; + extern unk800DC6BC* D_800DC6BC; extern s32 D_800DC6C0; extern s32 D_80115F90; extern ALHeap* D_80115F94; -extern OSThread D_80115FB0; +extern OSThread audioThread; extern OSMesgQueue D_80116160; extern OSMesg D_80116178; extern OSMesgQueue D_80116198; extern OSMesg D_801161B0; +extern ALGlobals D_801161D0; extern s32 D_80119230; +extern unk80119240 D_80119240[0x31]; +extern s32 D_8011962C; extern OSMesgQueue D_80119AF0; extern OSMesg D_80119B08; extern f32 D_80126170; +void *alHeapDBAlloc(u8 *, s32, ALHeap *, s32, s32); + #if 1 GLOBAL_ASM("asm/non_matchings/unknown_003260/audioNewThread.s") #else - void audioNewThread(ALSynConfig* c, OSPri p, s32 arg2){ - D_80115F90 = arg2; - D_80115F94 = c->heap; - c->dmaproc = &D_80003008; - c->outputRate = func_800C8600(22050); - - alHeapDBAlloc(0,0, c->heap, 1, 120); - - osCreateMesgQueue(&D_80116198, &D_801161B0, 8); - osCreateMesgQueue(&D_80116160, &D_80116178, 8); - osCreateMesgQueue(&D_80119AF0, &D_80119B08, 50); - - osCreateThread(&D_80115FB0, 4, &D_80002A98, NULL, &D_80119230, p); +void audioNewThread(ALSynConfig* c, OSPri p, s32 arg2){ + u32 *reg_v0; + void *reg_s0; + u32 tmp_size; + s32 tmp; + s32 i; + D_80115F90 = arg2; + D_80115F94 = c->heap; + c->dmaproc = &D_80003008; + c->outputRate = func_800C8600(22050); + D_8011962C = (((f32) c->outputRate)*2.0f)/D_80126170; + if(D_8011962C < 0){ } + + if(c->fxType == AL_FX_CUSTOM){ + reg_v0 = func_80076C58(38); + tmp_size = reg_v0[9]-reg_v0[8]; + reg_s0 = func_80070C9C(tmp_size, 0x00FFFFFF, reg_v0[8]); + func_80076E68(39,reg_s0, reg_v0[8],tmp_size); + c->params = reg_s0; + c[1].maxVVoices = 0; + alInit(&D_801161D0, c); + func_80071140(reg_s0); + } + else{ + alInit(&D_801161D0, c); + } + D_80119240[0].node.next = NULL; + D_80119240[0].node.prev = NULL; + + for(i=0; i< 0x30; i++){ + alLink(&(D_80119240[i+1].node), &(D_80119240[i].node)); + D_80119240[i].unk10 = alHeapDBAlloc(0,0,c->heap, 1, 0x400); + } + D_80119240[i].unk10 = alHeapDBAlloc(0,0, c->heap, 1, 0x400); + alHeapDBAlloc(0,0, c->heap, 1, 120); + + + osCreateMesgQueue(&D_80116198, &D_801161B0, 8); + osCreateMesgQueue(&D_80116160, &D_80116178, 8); + osCreateMesgQueue(&D_80119AF0, &D_80119B08, 50); + + osCreateThread(&audioThread, 4, &D_80002A98, NULL, &D_80119230, p); +} #endif void audioStartThread(void) { - osStartThread(&D_80115FB0); + osStartThread(&audioThread); } void audioStopThread(void) { - osStopThread(&D_80115FB0); + osStopThread(&audioThread); } GLOBAL_ASM("asm/non_matchings/unknown_003260/D_80002A98.s") diff --git a/undefined_syms.txt b/undefined_syms.txt index 688a7a33..25d414a3 100755 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -78,7 +78,7 @@ D_800DC63C = 0x800DC63C; D_800DC640 = 0x800DC640; D_800DC644 = 0x800DC644; D_800DC648 = 0x800DC648; -D_800DC64C = 0x800DC64C; +audioPrevCount = 0x800DC64C; D_800DC650 = 0x800DC650; musicVolumeSliderPercentage = 0x800DC654; D_800DC658 = 0x800DC658; @@ -1752,7 +1752,7 @@ D_80115F94 = 0x80115F94; D_80115F98 = 0x80115F98; D_80115FA0 = 0x80115FA0; D_80115FA4 = 0x80115FA4; -D_80115FB0 = 0x80115FB0; +audioThread = 0x80115FB0; D_80116160 = 0x80116160; D_80116178 = 0x80116178; D_80116198 = 0x80116198;