From a02316bcf3f04031792664e4c5ffd57748e5c4ff Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Wed, 5 Aug 2020 23:37:22 -0500 Subject: [PATCH 01/11] c: _filterBuffer --- Makefile | 4 +- include/PR/libaudio.h | 759 ++++++++++++++++++++++++++++++++++++++- include/audio_internal.h | 269 ++++++++++++++ preprocessed5rcuc43a.u | Bin 0 -> 2032 bytes src/unknown_064830.c | 218 +++++------ src/unknown_066460.c | 15 +- 6 files changed, 1128 insertions(+), 137 deletions(-) create mode 100644 include/audio_internal.h create mode 100644 preprocessed5rcuc43a.u diff --git a/Makefile b/Makefile index 37f91e54..b743e8b9 100755 --- a/Makefile +++ b/Makefile @@ -97,7 +97,8 @@ else endif AS = $(CROSS)as -CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc +#CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc +CC := $(QEMU_IRIX) -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc CPP := cpp -P -Wno-trigraphs LD = $(CROSS)ld OBJDUMP = $(CROSS)objdump @@ -237,6 +238,7 @@ $(BUILD_DIR)/lib/src/unknown_0C91A0.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D29F0.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0CDE90.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D3160.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/unknown_066460.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 $(BUILD_DIR)/lib/src/osCreateThread.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osGetThreadPri.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osJamMesg.o : OPT_FLAGS := -O1 diff --git a/include/PR/libaudio.h b/include/PR/libaudio.h index c374a9ff..af270d30 100644 --- a/include/PR/libaudio.h +++ b/include/PR/libaudio.h @@ -1,21 +1,758 @@ #ifndef _ULTRA64_LIBAUDIO_H_ #define _ULTRA64_LIBAUDIO_H_ -#include "abi.h" +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif -typedef struct -{ - u8 *offset; - s32 len; +#include "ultratypes.h" +#include "mbi.h" +#include "abi.h" + +/*********************************************************************** + * misc defines + ***********************************************************************/ +#ifndef _EMULATOR +# ifdef AUD_PROFILE + +#define PROFILE_AUD(num, cnt, max, min) \ +{ \ + u32 currCnt = osGetCount(); \ + currCnt -= lastCnt[cnt_index]; \ + cnt_index--; \ + cnt += currCnt; \ + num++; \ + \ + if ( currCnt > max ) max = currCnt; \ + if ( currCnt < min ) min = currCnt; \ +} + +# endif /* AUD_PROFILE */ +#endif /* EMULATOR */ + +#ifndef NULL +#define NULL 0 +#endif + +#define AL_FX_BUFFER_SIZE 8192 +#define AL_FRAME_INIT -1 +#define AL_USEC_PER_FRAME 16000 +#define AL_MAX_PRIORITY 127 +#define AL_GAIN_CHANGE_TIME 1000 + +typedef s32 ALMicroTime; +typedef u8 ALPan; + +#define AL_PAN_CENTER 64 +#define AL_PAN_LEFT 0 +#define AL_PAN_RIGHT 127 +#define AL_VOL_FULL 127 +#define AL_KEY_MIN 0 +#define AL_KEY_MAX 127 +#define AL_DEFAULT_FXMIX 0 +#define AL_SUSTAIN 63 + +/*********************************************************************** + * Error handling + ***********************************************************************/ + +#ifdef _DEBUG +#define ALFailIf(condition, error) \ + if (condition) { \ + __osError(error, 0); \ + return; } + +#else +#define ALFailIf(condition, error) \ + if (condition) { \ + return; } +#endif + +#ifdef _DEBUG +#define ALFlagFailIf(condition, flag, error) \ + if (condition) { \ + if(flag) __osError(error, 0); \ + return; } + +#else +#define ALFlagFailIf(condition, flag, error) \ + if (condition) { \ + return; } +#endif + +/*********************************************************************** + * Audio Library global routines + ***********************************************************************/ +typedef struct ALLink_s { + struct ALLink_s *next; + struct ALLink_s *prev; +} ALLink; + + +typedef s32 (*ALDMAproc)(s32 addr, s32 len, void *state); +typedef ALDMAproc (*ALDMANew)(void *state); + + +typedef struct { + u8 *base; + u8 *cur; + s32 len; + s32 count; +} ALHeap; + +#define AL_HEAP_DEBUG 1 +#define AL_HEAP_MAGIC 0x20736a73 +#define AL_HEAP_INIT 0 + + +#ifdef _DEBUG +#define alHeapAlloc(hp, elem ,size) alHeapDBAlloc((u8 *) __FILE__,__LINE__,(hp),(elem),(size)) +#else +#define alHeapAlloc(hp, elem ,size) alHeapDBAlloc(0, 0,(hp),(elem),(size)) +#endif + +/*********************************************************************** + * FX Stuff + ***********************************************************************/ +#define AL_FX_NONE 0 +#define AL_FX_SMALLROOM 1 +#define AL_FX_BIGROOM 2 +#define AL_FX_CHORUS 3 +#define AL_FX_FLANGE 4 +#define AL_FX_ECHO 5 +#define AL_FX_CUSTOM 6 + +typedef u8 ALFxId; +typedef void *ALFxRef; + +/*********************************************************************** + * data structures for sound banks + ***********************************************************************/ + +#define AL_BANK_VERSION 0x4231 /* 'B1' */ + +/* Possible wavetable types */ +enum {AL_ADPCM_WAVE = 0, + AL_RAW16_WAVE}; + +typedef struct { + s32 order; + s32 npredictors; + s16 book[1]; /* Actually variable size. Must be 8-byte aligned */ +} ALADPCMBook; + +typedef struct { + u32 start; + u32 end; + u32 count; + ADPCM_STATE state; +} ALADPCMloop; + +typedef struct { + u32 start; + u32 end; + u32 count; +} ALRawLoop; + +typedef struct { + ALMicroTime attackTime; + ALMicroTime decayTime; + ALMicroTime releaseTime; + u8 attackVolume; + u8 decayVolume; +} ALEnvelope; + +typedef struct { + u8 velocityMin; + u8 velocityMax; + u8 keyMin; + u8 keyMax; + u8 keyBase; + s8 detune; +} ALKeyMap; + +typedef struct { + ALADPCMloop *loop; + ALADPCMBook *book; +} ALADPCMWaveInfo; + +typedef struct { + ALRawLoop *loop; +} ALRAWWaveInfo; + +typedef struct ALWaveTable_s { + u8 *base; /* ptr to start of wave data */ + s32 len; /* length of data in bytes */ + u8 type; /* compression type */ + u8 flags; /* offset/address flags */ + union { + ALADPCMWaveInfo adpcmWave; + ALRAWWaveInfo rawWave; + } waveInfo; +} ALWaveTable; + +typedef struct ALSound_s { + ALEnvelope *envelope; + ALKeyMap *keyMap; + ALWaveTable *wavetable; /* offset to wavetable struct */ + ALPan samplePan; + u8 sampleVolume; + u8 flags; +} ALSound; + +typedef struct { + u8 volume; /* overall volume for this instrument */ + ALPan pan; /* 0 = hard left, 127 = hard right */ + u8 priority; /* voice priority for this instrument */ + u8 flags; + u8 tremType; /* the type of tremelo osc. to use */ + u8 tremRate; /* the rate of the tremelo osc. */ + u8 tremDepth; /* the depth of the tremelo osc */ + u8 tremDelay; /* the delay for the tremelo osc */ + u8 vibType; /* the type of tremelo osc. to use */ + u8 vibRate; /* the rate of the tremelo osc. */ + u8 vibDepth; /* the depth of the tremelo osc */ + u8 vibDelay; /* the delay for the tremelo osc */ + s16 bendRange; /* pitch bend range in cents */ + s16 soundCount; /* number of sounds in this array */ + ALSound *soundArray[1]; +} ALInstrument; + +typedef struct ALBank_s { + s16 instCount; /* number of programs in this bank */ + u8 flags; + u8 pad; + s32 sampleRate; /* e.g. 44100, 22050, etc... */ + ALInstrument *percussion; /* default percussion for GM */ + ALInstrument *instArray[1]; /* ARRAY of instruments */ +} ALBank; + +typedef struct { /* Note: sizeof won't be correct */ + s16 revision; /* format revision of this file */ + s16 bankCount; /* number of banks */ + ALBank *bankArray[1]; /* ARRAY of bank offsets */ +} ALBankFile; + + +/*********************************************************************** + * Sequence Files + ***********************************************************************/ +#define AL_SEQBANK_VERSION 'S1' + +typedef struct { + u8 *offset; + s32 len; } ALSeqData; -typedef struct -{ - s16 revision; - s16 seqCount; - ALSeqData seqArray[1]; +typedef struct { /* Note: sizeof won't be correct */ + s16 revision; /* format revision of this file */ + s16 seqCount; /* number of sequences */ + ALSeqData seqArray[1]; /* ARRAY of sequence info */ } ALSeqFile; -void alSeqFileNew(ALSeqFile *f, u8 *base); + +/*********************************************************************** + * Synthesis driver stuff + ***********************************************************************/ +typedef ALMicroTime (*ALVoiceHandler)(void *); + +typedef struct { + s32 maxVVoices; /* obsolete */ + s32 maxPVoices; + s32 maxUpdates; + s32 maxFXbusses; + void *dmaproc; + ALHeap *heap; + s32 outputRate; /* output sample rate */ + ALFxId fxType; + s32 *params; +} ALSynConfig; + +typedef struct ALPlayer_s { + struct ALPlayer_s *next; + void *clientData; /* storage for client callback */ + ALVoiceHandler handler; /* voice handler for player */ + ALMicroTime callTime; /* usec requested callback */ + s32 samplesLeft; /* usec remaining to callback */ +} ALPlayer; + +typedef struct ALVoice_s { + ALLink node; + struct PVoice_s *pvoice; + ALWaveTable *table; + void *clientPrivate; + s16 state; + s16 priority; + s16 fxBus; + s16 unityPitch; +} ALVoice; + +typedef struct ALVoiceConfig_s { + s16 priority; /* voice priority */ + s16 fxBus; /* bus assignment */ + u8 unityPitch; /* unity pitch flag */ +} ALVoiceConfig; + +typedef struct { + ALPlayer *head; /* client list head */ + ALLink pFreeList; /* list of free physical voices */ + ALLink pAllocList; /* list of allocated physical voices */ + ALLink pLameList; /* list of voices ready to be freed */ + s32 paramSamples; + s32 curSamples; /* samples from start of game */ + ALDMANew dma; + ALHeap *heap; + + struct ALParam_s *paramList; + + struct ALMainBus_s *mainBus; + struct ALAuxBus_s *auxBus; /* ptr to array of aux bus structs */ + struct ALFilter_s *outputFilter; /* last filter in the filter chain */ + + s32 numPVoices; + s32 maxAuxBusses; + s32 outputRate; /* output sample rate */ + s32 maxOutSamples; /* Maximum samples rsp can generate + at one time at output rate */ +} ALSynth; + + +/*********************************************************************** + * Audio Library (AL) stuff + ***********************************************************************/ +typedef struct { + ALSynth drvr; +} ALGlobals; + +extern ALGlobals *alGlobals; + +/*********************************************************************** + * Sequence Player stuff + ***********************************************************************/ + +/* + * Play states + */ +#define AL_STOPPED 0 +#define AL_PLAYING 1 +#define AL_STOPPING 2 + +#define AL_DEFAULT_PRIORITY 5 +#define AL_DEFAULT_VOICE 0 +#define AL_MAX_CHANNELS 16 + +/* + * Audio Library event type definitions + */ +enum ALMsg { + AL_SEQ_REF_EVT, /* Reference to a pending event in the sequence. */ + AL_SEQ_MIDI_EVT, + AL_SEQP_MIDI_EVT, + AL_TEMPO_EVT, + AL_SEQ_END_EVT, + AL_NOTE_END_EVT, + AL_SEQP_ENV_EVT, + AL_SEQP_META_EVT, + AL_SEQP_PROG_EVT, + AL_SEQP_API_EVT, + AL_SEQP_VOL_EVT, + AL_SEQP_LOOP_EVT, + AL_SEQP_PRIORITY_EVT, + AL_SEQP_SEQ_EVT, + AL_SEQP_BANK_EVT, + AL_SEQP_PLAY_EVT, + AL_SEQP_STOP_EVT, + AL_SEQP_STOPPING_EVT, + AL_TRACK_END, + AL_CSP_LOOPSTART, + AL_CSP_LOOPEND, + AL_CSP_NOTEOFF_EVT, + AL_TREM_OSC_EVT, + AL_VIB_OSC_EVT +}; + +/* + * Midi event definitions + */ +#define AL_EVTQ_END 0x7fffffff + +enum AL_MIDIstatus { + /* For distinguishing channel number from status */ + AL_MIDI_ChannelMask = 0x0F, + AL_MIDI_StatusMask = 0xF0, + + /* Channel voice messages */ + AL_MIDI_ChannelVoice = 0x80, + AL_MIDI_NoteOff = 0x80, + AL_MIDI_NoteOn = 0x90, + AL_MIDI_PolyKeyPressure = 0xA0, + AL_MIDI_ControlChange = 0xB0, + AL_MIDI_ChannelModeSelect = 0xB0, + AL_MIDI_ProgramChange = 0xC0, + AL_MIDI_ChannelPressure = 0xD0, + AL_MIDI_PitchBendChange = 0xE0, + + /* System messages */ + AL_MIDI_SysEx = 0xF0, /* System Exclusive */ + + /* System common */ + AL_MIDI_SystemCommon = 0xF1, + AL_MIDI_TimeCodeQuarterFrame = 0xF1, + AL_MIDI_SongPositionPointer = 0xF2, + AL_MIDI_SongSelect = 0xF3, + AL_MIDI_Undefined1 = 0xF4, + AL_MIDI_Undefined2 = 0xF5, + AL_MIDI_TuneRequest = 0xF6, + AL_MIDI_EOX = 0xF7, /* End of System Exclusive */ + + /* System real time */ + AL_MIDI_SystemRealTime = 0xF8, + AL_MIDI_TimingClock = 0xF8, + AL_MIDI_Undefined3 = 0xF9, + AL_MIDI_Start = 0xFA, + AL_MIDI_Continue = 0xFB, + AL_MIDI_Stop = 0xFC, + AL_MIDI_Undefined4 = 0xFD, + AL_MIDI_ActiveSensing = 0xFE, + AL_MIDI_SystemReset = 0xFF, + AL_MIDI_Meta = 0xFF /* MIDI Files only */ +}; + +enum AL_MIDIctrl { + AL_MIDI_VOLUME_CTRL = 0x07, + AL_MIDI_PAN_CTRL = 0x0A, + AL_MIDI_PRIORITY_CTRL = 0x10, /* use general purpose controller for priority */ + AL_MIDI_FX_CTRL_0 = 0x14, + AL_MIDI_FX_CTRL_1 = 0x15, + AL_MIDI_FX_CTRL_2 = 0x16, + AL_MIDI_FX_CTRL_3 = 0x17, + AL_MIDI_FX_CTRL_4 = 0x18, + AL_MIDI_FX_CTRL_5 = 0x19, + AL_MIDI_FX_CTRL_6 = 0x1A, + AL_MIDI_FX_CTRL_7 = 0x1B, + AL_MIDI_FX_CTRL_8 = 0x1C, + AL_MIDI_FX_CTRL_9 = 0x1D, + AL_MIDI_SUSTAIN_CTRL = 0x40, + AL_MIDI_FX1_CTRL = 0x5B, + AL_MIDI_FX3_CTRL = 0x5D +}; + +enum AL_MIDImeta { + AL_MIDI_META_TEMPO = 0x51, + AL_MIDI_META_EOT = 0x2f +}; + + +#define AL_CMIDI_BLOCK_CODE 0xFE +#define AL_CMIDI_LOOPSTART_CODE 0x2E +#define AL_CMIDI_LOOPEND_CODE 0x2D +#define AL_CMIDI_CNTRL_LOOPSTART 102 +#define AL_CMIDI_CNTRL_LOOPEND 103 +#define AL_CMIDI_CNTRL_LOOPCOUNT_SM 104 +#define AL_CMIDI_CNTRL_LOOPCOUNT_BIG 105 + +typedef struct { + u8 *curPtr; /* ptr to the next event */ + s32 lastTicks; /* sequence clock ticks (used by alSeqSetLoc) */ + s32 curTicks; /* sequence clock ticks of next event (used by loop end test) */ + s16 lastStatus; /* the last status msg */ +} ALSeqMarker; + +typedef struct { + s32 ticks; /* MIDI, Tempo and End events must start with ticks */ + u8 status; + u8 byte1; + u8 byte2; + u32 duration; +} ALMIDIEvent; + +typedef struct { + s32 ticks; + u8 status; + u8 type; + u8 len; + u8 byte1; + u8 byte2; + u8 byte3; +} ALTempoEvent; + +typedef struct { + s32 ticks; + u8 status; + u8 type; + u8 len; +} ALEndEvent; + +typedef struct { + struct ALVoice_s *voice; +} ALNoteEvent; + +typedef struct { + struct ALVoice_s *voice; + ALMicroTime delta; + u8 vol; +} ALVolumeEvent; + +typedef struct { + s16 vol; +} ALSeqpVolEvent; + +typedef struct { + ALSeqMarker *start; + ALSeqMarker *end; + s32 count; +} ALSeqpLoopEvent; + +typedef struct { + u8 chan; + u8 priority; +} ALSeqpPriorityEvent; + +typedef struct { + void *seq; /* pointer to a seq (could be an ALSeq or an ALCSeq). */ +} ALSeqpSeqEvent; + +typedef struct { + ALBank *bank; +} ALSeqpBankEvent; + +typedef struct { + struct ALVoiceState_s *vs; + void *oscState; + u8 chan; +} ALOscEvent; + +typedef struct { + s16 type; + union { + ALMIDIEvent midi; + ALTempoEvent tempo; + ALEndEvent end; + ALNoteEvent note; + ALVolumeEvent vol; + ALSeqpLoopEvent loop; + ALSeqpVolEvent spvol; + ALSeqpPriorityEvent sppriority; + ALSeqpSeqEvent spseq; + ALSeqpBankEvent spbank; + ALOscEvent osc; + } msg; +} ALEvent; + +typedef struct { + ALLink node; + ALMicroTime delta; + ALEvent evt; +} ALEventListItem; + +typedef struct { + ALLink freeList; + ALLink allocList; + s32 eventCount; +} ALEventQueue; + + +#define AL_PHASE_ATTACK 0 +#define AL_PHASE_NOTEON 0 +#define AL_PHASE_DECAY 1 +#define AL_PHASE_SUSTAIN 2 +#define AL_PHASE_RELEASE 3 +#define AL_PHASE_SUSTREL 4 + +typedef struct ALVoiceState_s { + struct ALVoiceState_s *next;/* MUST be first */ + ALVoice voice; + ALSound *sound; + ALMicroTime envEndTime; /* time of envelope segment end */ + f32 pitch; /* currect pitch ratio */ + f32 vibrato; /* current value of the vibrato */ + u8 envGain; /* current envelope gain */ + u8 channel; /* channel assignment */ + u8 key; /* note on key number */ + u8 velocity; /* note on velocity */ + u8 envPhase; /* what envelope phase */ + u8 phase; + u8 tremelo; /* current value of the tremelo */ + u8 flags; /* bit 0 tremelo flag + bit 1 vibrato flag */ +} ALVoiceState; + +typedef struct { + ALInstrument *instrument; /* instrument assigned to this chan */ + s16 bendRange; /* pitch bend range in cents */ + ALFxId fxId; /* type of fx assigned to this chan */ + ALPan pan; /* overall pan for this chan */ + u8 priority; /* priority for this chan */ + u8 vol; /* current volume for this chan */ + u8 fxmix; /* current fx mix for this chan */ + u8 sustain; /* current sustain pedal state */ + f32 pitchBend; /* current pitch bend val in cents */ +} ALChanState; + +typedef struct ALSeq_s { + u8 *base; /* ptr to start of sequence file */ + u8 *trackStart; /* ptr to first MIDI event */ + u8 *curPtr; /* ptr to next event to read */ + s32 lastTicks; /* MIDI ticks for last event */ + s32 len; /* length of sequence in bytes */ + f32 qnpt; /* qrter notes / tick (1/division) */ + s16 division; /* ticks per quarter note */ + s16 lastStatus; /* for running status */ +} ALSeq; + +typedef struct { + u32 trackOffset[16]; + u32 division; +} ALCMidiHdr; + +typedef struct ALCSeq_s { + ALCMidiHdr *base; /* ptr to start of sequence file */ + u32 validTracks; /* set of flags, showing valid tracks */ + f32 qnpt; /* qrter notes / tick (1/division) */ + u32 lastTicks; /* keep track of ticks incase app wants */ + u32 lastDeltaTicks; /* number of delta ticks of last event */ + u32 deltaFlag; /* flag: set if delta's not subtracted */ + u8 *curLoc[16]; /* ptr to current track location, */ + /* may point to next event, or may point */ + /* to a backup code */ + u8 *curBUPtr[16]; /* ptr to next event if in backup mode */ + u8 curBULen[16]; /* if > 0, then in backup mode */ + u8 lastStatus[16]; /* for running status */ + u32 evtDeltaTicks[16]; /* delta time to next event */ +} ALCSeq; + +typedef struct { + u32 validTracks; + s32 lastTicks; + u32 lastDeltaTicks; + u8 *curLoc[16]; + u8 *curBUPtr[16]; + u8 curBULen[16]; + u8 lastStatus[16]; + u32 evtDeltaTicks[16]; +} ALCSeqMarker; + +#define NO_SOUND_ERR_MASK 0x01 +#define NOTE_OFF_ERR_MASK 0x02 +#define NO_VOICE_ERR_MASK 0x04 + +typedef struct { + s32 maxVoices; /* max number of voices to alloc */ + s32 maxEvents; /* max internal events to support */ + u8 maxChannels; /* max MIDI channels to support (16)*/ + u8 debugFlags; /* control which error get reported */ + ALHeap *heap; /* ptr to initialized heap */ + void *initOsc; + void *updateOsc; + void *stopOsc; +} ALSeqpConfig; + +typedef ALMicroTime (*ALOscInit)(void **oscState,f32 *initVal, u8 oscType, + u8 oscRate, u8 oscDepth, u8 oscDelay); +typedef ALMicroTime (*ALOscUpdate)(void *oscState, f32 *updateVal); +typedef void (*ALOscStop)(void *oscState); + +typedef struct { + ALPlayer node; /* note: must be first in structure */ + ALSynth *drvr; /* reference to the client driver */ + ALSeq *target; /* current sequence */ + ALMicroTime curTime; + ALBank *bank; /* current ALBank */ + s32 uspt; /* microseconds per tick */ + s32 nextDelta; /* microseconds to next callback */ + s32 state; + u16 chanMask; /* active channels */ + s16 vol; /* overall sequence volume */ + u8 maxChannels; /* number of MIDI channels */ + u8 debugFlags; /* control which error get reported */ + ALEvent nextEvent; + ALEventQueue evtq; + ALMicroTime frameTime; + ALChanState *chanState; /* 16 channels for MIDI */ + ALVoiceState *vAllocHead; /* list head for allocated voices */ + ALVoiceState *vAllocTail; /* list tail for allocated voices */ + ALVoiceState *vFreeList; /* list of free voice state structs */ + ALOscInit initOsc; + ALOscUpdate updateOsc; + ALOscStop stopOsc; + ALSeqMarker *loopStart; + ALSeqMarker *loopEnd; + s32 loopCount; /* -1 = loop forever, 0 = no loop */ +} ALSeqPlayer; + +typedef struct { + ALPlayer node; /* note: must be first in structure */ + ALSynth *drvr; /* reference to the client driver */ + ALCSeq *target; /* current sequence */ + ALMicroTime curTime; + ALBank *bank; /* current ALBank */ + s32 uspt; /* microseconds per tick */ + s32 nextDelta; /* microseconds to next callback */ + s32 state; + u16 chanMask; /* active channels */ + s16 vol; /* overall sequence volume */ + u8 maxChannels; /* number of MIDI channels */ + u8 debugFlags; /* control which error get reported */ + ALEvent nextEvent; + ALEventQueue evtq; + ALMicroTime frameTime; + ALChanState *chanState; /* 16 channels for MIDI */ + ALVoiceState *vAllocHead; /* list head for allocated voices */ + ALVoiceState *vAllocTail; /* list tail for allocated voices */ + ALVoiceState *vFreeList; /* list of free voice state structs */ + ALOscInit initOsc; + ALOscUpdate updateOsc; + ALOscStop stopOsc; +} ALCSPlayer; + +/* Maintain backwards compatibility with old routine names. */ +#define alSeqpSetProgram alSeqpSetChlProgram +#define alSeqpGetProgram alSeqpGetChlProgram +#define alSeqpSetFXMix alSeqpSetChlFXMix +#define alSeqpGetFXMix alSeqpGetChlFXMix +#define alSeqpSetPan alSeqpSetChlPan +#define alSeqpGetPan alSeqpGetChlPan +#define alSeqpSetChannelPriority alSeqpSetChlPriority +#define alSeqpGetChannelPriority alSeqpGetChlPriority + + + +/* Maintain backwards compatibility with old routine names. */ +#define alCSPSetProgram alCSPSetChlProgram +#define alCSPGetProgram alCSPGetChlProgram +#define alCSPSetFXMix alCSPSetChlFXMix +#define alCSPGetFXMix alCSPGetChlFXMix +#define alCSPSetPan alCSPSetChlPan +#define alCSPGetPan alCSPGetChlPan +#define alCSPSetChannelPriority alCSPSetChlPriority +#define alCSPGetChannelPriority alCSPGetChlPriority + + + +/*********************************************************************** + * Sound Player stuff + ***********************************************************************/ + +typedef struct { + s32 maxSounds; + s32 maxEvents; + ALHeap *heap; +} ALSndpConfig; + +typedef struct { + ALPlayer node; /* note: must be first in structure */ + ALEventQueue evtq; + ALEvent nextEvent; + ALSynth *drvr; /* reference to the client driver */ + s32 target; + void *sndState; + s32 maxSounds; + ALMicroTime frameTime; + ALMicroTime nextDelta; /* microseconds to next callback */ + ALMicroTime curTime; +} ALSndPlayer; + +typedef s16 ALSndId; + #endif diff --git a/include/audio_internal.h b/include/audio_internal.h new file mode 100644 index 00000000..b5e8741b --- /dev/null +++ b/include/audio_internal.h @@ -0,0 +1,269 @@ +#ifndef _AUDIO_INTERNAL_H +#define _AUDIO_INTERNAL_H + +#include "PR/libaudio.h" + +/* + * filter message ids + */ +enum { + AL_FILTER_FREE_VOICE, + AL_FILTER_SET_SOURCE, + AL_FILTER_ADD_SOURCE, + AL_FILTER_ADD_UPDATE, + AL_FILTER_RESET, + AL_FILTER_SET_WAVETABLE, +/* AL_FILTER_SET_DMA_PROC,*/ +/* AL_FILTER_SKIP_LOOP,*/ + AL_FILTER_SET_DRAM, + AL_FILTER_SET_PITCH, + AL_FILTER_SET_UNITY_PITCH, + AL_FILTER_START, +/* AL_FILTER_SET_DECAY,*/ +/* AL_FILTER_SET_FC,*/ + AL_FILTER_SET_STATE, + AL_FILTER_SET_VOLUME, + AL_FILTER_SET_PAN, + AL_FILTER_START_VOICE_ALT, + AL_FILTER_START_VOICE, + AL_FILTER_STOP_VOICE, + AL_FILTER_SET_FXAMT +}; + +#define AL_MAX_RSP_SAMPLES 160 + +/* + * buffer locations based on AL_MAX_RSP_SAMPLES + */ +#define AL_DECODER_IN 0 +#define AL_RESAMPLER_OUT 0 +#define AL_TEMP_0 0 +#define AL_DECODER_OUT 320 +#define AL_TEMP_1 320 +#define AL_TEMP_2 640 +#define AL_MAIN_L_OUT 1088 +#define AL_MAIN_R_OUT 1408 +#define AL_AUX_L_OUT 1728 +#define AL_AUX_R_OUT 2048 + +/* + * filter types + */ +enum { + AL_ADPCM, + AL_RESAMPLE, + AL_BUFFER, + AL_SAVE, + AL_ENVMIX, + AL_FX, + AL_AUXBUS, + AL_MAINBUS +}; + +typedef struct ALParam_s { + struct ALParam_s *next; + s32 delta; + s16 type; + union { + f32 f; + s32 i; + } data; + union { + f32 f; + s32 i; + } moredata; + union { + f32 f; + s32 i; + } stillmoredata; + union { + f32 f; + s32 i; + } yetstillmoredata; +} ALParam; + +typedef struct { + struct ALParam_s *next; + s32 delta; + s16 type; + s16 unity; /* disable resampler */ + f32 pitch; + s16 volume; + ALPan pan; + u8 fxMix; + s32 samples; + struct ALWaveTable_s *wave; +} ALStartParamAlt; + +typedef struct { + struct ALParam_s *next; + s32 delta; + s16 type; + s16 unity; /* disable resampler */ + struct ALWaveTable_s *wave; +} ALStartParam; + +typedef struct { + struct ALParam_s *next; + s32 delta; + s16 type; + struct PVoice_s *pvoice; +} ALFreeParam; + +typedef Acmd *(*ALCmdHandler)(void *, s16 *, s32, s32, Acmd *); +typedef s32 (*ALSetParam)(void *, s32, void *); + +typedef struct ALFilter_s { + struct ALFilter_s *source; + ALCmdHandler handler; + ALSetParam setParam; + s16 inp; + s16 outp; + s32 type; +} ALFilter; + +#define AL_MAX_ADPCM_STATES 3 /* Depends on number of subframes + * per frame and loop length + */ +typedef struct { + ALFilter filter; + ADPCM_STATE *state; + ADPCM_STATE *lstate; + ALRawLoop loop; + struct ALWaveTable_s *table; + s32 bookSize; + ALDMAproc dma; + void *dmaState; + s32 sample; + s32 lastsam; + s32 first; + s32 memin; +} ALLoadFilter; + +typedef struct ALResampler_s { + ALFilter filter; + RESAMPLE_STATE *state; + f32 ratio; + s32 upitch; + f32 delta; + s32 first; + ALParam *ctrlList; + ALParam *ctrlTail; + s32 motion; +} ALResampler; + +typedef struct { + s16 fc; + s16 fgain; + union { + s16 fccoef[16]; + s64 force_aligned; + } fcvec; + POLEF_STATE *fstate; + s32 first; +} ALLowPass; + +typedef struct { + u32 input; + u32 output; + s16 ffcoef; + s16 fbcoef; + s16 gain; + f32 rsinc; + f32 rsval; + s32 rsdelta; + f32 rsgain; + ALLowPass *lp; + ALResampler *rs; +} ALDelay; + +typedef s32 (*ALSetFXParam)(void *, s32, void *); +typedef struct { + struct ALFilter_s filter; + s16 *base; + s16 *input; + u32 length; + ALDelay *delay; + u8 section_count; + ALSetFXParam paramHdl; +} ALFx; + +#define AL_MAX_MAIN_BUS_SOURCES 1 +typedef struct ALMainBus_s { + ALFilter filter; + s32 sourceCount; + s32 maxSources; + ALFilter **sources; +} ALMainBus; + +#define AL_MAX_AUX_BUS_SOURCES 8 +#define AL_MAX_AUX_BUS_FX 1 +typedef struct ALAuxBus_s { + ALFilter filter; + s32 sourceCount; + s32 maxSources; + ALFilter **sources; + ALFx fx[AL_MAX_AUX_BUS_FX]; +} ALAuxBus; + +typedef struct ALSave_s { + ALFilter filter; + s32 dramout; + s32 first; +} ALSave; + +typedef struct ALEnvMixer_s { + ALFilter filter; + ENVMIX_STATE *state; + s16 pan; + s16 volume; + s16 cvolL; + s16 cvolR; + s16 dryamt; + s16 wetamt; + u16 lratl; + s16 lratm; + s16 ltgt; + u16 rratl; + s16 rratm; + s16 rtgt; + s32 delta; + s32 segEnd; + s32 first; + ALParam *ctrlList; + ALParam *ctrlTail; + ALFilter **sources; + s32 motion; +} ALEnvMixer; + +/* + * heap stuff + */ +typedef struct { + s32 magic; /* check structure integrety */ + s32 size; /* size of this allocated block */ + u8 *file; /* file that this alloc was called from */ + s32 line; /* line that it was called from */ + s32 count; /* heap call number */ + s32 pad0; + s32 pad1; + s32 pad2; /* Make it 32 bytes */ +} HeapInfo; + +#define AL_CACHE_ALIGN 15 + +/* + * synth stuff + */ + +typedef struct PVoice_s { + ALLink node; + struct ALVoice_s *vvoice; + ALFilter *channelKnob; + ALLoadFilter decoder; + ALResampler resampler; + ALEnvMixer envmixer; + s32 offset; +} PVoice; + +#endif diff --git a/preprocessed5rcuc43a.u b/preprocessed5rcuc43a.u new file mode 100644 index 0000000000000000000000000000000000000000..2efa5fd49ed873b0de5fae672942424bd57881eb GIT binary patch literal 2032 zcmZQvVez`&qanw+1K3Sz-9YX<`ZgAI%ap*a}XAq)`7%)r1P zoD5Cs z7`PQ7G}tT#1_nl9P6jX=$y^==1_tKDoZ!kl$DEw}WVZ;AU8xQXj399a1_l-|-wlP& zf+o*_#^-_A52blxAnsrYasZhIb_3X4Pc|?gM1c7W3=Ad=9@oAwLe-fuFerc|VeSZW z1M@(B0Qry2lMU=X4yZgx+=s#KuSzsj9mo?P9Z+>3CdeL;It7qAm^~>F`(X0u?&L^u z0NVqTXF>A^Pl^LLykYVj;%;C*3o|1`UmzQp&r5bVI1mU2H;6sZZ~*xcH5{P+BQ+eL z>OtWJG7}VAjG%B!frKy2zv$t?0M!Rl57Gxxha9gAM8+#fA4oq4Bl`!O7(tR~@xmbv z31?P#xI@w%e+(pkn9<@5=1y4p0oh}Kl>RW>iDn;6KgcN{z5EOy``rGj5E(u&eIS~W z@B!J2HGH7)05TusK2SU&r+WspbPo$ZHfBa}dS!s7TS1I)gTz0`Jdn8{^HJSTD7`}B zNf4S|LFS;kpSbkOPz^3^LDqxQKT{T@ykdryJ3?7dd!!-x7i5nBNVPn~{p?i`^$Z1^ z%)%gXB+S9Uz`g-gW->6asX*Mx1}+<+Y6KY=*g$2v4g&+*83qOh0|o}R9}xBI8c;PL ziiLrJy#U03$U#}eQQ+cBM*-|NS&$Y91qM)DgV_oS;A{X^qo4pvcnt7@m6d^k0hIYb z^$RF*gQ^iwL8{2Wz`zBn7@$}RWGDnPgVZzNt60z~2^4N(j$4IaYB>Xl4oECY%w2lm?|8ka{KnrlgyS literal 0 HcmV?d00001 diff --git a/src/unknown_064830.c b/src/unknown_064830.c index c205b154..347a2aa3 100644 --- a/src/unknown_064830.c +++ b/src/unknown_064830.c @@ -4,6 +4,7 @@ #include "types.h" #include "macros.h" #include "libultra_internal.h" +#include "audio_internal.h" extern s32 alAuxBusPull; extern s32 alAuxBusParam; @@ -20,9 +21,9 @@ extern s32 alSavePull; GLOBAL_ASM("asm/non_matchings/unknown_064830/alFxPull.s") -s32 alFxParam(s32* arg0, s32 arg1, s32 arg2) { - if (arg1 == 1) { - *arg0 = arg2; +s32 alFxParam(void* filter, s32 paramID, void* param) { + if (paramID == 1) { + ((ALFilter *)filter)->source = param; } return 0; } @@ -31,140 +32,109 @@ GLOBAL_ASM("asm/non_matchings/unknown_064830/alFxParamHdl.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadOutputBuffer.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadBuffer.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_saveBuffer.s") -GLOBAL_ASM("asm/non_matchings/unknown_064830/_filterBuffer.s") +//GLOBAL_ASM("asm/non_matchings/unknown_064830/_filterBuffer.s") +Acmd *_filterBuffer(ALLowPass *lp, s32 buff, s32 count, Acmd *p) +{ + Acmd *ptr = p; + + aSetBuffer(ptr++, 0, buff, buff, count<<1); + aLoadADPCM(ptr++, 32, osVirtualToPhysical(lp->fcvec.fccoef)); + aPoleFilter(ptr++, lp->first, lp->fgain, osVirtualToPhysical(lp->fstate)); + lp->first = 0; + + return ptr; +} + GLOBAL_ASM("asm/non_matchings/unknown_064830/_doModFunc.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/func_8006492C.s") -GLOBAL_ASM("asm/non_matchings/unknown_064830/init_lpfilter.s") + +#define SCALE 16384 + +void init_lpfilter(ALLowPass *lp) +{ + s32 i, temp; + s16 fc; + f64 ffc, fcoef; + + temp = lp->fc * SCALE; + fc = temp >> 15; + lp->fgain = SCALE - fc; + + lp->first = 1; + for (i=0; i<8; i++) + lp->fcvec.fccoef[i] = 0; + + lp->fcvec.fccoef[i++] = fc; + fcoef = ffc = (f64)fc/SCALE; + + for (; i<16; i++){ + fcoef *= ffc; + lp->fcvec.fccoef[i] = (s16)(fcoef * SCALE); + } +} + GLOBAL_ASM("asm/non_matchings/unknown_064830/alFxNew.s") -typedef struct unk80064E54 { - u8 unk00[0x14]; // unknown - s32 unk14; - s16 unk18; - s16 unk1A; - s16 unk1C; - s16 unk1E; - s16 unk20; - s16 unk22; - s16 unk24; - s16 unk26; - s16 unk28; - u8 unk2A[0x04]; // unknown - s16 unk2E; - s32 unk30; - s32 unk34; - s32 unk38; - s32 unk3C; - s32 unk40; - s32 unk44; - s32 unk48; -} unk80064E54; - -void alEnvmixerNew(unk80064E54* arg0, s32 arg1) { - alFilterNew(arg0, &alEnvMixerPull, &alEnvmixerParam, 4); - arg0->unk14 = alHeapDBAlloc(0, 0, arg1, 1, 0x50); - arg0->unk38 = 1; - arg0->unk48 = 0; - arg0->unk1A = 1; - arg0->unk28 = 1; - arg0->unk2E = 1; - arg0->unk1C = 1; - arg0->unk1E = 1; - arg0->unk20 = 0; - arg0->unk22 = 0; - arg0->unk26 = 1; - arg0->unk24 = 0; - arg0->unk30 = 0; - arg0->unk34 = 0; - arg0->unk18 = 0; - arg0->unk3C = 0; - arg0->unk40 = 0; - arg0->unk44 = 0; +void alEnvmixerNew(ALEnvMixer* e, s32 arg1) { + alFilterNew(e, &alEnvMixerPull, &alEnvmixerParam, 4); + e->state = alHeapDBAlloc(0, 0, arg1, 1, 0x50); + e->first = 1; + e->motion = AL_STOPPED; + e->volume = 1; + e->ltgt = 1; + e->rtgt = 1; + e->cvolL = 1; + e->cvolR = 1; + e->dryamt = 0; + e->wetamt = 0; + e->lratm = 1; + e->lratl = 0; + e->delta = 0; + e->segEnd = 0; + e->pan = 0; + e->ctrlList = 0; + e->ctrlTail = 0; + e->sources = 0; } -typedef struct ALFilter_s { - u8 unk00[0x14]; // unknown - s32 unk14; - s32 unk18; - u8 unk1C[0x14]; // unknown - s32 unk30; - s32 unk34; - u8 unk38[0x04]; // unknown - s32 unk3C; - s32 unk40; - s32 unk44; -} ALFilter; - -void alLoadNew(ALFilter* arg0, s32 (*arg1)(s32*), s32 arg2) { +void alLoadNew(ALLoadFilter* arg0, s32 (*arg1)(s32*), s32 arg2) { alFilterNew(arg0, &alLoadPull, &alLoadParam, 0); - arg0->unk14 = alHeapDBAlloc(0, 0, arg2, 1, 0x20); - arg0->unk18 = alHeapDBAlloc(0, 0, arg2, 1, 0x20); - arg0->unk30 = arg1(&arg0->unk34); - arg0->unk3C = 0; - arg0->unk40 = 1; - arg0->unk44 = 0; + arg0->state = alHeapDBAlloc(0, 0, arg2, 1, 0x20); + arg0->lstate = alHeapDBAlloc(0, 0, arg2, 1, 0x20); + arg0->dma = arg1(&arg0->dmaState); + arg0->lastsam = 0; + arg0->first = 1; + arg0->memin = 0; } -typedef struct unk80064F9C { - u8 unk00[0x14]; // unknown - s32 unk14; - f32 unk18; - s32 unk1C; - f32 unk20; - s32 unk24; - s32 unk28; - s32 unk2C; - s32 unk30; -} unk80064F9C; - -void alResampleNew(unk80064F9C* arg0, s32 arg1) { - alFilterNew(arg0, &alResamplePull, &alResampleParam, 1); - arg0->unk14 = alHeapDBAlloc(0, 0, arg1, 1, 0x20); - arg0->unk24 = 1; - arg0->unk30 = 0; - arg0->unk1C = 0; - arg0->unk28 = 0; - arg0->unk2C = 0; - arg0->unk20 = 0.0f; - arg0->unk18 = 1.0f; +void alResampleNew(ALResampler* r, ALHeap* hp) { + alFilterNew(r, &alResamplePull, &alResampleParam, 1); + r->state = alHeapDBAlloc(0, 0, hp, 1, 0x20); + r->first = 1; + r->motion = AL_STOPPED; + r->upitch = 0; + r->ctrlList = 0; + r->ctrlTail = 0; + r->delta = 0.0f; + r->ratio = 1.0f; } -typedef struct unk80065024 { - u8 unk00[0x14]; // unknown - s32 unk14; - s32 unk18; - s32 unk1C; -} unk80065024; - -void alAuxBusNew(unk80065024* arg0, s32 arg1, s32 arg2) { - alFilterNew(arg0, &alAuxBusPull, &alAuxBusParam, 6); - arg0->unk14 = 0; - arg0->unk18 = arg2; - arg0->unk1C = arg1; +void alAuxBusNew(ALAuxBus* m, void* sources, s32 maxSources) { + alFilterNew(m, &alAuxBusPull, &alAuxBusParam, 6); + m->sourceCount = 0; + m->maxSources = maxSources; + m->sources = sources; } -typedef struct unk80065084 { - u8 unk00[0x14]; // unknown - s32 unk14; - s32 unk18; - s32 unk1C; -} unk80065084; - -void alMainBusNew(unk80065084* arg0, s32 arg1, s32 arg2) { - alFilterNew(arg0, &alMainBusPull, &alMainBusParam, 7); - arg0->unk14 = 0; - arg0->unk18 = arg2; - arg0->unk1C = arg1; +void alMainBusNew(ALMainBus* m, void* sources, s32 maxSources) { + alFilterNew(m, &alMainBusPull, &alMainBusParam, 7); + m->sourceCount = 0; + m->maxSources = maxSources; + m->sources = sources; } -typedef struct unk800650E4 { - u8 unk00[0x14]; // unknown - s32 unk14; - s32 unk18; -} unk800650E4; - -void alSaveNew(unk800650E4* arg0) { - alFilterNew(arg0, &alSavePull, &alSaveParam, 3); - arg0->unk14 = 0; - arg0->unk18 = 1; +void alSaveNew(ALSave* f) { + alFilterNew(f, &alSavePull, &alSaveParam, AL_SAVE); + f->dramout = 0; + f->first = 1; } diff --git a/src/unknown_066460.c b/src/unknown_066460.c index dbf5ae34..36791087 100644 --- a/src/unknown_066460.c +++ b/src/unknown_066460.c @@ -3,5 +3,18 @@ #include "types.h" #include "macros.h" +#include "audio_internal.h" -GLOBAL_ASM("asm/non_matchings/unknown_066460/alSynAllocFX.s") +#if 1 + GLOBAL_ASM("asm/non_matchings/unknown_066460/alSynAllocFX.s") +#else +ALFxRef *alSynAllocFX(ALSynth *s, s16 bus, ALSynConfig *c, ALHeap *hp) +{ + alFxNew(&s->auxBus[bus].fx[0], c, hp); + alFxParam(&s->auxBus[bus].fx[0], AL_FILTER_SET_SOURCE, + &s->auxBus[bus]); + alMainBusParam(s->mainBus, AL_FILTER_ADD_SOURCE,&s->auxBus[bus].fx[0]); + + return (ALFxRef)(&s->auxBus[bus].fx[0]); +} +#endif \ No newline at end of file From 1d0efb5d0d2679b41346c513c573bd589ceb280f Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Wed, 5 Aug 2020 23:38:34 -0500 Subject: [PATCH 02/11] removed accidental file --- preprocessed5rcuc43a.u | Bin 2032 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 preprocessed5rcuc43a.u diff --git a/preprocessed5rcuc43a.u b/preprocessed5rcuc43a.u deleted file mode 100644 index 2efa5fd49ed873b0de5fae672942424bd57881eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2032 zcmZQvVez`&qanw+1K3Sz-9YX<`ZgAI%ap*a}XAq)`7%)r1P zoD5Cs z7`PQ7G}tT#1_nl9P6jX=$y^==1_tKDoZ!kl$DEw}WVZ;AU8xQXj399a1_l-|-wlP& zf+o*_#^-_A52blxAnsrYasZhIb_3X4Pc|?gM1c7W3=Ad=9@oAwLe-fuFerc|VeSZW z1M@(B0Qry2lMU=X4yZgx+=s#KuSzsj9mo?P9Z+>3CdeL;It7qAm^~>F`(X0u?&L^u z0NVqTXF>A^Pl^LLykYVj;%;C*3o|1`UmzQp&r5bVI1mU2H;6sZZ~*xcH5{P+BQ+eL z>OtWJG7}VAjG%B!frKy2zv$t?0M!Rl57Gxxha9gAM8+#fA4oq4Bl`!O7(tR~@xmbv z31?P#xI@w%e+(pkn9<@5=1y4p0oh}Kl>RW>iDn;6KgcN{z5EOy``rGj5E(u&eIS~W z@B!J2HGH7)05TusK2SU&r+WspbPo$ZHfBa}dS!s7TS1I)gTz0`Jdn8{^HJSTD7`}B zNf4S|LFS;kpSbkOPz^3^LDqxQKT{T@ykdryJ3?7dd!!-x7i5nBNVPn~{p?i`^$Z1^ z%)%gXB+S9Uz`g-gW->6asX*Mx1}+<+Y6KY=*g$2v4g&+*83qOh0|o}R9}xBI8c;PL ziiLrJy#U03$U#}eQQ+cBM*-|NS&$Y91qM)DgV_oS;A{X^qo4pvcnt7@m6d^k0hIYb z^$RF*gQ^iwL8{2Wz`zBn7@$}RWGDnPgVZzNt60z~2^4N(j$4IaYB>Xl4oECY%w2lm?|8ka{KnrlgyS From 09e50410b6b4d7ea2e2dc3e099fe8ce3df904a05 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Wed, 5 Aug 2020 23:40:08 -0500 Subject: [PATCH 03/11] c: _saveBuffer --- src/unknown_064830.c | 48 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/unknown_064830.c b/src/unknown_064830.c index 347a2aa3..e007ea42 100644 --- a/src/unknown_064830.c +++ b/src/unknown_064830.c @@ -31,8 +31,52 @@ s32 alFxParam(void* filter, s32 paramID, void* param) { GLOBAL_ASM("asm/non_matchings/unknown_064830/alFxParamHdl.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadOutputBuffer.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadBuffer.s") -GLOBAL_ASM("asm/non_matchings/unknown_064830/_saveBuffer.s") -//GLOBAL_ASM("asm/non_matchings/unknown_064830/_filterBuffer.s") +//GLOBAL_ASM("asm/non_matchings/unknown_064830/_saveBuffer.s") + +/* + * This routine is for writing data to the delay line buff. If the + * address of curr_ptr < r->base, it will force it to be within r->base + * space. If the write goes past the end of r->base, it will wrap around + * Cause count bytes of data at buff to be written to delay line, curr_ptr. + */ +Acmd *_saveBuffer(ALFx *r, s16 *curr_ptr, s32 buff, s32 count, Acmd *p) +{ + Acmd *ptr = p; + s32 after_end, before_end; + s16 *updated_ptr, *delay_end; + +#ifdef AUD_PROFILE + lastCnt[++cnt_index] = osGetCount(); +#endif + + delay_end = &r->base[r->length]; + if (curr_ptr < r->base) /* probably just security */ + curr_ptr += r->length; /* shouldn't occur */ + updated_ptr = curr_ptr + count; + + if (updated_ptr > delay_end) { /* if the data wraps past end of r->base */ + after_end = updated_ptr - delay_end; + before_end = delay_end - curr_ptr; + + aSetBuffer(ptr++, 0, 0, buff, before_end<<1); + aSaveBuffer(ptr++, osVirtualToPhysical(curr_ptr)); + aSetBuffer(ptr++, 0, 0, buff+(before_end<<1), after_end<<1); + aSaveBuffer(ptr++, osVirtualToPhysical(r->base)); + aSetBuffer(ptr++, 0, 0, 0, count<<1); + } else { + aSetBuffer(ptr++, 0, 0, buff, count<<1); + aSaveBuffer(ptr++, osVirtualToPhysical(curr_ptr)); + } + +#ifdef AUD_PROFILE + PROFILE_AUD(save_num, save_cnt, save_max, save_min); +#endif + return ptr; + +} + + + Acmd *_filterBuffer(ALLowPass *lp, s32 buff, s32 count, Acmd *p) { Acmd *ptr = p; From 83ba1cf9add22c8f44f6b748adca868acbbba1ca Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Wed, 5 Aug 2020 23:42:17 -0500 Subject: [PATCH 04/11] c: _loadBuffer --- .../unknown_064830/_filterBuffer.s | 47 -------- .../unknown_064830/_loadBuffer.s | 107 ------------------ .../unknown_064830/_saveBuffer.s | 107 ------------------ src/unknown_064830.c | 53 ++++++++- 4 files changed, 49 insertions(+), 265 deletions(-) delete mode 100644 asm/non_matchings/unknown_064830/_filterBuffer.s delete mode 100644 asm/non_matchings/unknown_064830/_loadBuffer.s delete mode 100644 asm/non_matchings/unknown_064830/_saveBuffer.s diff --git a/asm/non_matchings/unknown_064830/_filterBuffer.s b/asm/non_matchings/unknown_064830/_filterBuffer.s deleted file mode 100644 index 2a76ae02..00000000 --- a/asm/non_matchings/unknown_064830/_filterBuffer.s +++ /dev/null @@ -1,47 +0,0 @@ -glabel _filterBuffer -/* 0653D0 800647D0 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0653D4 800647D4 AFB00018 */ sw $s0, 0x18($sp) -/* 0653D8 800647D8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0653DC 800647DC 30A2FFFF */ andi $v0, $a1, 0xffff -/* 0653E0 800647E0 0006C040 */ sll $t8, $a2, 1 -/* 0653E4 800647E4 3319FFFF */ andi $t9, $t8, 0xffff -/* 0653E8 800647E8 00027C00 */ sll $t7, $v0, 0x10 -/* 0653EC 800647EC 3C010800 */ lui $at, 0x800 -/* 0653F0 800647F0 3C090B00 */ lui $t1, (0x0B000020 >> 16) # lui $t1, 0xb00 -/* 0653F4 800647F4 00417025 */ or $t6, $v0, $at -/* 0653F8 800647F8 01F94025 */ or $t0, $t7, $t9 -/* 0653FC 800647FC 35290020 */ ori $t1, (0x0B000020 & 0xFFFF) # ori $t1, $t1, 0x20 -/* 065400 80064800 00808025 */ move $s0, $a0 -/* 065404 80064804 ACE80004 */ sw $t0, 4($a3) -/* 065408 80064808 ACEE0000 */ sw $t6, ($a3) -/* 06540C 8006480C ACE90008 */ sw $t1, 8($a3) -/* 065410 80064810 AFA7003C */ sw $a3, 0x3c($sp) -/* 065414 80064814 0C03233C */ jal osVirtualToPhysical -/* 065418 80064818 24840008 */ addiu $a0, $a0, 8 -/* 06541C 8006481C 8FA7003C */ lw $a3, 0x3c($sp) -/* 065420 80064820 3C010E00 */ lui $at, 0xe00 -/* 065424 80064824 24E30010 */ addiu $v1, $a3, 0x10 -/* 065428 80064828 246A0008 */ addiu $t2, $v1, 8 -/* 06542C 8006482C ACE2000C */ sw $v0, 0xc($a3) -/* 065430 80064830 AFAA002C */ sw $t2, 0x2c($sp) -/* 065434 80064834 8E0B002C */ lw $t3, 0x2c($s0) -/* 065438 80064838 86180002 */ lh $t8, 2($s0) -/* 06543C 8006483C 316C00FF */ andi $t4, $t3, 0xff -/* 065440 80064840 000C6C00 */ sll $t5, $t4, 0x10 -/* 065444 80064844 01A17025 */ or $t6, $t5, $at -/* 065448 80064848 330FFFFF */ andi $t7, $t8, 0xffff -/* 06544C 8006484C 01CFC825 */ or $t9, $t6, $t7 -/* 065450 80064850 AC790000 */ sw $t9, ($v1) -/* 065454 80064854 8E040028 */ lw $a0, 0x28($s0) -/* 065458 80064858 0C03233C */ jal osVirtualToPhysical -/* 06545C 8006485C AFA30020 */ sw $v1, 0x20($sp) -/* 065460 80064860 8FA50020 */ lw $a1, 0x20($sp) -/* 065464 80064864 00000000 */ nop -/* 065468 80064868 ACA20004 */ sw $v0, 4($a1) -/* 06546C 8006486C AE00002C */ sw $zero, 0x2c($s0) -/* 065470 80064870 8FBF001C */ lw $ra, 0x1c($sp) -/* 065474 80064874 8FB00018 */ lw $s0, 0x18($sp) -/* 065478 80064878 8FA2002C */ lw $v0, 0x2c($sp) -/* 06547C 8006487C 03E00008 */ jr $ra -/* 065480 80064880 27BD0030 */ addiu $sp, $sp, 0x30 - diff --git a/asm/non_matchings/unknown_064830/_loadBuffer.s b/asm/non_matchings/unknown_064830/_loadBuffer.s deleted file mode 100644 index bd49e065..00000000 --- a/asm/non_matchings/unknown_064830/_loadBuffer.s +++ /dev/null @@ -1,107 +0,0 @@ -glabel _loadBuffer -/* 0650A0 800644A0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0650A4 800644A4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0650A8 800644A8 AFB00018 */ sw $s0, 0x18($sp) -/* 0650AC 800644AC AFA40060 */ sw $a0, 0x60($sp) -/* 0650B0 800644B0 AFA60068 */ sw $a2, 0x68($sp) -/* 0650B4 800644B4 AFA7006C */ sw $a3, 0x6c($sp) -/* 0650B8 800644B8 8C83001C */ lw $v1, 0x1c($a0) -/* 0650BC 800644BC 8C820014 */ lw $v0, 0x14($a0) -/* 0650C0 800644C0 00037840 */ sll $t7, $v1, 1 -/* 0650C4 800644C4 00A2082B */ sltu $at, $a1, $v0 -/* 0650C8 800644C8 10200002 */ beqz $at, .L800644D4 -/* 0650CC 800644CC 004F4021 */ addu $t0, $v0, $t7 -/* 0650D0 800644D0 00AF2821 */ addu $a1, $a1, $t7 -.L800644D4: -/* 0650D4 800644D4 8FA6006C */ lw $a2, 0x6c($sp) -/* 0650D8 800644D8 8FAE0070 */ lw $t6, 0x70($sp) -/* 0650DC 800644DC 0006C040 */ sll $t8, $a2, 1 -/* 0650E0 800644E0 03053821 */ addu $a3, $t8, $a1 -/* 0650E4 800644E4 0107082B */ sltu $at, $t0, $a3 -/* 0650E8 800644E8 10200037 */ beqz $at, .L800645C8 -/* 0650EC 800644EC 03003025 */ move $a2, $t8 -/* 0650F0 800644F0 8FB90070 */ lw $t9, 0x70($sp) -/* 0650F4 800644F4 8FAB0068 */ lw $t3, 0x68($sp) -/* 0650F8 800644F8 01054823 */ subu $t1, $t0, $a1 -/* 0650FC 800644FC 00097043 */ sra $t6, $t1, 1 -/* 065100 80064500 000E7840 */ sll $t7, $t6, 1 -/* 065104 80064504 3C010800 */ lui $at, 0x800 -/* 065108 80064508 316CFFFF */ andi $t4, $t3, 0xffff -/* 06510C 8006450C 01816825 */ or $t5, $t4, $at -/* 065110 80064510 31F8FFFF */ andi $t8, $t7, 0xffff -/* 065114 80064514 27300008 */ addiu $s0, $t9, 8 -/* 065118 80064518 AF380004 */ sw $t8, 4($t9) -/* 06511C 8006451C AF2D0000 */ sw $t5, ($t9) -/* 065120 80064520 3C190400 */ lui $t9, 0x400 -/* 065124 80064524 02005025 */ move $t2, $s0 -/* 065128 80064528 AD590000 */ sw $t9, ($t2) -/* 06512C 8006452C AFAA0044 */ sw $t2, 0x44($sp) -/* 065130 80064530 AFAF0024 */ sw $t7, 0x24($sp) -/* 065134 80064534 AFA8004C */ sw $t0, 0x4c($sp) -/* 065138 80064538 AFA70028 */ sw $a3, 0x28($sp) -/* 06513C 8006453C AFA6002C */ sw $a2, 0x2c($sp) -/* 065140 80064540 26100008 */ addiu $s0, $s0, 8 -/* 065144 80064544 0C03233C */ jal osVirtualToPhysical -/* 065148 80064548 00A02025 */ move $a0, $a1 -/* 06514C 8006454C 8FAA0044 */ lw $t2, 0x44($sp) -/* 065150 80064550 8FA70028 */ lw $a3, 0x28($sp) -/* 065154 80064554 8FA8004C */ lw $t0, 0x4c($sp) -/* 065158 80064558 8FA90024 */ lw $t1, 0x24($sp) -/* 06515C 8006455C AD420004 */ sw $v0, 4($t2) -/* 065160 80064560 8FAB0068 */ lw $t3, 0x68($sp) -/* 065164 80064564 00E87823 */ subu $t7, $a3, $t0 -/* 065168 80064568 000FC043 */ sra $t8, $t7, 1 -/* 06516C 8006456C 02001825 */ move $v1, $s0 -/* 065170 80064570 012B6021 */ addu $t4, $t1, $t3 -/* 065174 80064574 318DFFFF */ andi $t5, $t4, 0xffff -/* 065178 80064578 0018C840 */ sll $t9, $t8, 1 -/* 06517C 8006457C 3C010800 */ lui $at, 0x800 -/* 065180 80064580 01A17025 */ or $t6, $t5, $at -/* 065184 80064584 332BFFFF */ andi $t3, $t9, 0xffff -/* 065188 80064588 26100008 */ addiu $s0, $s0, 8 -/* 06518C 8006458C AC6B0004 */ sw $t3, 4($v1) -/* 065190 80064590 AC6E0000 */ sw $t6, ($v1) -/* 065194 80064594 02002825 */ move $a1, $s0 -/* 065198 80064598 3C0C0400 */ lui $t4, 0x400 -/* 06519C 8006459C ACAC0000 */ sw $t4, ($a1) -/* 0651A0 800645A0 8FAD0060 */ lw $t5, 0x60($sp) -/* 0651A4 800645A4 26100008 */ addiu $s0, $s0, 8 -/* 0651A8 800645A8 8DA40014 */ lw $a0, 0x14($t5) -/* 0651AC 800645AC 0C03233C */ jal osVirtualToPhysical -/* 0651B0 800645B0 AFA5003C */ sw $a1, 0x3c($sp) -/* 0651B4 800645B4 8FA5003C */ lw $a1, 0x3c($sp) -/* 0651B8 800645B8 8FA6002C */ lw $a2, 0x2c($sp) -/* 0651BC 800645BC ACA20004 */ sw $v0, 4($a1) -/* 0651C0 800645C0 10000014 */ b .L80064614 -/* 0651C4 800645C4 30C7FFFF */ andi $a3, $a2, 0xffff -.L800645C8: -/* 0651C8 800645C8 8FAF0068 */ lw $t7, 0x68($sp) -/* 0651CC 800645CC 3C010800 */ lui $at, 0x800 -/* 0651D0 800645D0 31F8FFFF */ andi $t8, $t7, 0xffff -/* 0651D4 800645D4 0301C825 */ or $t9, $t8, $at -/* 0651D8 800645D8 25D00008 */ addiu $s0, $t6, 8 -/* 0651DC 800645DC 30C7FFFF */ andi $a3, $a2, 0xffff -/* 0651E0 800645E0 ADC70004 */ sw $a3, 4($t6) -/* 0651E4 800645E4 ADD90000 */ sw $t9, ($t6) -/* 0651E8 800645E8 02001825 */ move $v1, $s0 -/* 0651EC 800645EC 3C0B0400 */ lui $t3, 0x400 -/* 0651F0 800645F0 AC6B0000 */ sw $t3, ($v1) -/* 0651F4 800645F4 AFA70028 */ sw $a3, 0x28($sp) -/* 0651F8 800645F8 AFA30034 */ sw $v1, 0x34($sp) -/* 0651FC 800645FC 26100008 */ addiu $s0, $s0, 8 -/* 065200 80064600 0C03233C */ jal osVirtualToPhysical -/* 065204 80064604 00A02025 */ move $a0, $a1 -/* 065208 80064608 8FA30034 */ lw $v1, 0x34($sp) -/* 06520C 8006460C 8FA70028 */ lw $a3, 0x28($sp) -/* 065210 80064610 AC620004 */ sw $v0, 4($v1) -.L80064614: -/* 065214 80064614 02001825 */ move $v1, $s0 -/* 065218 80064618 3C0C0800 */ lui $t4, 0x800 -/* 06521C 8006461C AC6C0000 */ sw $t4, ($v1) -/* 065220 80064620 AC670004 */ sw $a3, 4($v1) -/* 065224 80064624 8FBF001C */ lw $ra, 0x1c($sp) -/* 065228 80064628 26020008 */ addiu $v0, $s0, 8 -/* 06522C 8006462C 8FB00018 */ lw $s0, 0x18($sp) -/* 065230 80064630 03E00008 */ jr $ra -/* 065234 80064634 27BD0060 */ addiu $sp, $sp, 0x60 - diff --git a/asm/non_matchings/unknown_064830/_saveBuffer.s b/asm/non_matchings/unknown_064830/_saveBuffer.s deleted file mode 100644 index be3e1aad..00000000 --- a/asm/non_matchings/unknown_064830/_saveBuffer.s +++ /dev/null @@ -1,107 +0,0 @@ -glabel _saveBuffer -/* 065238 80064638 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 06523C 8006463C AFBF001C */ sw $ra, 0x1c($sp) -/* 065240 80064640 AFB00018 */ sw $s0, 0x18($sp) -/* 065244 80064644 AFA40060 */ sw $a0, 0x60($sp) -/* 065248 80064648 AFA60068 */ sw $a2, 0x68($sp) -/* 06524C 8006464C AFA7006C */ sw $a3, 0x6c($sp) -/* 065250 80064650 8C83001C */ lw $v1, 0x1c($a0) -/* 065254 80064654 8C820014 */ lw $v0, 0x14($a0) -/* 065258 80064658 00037840 */ sll $t7, $v1, 1 -/* 06525C 8006465C 00A2082B */ sltu $at, $a1, $v0 -/* 065260 80064660 10200002 */ beqz $at, .L8006466C -/* 065264 80064664 004F4021 */ addu $t0, $v0, $t7 -/* 065268 80064668 00AF2821 */ addu $a1, $a1, $t7 -.L8006466C: -/* 06526C 8006466C 8FA6006C */ lw $a2, 0x6c($sp) -/* 065270 80064670 8FB90070 */ lw $t9, 0x70($sp) -/* 065274 80064674 0006C040 */ sll $t8, $a2, 1 -/* 065278 80064678 03053821 */ addu $a3, $t8, $a1 -/* 06527C 8006467C 0107082B */ sltu $at, $t0, $a3 -/* 065280 80064680 1020003C */ beqz $at, .L80064774 -/* 065284 80064684 03003025 */ move $a2, $t8 -/* 065288 80064688 8FA20070 */ lw $v0, 0x70($sp) -/* 06528C 8006468C 3C0B0800 */ lui $t3, 0x800 -/* 065290 80064690 01054823 */ subu $t1, $t0, $a1 -/* 065294 80064694 AC4B0000 */ sw $t3, ($v0) -/* 065298 80064698 8FAF0068 */ lw $t7, 0x68($sp) -/* 06529C 8006469C 00096043 */ sra $t4, $t1, 1 -/* 0652A0 800646A0 000C6840 */ sll $t5, $t4, 1 -/* 0652A4 800646A4 31B9FFFF */ andi $t9, $t5, 0xffff -/* 0652A8 800646A8 000FC400 */ sll $t8, $t7, 0x10 -/* 0652AC 800646AC 03195825 */ or $t3, $t8, $t9 -/* 0652B0 800646B0 24500008 */ addiu $s0, $v0, 8 -/* 0652B4 800646B4 02005025 */ move $t2, $s0 -/* 0652B8 800646B8 3C0C0600 */ lui $t4, 0x600 -/* 0652BC 800646BC AC4B0004 */ sw $t3, 4($v0) -/* 0652C0 800646C0 AD4C0000 */ sw $t4, ($t2) -/* 0652C4 800646C4 AFAA0044 */ sw $t2, 0x44($sp) -/* 0652C8 800646C8 AFAD0024 */ sw $t5, 0x24($sp) -/* 0652CC 800646CC AFA8004C */ sw $t0, 0x4c($sp) -/* 0652D0 800646D0 AFA70028 */ sw $a3, 0x28($sp) -/* 0652D4 800646D4 AFA6002C */ sw $a2, 0x2c($sp) -/* 0652D8 800646D8 26100008 */ addiu $s0, $s0, 8 -/* 0652DC 800646DC 0C03233C */ jal osVirtualToPhysical -/* 0652E0 800646E0 00A02025 */ move $a0, $a1 -/* 0652E4 800646E4 8FAA0044 */ lw $t2, 0x44($sp) -/* 0652E8 800646E8 8FA70028 */ lw $a3, 0x28($sp) -/* 0652EC 800646EC 8FA8004C */ lw $t0, 0x4c($sp) -/* 0652F0 800646F0 8FA90024 */ lw $t1, 0x24($sp) -/* 0652F4 800646F4 02001825 */ move $v1, $s0 -/* 0652F8 800646F8 3C0D0800 */ lui $t5, 0x800 -/* 0652FC 800646FC AD420004 */ sw $v0, 4($t2) -/* 065300 80064700 AC6D0000 */ sw $t5, ($v1) -/* 065304 80064704 8FAE0068 */ lw $t6, 0x68($sp) -/* 065308 80064708 00E85823 */ subu $t3, $a3, $t0 -/* 06530C 8006470C 000B6043 */ sra $t4, $t3, 1 -/* 065310 80064710 012EC021 */ addu $t8, $t1, $t6 -/* 065314 80064714 000C6840 */ sll $t5, $t4, 1 -/* 065318 80064718 31AEFFFF */ andi $t6, $t5, 0xffff -/* 06531C 8006471C 0018CC00 */ sll $t9, $t8, 0x10 -/* 065320 80064720 032E7825 */ or $t7, $t9, $t6 -/* 065324 80064724 26100008 */ addiu $s0, $s0, 8 -/* 065328 80064728 AC6F0004 */ sw $t7, 4($v1) -/* 06532C 8006472C 02002825 */ move $a1, $s0 -/* 065330 80064730 3C180600 */ lui $t8, 0x600 -/* 065334 80064734 ACB80000 */ sw $t8, ($a1) -/* 065338 80064738 8FAB0060 */ lw $t3, 0x60($sp) -/* 06533C 8006473C 26100008 */ addiu $s0, $s0, 8 -/* 065340 80064740 8D640014 */ lw $a0, 0x14($t3) -/* 065344 80064744 0C03233C */ jal osVirtualToPhysical -/* 065348 80064748 AFA5003C */ sw $a1, 0x3c($sp) -/* 06534C 8006474C 8FA6002C */ lw $a2, 0x2c($sp) -/* 065350 80064750 8FA5003C */ lw $a1, 0x3c($sp) -/* 065354 80064754 02001825 */ move $v1, $s0 -/* 065358 80064758 3C0C0800 */ lui $t4, 0x800 -/* 06535C 8006475C 30CDFFFF */ andi $t5, $a2, 0xffff -/* 065360 80064760 ACA20004 */ sw $v0, 4($a1) -/* 065364 80064764 AC6D0004 */ sw $t5, 4($v1) -/* 065368 80064768 AC6C0000 */ sw $t4, ($v1) -/* 06536C 8006476C 10000013 */ b .L800647BC -/* 065370 80064770 26100008 */ addiu $s0, $s0, 8 -.L80064774: -/* 065374 80064774 3C0E0800 */ lui $t6, 0x800 -/* 065378 80064778 AF2E0000 */ sw $t6, ($t9) -/* 06537C 8006477C 8FB80068 */ lw $t8, 0x68($sp) -/* 065380 80064780 30CCFFFF */ andi $t4, $a2, 0xffff -/* 065384 80064784 00185C00 */ sll $t3, $t8, 0x10 -/* 065388 80064788 016C6825 */ or $t5, $t3, $t4 -/* 06538C 8006478C 27300008 */ addiu $s0, $t9, 8 -/* 065390 80064790 AF2D0004 */ sw $t5, 4($t9) -/* 065394 80064794 3C190600 */ lui $t9, 0x600 -/* 065398 80064798 02001825 */ move $v1, $s0 -/* 06539C 8006479C AC790000 */ sw $t9, ($v1) -/* 0653A0 800647A0 AFA30030 */ sw $v1, 0x30($sp) -/* 0653A4 800647A4 26100008 */ addiu $s0, $s0, 8 -/* 0653A8 800647A8 0C03233C */ jal osVirtualToPhysical -/* 0653AC 800647AC 00A02025 */ move $a0, $a1 -/* 0653B0 800647B0 8FA30030 */ lw $v1, 0x30($sp) -/* 0653B4 800647B4 00000000 */ nop -/* 0653B8 800647B8 AC620004 */ sw $v0, 4($v1) -.L800647BC: -/* 0653BC 800647BC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0653C0 800647C0 02001025 */ move $v0, $s0 -/* 0653C4 800647C4 8FB00018 */ lw $s0, 0x18($sp) -/* 0653C8 800647C8 03E00008 */ jr $ra -/* 0653CC 800647CC 27BD0060 */ addiu $sp, $sp, 0x60 - diff --git a/src/unknown_064830.c b/src/unknown_064830.c index e007ea42..a0f84c20 100644 --- a/src/unknown_064830.c +++ b/src/unknown_064830.c @@ -30,8 +30,55 @@ s32 alFxParam(void* filter, s32 paramID, void* param) { GLOBAL_ASM("asm/non_matchings/unknown_064830/alFxParamHdl.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadOutputBuffer.s") -GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadBuffer.s") -//GLOBAL_ASM("asm/non_matchings/unknown_064830/_saveBuffer.s") +/* + * This routine is for loading data from the delay line buff. If the + * address of curr_ptr < r->base, it will force it to be within r->base + * space, If the load goes past the end of r->base it will wrap around. + * Cause count bytes of data at curr_ptr (within the delay line) to be + * loaded into buff. (Buff is a dmem buffer) + */ +Acmd *_loadBuffer(ALFx *r, s16 *curr_ptr, s32 buff, s32 count, Acmd *p) +{ + Acmd *ptr = p; + s32 after_end, before_end; + s16 *updated_ptr, *delay_end; + +#ifdef AUD_PROFILE + lastCnt[++cnt_index] = osGetCount(); +#endif + + delay_end = &r->base[r->length]; + +#ifdef _DEBUG + if(curr_ptr > delay_end) + __osError(ERR_ALMODDELAYOVERFLOW, 1, delay_end - curr_ptr); +#endif + + if (curr_ptr < r->base) + curr_ptr += r->length; + updated_ptr = curr_ptr + count; + + if (updated_ptr > delay_end) { + after_end = updated_ptr - delay_end; + before_end = delay_end - curr_ptr; + + aSetBuffer(ptr++, 0, buff, 0, before_end<<1); + aLoadBuffer(ptr++, osVirtualToPhysical(curr_ptr)); + aSetBuffer(ptr++, 0, buff+(before_end<<1), 0, after_end<<1); + aLoadBuffer(ptr++, osVirtualToPhysical(r->base)); + } else { + aSetBuffer(ptr++, 0, buff, 0, count<<1); + aLoadBuffer(ptr++, osVirtualToPhysical(curr_ptr)); + } + + aSetBuffer(ptr++, 0, 0, 0, count<<1); + +#ifdef AUD_PROFILE + PROFILE_AUD(load_num, load_cnt, load_max, load_min); +#endif + return ptr; + +} /* * This routine is for writing data to the delay line buff. If the @@ -75,8 +122,6 @@ Acmd *_saveBuffer(ALFx *r, s16 *curr_ptr, s32 buff, s32 count, Acmd *p) } - - Acmd *_filterBuffer(ALLowPass *lp, s32 buff, s32 count, Acmd *p) { Acmd *ptr = p; From f2cb971f676dec5668ba04bac5336b26d37643d4 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Wed, 5 Aug 2020 23:52:30 -0500 Subject: [PATCH 05/11] alEvtqNew --- lib/src/unknown_0C9C90.c | 21 ++++++++++++++++++++- src/unknown_064830.c | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/src/unknown_0C9C90.c b/lib/src/unknown_0C9C90.c index 4665ec56..5c03a14f 100644 --- a/lib/src/unknown_0C9C90.c +++ b/lib/src/unknown_0C9C90.c @@ -3,11 +3,30 @@ #include "types.h" #include "macros.h" +#include "audio_internal.h" GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s") + + GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqPostEvent.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s") + +//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s") +void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount) +{ + s32 i; + + evtq->eventCount = 0; + evtq->allocList.next = 0; + evtq->allocList.prev = 0; + evtq->freeList.next = 0; + evtq->freeList.prev = 0; + + for (i = 0; i < itemCount; i++) { + alLink((ALLink *)&items[i], &evtq->freeList); + } +} + GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/_allocatePVoice.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s") diff --git a/src/unknown_064830.c b/src/unknown_064830.c index a0f84c20..0fce57db 100644 --- a/src/unknown_064830.c +++ b/src/unknown_064830.c @@ -30,6 +30,8 @@ s32 alFxParam(void* filter, s32 paramID, void* param) { GLOBAL_ASM("asm/non_matchings/unknown_064830/alFxParamHdl.s") GLOBAL_ASM("asm/non_matchings/unknown_064830/_loadOutputBuffer.s") + + /* * This routine is for loading data from the delay line buff. If the * address of curr_ptr < r->base, it will force it to be within r->base From 2ff0a6aef12ecd208f4ba554e33d1acab3c60320 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Wed, 5 Aug 2020 23:54:36 -0500 Subject: [PATCH 06/11] alEvtqNextEvent --- .../non_matchings/unknown_0C9C90/alEvtqNew.s | 33 ---------------- lib/src/unknown_0C9C90.c | 38 ++++++++++++++++++- 2 files changed, 36 insertions(+), 35 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s diff --git a/lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s b/lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s deleted file mode 100644 index f8f1728b..00000000 --- a/lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s +++ /dev/null @@ -1,33 +0,0 @@ -glabel alEvtqNew -/* 0C9F5C 800C935C 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0C9F60 800C9360 AFB30020 */ sw $s3, 0x20($sp) -/* 0C9F64 800C9364 AFB2001C */ sw $s2, 0x1c($sp) -/* 0C9F68 800C9368 AFB00014 */ sw $s0, 0x14($sp) -/* 0C9F6C 800C936C AFBF0024 */ sw $ra, 0x24($sp) -/* 0C9F70 800C9370 AFB10018 */ sw $s1, 0x18($sp) -/* 0C9F74 800C9374 00809025 */ move $s2, $a0 -/* 0C9F78 800C9378 00C09825 */ move $s3, $a2 -/* 0C9F7C 800C937C AC800010 */ sw $zero, 0x10($a0) -/* 0C9F80 800C9380 AC800008 */ sw $zero, 8($a0) -/* 0C9F84 800C9384 AC80000C */ sw $zero, 0xc($a0) -/* 0C9F88 800C9388 AC800000 */ sw $zero, ($a0) -/* 0C9F8C 800C938C AC800004 */ sw $zero, 4($a0) -/* 0C9F90 800C9390 18C00008 */ blez $a2, .L800C93B4 -/* 0C9F94 800C9394 00008025 */ move $s0, $zero -/* 0C9F98 800C9398 00A08825 */ move $s1, $a1 -.L800C939C: -/* 0C9F9C 800C939C 02202025 */ move $a0, $s1 -/* 0C9FA0 800C93A0 0C0321E4 */ jal alLink -/* 0C9FA4 800C93A4 02402825 */ move $a1, $s2 -/* 0C9FA8 800C93A8 26100001 */ addiu $s0, $s0, 1 -/* 0C9FAC 800C93AC 1613FFFB */ bne $s0, $s3, .L800C939C -/* 0C9FB0 800C93B0 2631001C */ addiu $s1, $s1, 0x1c -.L800C93B4: -/* 0C9FB4 800C93B4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0C9FB8 800C93B8 8FB00014 */ lw $s0, 0x14($sp) -/* 0C9FBC 800C93BC 8FB10018 */ lw $s1, 0x18($sp) -/* 0C9FC0 800C93C0 8FB2001C */ lw $s2, 0x1c($sp) -/* 0C9FC4 800C93C4 8FB30020 */ lw $s3, 0x20($sp) -/* 0C9FC8 800C93C8 03E00008 */ jr $ra -/* 0C9FCC 800C93CC 27BD0028 */ addiu $sp, $sp, 0x28 - diff --git a/lib/src/unknown_0C9C90.c b/lib/src/unknown_0C9C90.c index 5c03a14f..4657c9f4 100644 --- a/lib/src/unknown_0C9C90.c +++ b/lib/src/unknown_0C9C90.c @@ -4,14 +4,48 @@ #include "types.h" #include "macros.h" #include "audio_internal.h" +#include "libultra_internal.h" GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqPostEvent.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s") +//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s") + +ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt) +{ + ALEventListItem *item; + ALMicroTime delta; + OSIntMask mask; + + mask = osSetIntMask(OS_IM_NONE); + + item = (ALEventListItem *)evtq->allocList.next; + + if (item) + { + alUnlink((ALLink *)item); + alCopy(&item->evt, evt, sizeof(*evt)); + alLink((ALLink *)item, &evtq->freeList); + delta = item->delta; + } + else + { + /* sct 11/28/95 - If we get here, most like we overflowed the event queue */ + /* with non-self-perpetuating events. Eg. if we filled the evtq with volume */ + /* events, then when the seqp is told to play it will handle all the events */ + /* at once completely emptying out the queue. At this point this problem */ + /* must be treated as an out of resource error and the evtq should be increased. */ + evt->type = -1; + delta = 0; + } + + osSetIntMask(mask); + + return delta; +} + -//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNew.s") void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount) { s32 i; From f57f8464adef2ec0d9e6115a9b525f0058769ff0 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Thu, 6 Aug 2020 00:01:01 -0500 Subject: [PATCH 07/11] alEvtqFlushType, alEvtqFlush --- Makefile | 2 +- .../unknown_0C9C90/alEvtqFlushType.s | 80 -------------- .../unknown_0C9C90/alEvtqNextEvent.s | 39 ------- lib/src/unknown_0C9C90.c | 102 +++++++++++++++++- 4 files changed, 101 insertions(+), 122 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s delete mode 100644 lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s diff --git a/Makefile b/Makefile index b743e8b9..a7812878 100755 --- a/Makefile +++ b/Makefile @@ -238,7 +238,7 @@ $(BUILD_DIR)/lib/src/unknown_0C91A0.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D29F0.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0CDE90.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D3160.o: OPT_FLAGS := -O1 -$(BUILD_DIR)/lib/src/unknown_066460.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 +$(BUILD_DIR)/lib/src/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 $(BUILD_DIR)/lib/src/osCreateThread.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osGetThreadPri.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osJamMesg.o : OPT_FLAGS := -O1 diff --git a/lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s b/lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s deleted file mode 100644 index 4e630fbe..00000000 --- a/lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s +++ /dev/null @@ -1,80 +0,0 @@ -glabel alEvtqFlushType -/* 0C9C90 800C9090 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0C9C94 800C9094 AFB30020 */ sw $s3, 0x20($sp) -/* 0C9C98 800C9098 00059C00 */ sll $s3, $a1, 0x10 -/* 0C9C9C 800C909C AFB2001C */ sw $s2, 0x1c($sp) -/* 0C9CA0 800C90A0 00809025 */ move $s2, $a0 -/* 0C9CA4 800C90A4 00137403 */ sra $t6, $s3, 0x10 -/* 0C9CA8 800C90A8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0C9CAC 800C90AC 01C09825 */ move $s3, $t6 -/* 0C9CB0 800C90B0 AFB10018 */ sw $s1, 0x18($sp) -/* 0C9CB4 800C90B4 AFB00014 */ sw $s0, 0x14($sp) -/* 0C9CB8 800C90B8 AFA50044 */ sw $a1, 0x44($sp) -/* 0C9CBC 800C90BC 0C03268C */ jal osSetIntMask -/* 0C9CC0 800C90C0 24040001 */ li $a0, 1 -/* 0C9CC4 800C90C4 AFA2002C */ sw $v0, 0x2c($sp) -/* 0C9CC8 800C90C8 8E500008 */ lw $s0, 8($s2) -/* 0C9CCC 800C90CC 12000012 */ beqz $s0, .L800C9118 -/* 0C9CD0 800C90D0 00000000 */ nop -.L800C90D4: -/* 0C9CD4 800C90D4 860F000C */ lh $t7, 0xc($s0) -/* 0C9CD8 800C90D8 8E110000 */ lw $s1, ($s0) -/* 0C9CDC 800C90DC 166F000C */ bne $s3, $t7, .L800C9110 -/* 0C9CE0 800C90E0 00000000 */ nop -/* 0C9CE4 800C90E4 12200005 */ beqz $s1, .L800C90FC -/* 0C9CE8 800C90E8 00000000 */ nop -/* 0C9CEC 800C90EC 8E380008 */ lw $t8, 8($s1) -/* 0C9CF0 800C90F0 8E190008 */ lw $t9, 8($s0) -/* 0C9CF4 800C90F4 03194021 */ addu $t0, $t8, $t9 -/* 0C9CF8 800C90F8 AE280008 */ sw $t0, 8($s1) -.L800C90FC: -/* 0C9CFC 800C90FC 0C0321D8 */ jal alUnlink -/* 0C9D00 800C9100 02002025 */ move $a0, $s0 -/* 0C9D04 800C9104 02002025 */ move $a0, $s0 -/* 0C9D08 800C9108 0C0321E4 */ jal alLink -/* 0C9D0C 800C910C 02402825 */ move $a1, $s2 -.L800C9110: -/* 0C9D10 800C9110 1620FFF0 */ bnez $s1, .L800C90D4 -/* 0C9D14 800C9114 02208025 */ move $s0, $s1 -.L800C9118: -/* 0C9D18 800C9118 0C03268C */ jal osSetIntMask -/* 0C9D1C 800C911C 8FA4002C */ lw $a0, 0x2c($sp) -/* 0C9D20 800C9120 8FBF0024 */ lw $ra, 0x24($sp) -/* 0C9D24 800C9124 8FB00014 */ lw $s0, 0x14($sp) -/* 0C9D28 800C9128 8FB10018 */ lw $s1, 0x18($sp) -/* 0C9D2C 800C912C 8FB2001C */ lw $s2, 0x1c($sp) -/* 0C9D30 800C9130 8FB30020 */ lw $s3, 0x20($sp) -/* 0C9D34 800C9134 03E00008 */ jr $ra -/* 0C9D38 800C9138 27BD0040 */ addiu $sp, $sp, 0x40 - -/* 0C9D3C 800C913C 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0C9D40 800C9140 AFB20020 */ sw $s2, 0x20($sp) -/* 0C9D44 800C9144 00809025 */ move $s2, $a0 -/* 0C9D48 800C9148 AFBF0024 */ sw $ra, 0x24($sp) -/* 0C9D4C 800C914C AFB1001C */ sw $s1, 0x1c($sp) -/* 0C9D50 800C9150 AFB00018 */ sw $s0, 0x18($sp) -/* 0C9D54 800C9154 0C03268C */ jal osSetIntMask -/* 0C9D58 800C9158 24040001 */ li $a0, 1 -/* 0C9D5C 800C915C AFA2002C */ sw $v0, 0x2c($sp) -/* 0C9D60 800C9160 8E500008 */ lw $s0, 8($s2) -/* 0C9D64 800C9164 12000009 */ beqz $s0, .L800C918C -/* 0C9D68 800C9168 00000000 */ nop -.L800C916C: -/* 0C9D6C 800C916C 8E110000 */ lw $s1, ($s0) -/* 0C9D70 800C9170 0C0321D8 */ jal alUnlink -/* 0C9D74 800C9174 02002025 */ move $a0, $s0 -/* 0C9D78 800C9178 02002025 */ move $a0, $s0 -/* 0C9D7C 800C917C 0C0321E4 */ jal alLink -/* 0C9D80 800C9180 02402825 */ move $a1, $s2 -/* 0C9D84 800C9184 1620FFF9 */ bnez $s1, .L800C916C -/* 0C9D88 800C9188 02208025 */ move $s0, $s1 -.L800C918C: -/* 0C9D8C 800C918C 0C03268C */ jal osSetIntMask -/* 0C9D90 800C9190 8FA4002C */ lw $a0, 0x2c($sp) -/* 0C9D94 800C9194 8FBF0024 */ lw $ra, 0x24($sp) -/* 0C9D98 800C9198 8FB00018 */ lw $s0, 0x18($sp) -/* 0C9D9C 800C919C 8FB1001C */ lw $s1, 0x1c($sp) -/* 0C9DA0 800C91A0 8FB20020 */ lw $s2, 0x20($sp) -/* 0C9DA4 800C91A4 03E00008 */ jr $ra -/* 0C9DA8 800C91A8 27BD0038 */ addiu $sp, $sp, 0x38 - diff --git a/lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s b/lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s deleted file mode 100644 index 504bc823..00000000 --- a/lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s +++ /dev/null @@ -1,39 +0,0 @@ -glabel alEvtqNextEvent -/* 0C9ED0 800C92D0 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0C9ED4 800C92D4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0C9ED8 800C92D8 AFA40030 */ sw $a0, 0x30($sp) -/* 0C9EDC 800C92DC AFB00018 */ sw $s0, 0x18($sp) -/* 0C9EE0 800C92E0 AFA50034 */ sw $a1, 0x34($sp) -/* 0C9EE4 800C92E4 0C03268C */ jal osSetIntMask -/* 0C9EE8 800C92E8 24040001 */ li $a0, 1 -/* 0C9EEC 800C92EC 8FAE0030 */ lw $t6, 0x30($sp) -/* 0C9EF0 800C92F0 AFA20024 */ sw $v0, 0x24($sp) -/* 0C9EF4 800C92F4 8FB80034 */ lw $t8, 0x34($sp) -/* 0C9EF8 800C92F8 8DD00008 */ lw $s0, 8($t6) -/* 0C9EFC 800C92FC 00001825 */ move $v1, $zero -/* 0C9F00 800C9300 5200000D */ beql $s0, $zero, .L800C9338 -/* 0C9F04 800C9304 240FFFFF */ li $t7, -1 -/* 0C9F08 800C9308 0C0321D8 */ jal alUnlink -/* 0C9F0C 800C930C 02002025 */ move $a0, $s0 -/* 0C9F10 800C9310 2604000C */ addiu $a0, $s0, 0xc -/* 0C9F14 800C9314 8FA50034 */ lw $a1, 0x34($sp) -/* 0C9F18 800C9318 0C034E08 */ jal alCopy -/* 0C9F1C 800C931C 24060010 */ li $a2, 16 -/* 0C9F20 800C9320 02002025 */ move $a0, $s0 -/* 0C9F24 800C9324 0C0321E4 */ jal alLink -/* 0C9F28 800C9328 8FA50030 */ lw $a1, 0x30($sp) -/* 0C9F2C 800C932C 10000003 */ b .L800C933C -/* 0C9F30 800C9330 8E030008 */ lw $v1, 8($s0) -/* 0C9F34 800C9334 240FFFFF */ li $t7, -1 -.L800C9338: -/* 0C9F38 800C9338 A70F0000 */ sh $t7, ($t8) -.L800C933C: -/* 0C9F3C 800C933C 8FA40024 */ lw $a0, 0x24($sp) -/* 0C9F40 800C9340 0C03268C */ jal osSetIntMask -/* 0C9F44 800C9344 AFA30028 */ sw $v1, 0x28($sp) -/* 0C9F48 800C9348 8FBF001C */ lw $ra, 0x1c($sp) -/* 0C9F4C 800C934C 8FA20028 */ lw $v0, 0x28($sp) -/* 0C9F50 800C9350 8FB00018 */ lw $s0, 0x18($sp) -/* 0C9F54 800C9354 03E00008 */ jr $ra -/* 0C9F58 800C9358 27BD0030 */ addiu $sp, $sp, 0x30 - diff --git a/lib/src/unknown_0C9C90.c b/lib/src/unknown_0C9C90.c index 4657c9f4..f43933cc 100644 --- a/lib/src/unknown_0C9C90.c +++ b/lib/src/unknown_0C9C90.c @@ -6,11 +6,109 @@ #include "audio_internal.h" #include "libultra_internal.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqFlushType.s") +void alEvtqFlushType(ALEventQueue *evtq, s16 type) +{ + ALLink *thisNode; + ALLink *nextNode; + ALEventListItem *thisItem, *nextItem; + OSIntMask mask; + mask = osSetIntMask(OS_IM_NONE); + thisNode = evtq->allocList.next; + while( thisNode != 0 ) + { + nextNode = thisNode->next; + thisItem = (ALEventListItem *)thisNode; + nextItem = (ALEventListItem *)nextNode; + if (thisItem->evt.type == type) + { + if (nextItem) + nextItem->delta += thisItem->delta; + alUnlink(thisNode); + alLink(thisNode, &evtq->freeList); + } + thisNode = nextNode; + } + + osSetIntMask(mask); +} + +void alEvtqFlush(ALEventQueue *evtq) +{ + ALLink *thisNode; + ALLink *nextNode; + OSIntMask mask; + + mask = osSetIntMask(OS_IM_NONE); + + thisNode = evtq->allocList.next; + while( thisNode != 0 ) { + nextNode = thisNode->next; + alUnlink(thisNode); + alLink(thisNode, &evtq->freeList); + thisNode = nextNode; + } + + osSetIntMask(mask); +} + +#if 1 GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqPostEvent.s") -//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alEvtqNextEvent.s") +#else +void alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt, ALMicroTime delta) +{ + ALEventListItem *item; + ALEventListItem *nextItem; + ALLink *node; + s32 postAtEnd=0; + OSIntMask mask; + + mask = osSetIntMask(OS_IM_NONE); + + item = (ALEventListItem *)evtq->freeList.next; + if (!item) { + osSetIntMask(mask); +#ifdef _DEBUG + __osError(ERR_ALEVENTNOFREE, 0); +#endif + return; + } + + alUnlink((ALLink *)item); + alCopy(evt, &item->evt, sizeof(*evt)); + + if (delta == AL_EVTQ_END) + postAtEnd = -1; + + for (node = &evtq->allocList; node != 0; node = node->next) { + if (!node->next) { /* end of the list */ + if (postAtEnd) + item->delta = 0; + else + item->delta = delta; + alLink((ALLink *)item, node); + break; + } else { + nextItem = (ALEventListItem *)node->next; + + if (delta < nextItem->delta) { + item->delta = delta; + nextItem->delta -= delta; + + alLink((ALLink *)item, node); + break; + } + + delta -= nextItem->delta; + + } + } + + osSetIntMask(mask); + +} +#endif ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt) { From b2f070da808c638166984868c0bcc2819012ecb4 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Thu, 6 Aug 2020 00:03:03 -0500 Subject: [PATCH 08/11] alSynAddPlayer --- lib/src/unknown_0C9C90.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/src/unknown_0C9C90.c b/lib/src/unknown_0C9C90.c index f43933cc..2a1aa949 100644 --- a/lib/src/unknown_0C9C90.c +++ b/lib/src/unknown_0C9C90.c @@ -110,8 +110,7 @@ void alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt, ALMicroTime delta) } #endif -ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt) -{ +ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt) { ALEventListItem *item; ALMicroTime delta; OSIntMask mask; @@ -144,8 +143,7 @@ ALMicroTime alEvtqNextEvent(ALEventQueue *evtq, ALEvent *evt) } -void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount) -{ +void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount){ s32 i; evtq->eventCount = 0; @@ -159,6 +157,17 @@ void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount) } } -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s") +//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s") +void alSynAddPlayer(ALSynth *drvr, ALPlayer *client) +{ + OSIntMask mask = osSetIntMask(OS_IM_NONE); + + client->samplesLeft = drvr->curSamples; + client->next = drvr->head; + drvr->head = client; + + osSetIntMask(mask); +} + GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/_allocatePVoice.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s") From 696c6912987188395e16a79f81985e1d914e8079 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Thu, 6 Aug 2020 00:12:16 -0500 Subject: [PATCH 09/11] alSynAllocVoice --- .../unknown_0C9C90/alSynAddPlayer.s | 22 ---- lib/src/unknown_0C9C90.c | 111 +++++++++++++++++- 2 files changed, 109 insertions(+), 24 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s diff --git a/lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s b/lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s deleted file mode 100644 index 246146b5..00000000 --- a/lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s +++ /dev/null @@ -1,22 +0,0 @@ -glabel alSynAddPlayer -/* 0C9FD0 800C93D0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0C9FD4 800C93D4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C9FD8 800C93D8 00803025 */ move $a2, $a0 -/* 0C9FDC 800C93DC AFA60018 */ sw $a2, 0x18($sp) -/* 0C9FE0 800C93E0 24040001 */ li $a0, 1 -/* 0C9FE4 800C93E4 0C03268C */ jal osSetIntMask -/* 0C9FE8 800C93E8 AFA5001C */ sw $a1, 0x1c($sp) -/* 0C9FEC 800C93EC 8FA60018 */ lw $a2, 0x18($sp) -/* 0C9FF0 800C93F0 8FA5001C */ lw $a1, 0x1c($sp) -/* 0C9FF4 800C93F4 00402025 */ move $a0, $v0 -/* 0C9FF8 800C93F8 8CCE0020 */ lw $t6, 0x20($a2) -/* 0C9FFC 800C93FC ACAE0010 */ sw $t6, 0x10($a1) -/* 0CA000 800C9400 8CCF0000 */ lw $t7, ($a2) -/* 0CA004 800C9404 ACAF0000 */ sw $t7, ($a1) -/* 0CA008 800C9408 0C03268C */ jal osSetIntMask -/* 0CA00C 800C940C ACC50000 */ sw $a1, ($a2) -/* 0CA010 800C9410 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CA014 800C9414 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CA018 800C9418 03E00008 */ jr $ra -/* 0CA01C 800C941C 00000000 */ nop - diff --git a/lib/src/unknown_0C9C90.c b/lib/src/unknown_0C9C90.c index 2a1aa949..a7a91823 100644 --- a/lib/src/unknown_0C9C90.c +++ b/lib/src/unknown_0C9C90.c @@ -157,7 +157,6 @@ void alEvtqNew(ALEventQueue *evtq, ALEventListItem *items, s32 itemCount){ } } -//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAddPlayer.s") void alSynAddPlayer(ALSynth *drvr, ALPlayer *client) { OSIntMask mask = osSetIntMask(OS_IM_NONE); @@ -169,5 +168,113 @@ void alSynAddPlayer(ALSynth *drvr, ALPlayer *client) osSetIntMask(mask); } +#if 1 GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/_allocatePVoice.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s") +#else +s32 _allocatePVoice(ALSynth *drvr, PVoice **pvoice, s16 priority) +{ + ALLink *dl; + PVoice *pv; + s32 stolen = 0; + + if ((dl = drvr->pLameList.next) != 0) { /* check the lame list first */ + *pvoice = (PVoice *) dl; + alUnlink(dl); + alLink(dl, &drvr->pAllocList); + } else if ((dl = drvr->pFreeList.next) != 0) { /* from the free list */ + *pvoice = (PVoice *) dl; + alUnlink(dl); + alLink(dl, &drvr->pAllocList); + } else { /* steal one */ + for (dl = drvr->pAllocList.next; dl != 0; dl = dl->next) { + pv = (PVoice *)dl; + + /* + * if it is lower priority and not already stolen, keep it + * as a candidate for stealing + */ + if ((pv->vvoice->priority <= priority) && (pv->offset == 0)) { + *pvoice = pv; + priority = pv->vvoice->priority; + stolen = 1; + } + } + } + + return stolen; +} +#endif + +//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s") +s32 alSynAllocVoice(ALSynth *drvr, ALVoice *voice, ALVoiceConfig *vc) +{ + PVoice *pvoice = 0; + ALFilter *f; + ALParam *update; + s32 stolen; + +#ifdef _DEBUG + /* need two updates if voice is stolen */ + if (drvr->paramList == 0) { + __osError(ERR_ALSYN_NO_UPDATE, 0); + return 0; + } else if (drvr->paramList->next == 0) { + __osError(ERR_ALSYN_NO_UPDATE, 0); + return 0; + } +#endif + + voice->priority = vc->priority; + voice->unityPitch = vc->unityPitch; + voice->table = 0; + voice->fxBus = vc->fxBus; + voice->state = AL_STOPPED; + voice->pvoice = 0; + + stolen = _allocatePVoice(drvr, &pvoice, vc->priority); + + if (pvoice) { /* if we were able to allocate a voice */ + + f = pvoice->channelKnob; + + if (stolen) { + + pvoice->offset = 512; + pvoice->vvoice->pvoice = 0; /* zero stolen voice */ + + /* + * ramp down stolen voice + */ + update = __allocParam(); + update->delta = drvr->paramSamples; + update->type = AL_FILTER_SET_VOLUME; + update->data.i = 0; + update->moredata.i = pvoice->offset - 64; + (*f->setParam)(f, AL_FILTER_ADD_UPDATE, update); + + /* + * stop stolen voice + */ + update = __allocParam(); + if (update) { + update->delta = drvr->paramSamples + pvoice->offset; + update->type = AL_FILTER_STOP_VOICE; + update->next = 0; + (*f->setParam)(f, AL_FILTER_ADD_UPDATE, update); + } else { +#ifdef _DEBUG + __osError(ERR_ALSYN_NO_UPDATE, 0); +#endif + } + + } else { + pvoice->offset = 0; + } + + pvoice->vvoice = voice; /* assign new voice */ + voice->pvoice = pvoice; + + } + + return (pvoice != 0); +} \ No newline at end of file From 4c6a27987f1749a73534eea26257c9711657dce3 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Thu, 6 Aug 2020 01:54:13 -0500 Subject: [PATCH 10/11] label C Sequence Player functions --- .../unknown_001050/func_80002224.s | 2 +- .../unknown_001050/func_8000232C.s | 6 +- .../unknown_001050/func_80002570.s | 4 +- .../{func_800C7A60.s => alCSPSetBank.s} | 2 +- .../{func_800C7B40.s => alCSeqGetLoc.s} | 2 +- .../non_matchings/unknown_0C86A0/alCSeqNew.s | 74 +++++ .../unknown_0C86A0/alCSeqNewMarker.s | 95 ++++++ .../{func_800C7AA0.s => alCSeqSetLoc.s} | 2 +- .../unknown_0C86A0/func_800C7FFC.s | 273 ------------------ .../unknown_0C86A0/func_800C8284.s | 70 +++++ .../unknown_0C86A0/func_800C8380.s | 30 ++ .../{func_800C8560.s => alCSPSetSeq.s} | 2 +- .../{func_800C85A0.s => alCSPPlay.s} | 2 +- .../{func_800C85D0.s => alCSPStop.s} | 2 +- .../unknown_0C9C90/alSynAllocVoice.s | 89 ------ lib/src/unknown_0C8660.c | 2 +- lib/src/unknown_0C86A0.c | 17 +- lib/src/unknown_0C9160.c | 2 +- lib/src/unknown_0C91A0.c | 4 +- lib/src/unknown_0C9C90.c | 1 - 20 files changed, 299 insertions(+), 382 deletions(-) rename lib/asm/non_matchings/unknown_0C8660/{func_800C7A60.s => alCSPSetBank.s} (97%) rename lib/asm/non_matchings/unknown_0C86A0/{func_800C7B40.s => alCSeqGetLoc.s} (97%) create mode 100644 lib/asm/non_matchings/unknown_0C86A0/alCSeqNew.s create mode 100644 lib/asm/non_matchings/unknown_0C86A0/alCSeqNewMarker.s rename lib/asm/non_matchings/unknown_0C86A0/{func_800C7AA0.s => alCSeqSetLoc.s} (97%) delete mode 100644 lib/asm/non_matchings/unknown_0C86A0/func_800C7FFC.s create mode 100644 lib/asm/non_matchings/unknown_0C86A0/func_800C8284.s create mode 100644 lib/asm/non_matchings/unknown_0C86A0/func_800C8380.s rename lib/asm/non_matchings/unknown_0C9160/{func_800C8560.s => alCSPSetSeq.s} (97%) rename lib/asm/non_matchings/unknown_0C91A0/{func_800C85A0.s => alCSPPlay.s} (96%) rename lib/asm/non_matchings/unknown_0C91A0/{func_800C85D0.s => alCSPStop.s} (96%) delete mode 100644 lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s diff --git a/asm/non_matchings/unknown_001050/func_80002224.s b/asm/non_matchings/unknown_001050/func_80002224.s index d8d82490..6d36b73a 100644 --- a/asm/non_matchings/unknown_001050/func_80002224.s +++ b/asm/non_matchings/unknown_001050/func_80002224.s @@ -28,7 +28,7 @@ glabel func_80002224 /* 002E8C 8000228C 8D085D10 */ lw $t0, %lo(D_80115D10)($t0) /* 002E90 80002290 8FA40044 */ lw $a0, 0x44($sp) /* 002E94 80002294 8D050004 */ lw $a1, 4($t0) -/* 002E98 80002298 0C031E98 */ jal func_800C7A60 +/* 002E98 80002298 0C031E98 */ jal alCSPSetBank /* 002E9C 8000229C 00000000 */ nop /* 002EA0 800022A0 8FA20044 */ lw $v0, 0x44($sp) /* 002EA4 800022A4 2409007F */ li $t1, 127 diff --git a/asm/non_matchings/unknown_001050/func_8000232C.s b/asm/non_matchings/unknown_001050/func_8000232C.s index 35ebd1ed..4fbceaba 100644 --- a/asm/non_matchings/unknown_001050/func_8000232C.s +++ b/asm/non_matchings/unknown_001050/func_8000232C.s @@ -34,12 +34,12 @@ glabel func_8000232C /* 002FAC 800023AC 0C01DB9A */ jal func_80076E68 /* 002FB0 800023B0 01023023 */ subu $a2, $t0, $v0 /* 002FB4 800023B4 02402025 */ move $a0, $s2 -/* 002FB8 800023B8 0C031FFF */ jal func_800C7FFC +/* 002FB8 800023B8 0C031FFF */ jal alCSeqNew /* 002FBC 800023BC 02202825 */ move $a1, $s1 /* 002FC0 800023C0 02002025 */ move $a0, $s0 -/* 002FC4 800023C4 0C032158 */ jal func_800C8560 +/* 002FC4 800023C4 0C032158 */ jal alCSPSetSeq /* 002FC8 800023C8 02402825 */ move $a1, $s2 -/* 002FCC 800023CC 0C032168 */ jal func_800C85A0 +/* 002FCC 800023CC 0C032168 */ jal alCSPPlay /* 002FD0 800023D0 02002025 */ move $a0, $s0 /* 002FD4 800023D4 3C0C800E */ lui $t4, %hi(D_800DC630) # $t4, 0x800e /* 002FD8 800023D8 8D8CC630 */ lw $t4, %lo(D_800DC630)($t4) diff --git a/asm/non_matchings/unknown_001050/func_80002570.s b/asm/non_matchings/unknown_001050/func_80002570.s index f8dbdc99..354d93ad 100644 --- a/asm/non_matchings/unknown_001050/func_80002570.s +++ b/asm/non_matchings/unknown_001050/func_80002570.s @@ -9,7 +9,7 @@ glabel func_80002570 /* 00318C 8000258C 00000000 */ nop /* 003190 80002590 11E0000A */ beqz $t7, .L800025BC /* 003194 80002594 00000000 */ nop -/* 003198 80002598 0C032174 */ jal func_800C85D0 +/* 003198 80002598 0C032174 */ jal alCSPStop /* 00319C 8000259C 00000000 */ nop /* 0031A0 800025A0 3C018011 */ lui $at, %hi(D_80115D40) # $at, 0x8011 /* 0031A4 800025A4 A0205D40 */ sb $zero, %lo(D_80115D40)($at) @@ -28,7 +28,7 @@ glabel func_80002570 /* 0031D4 800025D4 00000000 */ nop /* 0031D8 800025D8 13200008 */ beqz $t9, .L800025FC /* 0031DC 800025DC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0031E0 800025E0 0C032174 */ jal func_800C85D0 +/* 0031E0 800025E0 0C032174 */ jal alCSPStop /* 0031E4 800025E4 00000000 */ nop /* 0031E8 800025E8 3C018011 */ lui $at, %hi(D_80115D41) # $at, 0x8011 /* 0031EC 800025EC A0205D41 */ sb $zero, %lo(D_80115D41)($at) diff --git a/lib/asm/non_matchings/unknown_0C8660/func_800C7A60.s b/lib/asm/non_matchings/unknown_0C8660/alCSPSetBank.s similarity index 97% rename from lib/asm/non_matchings/unknown_0C8660/func_800C7A60.s rename to lib/asm/non_matchings/unknown_0C8660/alCSPSetBank.s index 4251e998..8b474aa0 100644 --- a/lib/asm/non_matchings/unknown_0C8660/func_800C7A60.s +++ b/lib/asm/non_matchings/unknown_0C8660/alCSPSetBank.s @@ -1,4 +1,4 @@ -glabel func_800C7A60 +glabel alCSPSetBank /* 0C8660 800C7A60 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0C8664 800C7A64 AFBF0014 */ sw $ra, 0x14($sp) /* 0C8668 800C7A68 240E000E */ li $t6, 14 diff --git a/lib/asm/non_matchings/unknown_0C86A0/func_800C7B40.s b/lib/asm/non_matchings/unknown_0C86A0/alCSeqGetLoc.s similarity index 97% rename from lib/asm/non_matchings/unknown_0C86A0/func_800C7B40.s rename to lib/asm/non_matchings/unknown_0C86A0/alCSeqGetLoc.s index c893642f..863e257b 100644 --- a/lib/asm/non_matchings/unknown_0C86A0/func_800C7B40.s +++ b/lib/asm/non_matchings/unknown_0C86A0/alCSeqGetLoc.s @@ -1,4 +1,4 @@ -glabel func_800C7B40 +glabel alCSeqGetLoc /* 0C8740 800C7B40 8CAE0000 */ lw $t6, ($a1) /* 0C8744 800C7B44 00801825 */ move $v1, $a0 /* 0C8748 800C7B48 00803825 */ move $a3, $a0 diff --git a/lib/asm/non_matchings/unknown_0C86A0/alCSeqNew.s b/lib/asm/non_matchings/unknown_0C86A0/alCSeqNew.s new file mode 100644 index 00000000..fcf835de --- /dev/null +++ b/lib/asm/non_matchings/unknown_0C86A0/alCSeqNew.s @@ -0,0 +1,74 @@ +glabel alCSeqNew +/* 0C8BFC 800C7FFC 27BDFFD0 */ addiu $sp, $sp, -0x30 +/* 0C8C00 800C8000 AFB40028 */ sw $s4, 0x28($sp) +/* 0C8C04 800C8004 AFB30024 */ sw $s3, 0x24($sp) +/* 0C8C08 800C8008 AFB20020 */ sw $s2, 0x20($sp) +/* 0C8C0C 800C800C AFB1001C */ sw $s1, 0x1c($sp) +/* 0C8C10 800C8010 AFB00018 */ sw $s0, 0x18($sp) +/* 0C8C14 800C8014 AFBF002C */ sw $ra, 0x2c($sp) +/* 0C8C18 800C8018 240E0001 */ li $t6, 1 +/* 0C8C1C 800C801C 00808025 */ move $s0, $a0 +/* 0C8C20 800C8020 00A0A025 */ move $s4, $a1 +/* 0C8C24 800C8024 AC850000 */ sw $a1, ($a0) +/* 0C8C28 800C8028 AC800004 */ sw $zero, 4($a0) +/* 0C8C2C 800C802C AC800010 */ sw $zero, 0x10($a0) +/* 0C8C30 800C8030 AC80000C */ sw $zero, 0xc($a0) +/* 0C8C34 800C8034 AC8E0014 */ sw $t6, 0x14($a0) +/* 0C8C38 800C8038 00808825 */ move $s1, $a0 +/* 0C8C3C 800C803C 00009025 */ move $s2, $zero +/* 0C8C40 800C8040 24130010 */ li $s3, 16 +/* 0C8C44 800C8044 00006825 */ move $t5, $zero +/* 0C8C48 800C8048 00806025 */ move $t4, $a0 +.L800C804C: +/* 0C8C4C 800C804C A22000A8 */ sb $zero, 0xa8($s1) +/* 0C8C50 800C8050 AD800058 */ sw $zero, 0x58($t4) +/* 0C8C54 800C8054 A2200098 */ sb $zero, 0x98($s1) +/* 0C8C58 800C8058 8E0F0000 */ lw $t7, ($s0) +/* 0C8C5C 800C805C 240E0001 */ li $t6, 1 +/* 0C8C60 800C8060 01F2C021 */ addu $t8, $t7, $s2 +/* 0C8C64 800C8064 8F020000 */ lw $v0, ($t8) +/* 0C8C68 800C8068 01AE7804 */ sllv $t7, $t6, $t5 +/* 0C8C6C 800C806C 1040000A */ beqz $v0, .L800C8098 +/* 0C8C70 800C8070 02827021 */ addu $t6, $s4, $v0 +/* 0C8C74 800C8074 8E190004 */ lw $t9, 4($s0) +/* 0C8C78 800C8078 02005025 */ move $t2, $s0 +/* 0C8C7C 800C807C 01A05825 */ move $t3, $t5 +/* 0C8C80 800C8080 032FC025 */ or $t8, $t9, $t7 +/* 0C8C84 800C8084 AE180004 */ sw $t8, 4($s0) +/* 0C8C88 800C8088 0C031F29 */ jal __readVarLen +/* 0C8C8C 800C808C AD8E0018 */ sw $t6, 0x18($t4) +/* 0C8C90 800C8090 10000002 */ b .L800C809C +/* 0C8C94 800C8094 AD8200B8 */ sw $v0, 0xb8($t4) +.L800C8098: +/* 0C8C98 800C8098 AD800018 */ sw $zero, 0x18($t4) +.L800C809C: +/* 0C8C9C 800C809C 25AD0001 */ addiu $t5, $t5, 1 +/* 0C8CA0 800C80A0 26310001 */ addiu $s1, $s1, 1 +/* 0C8CA4 800C80A4 26520004 */ addiu $s2, $s2, 4 +/* 0C8CA8 800C80A8 15B3FFE8 */ bne $t5, $s3, .L800C804C +/* 0C8CAC 800C80AC 258C0004 */ addiu $t4, $t4, 4 +/* 0C8CB0 800C80B0 8E190000 */ lw $t9, ($s0) +/* 0C8CB4 800C80B4 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 +/* 0C8CB8 800C80B8 44812800 */ mtc1 $at, $f5 +/* 0C8CBC 800C80BC 8F2F0040 */ lw $t7, 0x40($t9) +/* 0C8CC0 800C80C0 44802000 */ mtc1 $zero, $f4 +/* 0C8CC4 800C80C4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 +/* 0C8CC8 800C80C8 448F3000 */ mtc1 $t7, $f6 +/* 0C8CCC 800C80CC 05E10004 */ bgez $t7, .L800C80E0 +/* 0C8CD0 800C80D0 46803220 */ cvt.s.w $f8, $f6 +/* 0C8CD4 800C80D4 44815000 */ mtc1 $at, $f10 +/* 0C8CD8 800C80D8 00000000 */ nop +/* 0C8CDC 800C80DC 460A4200 */ add.s $f8, $f8, $f10 +.L800C80E0: +/* 0C8CE0 800C80E0 460041A1 */ cvt.d.s $f6, $f8 +/* 0C8CE4 800C80E4 46262283 */ div.d $f10, $f4, $f6 +/* 0C8CE8 800C80E8 46205220 */ cvt.s.d $f8, $f10 +/* 0C8CEC 800C80EC E6080008 */ swc1 $f8, 8($s0) +/* 0C8CF0 800C80F0 8FBF002C */ lw $ra, 0x2c($sp) +/* 0C8CF4 800C80F4 8FB40028 */ lw $s4, 0x28($sp) +/* 0C8CF8 800C80F8 8FB30024 */ lw $s3, 0x24($sp) +/* 0C8CFC 800C80FC 8FB20020 */ lw $s2, 0x20($sp) +/* 0C8D00 800C8100 8FB1001C */ lw $s1, 0x1c($sp) +/* 0C8D04 800C8104 8FB00018 */ lw $s0, 0x18($sp) +/* 0C8D08 800C8108 03E00008 */ jr $ra +/* 0C8D0C 800C810C 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/lib/asm/non_matchings/unknown_0C86A0/alCSeqNewMarker.s b/lib/asm/non_matchings/unknown_0C86A0/alCSeqNewMarker.s new file mode 100644 index 00000000..e969650a --- /dev/null +++ b/lib/asm/non_matchings/unknown_0C86A0/alCSeqNewMarker.s @@ -0,0 +1,95 @@ +glabel alCSeqNewMarker +/* 0C8D10 800C8110 27BDFEB0 */ addiu $sp, $sp, -0x150 +/* 0C8D14 800C8114 AFB30020 */ sw $s3, 0x20($sp) +/* 0C8D18 800C8118 AFB10018 */ sw $s1, 0x18($sp) +/* 0C8D1C 800C811C 00A08825 */ move $s1, $a1 +/* 0C8D20 800C8120 27B30048 */ addiu $s3, $sp, 0x48 +/* 0C8D24 800C8124 AFBF002C */ sw $ra, 0x2c($sp) +/* 0C8D28 800C8128 AFB50028 */ sw $s5, 0x28($sp) +/* 0C8D2C 800C812C AFB40024 */ sw $s4, 0x24($sp) +/* 0C8D30 800C8130 AFB2001C */ sw $s2, 0x1c($sp) +/* 0C8D34 800C8134 AFB00014 */ sw $s0, 0x14($sp) +/* 0C8D38 800C8138 00803825 */ move $a3, $a0 +/* 0C8D3C 800C813C 00C09025 */ move $s2, $a2 +/* 0C8D40 800C8140 8CE50000 */ lw $a1, ($a3) +/* 0C8D44 800C8144 0C031FFF */ jal alCSeqNew +/* 0C8D48 800C8148 02602025 */ move $a0, $s3 +/* 0C8D4C 800C814C 24150004 */ li $s5, 4 +/* 0C8D50 800C8150 27B40140 */ addiu $s4, $sp, 0x140 +/* 0C8D54 800C8154 27B00058 */ addiu $s0, $sp, 0x58 +/* 0C8D58 800C8158 8FAE004C */ lw $t6, 0x4c($sp) +.L800C815C: +/* 0C8D5C 800C815C 27A40048 */ addiu $a0, $sp, 0x48 +/* 0C8D60 800C8160 00801825 */ move $v1, $a0 +/* 0C8D64 800C8164 AE2E0000 */ sw $t6, ($s1) +/* 0C8D68 800C8168 8FAF0054 */ lw $t7, 0x54($sp) +/* 0C8D6C 800C816C 02201025 */ move $v0, $s1 +/* 0C8D70 800C8170 02202825 */ move $a1, $s1 +/* 0C8D74 800C8174 AE2F0004 */ sw $t7, 4($s1) +/* 0C8D78 800C8178 8FB80058 */ lw $t8, 0x58($sp) +/* 0C8D7C 800C817C AE380008 */ sw $t8, 8($s1) +.L800C8180: +/* 0C8D80 800C8180 8C680018 */ lw $t0, 0x18($v1) +/* 0C8D84 800C8184 24840004 */ addiu $a0, $a0, 4 +/* 0C8D88 800C8188 24420010 */ addiu $v0, $v0, 0x10 +/* 0C8D8C 800C818C AC48FFFC */ sw $t0, -4($v0) +/* 0C8D90 800C8190 8C690058 */ lw $t1, 0x58($v1) +/* 0C8D94 800C8194 24630010 */ addiu $v1, $v1, 0x10 +/* 0C8D98 800C8198 24A50004 */ addiu $a1, $a1, 4 +/* 0C8D9C 800C819C AC49003C */ sw $t1, 0x3c($v0) +/* 0C8DA0 800C81A0 908A0094 */ lbu $t2, 0x94($a0) +/* 0C8DA4 800C81A4 A0AA0088 */ sb $t2, 0x88($a1) +/* 0C8DA8 800C81A8 908B00A4 */ lbu $t3, 0xa4($a0) +/* 0C8DAC 800C81AC A0AB0098 */ sb $t3, 0x98($a1) +/* 0C8DB0 800C81B0 8C6C00A8 */ lw $t4, 0xa8($v1) +/* 0C8DB4 800C81B4 AC4C009C */ sw $t4, 0x9c($v0) +/* 0C8DB8 800C81B8 8C6D000C */ lw $t5, 0xc($v1) +/* 0C8DBC 800C81BC AC4D0000 */ sw $t5, ($v0) +/* 0C8DC0 800C81C0 8C6E004C */ lw $t6, 0x4c($v1) +/* 0C8DC4 800C81C4 AC4E0040 */ sw $t6, 0x40($v0) +/* 0C8DC8 800C81C8 908F0095 */ lbu $t7, 0x95($a0) +/* 0C8DCC 800C81CC A0AF0089 */ sb $t7, 0x89($a1) +/* 0C8DD0 800C81D0 909800A5 */ lbu $t8, 0xa5($a0) +/* 0C8DD4 800C81D4 A0B80099 */ sb $t8, 0x99($a1) +/* 0C8DD8 800C81D8 8C7900AC */ lw $t9, 0xac($v1) +/* 0C8DDC 800C81DC AC5900A0 */ sw $t9, 0xa0($v0) +/* 0C8DE0 800C81E0 8C680010 */ lw $t0, 0x10($v1) +/* 0C8DE4 800C81E4 AC480004 */ sw $t0, 4($v0) +/* 0C8DE8 800C81E8 8C690050 */ lw $t1, 0x50($v1) +/* 0C8DEC 800C81EC AC490044 */ sw $t1, 0x44($v0) +/* 0C8DF0 800C81F0 908A0096 */ lbu $t2, 0x96($a0) +/* 0C8DF4 800C81F4 A0AA008A */ sb $t2, 0x8a($a1) +/* 0C8DF8 800C81F8 908B00A6 */ lbu $t3, 0xa6($a0) +/* 0C8DFC 800C81FC A0AB009A */ sb $t3, 0x9a($a1) +/* 0C8E00 800C8200 8C6C00B0 */ lw $t4, 0xb0($v1) +/* 0C8E04 800C8204 AC4C00A4 */ sw $t4, 0xa4($v0) +/* 0C8E08 800C8208 8C6D0014 */ lw $t5, 0x14($v1) +/* 0C8E0C 800C820C AC4D0008 */ sw $t5, 8($v0) +/* 0C8E10 800C8210 8C6E0054 */ lw $t6, 0x54($v1) +/* 0C8E14 800C8214 AC4E0048 */ sw $t6, 0x48($v0) +/* 0C8E18 800C8218 908F0097 */ lbu $t7, 0x97($a0) +/* 0C8E1C 800C821C A0AF008B */ sb $t7, 0x8b($a1) +/* 0C8E20 800C8220 909800A7 */ lbu $t8, 0xa7($a0) +/* 0C8E24 800C8224 A0B8009B */ sb $t8, 0x9b($a1) +/* 0C8E28 800C8228 8C7900B4 */ lw $t9, 0xb4($v1) +/* 0C8E2C 800C822C 1490FFD4 */ bne $a0, $s0, .L800C8180 +/* 0C8E30 800C8230 AC5900A8 */ sw $t9, 0xa8($v0) +/* 0C8E34 800C8234 02602025 */ move $a0, $s3 +/* 0C8E38 800C8238 0C031F41 */ jal __alCSeqGetTrackEvent +/* 0C8E3C 800C823C 02802825 */ move $a1, $s4 +/* 0C8E40 800C8240 87A80140 */ lh $t0, 0x140($sp) +/* 0C8E44 800C8244 8FA90054 */ lw $t1, 0x54($sp) +/* 0C8E48 800C8248 11150003 */ beq $t0, $s5, .L800C8258 +/* 0C8E4C 800C824C 0132082B */ sltu $at, $t1, $s2 +/* 0C8E50 800C8250 5420FFC2 */ bnezl $at, .L800C815C +/* 0C8E54 800C8254 8FAE004C */ lw $t6, 0x4c($sp) +.L800C8258: +/* 0C8E58 800C8258 8FBF002C */ lw $ra, 0x2c($sp) +/* 0C8E5C 800C825C 8FB00014 */ lw $s0, 0x14($sp) +/* 0C8E60 800C8260 8FB10018 */ lw $s1, 0x18($sp) +/* 0C8E64 800C8264 8FB2001C */ lw $s2, 0x1c($sp) +/* 0C8E68 800C8268 8FB30020 */ lw $s3, 0x20($sp) +/* 0C8E6C 800C826C 8FB40024 */ lw $s4, 0x24($sp) +/* 0C8E70 800C8270 8FB50028 */ lw $s5, 0x28($sp) +/* 0C8E74 800C8274 03E00008 */ jr $ra +/* 0C8E78 800C8278 27BD0150 */ addiu $sp, $sp, 0x150 diff --git a/lib/asm/non_matchings/unknown_0C86A0/func_800C7AA0.s b/lib/asm/non_matchings/unknown_0C86A0/alCSeqSetLoc.s similarity index 97% rename from lib/asm/non_matchings/unknown_0C86A0/func_800C7AA0.s rename to lib/asm/non_matchings/unknown_0C86A0/alCSeqSetLoc.s index 605dd5a6..a0d28e86 100644 --- a/lib/asm/non_matchings/unknown_0C86A0/func_800C7AA0.s +++ b/lib/asm/non_matchings/unknown_0C86A0/alCSeqSetLoc.s @@ -1,4 +1,4 @@ -glabel func_800C7AA0 +glabel alCSeqSetLoc /* 0C86A0 800C7AA0 8C8E0004 */ lw $t6, 4($a0) /* 0C86A4 800C7AA4 00803025 */ move $a2, $a0 /* 0C86A8 800C7AA8 00804025 */ move $t0, $a0 diff --git a/lib/asm/non_matchings/unknown_0C86A0/func_800C7FFC.s b/lib/asm/non_matchings/unknown_0C86A0/func_800C7FFC.s deleted file mode 100644 index 6d4dc5e7..00000000 --- a/lib/asm/non_matchings/unknown_0C86A0/func_800C7FFC.s +++ /dev/null @@ -1,273 +0,0 @@ -glabel func_800C7FFC -/* 0C8BFC 800C7FFC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0C8C00 800C8000 AFB40028 */ sw $s4, 0x28($sp) -/* 0C8C04 800C8004 AFB30024 */ sw $s3, 0x24($sp) -/* 0C8C08 800C8008 AFB20020 */ sw $s2, 0x20($sp) -/* 0C8C0C 800C800C AFB1001C */ sw $s1, 0x1c($sp) -/* 0C8C10 800C8010 AFB00018 */ sw $s0, 0x18($sp) -/* 0C8C14 800C8014 AFBF002C */ sw $ra, 0x2c($sp) -/* 0C8C18 800C8018 240E0001 */ li $t6, 1 -/* 0C8C1C 800C801C 00808025 */ move $s0, $a0 -/* 0C8C20 800C8020 00A0A025 */ move $s4, $a1 -/* 0C8C24 800C8024 AC850000 */ sw $a1, ($a0) -/* 0C8C28 800C8028 AC800004 */ sw $zero, 4($a0) -/* 0C8C2C 800C802C AC800010 */ sw $zero, 0x10($a0) -/* 0C8C30 800C8030 AC80000C */ sw $zero, 0xc($a0) -/* 0C8C34 800C8034 AC8E0014 */ sw $t6, 0x14($a0) -/* 0C8C38 800C8038 00808825 */ move $s1, $a0 -/* 0C8C3C 800C803C 00009025 */ move $s2, $zero -/* 0C8C40 800C8040 24130010 */ li $s3, 16 -/* 0C8C44 800C8044 00006825 */ move $t5, $zero -/* 0C8C48 800C8048 00806025 */ move $t4, $a0 -.L800C804C: -/* 0C8C4C 800C804C A22000A8 */ sb $zero, 0xa8($s1) -/* 0C8C50 800C8050 AD800058 */ sw $zero, 0x58($t4) -/* 0C8C54 800C8054 A2200098 */ sb $zero, 0x98($s1) -/* 0C8C58 800C8058 8E0F0000 */ lw $t7, ($s0) -/* 0C8C5C 800C805C 240E0001 */ li $t6, 1 -/* 0C8C60 800C8060 01F2C021 */ addu $t8, $t7, $s2 -/* 0C8C64 800C8064 8F020000 */ lw $v0, ($t8) -/* 0C8C68 800C8068 01AE7804 */ sllv $t7, $t6, $t5 -/* 0C8C6C 800C806C 1040000A */ beqz $v0, .L800C8098 -/* 0C8C70 800C8070 02827021 */ addu $t6, $s4, $v0 -/* 0C8C74 800C8074 8E190004 */ lw $t9, 4($s0) -/* 0C8C78 800C8078 02005025 */ move $t2, $s0 -/* 0C8C7C 800C807C 01A05825 */ move $t3, $t5 -/* 0C8C80 800C8080 032FC025 */ or $t8, $t9, $t7 -/* 0C8C84 800C8084 AE180004 */ sw $t8, 4($s0) -/* 0C8C88 800C8088 0C031F29 */ jal __readVarLen -/* 0C8C8C 800C808C AD8E0018 */ sw $t6, 0x18($t4) -/* 0C8C90 800C8090 10000002 */ b .L800C809C -/* 0C8C94 800C8094 AD8200B8 */ sw $v0, 0xb8($t4) -.L800C8098: -/* 0C8C98 800C8098 AD800018 */ sw $zero, 0x18($t4) -.L800C809C: -/* 0C8C9C 800C809C 25AD0001 */ addiu $t5, $t5, 1 -/* 0C8CA0 800C80A0 26310001 */ addiu $s1, $s1, 1 -/* 0C8CA4 800C80A4 26520004 */ addiu $s2, $s2, 4 -/* 0C8CA8 800C80A8 15B3FFE8 */ bne $t5, $s3, .L800C804C -/* 0C8CAC 800C80AC 258C0004 */ addiu $t4, $t4, 4 -/* 0C8CB0 800C80B0 8E190000 */ lw $t9, ($s0) -/* 0C8CB4 800C80B4 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 0C8CB8 800C80B8 44812800 */ mtc1 $at, $f5 -/* 0C8CBC 800C80BC 8F2F0040 */ lw $t7, 0x40($t9) -/* 0C8CC0 800C80C0 44802000 */ mtc1 $zero, $f4 -/* 0C8CC4 800C80C4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C8CC8 800C80C8 448F3000 */ mtc1 $t7, $f6 -/* 0C8CCC 800C80CC 05E10004 */ bgez $t7, .L800C80E0 -/* 0C8CD0 800C80D0 46803220 */ cvt.s.w $f8, $f6 -/* 0C8CD4 800C80D4 44815000 */ mtc1 $at, $f10 -/* 0C8CD8 800C80D8 00000000 */ nop -/* 0C8CDC 800C80DC 460A4200 */ add.s $f8, $f8, $f10 -.L800C80E0: -/* 0C8CE0 800C80E0 460041A1 */ cvt.d.s $f6, $f8 -/* 0C8CE4 800C80E4 46262283 */ div.d $f10, $f4, $f6 -/* 0C8CE8 800C80E8 46205220 */ cvt.s.d $f8, $f10 -/* 0C8CEC 800C80EC E6080008 */ swc1 $f8, 8($s0) -/* 0C8CF0 800C80F0 8FBF002C */ lw $ra, 0x2c($sp) -/* 0C8CF4 800C80F4 8FB40028 */ lw $s4, 0x28($sp) -/* 0C8CF8 800C80F8 8FB30024 */ lw $s3, 0x24($sp) -/* 0C8CFC 800C80FC 8FB20020 */ lw $s2, 0x20($sp) -/* 0C8D00 800C8100 8FB1001C */ lw $s1, 0x1c($sp) -/* 0C8D04 800C8104 8FB00018 */ lw $s0, 0x18($sp) -/* 0C8D08 800C8108 03E00008 */ jr $ra -/* 0C8D0C 800C810C 27BD0030 */ addiu $sp, $sp, 0x30 - -/* 0C8D10 800C8110 27BDFEB0 */ addiu $sp, $sp, -0x150 -/* 0C8D14 800C8114 AFB30020 */ sw $s3, 0x20($sp) -/* 0C8D18 800C8118 AFB10018 */ sw $s1, 0x18($sp) -/* 0C8D1C 800C811C 00A08825 */ move $s1, $a1 -/* 0C8D20 800C8120 27B30048 */ addiu $s3, $sp, 0x48 -/* 0C8D24 800C8124 AFBF002C */ sw $ra, 0x2c($sp) -/* 0C8D28 800C8128 AFB50028 */ sw $s5, 0x28($sp) -/* 0C8D2C 800C812C AFB40024 */ sw $s4, 0x24($sp) -/* 0C8D30 800C8130 AFB2001C */ sw $s2, 0x1c($sp) -/* 0C8D34 800C8134 AFB00014 */ sw $s0, 0x14($sp) -/* 0C8D38 800C8138 00803825 */ move $a3, $a0 -/* 0C8D3C 800C813C 00C09025 */ move $s2, $a2 -/* 0C8D40 800C8140 8CE50000 */ lw $a1, ($a3) -/* 0C8D44 800C8144 0C031FFF */ jal func_800C7FFC -/* 0C8D48 800C8148 02602025 */ move $a0, $s3 -/* 0C8D4C 800C814C 24150004 */ li $s5, 4 -/* 0C8D50 800C8150 27B40140 */ addiu $s4, $sp, 0x140 -/* 0C8D54 800C8154 27B00058 */ addiu $s0, $sp, 0x58 -/* 0C8D58 800C8158 8FAE004C */ lw $t6, 0x4c($sp) -.L800C815C: -/* 0C8D5C 800C815C 27A40048 */ addiu $a0, $sp, 0x48 -/* 0C8D60 800C8160 00801825 */ move $v1, $a0 -/* 0C8D64 800C8164 AE2E0000 */ sw $t6, ($s1) -/* 0C8D68 800C8168 8FAF0054 */ lw $t7, 0x54($sp) -/* 0C8D6C 800C816C 02201025 */ move $v0, $s1 -/* 0C8D70 800C8170 02202825 */ move $a1, $s1 -/* 0C8D74 800C8174 AE2F0004 */ sw $t7, 4($s1) -/* 0C8D78 800C8178 8FB80058 */ lw $t8, 0x58($sp) -/* 0C8D7C 800C817C AE380008 */ sw $t8, 8($s1) -.L800C8180: -/* 0C8D80 800C8180 8C680018 */ lw $t0, 0x18($v1) -/* 0C8D84 800C8184 24840004 */ addiu $a0, $a0, 4 -/* 0C8D88 800C8188 24420010 */ addiu $v0, $v0, 0x10 -/* 0C8D8C 800C818C AC48FFFC */ sw $t0, -4($v0) -/* 0C8D90 800C8190 8C690058 */ lw $t1, 0x58($v1) -/* 0C8D94 800C8194 24630010 */ addiu $v1, $v1, 0x10 -/* 0C8D98 800C8198 24A50004 */ addiu $a1, $a1, 4 -/* 0C8D9C 800C819C AC49003C */ sw $t1, 0x3c($v0) -/* 0C8DA0 800C81A0 908A0094 */ lbu $t2, 0x94($a0) -/* 0C8DA4 800C81A4 A0AA0088 */ sb $t2, 0x88($a1) -/* 0C8DA8 800C81A8 908B00A4 */ lbu $t3, 0xa4($a0) -/* 0C8DAC 800C81AC A0AB0098 */ sb $t3, 0x98($a1) -/* 0C8DB0 800C81B0 8C6C00A8 */ lw $t4, 0xa8($v1) -/* 0C8DB4 800C81B4 AC4C009C */ sw $t4, 0x9c($v0) -/* 0C8DB8 800C81B8 8C6D000C */ lw $t5, 0xc($v1) -/* 0C8DBC 800C81BC AC4D0000 */ sw $t5, ($v0) -/* 0C8DC0 800C81C0 8C6E004C */ lw $t6, 0x4c($v1) -/* 0C8DC4 800C81C4 AC4E0040 */ sw $t6, 0x40($v0) -/* 0C8DC8 800C81C8 908F0095 */ lbu $t7, 0x95($a0) -/* 0C8DCC 800C81CC A0AF0089 */ sb $t7, 0x89($a1) -/* 0C8DD0 800C81D0 909800A5 */ lbu $t8, 0xa5($a0) -/* 0C8DD4 800C81D4 A0B80099 */ sb $t8, 0x99($a1) -/* 0C8DD8 800C81D8 8C7900AC */ lw $t9, 0xac($v1) -/* 0C8DDC 800C81DC AC5900A0 */ sw $t9, 0xa0($v0) -/* 0C8DE0 800C81E0 8C680010 */ lw $t0, 0x10($v1) -/* 0C8DE4 800C81E4 AC480004 */ sw $t0, 4($v0) -/* 0C8DE8 800C81E8 8C690050 */ lw $t1, 0x50($v1) -/* 0C8DEC 800C81EC AC490044 */ sw $t1, 0x44($v0) -/* 0C8DF0 800C81F0 908A0096 */ lbu $t2, 0x96($a0) -/* 0C8DF4 800C81F4 A0AA008A */ sb $t2, 0x8a($a1) -/* 0C8DF8 800C81F8 908B00A6 */ lbu $t3, 0xa6($a0) -/* 0C8DFC 800C81FC A0AB009A */ sb $t3, 0x9a($a1) -/* 0C8E00 800C8200 8C6C00B0 */ lw $t4, 0xb0($v1) -/* 0C8E04 800C8204 AC4C00A4 */ sw $t4, 0xa4($v0) -/* 0C8E08 800C8208 8C6D0014 */ lw $t5, 0x14($v1) -/* 0C8E0C 800C820C AC4D0008 */ sw $t5, 8($v0) -/* 0C8E10 800C8210 8C6E0054 */ lw $t6, 0x54($v1) -/* 0C8E14 800C8214 AC4E0048 */ sw $t6, 0x48($v0) -/* 0C8E18 800C8218 908F0097 */ lbu $t7, 0x97($a0) -/* 0C8E1C 800C821C A0AF008B */ sb $t7, 0x8b($a1) -/* 0C8E20 800C8220 909800A7 */ lbu $t8, 0xa7($a0) -/* 0C8E24 800C8224 A0B8009B */ sb $t8, 0x9b($a1) -/* 0C8E28 800C8228 8C7900B4 */ lw $t9, 0xb4($v1) -/* 0C8E2C 800C822C 1490FFD4 */ bne $a0, $s0, .L800C8180 -/* 0C8E30 800C8230 AC5900A8 */ sw $t9, 0xa8($v0) -/* 0C8E34 800C8234 02602025 */ move $a0, $s3 -/* 0C8E38 800C8238 0C031F41 */ jal __alCSeqGetTrackEvent -/* 0C8E3C 800C823C 02802825 */ move $a1, $s4 -/* 0C8E40 800C8240 87A80140 */ lh $t0, 0x140($sp) -/* 0C8E44 800C8244 8FA90054 */ lw $t1, 0x54($sp) -/* 0C8E48 800C8248 11150003 */ beq $t0, $s5, .L800C8258 -/* 0C8E4C 800C824C 0132082B */ sltu $at, $t1, $s2 -/* 0C8E50 800C8250 5420FFC2 */ bnezl $at, .L800C815C -/* 0C8E54 800C8254 8FAE004C */ lw $t6, 0x4c($sp) -.L800C8258: -/* 0C8E58 800C8258 8FBF002C */ lw $ra, 0x2c($sp) -/* 0C8E5C 800C825C 8FB00014 */ lw $s0, 0x14($sp) -/* 0C8E60 800C8260 8FB10018 */ lw $s1, 0x18($sp) -/* 0C8E64 800C8264 8FB2001C */ lw $s2, 0x1c($sp) -/* 0C8E68 800C8268 8FB30020 */ lw $s3, 0x20($sp) -/* 0C8E6C 800C826C 8FB40024 */ lw $s4, 0x24($sp) -/* 0C8E70 800C8270 8FB50028 */ lw $s5, 0x28($sp) -/* 0C8E74 800C8274 03E00008 */ jr $ra -/* 0C8E78 800C8278 27BD0150 */ addiu $sp, $sp, 0x150 - -/* 0C8E7C 800C827C 03E00008 */ jr $ra -/* 0C8E80 800C8280 8C82000C */ lw $v0, 0xc($a0) - -/* 0C8E84 800C8284 8C8E0000 */ lw $t6, ($a0) -/* 0C8E88 800C8288 44856000 */ mtc1 $a1, $f12 -/* 0C8E8C 800C828C 3C01800F */ lui $at, 0x800f -/* 0C8E90 800C8290 8DCF0040 */ lw $t7, 0x40($t6) -/* 0C8E94 800C8294 D42694B0 */ ldc1 $f6, -0x6b50($at) -/* 0C8E98 800C8298 46006121 */ cvt.d.s $f4, $f12 -/* 0C8E9C 800C829C 448F5000 */ mtc1 $t7, $f10 -/* 0C8EA0 800C82A0 46262202 */ mul.d $f8, $f4, $f6 -/* 0C8EA4 800C82A4 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 0C8EA8 800C82A8 05E10005 */ bgez $t7, .L800C82C0 -/* 0C8EAC 800C82AC 46805421 */ cvt.d.w $f16, $f10 -/* 0C8EB0 800C82B0 44819800 */ mtc1 $at, $f19 -/* 0C8EB4 800C82B4 44809000 */ mtc1 $zero, $f18 -/* 0C8EB8 800C82B8 00000000 */ nop -/* 0C8EBC 800C82BC 46328400 */ add.d $f16, $f16, $f18 -.L800C82C0: -/* 0C8EC0 800C82C0 44863000 */ mtc1 $a2, $f6 -/* 0C8EC4 800C82C4 46304102 */ mul.d $f4, $f8, $f16 -/* 0C8EC8 800C82C8 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 0C8ECC 800C82CC 04C10005 */ bgez $a2, .L800C82E4 -/* 0C8ED0 800C82D0 468032A1 */ cvt.d.w $f10, $f6 -/* 0C8ED4 800C82D4 44819800 */ mtc1 $at, $f19 -/* 0C8ED8 800C82D8 44809000 */ mtc1 $zero, $f18 -/* 0C8EDC 800C82DC 00000000 */ nop -/* 0C8EE0 800C82E0 46325280 */ add.d $f10, $f10, $f18 -.L800C82E4: -/* 0C8EE4 800C82E4 462A2203 */ div.d $f8, $f4, $f10 -/* 0C8EE8 800C82E8 24020001 */ li $v0, 1 -/* 0C8EEC 800C82EC 3C0141E0 */ li $at, 0x41E00000 # 28.000000 -/* 0C8EF0 800C82F0 4458F800 */ cfc1 $t8, $31 -/* 0C8EF4 800C82F4 44C2F800 */ ctc1 $v0, $31 -/* 0C8EF8 800C82F8 00000000 */ nop -/* 0C8EFC 800C82FC 46204424 */ cvt.w.d $f16, $f8 -/* 0C8F00 800C8300 4442F800 */ cfc1 $v0, $31 -/* 0C8F04 800C8304 00000000 */ nop -/* 0C8F08 800C8308 30420078 */ andi $v0, $v0, 0x78 -/* 0C8F0C 800C830C 50400016 */ beql $v0, $zero, .L800C8368 -/* 0C8F10 800C8310 44028000 */ mfc1 $v0, $f16 -/* 0C8F14 800C8314 44818800 */ mtc1 $at, $f17 -/* 0C8F18 800C8318 44808000 */ mtc1 $zero, $f16 -/* 0C8F1C 800C831C 24020001 */ li $v0, 1 -/* 0C8F20 800C8320 3C018000 */ lui $at, 0x8000 -/* 0C8F24 800C8324 46304401 */ sub.d $f16, $f8, $f16 -/* 0C8F28 800C8328 44C2F800 */ ctc1 $v0, $31 -/* 0C8F2C 800C832C 00000000 */ nop -/* 0C8F30 800C8330 46208424 */ cvt.w.d $f16, $f16 -/* 0C8F34 800C8334 4442F800 */ cfc1 $v0, $31 -/* 0C8F38 800C8338 00000000 */ nop -/* 0C8F3C 800C833C 30420078 */ andi $v0, $v0, 0x78 -/* 0C8F40 800C8340 54400006 */ bnezl $v0, .L800C835C -/* 0C8F44 800C8344 44D8F800 */ ctc1 $t8, $31 -/* 0C8F48 800C8348 44028000 */ mfc1 $v0, $f16 -/* 0C8F4C 800C834C 44D8F800 */ ctc1 $t8, $31 -/* 0C8F50 800C8350 03E00008 */ jr $ra -/* 0C8F54 800C8354 00411025 */ or $v0, $v0, $at - -/* 0C8F58 800C8358 44D8F800 */ ctc1 $t8, $31 -.L800C835C: -/* 0C8F5C 800C835C 03E00008 */ jr $ra -/* 0C8F60 800C8360 2402FFFF */ li $v0, -1 - -/* 0C8F64 800C8364 44028000 */ mfc1 $v0, $f16 -.L800C8368: -/* 0C8F68 800C8368 00000000 */ nop -/* 0C8F6C 800C836C 0442FFFB */ bltzl $v0, .L800C835C -/* 0C8F70 800C8370 44D8F800 */ ctc1 $t8, $31 -/* 0C8F74 800C8374 44D8F800 */ ctc1 $t8, $31 -/* 0C8F78 800C8378 03E00008 */ jr $ra -/* 0C8F7C 800C837C 00000000 */ nop - -/* 0C8F80 800C8380 44852000 */ mtc1 $a1, $f4 -/* 0C8F84 800C8384 44864000 */ mtc1 $a2, $f8 -/* 0C8F88 800C8388 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C8F8C 800C838C 468021A0 */ cvt.s.w $f6, $f4 -/* 0C8F90 800C8390 04C10004 */ bgez $a2, .L800C83A4 -/* 0C8F94 800C8394 468042A0 */ cvt.s.w $f10, $f8 -/* 0C8F98 800C8398 44818000 */ mtc1 $at, $f16 -/* 0C8F9C 800C839C 00000000 */ nop -/* 0C8FA0 800C83A0 46105280 */ add.s $f10, $f10, $f16 -.L800C83A4: -/* 0C8FA4 800C83A4 8C8E0000 */ lw $t6, ($a0) -/* 0C8FA8 800C83A8 460A3482 */ mul.s $f18, $f6, $f10 -/* 0C8FAC 800C83AC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C8FB0 800C83B0 8DCF0040 */ lw $t7, 0x40($t6) -/* 0C8FB4 800C83B4 448F4000 */ mtc1 $t7, $f8 -/* 0C8FB8 800C83B8 46009121 */ cvt.d.s $f4, $f18 -/* 0C8FBC 800C83BC 05E10004 */ bgez $t7, .L800C83D0 -/* 0C8FC0 800C83C0 46804420 */ cvt.s.w $f16, $f8 -/* 0C8FC4 800C83C4 44813000 */ mtc1 $at, $f6 -/* 0C8FC8 800C83C8 00000000 */ nop -/* 0C8FCC 800C83CC 46068400 */ add.s $f16, $f16, $f6 -.L800C83D0: -/* 0C8FD0 800C83D0 3C01800F */ lui $at, 0x800f -/* 0C8FD4 800C83D4 D43294B8 */ ldc1 $f18, -0x6b48($at) -/* 0C8FD8 800C83D8 460082A1 */ cvt.d.s $f10, $f16 -/* 0C8FDC 800C83DC 46325202 */ mul.d $f8, $f10, $f18 -/* 0C8FE0 800C83E0 46282183 */ div.d $f6, $f4, $f8 -/* 0C8FE4 800C83E4 03E00008 */ jr $ra -/* 0C8FE8 800C83E8 46203020 */ cvt.s.d $f0, $f6 - diff --git a/lib/asm/non_matchings/unknown_0C86A0/func_800C8284.s b/lib/asm/non_matchings/unknown_0C86A0/func_800C8284.s new file mode 100644 index 00000000..f6674ab6 --- /dev/null +++ b/lib/asm/non_matchings/unknown_0C86A0/func_800C8284.s @@ -0,0 +1,70 @@ +glabel func_800C8284 +/* 0C8E84 800C8284 8C8E0000 */ lw $t6, ($a0) +/* 0C8E88 800C8288 44856000 */ mtc1 $a1, $f12 +/* 0C8E8C 800C828C 3C01800F */ lui $at, 0x800f +/* 0C8E90 800C8290 8DCF0040 */ lw $t7, 0x40($t6) +/* 0C8E94 800C8294 D42694B0 */ ldc1 $f6, -0x6b50($at) +/* 0C8E98 800C8298 46006121 */ cvt.d.s $f4, $f12 +/* 0C8E9C 800C829C 448F5000 */ mtc1 $t7, $f10 +/* 0C8EA0 800C82A0 46262202 */ mul.d $f8, $f4, $f6 +/* 0C8EA4 800C82A4 3C0141F0 */ li $at, 0x41F00000 # 30.000000 +/* 0C8EA8 800C82A8 05E10005 */ bgez $t7, .L800C82C0 +/* 0C8EAC 800C82AC 46805421 */ cvt.d.w $f16, $f10 +/* 0C8EB0 800C82B0 44819800 */ mtc1 $at, $f19 +/* 0C8EB4 800C82B4 44809000 */ mtc1 $zero, $f18 +/* 0C8EB8 800C82B8 00000000 */ nop +/* 0C8EBC 800C82BC 46328400 */ add.d $f16, $f16, $f18 +.L800C82C0: +/* 0C8EC0 800C82C0 44863000 */ mtc1 $a2, $f6 +/* 0C8EC4 800C82C4 46304102 */ mul.d $f4, $f8, $f16 +/* 0C8EC8 800C82C8 3C0141F0 */ li $at, 0x41F00000 # 30.000000 +/* 0C8ECC 800C82CC 04C10005 */ bgez $a2, .L800C82E4 +/* 0C8ED0 800C82D0 468032A1 */ cvt.d.w $f10, $f6 +/* 0C8ED4 800C82D4 44819800 */ mtc1 $at, $f19 +/* 0C8ED8 800C82D8 44809000 */ mtc1 $zero, $f18 +/* 0C8EDC 800C82DC 00000000 */ nop +/* 0C8EE0 800C82E0 46325280 */ add.d $f10, $f10, $f18 +.L800C82E4: +/* 0C8EE4 800C82E4 462A2203 */ div.d $f8, $f4, $f10 +/* 0C8EE8 800C82E8 24020001 */ li $v0, 1 +/* 0C8EEC 800C82EC 3C0141E0 */ li $at, 0x41E00000 # 28.000000 +/* 0C8EF0 800C82F0 4458F800 */ cfc1 $t8, $31 +/* 0C8EF4 800C82F4 44C2F800 */ ctc1 $v0, $31 +/* 0C8EF8 800C82F8 00000000 */ nop +/* 0C8EFC 800C82FC 46204424 */ cvt.w.d $f16, $f8 +/* 0C8F00 800C8300 4442F800 */ cfc1 $v0, $31 +/* 0C8F04 800C8304 00000000 */ nop +/* 0C8F08 800C8308 30420078 */ andi $v0, $v0, 0x78 +/* 0C8F0C 800C830C 50400016 */ beql $v0, $zero, .L800C8368 +/* 0C8F10 800C8310 44028000 */ mfc1 $v0, $f16 +/* 0C8F14 800C8314 44818800 */ mtc1 $at, $f17 +/* 0C8F18 800C8318 44808000 */ mtc1 $zero, $f16 +/* 0C8F1C 800C831C 24020001 */ li $v0, 1 +/* 0C8F20 800C8320 3C018000 */ lui $at, 0x8000 +/* 0C8F24 800C8324 46304401 */ sub.d $f16, $f8, $f16 +/* 0C8F28 800C8328 44C2F800 */ ctc1 $v0, $31 +/* 0C8F2C 800C832C 00000000 */ nop +/* 0C8F30 800C8330 46208424 */ cvt.w.d $f16, $f16 +/* 0C8F34 800C8334 4442F800 */ cfc1 $v0, $31 +/* 0C8F38 800C8338 00000000 */ nop +/* 0C8F3C 800C833C 30420078 */ andi $v0, $v0, 0x78 +/* 0C8F40 800C8340 54400006 */ bnezl $v0, .L800C835C +/* 0C8F44 800C8344 44D8F800 */ ctc1 $t8, $31 +/* 0C8F48 800C8348 44028000 */ mfc1 $v0, $f16 +/* 0C8F4C 800C834C 44D8F800 */ ctc1 $t8, $31 +/* 0C8F50 800C8350 03E00008 */ jr $ra +/* 0C8F54 800C8354 00411025 */ or $v0, $v0, $at + +/* 0C8F58 800C8358 44D8F800 */ ctc1 $t8, $31 +.L800C835C: +/* 0C8F5C 800C835C 03E00008 */ jr $ra +/* 0C8F60 800C8360 2402FFFF */ li $v0, -1 + +/* 0C8F64 800C8364 44028000 */ mfc1 $v0, $f16 +.L800C8368: +/* 0C8F68 800C8368 00000000 */ nop +/* 0C8F6C 800C836C 0442FFFB */ bltzl $v0, .L800C835C +/* 0C8F70 800C8370 44D8F800 */ ctc1 $t8, $31 +/* 0C8F74 800C8374 44D8F800 */ ctc1 $t8, $31 +/* 0C8F78 800C8378 03E00008 */ jr $ra +/* 0C8F7C 800C837C 00000000 */ nop \ No newline at end of file diff --git a/lib/asm/non_matchings/unknown_0C86A0/func_800C8380.s b/lib/asm/non_matchings/unknown_0C86A0/func_800C8380.s new file mode 100644 index 00000000..150108f6 --- /dev/null +++ b/lib/asm/non_matchings/unknown_0C86A0/func_800C8380.s @@ -0,0 +1,30 @@ +glabel func_800C8380 +/* 0C8F80 800C8380 44852000 */ mtc1 $a1, $f4 +/* 0C8F84 800C8384 44864000 */ mtc1 $a2, $f8 +/* 0C8F88 800C8388 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 +/* 0C8F8C 800C838C 468021A0 */ cvt.s.w $f6, $f4 +/* 0C8F90 800C8390 04C10004 */ bgez $a2, .L800C83A4 +/* 0C8F94 800C8394 468042A0 */ cvt.s.w $f10, $f8 +/* 0C8F98 800C8398 44818000 */ mtc1 $at, $f16 +/* 0C8F9C 800C839C 00000000 */ nop +/* 0C8FA0 800C83A0 46105280 */ add.s $f10, $f10, $f16 +.L800C83A4: +/* 0C8FA4 800C83A4 8C8E0000 */ lw $t6, ($a0) +/* 0C8FA8 800C83A8 460A3482 */ mul.s $f18, $f6, $f10 +/* 0C8FAC 800C83AC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 +/* 0C8FB0 800C83B0 8DCF0040 */ lw $t7, 0x40($t6) +/* 0C8FB4 800C83B4 448F4000 */ mtc1 $t7, $f8 +/* 0C8FB8 800C83B8 46009121 */ cvt.d.s $f4, $f18 +/* 0C8FBC 800C83BC 05E10004 */ bgez $t7, .L800C83D0 +/* 0C8FC0 800C83C0 46804420 */ cvt.s.w $f16, $f8 +/* 0C8FC4 800C83C4 44813000 */ mtc1 $at, $f6 +/* 0C8FC8 800C83C8 00000000 */ nop +/* 0C8FCC 800C83CC 46068400 */ add.s $f16, $f16, $f6 +.L800C83D0: +/* 0C8FD0 800C83D0 3C01800F */ lui $at, 0x800f +/* 0C8FD4 800C83D4 D43294B8 */ ldc1 $f18, -0x6b48($at) +/* 0C8FD8 800C83D8 460082A1 */ cvt.d.s $f10, $f16 +/* 0C8FDC 800C83DC 46325202 */ mul.d $f8, $f10, $f18 +/* 0C8FE0 800C83E0 46282183 */ div.d $f6, $f4, $f8 +/* 0C8FE4 800C83E4 03E00008 */ jr $ra +/* 0C8FE8 800C83E8 46203020 */ cvt.s.d $f0, $f6 diff --git a/lib/asm/non_matchings/unknown_0C9160/func_800C8560.s b/lib/asm/non_matchings/unknown_0C9160/alCSPSetSeq.s similarity index 97% rename from lib/asm/non_matchings/unknown_0C9160/func_800C8560.s rename to lib/asm/non_matchings/unknown_0C9160/alCSPSetSeq.s index bf6e8685..00ce0e6b 100644 --- a/lib/asm/non_matchings/unknown_0C9160/func_800C8560.s +++ b/lib/asm/non_matchings/unknown_0C9160/alCSPSetSeq.s @@ -1,4 +1,4 @@ -glabel func_800C8560 +glabel alCSPSetSeq /* 0C9160 800C8560 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0C9164 800C8564 AFBF0014 */ sw $ra, 0x14($sp) /* 0C9168 800C8568 240E000D */ li $t6, 13 diff --git a/lib/asm/non_matchings/unknown_0C91A0/func_800C85A0.s b/lib/asm/non_matchings/unknown_0C91A0/alCSPPlay.s similarity index 96% rename from lib/asm/non_matchings/unknown_0C91A0/func_800C85A0.s rename to lib/asm/non_matchings/unknown_0C91A0/alCSPPlay.s index ef86c0a5..ed8749fe 100644 --- a/lib/asm/non_matchings/unknown_0C91A0/func_800C85A0.s +++ b/lib/asm/non_matchings/unknown_0C91A0/alCSPPlay.s @@ -1,4 +1,4 @@ -glabel func_800C85A0 +glabel alCSPPlay /* 0C91A0 800C85A0 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0C91A4 800C85A4 AFBF0014 */ sw $ra, 0x14($sp) /* 0C91A8 800C85A8 240E000F */ li $t6, 15 diff --git a/lib/asm/non_matchings/unknown_0C91A0/func_800C85D0.s b/lib/asm/non_matchings/unknown_0C91A0/alCSPStop.s similarity index 96% rename from lib/asm/non_matchings/unknown_0C91A0/func_800C85D0.s rename to lib/asm/non_matchings/unknown_0C91A0/alCSPStop.s index 9805a0ea..212d2804 100644 --- a/lib/asm/non_matchings/unknown_0C91A0/func_800C85D0.s +++ b/lib/asm/non_matchings/unknown_0C91A0/alCSPStop.s @@ -1,4 +1,4 @@ -glabel func_800C85D0 +glabel alCSPStop /* 0C91D0 800C85D0 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0C91D4 800C85D4 AFBF0014 */ sw $ra, 0x14($sp) /* 0C91D8 800C85D8 240E0011 */ li $t6, 17 diff --git a/lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s b/lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s deleted file mode 100644 index 6d92682b..00000000 --- a/lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s +++ /dev/null @@ -1,89 +0,0 @@ -glabel alSynAllocVoice -/* 0CA108 800C9508 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0CA10C 800C950C AFBF001C */ sw $ra, 0x1c($sp) -/* 0CA110 800C9510 AFB00018 */ sw $s0, 0x18($sp) -/* 0CA114 800C9514 AFA40030 */ sw $a0, 0x30($sp) -/* 0CA118 800C9518 AFA0002C */ sw $zero, 0x2c($sp) -/* 0CA11C 800C951C 84CE0000 */ lh $t6, ($a2) -/* 0CA120 800C9520 00A08025 */ move $s0, $a1 -/* 0CA124 800C9524 A4AE0016 */ sh $t6, 0x16($a1) -/* 0CA128 800C9528 90CF0004 */ lbu $t7, 4($a2) -/* 0CA12C 800C952C ACA0000C */ sw $zero, 0xc($a1) -/* 0CA130 800C9530 A4AF001A */ sh $t7, 0x1a($a1) -/* 0CA134 800C9534 84D80002 */ lh $t8, 2($a2) -/* 0CA138 800C9538 A4A00014 */ sh $zero, 0x14($a1) -/* 0CA13C 800C953C ACA00008 */ sw $zero, 8($a1) -/* 0CA140 800C9540 A4B80018 */ sh $t8, 0x18($a1) -/* 0CA144 800C9544 84C60000 */ lh $a2, ($a2) -/* 0CA148 800C9548 8FA40030 */ lw $a0, 0x30($sp) -/* 0CA14C 800C954C 0C032508 */ jal _allocatePVoice -/* 0CA150 800C9550 27A5002C */ addiu $a1, $sp, 0x2c -/* 0CA154 800C9554 8FB9002C */ lw $t9, 0x2c($sp) -/* 0CA158 800C9558 53200035 */ beql $t9, $zero, .L800C9630 -/* 0CA15C 800C955C 8FA2002C */ lw $v0, 0x2c($sp) -/* 0CA160 800C9560 1040002C */ beqz $v0, .L800C9614 -/* 0CA164 800C9564 8F24000C */ lw $a0, 0xc($t9) -/* 0CA168 800C9568 24080200 */ li $t0, 512 -/* 0CA16C 800C956C AF2800D8 */ sw $t0, 0xd8($t9) -/* 0CA170 800C9570 8FA9002C */ lw $t1, 0x2c($sp) -/* 0CA174 800C9574 8D2A0008 */ lw $t2, 8($t1) -/* 0CA178 800C9578 AD400008 */ sw $zero, 8($t2) -/* 0CA17C 800C957C 0C01959A */ jal __allocParam -/* 0CA180 800C9580 AFA40028 */ sw $a0, 0x28($sp) -/* 0CA184 800C9584 8FAB0030 */ lw $t3, 0x30($sp) -/* 0CA188 800C9588 8FA40028 */ lw $a0, 0x28($sp) -/* 0CA18C 800C958C 240D000B */ li $t5, 11 -/* 0CA190 800C9590 8D6C001C */ lw $t4, 0x1c($t3) -/* 0CA194 800C9594 A44D0008 */ sh $t5, 8($v0) -/* 0CA198 800C9598 AC40000C */ sw $zero, 0xc($v0) -/* 0CA19C 800C959C AC4C0004 */ sw $t4, 4($v0) -/* 0CA1A0 800C95A0 8FAE002C */ lw $t6, 0x2c($sp) -/* 0CA1A4 800C95A4 24050003 */ li $a1, 3 -/* 0CA1A8 800C95A8 00403025 */ move $a2, $v0 -/* 0CA1AC 800C95AC 8DCF00D8 */ lw $t7, 0xd8($t6) -/* 0CA1B0 800C95B0 25F8FFC0 */ addiu $t8, $t7, -0x40 -/* 0CA1B4 800C95B4 AC580010 */ sw $t8, 0x10($v0) -/* 0CA1B8 800C95B8 8C990008 */ lw $t9, 8($a0) -/* 0CA1BC 800C95BC 0320F809 */ jalr $t9 -/* 0CA1C0 800C95C0 00000000 */ nop -/* 0CA1C4 800C95C4 0C01959A */ jal __allocParam -/* 0CA1C8 800C95C8 00000000 */ nop -/* 0CA1CC 800C95CC 8FA40028 */ lw $a0, 0x28($sp) -/* 0CA1D0 800C95D0 10400012 */ beqz $v0, .L800C961C -/* 0CA1D4 800C95D4 00403025 */ move $a2, $v0 -/* 0CA1D8 800C95D8 8FA80030 */ lw $t0, 0x30($sp) -/* 0CA1DC 800C95DC 8FAA002C */ lw $t2, 0x2c($sp) -/* 0CA1E0 800C95E0 240D000F */ li $t5, 15 -/* 0CA1E4 800C95E4 8D09001C */ lw $t1, 0x1c($t0) -/* 0CA1E8 800C95E8 8D4B00D8 */ lw $t3, 0xd8($t2) -/* 0CA1EC 800C95EC A44D0008 */ sh $t5, 8($v0) -/* 0CA1F0 800C95F0 AC400000 */ sw $zero, ($v0) -/* 0CA1F4 800C95F4 012B6021 */ addu $t4, $t1, $t3 -/* 0CA1F8 800C95F8 AC4C0004 */ sw $t4, 4($v0) -/* 0CA1FC 800C95FC 8C990008 */ lw $t9, 8($a0) -/* 0CA200 800C9600 24050003 */ li $a1, 3 -/* 0CA204 800C9604 0320F809 */ jalr $t9 -/* 0CA208 800C9608 00000000 */ nop -/* 0CA20C 800C960C 10000004 */ b .L800C9620 -/* 0CA210 800C9610 8FAF002C */ lw $t7, 0x2c($sp) -.L800C9614: -/* 0CA214 800C9614 8FAE002C */ lw $t6, 0x2c($sp) -/* 0CA218 800C9618 ADC000D8 */ sw $zero, 0xd8($t6) -.L800C961C: -/* 0CA21C 800C961C 8FAF002C */ lw $t7, 0x2c($sp) -.L800C9620: -/* 0CA220 800C9620 ADF00008 */ sw $s0, 8($t7) -/* 0CA224 800C9624 8FB8002C */ lw $t8, 0x2c($sp) -/* 0CA228 800C9628 AE180008 */ sw $t8, 8($s0) -/* 0CA22C 800C962C 8FA2002C */ lw $v0, 0x2c($sp) -.L800C9630: -/* 0CA230 800C9630 8FBF001C */ lw $ra, 0x1c($sp) -/* 0CA234 800C9634 8FB00018 */ lw $s0, 0x18($sp) -/* 0CA238 800C9638 0002402B */ sltu $t0, $zero, $v0 -/* 0CA23C 800C963C 01001025 */ move $v0, $t0 -/* 0CA240 800C9640 03E00008 */ jr $ra -/* 0CA244 800C9644 27BD0030 */ addiu $sp, $sp, 0x30 - -/* 0CA248 800C9648 00000000 */ nop -/* 0CA24C 800C964C 00000000 */ nop - diff --git a/lib/src/unknown_0C8660.c b/lib/src/unknown_0C8660.c index f9d9f896..fde9c60b 100644 --- a/lib/src/unknown_0C8660.c +++ b/lib/src/unknown_0C8660.c @@ -4,4 +4,4 @@ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C8660/func_800C7A60.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C8660/alCSPSetBank.s") diff --git a/lib/src/unknown_0C86A0.c b/lib/src/unknown_0C86A0.c index ee6958e2..a7b76c46 100644 --- a/lib/src/unknown_0C86A0.c +++ b/lib/src/unknown_0C86A0.c @@ -3,11 +3,22 @@ #include "types.h" #include "macros.h" +#include "audio_internal.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/alCSeqSetLoc.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/alCSeqGetLoc.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/func_800C7AA0.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/func_800C7B40.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/__getTrackByte.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/__readVarLen.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/__alCSeqGetTrackEvent.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/func_800C7FFC.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/alCSeqNew.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/alCSeqNewMarker.s") + +s32 alCSeqGetTicks(ALCSeq *seq) +{ + return seq->lastTicks; +} + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/func_800C8284.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/func_800C8380.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C86A0/__alCSeqNextDelta.s") diff --git a/lib/src/unknown_0C9160.c b/lib/src/unknown_0C9160.c index b759f273..9d5dcb69 100644 --- a/lib/src/unknown_0C9160.c +++ b/lib/src/unknown_0C9160.c @@ -4,4 +4,4 @@ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9160/func_800C8560.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9160/alCSPSetSeq.s") diff --git a/lib/src/unknown_0C91A0.c b/lib/src/unknown_0C91A0.c index af7f01cc..1c3dc5bb 100644 --- a/lib/src/unknown_0C91A0.c +++ b/lib/src/unknown_0C91A0.c @@ -5,8 +5,8 @@ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/func_800C85A0.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/func_800C85D0.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/alCSPPlay.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/alCSPStop.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/func_800C8600.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/alUnlink.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0C91A0/alLink.s") diff --git a/lib/src/unknown_0C9C90.c b/lib/src/unknown_0C9C90.c index a7a91823..e7c1e684 100644 --- a/lib/src/unknown_0C9C90.c +++ b/lib/src/unknown_0C9C90.c @@ -205,7 +205,6 @@ s32 _allocatePVoice(ALSynth *drvr, PVoice **pvoice, s16 priority) } #endif -//GLOBAL_ASM("lib/asm/non_matchings/unknown_0C9C90/alSynAllocVoice.s") s32 alSynAllocVoice(ALSynth *drvr, ALVoice *voice, ALVoiceConfig *vc) { PVoice *pvoice = 0; From d153068805029918b0fec77d61ed77978f5116bb Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Thu, 6 Aug 2020 02:31:00 -0500 Subject: [PATCH 11/11] audio documention --- asm/non_matchings/unknown_001050/func_80000450.s | 4 ++-- .../unknown_0C81A0/{func_800C75B0.s => _bnkfPatchBank.s} | 2 +- .../unknown_0C81A0/{func_800C76A4.s => alBnkfNew.s} | 6 +++--- src/unknown_0C81A0.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) rename asm/non_matchings/unknown_0C81A0/{func_800C75B0.s => _bnkfPatchBank.s} (99%) rename asm/non_matchings/unknown_0C81A0/{func_800C76A4.s => alBnkfNew.s} (96%) diff --git a/asm/non_matchings/unknown_001050/func_80000450.s b/asm/non_matchings/unknown_001050/func_80000450.s index ed42207b..b68be390 100644 --- a/asm/non_matchings/unknown_001050/func_80000450.s +++ b/asm/non_matchings/unknown_001050/func_80000450.s @@ -35,7 +35,7 @@ glabel func_80000450 /* 0010D4 800004D4 0C01DBBA */ jal func_80076EE8 /* 0010D8 800004D8 24040027 */ li $a0, 39 /* 0010DC 800004DC 8E040000 */ lw $a0, ($s0) -/* 0010E0 800004E0 0C031DA9 */ jal func_800C76A4 +/* 0010E0 800004E0 0C031DA9 */ jal alBnkfNew /* 0010E4 800004E4 00402825 */ move $a1, $v0 /* 0010E8 800004E8 8E59001C */ lw $t9, 0x1c($s2) /* 0010EC 800004EC 8E490018 */ lw $t1, 0x18($s2) @@ -103,7 +103,7 @@ glabel func_80000450 /* 0011E4 800005E4 0C01DBBA */ jal func_80076EE8 /* 0011E8 800005E8 24040027 */ li $a0, 39 /* 0011EC 800005EC 8E040000 */ lw $a0, ($s0) -/* 0011F0 800005F0 0C031DA9 */ jal func_800C76A4 +/* 0011F0 800005F0 0C031DA9 */ jal alBnkfNew /* 0011F4 800005F4 00402825 */ move $a1, $v0 /* 0011F8 800005F8 3C068011 */ lui $a2, %hi(D_80115CE8) # $a2, 0x8011 /* 0011FC 800005FC 24090004 */ li $t1, 4 diff --git a/asm/non_matchings/unknown_0C81A0/func_800C75B0.s b/asm/non_matchings/unknown_0C81A0/_bnkfPatchBank.s similarity index 99% rename from asm/non_matchings/unknown_0C81A0/func_800C75B0.s rename to asm/non_matchings/unknown_0C81A0/_bnkfPatchBank.s index f7fd1ee6..8e62cf81 100644 --- a/asm/non_matchings/unknown_0C81A0/func_800C75B0.s +++ b/asm/non_matchings/unknown_0C81A0/_bnkfPatchBank.s @@ -1,4 +1,4 @@ -glabel func_800C75B0 +glabel _bnkfPatchBank /* 0C81B0 800C75B0 908E0003 */ lbu $t6, 3($a0) /* 0C81B4 800C75B4 15C00037 */ bnez $t6, .L800C7694 /* 0C81B8 800C75B8 00000000 */ nop diff --git a/asm/non_matchings/unknown_0C81A0/func_800C76A4.s b/asm/non_matchings/unknown_0C81A0/alBnkfNew.s similarity index 96% rename from asm/non_matchings/unknown_0C81A0/func_800C76A4.s rename to asm/non_matchings/unknown_0C81A0/alBnkfNew.s index 10490029..106aad45 100644 --- a/asm/non_matchings/unknown_0C81A0/func_800C76A4.s +++ b/asm/non_matchings/unknown_0C81A0/alBnkfNew.s @@ -1,4 +1,4 @@ -glabel func_800C76A4 +glabel alBnkfNew /* 0C82A4 800C76A4 27BDFFD0 */ addiu $sp, $sp, -0x30 /* 0C82A8 800C76A8 AFBF002C */ sw $ra, 0x2c($sp) /* 0C82AC 800C76AC AFB40028 */ sw $s4, 0x28($sp) @@ -32,7 +32,7 @@ glabel func_800C76A4 /* 0C8318 800C7718 00502021 */ addu $a0, $v0, $s0 /* 0C831C 800C771C AF240008 */ sw $a0, 8($t9) /* 0C8320 800C7720 02002825 */ move $a1, $s0 -/* 0C8324 800C7724 0C031D6C */ jal func_800C75B0 +/* 0C8324 800C7724 0C031D6C */ jal _bnkfPatchBank /* 0C8328 800C7728 02203825 */ move $a3, $s1 .L800C772C: /* 0C832C 800C772C 85B80000 */ lh $t8, ($t5) @@ -45,7 +45,7 @@ glabel func_800C76A4 /* 0C8344 800C7744 03302021 */ addu $a0, $t9, $s0 /* 0C8348 800C7748 10800003 */ beqz $a0, .L800C7758 /* 0C834C 800C774C AD64000C */ sw $a0, 0xc($t3) -/* 0C8350 800C7750 0C031D6C */ jal func_800C75B0 +/* 0C8350 800C7750 0C031D6C */ jal _bnkfPatchBank /* 0C8354 800C7754 02203825 */ move $a3, $s1 .L800C7758: /* 0C8358 800C7758 85AF0000 */ lh $t7, ($t5) diff --git a/src/unknown_0C81A0.c b/src/unknown_0C81A0.c index dd4926b9..32f19620 100644 --- a/src/unknown_0C81A0.c +++ b/src/unknown_0C81A0.c @@ -7,6 +7,6 @@ void dummy_800C75A0(void) {} void dummy_800C75A8(void) {} -GLOBAL_ASM("asm/non_matchings/unknown_0C81A0/func_800C75B0.s") -GLOBAL_ASM("asm/non_matchings/unknown_0C81A0/func_800C76A4.s") +GLOBAL_ASM("asm/non_matchings/unknown_0C81A0/_bnkfPatchBank.s") +GLOBAL_ASM("asm/non_matchings/unknown_0C81A0/alBnkfNew.s") GLOBAL_ASM("asm/non_matchings/unknown_0C81A0/func_800C77A8.s")