diff --git a/README.md b/README.md index 10021a65..96ce9fa2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (90.2412%) +# banjo (90.3042%) diff --git a/include/n_synth.h b/include/n_synth.h index b0576c79..7846e1bb 100644 --- a/include/n_synth.h +++ b/include/n_synth.h @@ -63,6 +63,10 @@ typedef struct N_ALEnvMixer_s { s32 delta; s32 segEnd; s32 first; + ALParam *ctrlList; + ALParam *ctrlTail; + ALFilter **sources; + s32 motion; } N_ALEnvMixer; diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg index 92115091..c28e3a1f 100644 --- a/progress/progress_core1.svg +++ b/progress/progress_core1.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core1 - 78.6543% - 78.6543% + 79.0887% + 79.0887% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 7be0aed4..92d3e7e4 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 90.2412% - 90.2412% + 90.3042% + 90.3042% \ No newline at end of file diff --git a/src/core1/audio/n_env.c b/src/core1/audio/n_env.c new file mode 100644 index 00000000..2dc98d04 --- /dev/null +++ b/src/core1/audio/n_env.c @@ -0,0 +1,12 @@ +#include +#include "functions.h" +#include "variables.h" + + +#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_env/func_80260860.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_env/func_802609E0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_env/func_80260BD4.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_env/n_alEnvmixerPull.s") diff --git a/src/core1/code_25E20.c b/src/core1/audio/n_seq.c similarity index 95% rename from src/core1/code_25E20.c rename to src/core1/audio/n_seq.c index d5466a5c..aaae0fc3 100644 --- a/src/core1/code_25E20.c +++ b/src/core1/audio/n_seq.c @@ -25,7 +25,7 @@ void func_80263840(void){} void func_80263848(void){} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_25E20/func_80263850.s") +#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_seq/func_80263850.s") void func_802639FC(struct struct_core2_25E20_1 *arg0, struct struct_core2_25E20_0 *arg1, u32 arg2) { u32 var_v0; diff --git a/src/core1/code_1D00.c b/src/core1/code_1D00.c index b856130f..4f084103 100644 --- a/src/core1/code_1D00.c +++ b/src/core1/code_1D00.c @@ -4,7 +4,7 @@ #include "2.0L/PR/sched.h" #include "n_libaudio.h" -extern void func_8025C320(s32, ALSynConfig *); +extern void n_alInit(N_ALGlobals *, ALSynConfig *); typedef struct AudioInfo_s { short *data; /* Output data pointer */ @@ -51,7 +51,7 @@ typedef struct struct_core1_1D00_5_s{ }unkC; }OscState; -void func_8023FBB8(void); +void amgrCreate(void); void func_8023FE80(void *); // void func_802403B8(void); void amgrHandleDoneMsg(AudioInfo *info); @@ -160,7 +160,7 @@ Struct_1D00_3 D_8027D5C0[90]; s32 D_8027DCC8; s32 D_8027DCCC; s32 D_8027DCD0; -N_ALSynth D_8027DCD8; +N_ALGlobals D_8027DCD8; ALSynConfig D_8027DD50; s32 D_8027DD74; s32 D_8027DD78; @@ -287,14 +287,13 @@ void func_8023FB1C(void){ alHeapInit(&D_8027CFF0, D_8027D000, 0x21000); if(osTvType != OS_TV_NTSC) osViClock = 0x2e6025c; - func_8023FBB8(); + amgrCreate(); func_80335220(); func_8024F4E0(); amgrStartThread(); } -//amgrCreate -void func_8023FBB8(void) { +void amgrCreate(void) { int i; osCreateMesgQueue(&D_8027D008, &D_8027D020, 0x32); @@ -315,7 +314,7 @@ void func_8023FBB8(void) { D_8027DD50.params = (void*) &D_8027577C; D_8027DD50.heap = &D_8027CFF0; D_8027DD50.outputRate = osAiSetFrequency(22000); - func_8025C320(&D_8027DCD8, &D_8027DD50); + n_alInit(&D_8027DCD8, &D_8027DD50); D_8027D5C0[0].unk0.prev = NULL; D_8027D5C0[0].unk0.next = NULL; for(i = 0; i < 89; i++){ diff --git a/src/core1/code_26110.c b/src/core1/code_26110.c deleted file mode 100644 index b06731ec..00000000 --- a/src/core1/code_26110.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include "functions.h" -#include "variables.h" - - -n_alSynSetPriority(ALVoice *voice, s16 priority){ - voice->priority = priority; -} diff --git a/src/core1/done/audio/code_21B50.c b/src/core1/done/audio/code_21B50.c index c97eb318..0593fe77 100644 --- a/src/core1/done/audio/code_21B50.c +++ b/src/core1/done/audio/code_21B50.c @@ -1,22 +1,6 @@ #include -#include "functions.h" -#include "variables.h" #include "n_synth.h" - -void func_8025F610(void){ - n_syn->head = NULL; - n_syn->n_seqp1 = NULL; - n_syn->n_seqp2 = NULL; - n_syn->unk5C = NULL; - n_syn->unk60 = NULL; - n_syn->unk64 = NULL; - n_syn->unk68 = NULL; - n_syn->unk6C = NULL; - n_syn->unk70 = NULL; - n_syn->n_sndp = NULL; -} - void func_8025F5C0(N_ALSeqPlayer *arg0, u8 arg1){ ALEvent evt; diff --git a/src/core1/done/audio/n_env.c b/src/core1/done/audio/n_env.c new file mode 100644 index 00000000..edad4c00 --- /dev/null +++ b/src/core1/done/audio/n_env.c @@ -0,0 +1,417 @@ +#include +#include "n_synth.h" +#include "functions.h" +#include "variables.h" +#include "assert.h" + +#ifdef AUD_PROFILE +extern u32 cnt_index, env_num, env_cnt, env_max, env_min, lastCnt[]; +extern u32 rate_num, rate_cnt, rate_max, rate_min; +extern u32 vol_num, vol_cnt, vol_max, vol_min; +#endif + +#define EQPOWER_LENGTH 128 +static s16 eqpower[ EQPOWER_LENGTH ] = { + 32767, 32764, 32757, 32744, 32727, 32704, + 32677, 32644, 32607, 32564, 32517, 32464, + 32407, 32344, 32277, 32205, 32127, 32045, + 31958, 31866, 31770, 31668, 31561, 31450, + 31334, 31213, 31087, 30957, 30822, 30682, + 30537, 30388, 30234, 30075, 29912, 29744, + 29572, 29395, 29214, 29028, 28838, 28643, + 28444, 28241, 28033, 27821, 27605, 27385, + 27160, 26931, 26698, 26461, 26220, 25975, + 25726, 25473, 25216, 24956, 24691, 24423, + 24151, 23875, 23596, 23313, 23026, 22736, + 22442, 22145, 21845, 21541, 21234, 20924, + 20610, 20294, 19974, 19651, 19325, 18997, + 18665, 18331, 17993, 17653, 17310, 16965, + 16617, 16266, 15913, 15558, 15200, 14840, + 14477, 14113, 13746, 13377, 13006, 12633, + 12258, 11881, 11503, 11122, 10740, 10357, + 9971, 9584, 9196, 8806, 8415, 8023, + 7630, 7235, 6839, 6442, 6044, 5646, + 5246, 4845, 4444, 4042, 3640, 3237, + 2833, 2429, 2025, 1620, 1216, 810, + 405, 0 +}; + +extern f64 __pow(f64, f64); + +/* + * prototypes for private enveloper functions + */ +static Acmd *__n_pullSubFrame(void *filter, s16 *inp, s16 *outp, s32 outCount, Acmd *p) ; //__n_pullSubFrame +static s16 __n_getRate(f64 vol, f64 tgt, s32 count, u16* ratel); //_getRate + +static s16 __n_getVol(s16 ivol, s32 samples, s16 ratem, u16 ratel); + +/*********************************************************************** + * Enveloper filter public interfaces + ***********************************************************************/ +Acmd *n_alEnvmixerPull(void *filter, s32 sampleOffset, Acmd *p) +{ + Acmd *ptr = p; + N_PVoice *e = (N_PVoice *)filter; + s16 inp; + s32 lastOffset; + s32 thisOffset = sampleOffset; + s32 samples; + s16 loutp = 0; + s32 fVol; + int count = 0xb8; + s32 outCount = count; + ALParam *thisParam; + +#ifdef AUD_PROFILE + lastCnt[++cnt_index] = osGetCount(); +#endif + + /* + * Force the input to be the resampler output + */ + inp = AL_RESAMPLER_OUT; + + while (e->em_ctrlList != 0) { + + lastOffset = thisOffset; + thisOffset = ((e->em_ctrlList->delta + 0x5C)/count)*count; + samples = thisOffset - lastOffset; + if (samples > outCount) + break; + + if(samples < 0){ + samples = 0; + } + + + switch (e->em_ctrlList->type) { + case (AL_FILTER_START_VOICE_ALT): + { + ALStartParamAlt *param = (ALStartParamAlt *)e->em_ctrlList; + + if (param->unity) { + e->rs_upitch = 1; + } + n_alLoadParam(e, AL_FILTER_SET_WAVETABLE, param->wave); + + e->em_motion = 1; + e->em_first = 1; + + e->em_delta = 0; + e->em_segEnd = ((param->samples + 0x5C)/count)*count; + fVol = (param->volume + param->volume)/2; + e->em_volume = fVol; + e->em_pan = param->pan; + e->em_dryamt = eqpower[param->fxMix]; + e->em_wetamt = eqpower[EQPOWER_LENGTH - param->fxMix - 1]; + + if (param->samples) { + e->em_cvolL = 1; + e->em_cvolR = 1; + } else { + /* + * Attack time is zero. Simply set the + * volume. We don't want an attack segment. + */ + e->em_cvolL = (e->em_volume * eqpower[e->em_pan]) >> 15; + e->em_cvolR = (e->em_volume * + eqpower[EQPOWER_LENGTH - e->em_pan - 1]) >> 15; + } + + e->rs_ratio = param->pitch; + } + + break; + + case (AL_FILTER_SET_FXAMT): + case (AL_FILTER_SET_PAN): + case (AL_FILTER_SET_VOLUME): + ptr = __n_pullSubFrame(e, &inp, &loutp, samples, ptr); + + if (e->em_delta >= e->em_segEnd){ + /* + * We should have reached our target, calculate + * target in case e->segEnd was 0 + */ + e->em_ltgt = (e->em_volume * eqpower[e->em_pan]) >> 15; + e->em_rtgt = (e->em_volume * + eqpower[EQPOWER_LENGTH - e->em_pan - 1]) >> 15; + e->em_delta = e->em_segEnd; /* To prevent overflow */ + e->em_cvolL = e->em_ltgt; + e->em_cvolR = e->em_rtgt; + } else { + /* + * Estimate the current volume + */ + e->em_cvolL = __n_getVol(e->em_cvolL, e->em_delta, e->em_lratm, e->em_lratl); + e->em_cvolR = __n_getVol(e->em_cvolR, e->em_delta, e->em_rratm, e->em_rratl); + } + + /* + * We can't have volume of zero, because the envelope + * would never go anywhere from there + */ + if( e->em_cvolL == 0 ) e->em_cvolL = 1; + if( e->em_cvolR == 0 ) e->em_cvolR = 1; + + if (e->em_ctrlList->type == AL_FILTER_SET_PAN) + + /* + * This should result in a change to the current + * segment rate and target + */ + e->em_pan = (s16) e->em_ctrlList->data.i; + + if (e->em_ctrlList->type == AL_FILTER_SET_VOLUME){ + s32 Vol; + /* + * Switching to a new segment + */ + e->em_delta = 0; + + /* + * Map volume non-linearly to give something close to + * loudness + */ + Vol = e->em_ctrlList->data.i; + Vol+= Vol; + Vol /= 2; + e->em_volume = Vol; + + e->em_segEnd = ((e->em_ctrlList->moredata.i + 0x5C)/count)*count; + + } + + if (e->em_ctrlList->type == AL_FILTER_SET_FXAMT){ + e->em_dryamt = eqpower[e->em_ctrlList->data.i]; + e->em_wetamt = eqpower[EQPOWER_LENGTH - e->em_ctrlList->data.i - 1]; + } + + /* + * Force a volume update + */ + e->em_first = 1; + break; + + case (AL_FILTER_START_VOICE): + { + ALStartParam *p = (ALStartParam *)e->em_ctrlList; + + /* + * Changing to PLAYING (since the previous state was + * persumable STOPPED, we'll just bump the output + * pointer rather than pull a subframe of zeros). + */ + if (p->unity) { + e->rs_upitch = 1; + } + + n_alLoadParam(e, AL_FILTER_SET_WAVETABLE, p->wave); + e->em_motion = 1; + } + break; + + case (AL_FILTER_STOP_VOICE): + { + /* + * Changing to STOPPED and reset the filter + */ + ptr = __n_pullSubFrame(e, &inp, &loutp, samples, ptr); + n_alEnvmixerResampleParam(e, 4, 0); + } + break; + + + case (AL_FILTER_FREE_VOICE): + { + ALFreeParam *param = (ALFreeParam *)e->em_ctrlList; + ((N_PVoice *)(param->pvoice))->offset = 0; + _n_freePVoice((PVoice *)param->pvoice); + } + break; + + case 7: + ptr = __n_pullSubFrame(e, &inp, &loutp, samples, ptr); + e->rs_ratio = e->em_ctrlList->data.f; + break; + + case 8: + ptr = __n_pullSubFrame(e, &inp, &loutp, samples, ptr); + e->rs_upitch = 1; + break; + + case (AL_FILTER_SET_WAVETABLE): + ptr = __n_pullSubFrame(e, &inp, &loutp, samples, ptr); + n_alLoadParam(e, AL_FILTER_SET_WAVETABLE, e->em_ctrlList->data.i); + break; + + default: + /* + * Pull the reuired number of samples and then pass the message + * on down the chain + */ + ptr = __n_pullSubFrame(e, &inp, &loutp, samples, ptr); + n_alEnvmixerResampleParam(e, e->em_ctrlList->type, e->em_ctrlList->data.i); + break; + } + loutp += (samples<<1); + outCount -= samples; + + /* + * put the param record back on the free list + */ + thisParam = e->em_ctrlList; + e->em_ctrlList = e->em_ctrlList->next; + if (e->em_ctrlList == 0) + e->em_ctrlTail = 0; + + __n_freeParam(thisParam); + + } + + ptr = __n_pullSubFrame(e, &inp, &loutp, outCount, ptr); + + /* + * Prevent overflow in e->delta + */ + if (e->em_delta > e->em_segEnd) + e->em_delta = e->em_segEnd; + +#ifdef AUD_PROFILE + PROFILE_AUD(env_num, env_cnt, env_max, env_min); +#endif + return ptr; +} + +static +Acmd* __n_pullSubFrame(void *filter, s16 *inp, s16 *outp, s32 outCount, Acmd *p) +{ + Acmd *ptr = p; + N_PVoice *e = (N_PVoice *)filter; + s32 sp68 = 0xb8; + + /* filter must be playing and request non-zero output samples to pull. */ + if (e->em_motion != AL_PLAYING || !outCount) + return ptr; + + /* + * ask all filters upstream from us to build their command + * lists. + */ + ptr = n_alResamplePull(e, inp, ptr); + + /* + * construct our portion of the command list + */ + if (e->em_first){ + e->em_first = 0; + + /* + * Calculate derived parameters + */ + e->em_ltgt = (e->em_volume * eqpower[e->em_pan]) >> 15; + e->em_lratm = __n_getRate(e->em_cvolL, e->em_ltgt, + e->em_segEnd, &(e->em_lratl)); + e->em_rtgt = (e->em_volume * + eqpower[EQPOWER_LENGTH - e->em_pan - 1]) >> 15; + e->em_rratm = __n_getRate(e->em_cvolR, e->em_rtgt, e->em_segEnd, + &(e->em_rratl)); + + n_aSetVolume(ptr++, A_RATE, e->em_ltgt, e->em_lratm, e->em_lratl);\ + n_aSetVolume(ptr++, A_LEFT | A_VOL, e->em_cvolL, e->em_dryamt, e->em_wetamt);\ + n_aSetVolume(ptr++, A_RIGHT | A_VOL, e->em_rtgt, e->em_rratm, e->em_rratl);\ + n_aEnvMixer(ptr++, A_INIT | A_NOAUX, e->em_cvolR, osVirtualToPhysical(e->em_state)); + } + else + n_aEnvMixer(ptr++, A_CONTINUE | A_NOAUX, 0, osVirtualToPhysical(e->em_state)); + + + /* + * bump the input buffer pointer + */ + + *inp += sp68 * 2; + e->em_delta += sp68; + + return ptr; +} + +#define EXP_MASK 0x7f800000 +#define MANT_MASK 0x807fffff + +/* + __n_getRate() -- This function determines how to go from the + current volume level (vol) to the target + volume level (tgt) in some number of steps + (count). Two values are returned that are + used as multipliers to incrementally scale + the volume. Some tricky math is used and + is explained below. + RWW 28jun95 +*/ + +static +s16 __n_getRate(f64 vol, f64 tgt, s32 count, u16* ratel) +{ + s16 s; + s16 tmp; + f64 invn; + f64 a; + f64 f; + + if (count == 0) { + if (tgt >= vol) { + *ratel = 0xffff; + return 0x7fff; + } else { + *ratel = -0; + return 0; + } + } + + invn = 1.0 / count; + + if (tgt < 1.0) { + tgt = 1.0; + } + + if (vol <= 0.0) { + vol = 1.0; + } + + a = (tgt - vol) * invn * 8.0; + s = a; + + f = a - s; + s--; + f += 1.0; + + tmp = f; + s += tmp; + f -= tmp; + + *ratel = 65535.0 * f; + + return s; + + +} + +static +s16 __n_getVol(s16 ivol, s32 samples, s16 ratem, u16 ratel) +{ + s32 r; + s32 m; + s32 l; + + samples >>= 3; + if (samples == 0) { + return (s16) ivol; + } + m = ((ratel * samples)); + m >>= 0x10; + m += (ratem * samples); + ivol += m; + return (s16) ivol; +} diff --git a/src/core1/done/code_1E8C0.c b/src/core1/done/audio/n_sl.c similarity index 69% rename from src/core1/done/code_1E8C0.c rename to src/core1/done/audio/n_sl.c index 8c6fef8d..9ac74351 100644 --- a/src/core1/done/code_1E8C0.c +++ b/src/core1/done/audio/n_sl.c @@ -8,29 +8,28 @@ extern N_ALSynth *D_80276E80; extern N_ALSynth *D_80276E84; -void func_8025C2E0(s32 a0) +void n_alInit(N_ALGlobals *g, ALSynConfig *config) +{ + if (D_80276E80 != NULL) + return; + + D_80276E80 = &g->drvr; + + if (D_80276E84 != NULL) + return; + + D_80276E84 = &g->drvr; + + n_alSynNew(config); +} + +void n_alClose(N_ALGlobals *glob) { if (D_80276E80) { - func_8025F610(); + n_alSynDelete(); D_80276E80 = NULL; D_80276E84 = NULL; } } - -void func_8025C320(N_ALSynth *synth, ALSynConfig *config) -{ - if (D_80276E80 != NULL) - return; - - D_80276E80 = synth; - - if (D_80276E84 != NULL) - return; - - D_80276E84 = synth; - - n_alSynNew(config); -} - diff --git a/src/core1/done/audio/n_syndelete.c b/src/core1/done/audio/n_syndelete.c new file mode 100644 index 00000000..311d9f8a --- /dev/null +++ b/src/core1/done/audio/n_syndelete.c @@ -0,0 +1,16 @@ +#include +#include "n_synth.h" + + +void n_alSynDelete(void){ + n_syn->head = NULL; + n_syn->n_seqp1 = NULL; + n_syn->n_seqp2 = NULL; + n_syn->unk5C = NULL; + n_syn->unk60 = NULL; + n_syn->unk64 = NULL; + n_syn->unk68 = NULL; + n_syn->unk6C = NULL; + n_syn->unk70 = NULL; + n_syn->n_sndp = NULL; +} diff --git a/src/core1/done/audio/n_synsetpriority.c b/src/core1/done/audio/n_synsetpriority.c new file mode 100644 index 00000000..4b37b40a --- /dev/null +++ b/src/core1/done/audio/n_synsetpriority.c @@ -0,0 +1,6 @@ +#include +#include + +void n_alSynSetPriority(N_ALVoice *voice, s16 priority){ + voice->priority = priority; +} diff --git a/src/core1/n_env.c b/src/core1/n_env.c deleted file mode 100644 index f872b84a..00000000 --- a/src/core1/n_env.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "functions.h" -#include "variables.h" - - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/n_env/func_80260860.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/n_env/func_802609E0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/n_env/func_80260BD4.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/n_env/n_alEnvmixerPull.s") diff --git a/subyaml/core1.us.v10.yaml b/subyaml/core1.us.v10.yaml index 6aed015a..bd9e8c08 100644 --- a/subyaml/core1.us.v10.yaml +++ b/subyaml/core1.us.v10.yaml @@ -68,7 +68,7 @@ segments: - [0x1E360, c, done/code_1E360] #DONE - [0x1E6E0, c, code_1E6E0] #DONE - [0x1E820, c, code_1E820] - - [0x1E8C0, c, done/code_1E8C0] #DONE + - [0x1E8C0, c, done/audio/n_sl] #DONE - [0x1E950, c, done/audio/n_synthesizer] #DONE - [0x1F330, c, done/audio/event] #DONE - [0x1F610, c, done/audio/n_synaddplayer] #DONE @@ -93,21 +93,22 @@ segments: - [0x21AB0, c, done/audio/cspgettempo] #DONE - [0x21AF0, c, done/audio/code_21AF0] #DONE - [0x21B50, c, done/audio/code_21B50] #DONE + - [0x21BF0, c, done/audio/n_syndelete] #DONE - [0x21C50, c, done/audio/n_synallocfx] #DONE - [0x21CB0, c, done/audio/n_reverb] #DONE - [0x22740, c, done/audio/n_auxbus] #DONE - [0x227F0, c, done/audio/n_drvrNew] #DONE - [0x22D50, c, done/audio/n_save] #DONE - [0x22DA0, c, done/audio/n_envresample] #DONE - - [0x22E40, c, n_env] + - [0x22E40, c, done/audio/n_env] #DONE - [0x237F0, c, done/audio/n_seqplayer] #DONE - [0x25360, c, done/audio/n_synstartvoiceparam] #DONE - [0x25440, c, done/audio/n_mainbus] #DONE - [0x254C0, c, done/audio/n_load] #DONE - [0x25680, c, audio/n_adpcm] - [0x25C40, c, done/audio/n_resample] #DONE - - [0x25E20, c, code_25E20] - - [0x26110, c, code_26110] #DONE + - [0x25E20, c, audio/n_seq] + - [0x26110, c, done/audio/n_synsetpriority] #DONE - [0x26120, asm, os/invaldcache] #DONE - [0x261C0, asm, os/writebackdcacheall] #DONE - [0x261F0, c, os/initialize] #DONE @@ -179,13 +180,13 @@ segments: - [0x2C810, hasm, setfpccsr] #DONE - [0x2C820, c, done/io/sirawread] #DONE - [0x2C870, c, done/io/sirawwrite] #DONE - - [0x2C8C0, hasm, exceptasm] + - [0x2C8C0, hasm, exceptasm] #DONE - [0x2D230, c, done/io/pirawread] #DONE - - [0x2D290, hasm, interrupt] + - [0x2D290, hasm, interrupt] #DONE - [0x2D2D0, c, done/os/thread] #DONE - [0x2D310, c, done/audio/synthesizer] #DONE - [0x2D9F0, c, done/audio/syndelete] #DONE - - [0x2DA00, hasm, probetlb] + - [0x2DA00, hasm, probetlb] #DONE - [0x2DAC0, c, done/io/ai] #DONE - [0x2DAF0, c, done/os/jammesg] #DONE - [0x2DC40, c, done/io/pigetcmdq] #DONE @@ -253,7 +254,8 @@ segments: - [0x38BA0, .data, code_18310] - [0x39290, bin, data_39290] - [0x39470, .data, done/audio/n_drvrNew] - - [0x39600, bin, data_39600] + - [0x39600, .data, done/audio/n_env] + - [0x39700, bin, data_39700] - [0x39730, .data, done/io/aisetnextbuf] - [0x39740, .data, done/io/pimgr] - [0x39770, .data, done/io/vimgr] @@ -287,7 +289,7 @@ segments: - [0x3A9C0, bin, data_3A9C0] # .rodata, done/audio/n_csplayer] - [0x3AD30, .rodata, done/audio/n_reverb] - [0x3AD60, .rodata, done/audio/n_drvrNew] - - [0x3AD80, bin, data_3AD80] + - [0x3AD80, .rodata, done/audio/n_env] - [0x3ADD0, .rodata, done/audio/n_seqplayer] - [0x3B180, .rodata, done/audio/n_resample] - [0x3B190, .rodata, done/gu/sinf] diff --git a/undefined_syms.us.v10.txt b/undefined_syms.us.v10.txt index 68102d7d..95aff725 100644 --- a/undefined_syms.us.v10.txt +++ b/undefined_syms.us.v10.txt @@ -142,7 +142,7 @@ D_80389A5C = 0x80389A5C; D_00001050 = 0x00001050; -func_8025F610 = 0x8025F610; +n_alSynDelete = 0x8025F610; func_8025C29C = 0x8025C29C; func_80324E60 = 0x80324E60;