SSBM Decomp
Loading...
Searching...
No Matches
synth.c File Reference
#include "synth.h"
#include "synth.static.h"
#include <math_ppc.h>
#include <dolphin/ai.h>
#include <dolphin/ar.h>
#include <dolphin/os.h>
#include <sysdolphin/baselib/debug.h>
#include <sysdolphin/baselib/devcom.h>

Functions

static int HSD_Synth_80389334 (int sfx_id, u8 vol, u8 vol2, u8 pan, int priority, u8 itd_flag, float pitch1, float pitch2, float mix_main, float mix_auxA, float mix_auxB)
 
void * HSD_AudioMalloc (size_t size)
 
void HSD_AudioFree (void *ptr)
 
static void HSD_SynthSFXHeaderLoadCallback (int result, int length, void *addr, int cancelflag)
 
void HSD_SynthSFXLoadNewProc (void)
 
int HSD_SynthSFXLoad (const char *filename, int bankID, int flags, int mode)
 
void HSD_SynthSFXWaitForLoadCompletion (void(*callback)(void))
 
int HSD_SynthSFXGetPendingLoadCount (void)
 
int HSD_SynthSFXCancelLoad (int entrynum)
 
void HSD_SynthSFXAllocateBank (int size)
 
static void HSD_SynthSFXUnloadBank_inline (AXVPB *vpb)
 
void HSD_SynthSFXUnloadBank (int bank_id)
 
void HSD_Synth_80388DC8 (int sfx_id)
 
void HSD_Synth_80388E08 (int sfx_id)
 
static void HSD_SynthSFXGroupDataReaddressCallback (void *result, int length, void *addr, int cancelflag)
 
void HSD_SynthSFXBankDeflag (int bank_id)
 HSD_SynthSFXGroupDataReaddress
 
void HSD_SynthSFXBankDeflagSync (void)
 
u32 HSD_SynthGetSoundMode (void)
 
void HSD_SynthSetSoundMode (int mode)
 
void HSD_SynthSFXStopNode (struct HSD_SynthSFXNode *node)
 
void dropcallback (void *dropped)
 
static struct HSD_SynthSFXNodegetNode (int sfx_id)
 
bool HSD_SynthSFXPlayWithGroup (int sfx_id, u8 vol, u8 vol2, u8 pan, int priority, u8 itd_flag, int group, f32 pitch1, f32 pitch2, f32 mix_main, f32 mix_auxA, f32 mix_auxB)
 
static void freeVoices (struct HSD_SynthSFXNode *node)
 
void HSD_SynthSFXKeyOff (int id)
 
static void stopRange (size_t lo, size_t hi)
 
void HSD_SynthSFXStopRange (int bank_id)
 
void HSD_SynthSFXPause (int sfx_id)
 
void HSD_SynthSFXResume (int sfx_id)
 
int HSD_SynthSFXCheck (int sfx_id)
 
void HSD_SynthSFXSetVolumeFade (int sfx_id, u8 vol, int flag)
 
void HSD_SynthSFXSetUserVol (int sfx_id, u8 vol)
 
void HSD_SynthSFXSetMix (int sfx_id, float mix_main, float mix_auxA, float mix_auxB)
 
void HSD_SynthSFXUpdatePitch (struct HSD_SynthSFXNode *node)
 
void HSD_SynthSFXSetPitchRatio (int sfx_id, int flag, float ratio)
 
void HSD_SynthSFXSetPriority (int id, int prio)
 
void HSD_SynthSFXUpdateVolume (struct HSD_SynthSFXNode *node)
 HSD_Synth_8038A000
 
static void my_memzero (void *dst_raw, size_t size)
 
void HSD_SynthSFXUpdateMix (struct HSD_SynthSFXNode *node, int interpolate)
 
static void updateAllVolume (u32 mask)
 
void HSD_SynthSFXUpdateAllVolume (int vol, u16 fade_frames, int channel)
 
void HSD_SynthSFXSetDriverInactivatedCallback (UNK_T callback)
 
void HSD_SynthSFXSetDriverMasterClockCallback (UNK_T callback)
 
void HSD_SynthSFXSetDriverPauseCallback (UNK_T callback)
 
void HSD_SynthCallback (void)
 
void HSD_SynthResetStreamCounters (int result, int length, void *buf, bool b)
 
void HSD_Synth_8038AD74 (u32 offset, uintptr_t src)
 
void HSD_SynthPStreamFirstHakoHeaderCallback (void)
 #HSD_Synth_8038ADD0(void)
 
static void HSD_Synth_8038B5AC_inline (void)
 HSD_SynthPStreamHeaderCallback
 
int HSD_Synth_8038B5AC (int entrynum, u8 vol, u8 vol2, int channel)
 
void HSD_SynthStreamSetVolume (f32 volume)
 
void HSD_SynthInit (int dsp_size, int voices, int stream_size, int bank_size)
 

Variables

void * HSD_Synth_804D7730
 HSD_SynthSFXSampleLoadCallback
 
u8 data_pad [0x2C] = { 0 }
 
u8 data_pad_2 [0x84] = { 0 }
 
static AXPBMIX lbl_80407FB4 = { 0 }
 
static AXPBSRC HSD_Synth_80407FD8 = { 1, 0, 0, { 0, 0, 0, 0 } }
 
static u8 lbl_8040806C []
 
s32 HSD_Synth_804D7764
 

Function Documentation

◆ HSD_Synth_80389334()

int HSD_Synth_80389334 ( int  sfx_id,
u8  vol,
u8  vol2,
u8  pan,
int  priority,
u8  itd_flag,
float  pitch1,
float  pitch2,
float  mix_main,
float  mix_auxA,
float  mix_auxB 
)
static
Todo:
Currently 95.4% match - register allocation shifted by 1 (r29 reuse for loop counter and computation missing)
Todo:
Type pun writes ratioHi+ratioLo as u32; no union in AXPBSRC. Needed for match - AXPBSRC lacks a u32 ratio field.

<

Todo:
what is going on here...

◆ HSD_AudioMalloc()

void * HSD_AudioMalloc ( size_t  size)

◆ HSD_AudioFree()

void HSD_AudioFree ( void *  ptr)

◆ HSD_SynthSFXHeaderLoadCallback()

static void HSD_SynthSFXHeaderLoadCallback ( int  result,
int  length,
void *  addr,
int  cancelflag 
)
static

◆ HSD_SynthSFXLoadNewProc()

void HSD_SynthSFXLoadNewProc ( void  )

◆ HSD_SynthSFXLoad()

int HSD_SynthSFXLoad ( const char *  filename,
int  bankID,
int  flags,
int  mode 
)

◆ HSD_SynthSFXWaitForLoadCompletion()

void HSD_SynthSFXWaitForLoadCompletion ( void(*)(void)  callback)

◆ HSD_SynthSFXGetPendingLoadCount()

int HSD_SynthSFXGetPendingLoadCount ( void  )

◆ HSD_SynthSFXCancelLoad()

int HSD_SynthSFXCancelLoad ( int  entrynum)

◆ HSD_SynthSFXAllocateBank()

void HSD_SynthSFXAllocateBank ( int  size)

◆ HSD_SynthSFXUnloadBank_inline()

static void HSD_SynthSFXUnloadBank_inline ( AXVPB *  vpb)
inlinestatic

◆ HSD_SynthSFXUnloadBank()

void HSD_SynthSFXUnloadBank ( int  bank_id)

◆ HSD_Synth_80388DC8()

void HSD_Synth_80388DC8 ( int  sfx_id)
Todo:
Currently 97.2% match - add instruction uses r4 instead of r5 as destination (register allocation swap for prev/cur)

◆ HSD_Synth_80388E08()

void HSD_Synth_80388E08 ( int  sfx_id)
Todo:
AXVPB prev must be a signed int type, not a pointer

◆ HSD_SynthSFXGroupDataReaddressCallback()

static void HSD_SynthSFXGroupDataReaddressCallback ( void *  result,
int  length,
void *  addr,
int  cancelflag 
)
static

◆ HSD_SynthSFXBankDeflag()

void HSD_SynthSFXBankDeflag ( int  bank_id)

◆ HSD_SynthSFXBankDeflagSync()

void HSD_SynthSFXBankDeflagSync ( void  )

◆ HSD_SynthGetSoundMode()

u32 HSD_SynthGetSoundMode ( void  )

◆ HSD_SynthSetSoundMode()

void HSD_SynthSetSoundMode ( int  mode)

◆ HSD_SynthSFXStopNode()

void HSD_SynthSFXStopNode ( struct HSD_SynthSFXNode node)

◆ dropcallback()

void dropcallback ( void *  dropped)
Todo:
Currently ~90% match - second loop uses pointer arithmetic instead of indexed store (stwx). Stack frame is 8 bytes too large.

Search HSD_Synth_804C28E0 queue for this voice and remove it

Secondary voice - follow to primary node

◆ getNode()

static struct HSD_SynthSFXNode * getNode ( int  sfx_id)
inlinestatic

◆ HSD_SynthSFXPlayWithGroup()

bool HSD_SynthSFXPlayWithGroup ( int  sfx_id,
u8  vol,
u8  vol2,
u8  pan,
int  priority,
u8  itd_flag,
int  group,
f32  pitch1,
f32  pitch2,
f32  mix_main,
f32  mix_auxA,
f32  mix_auxB 
)

◆ freeVoices()

static void freeVoices ( struct HSD_SynthSFXNode node)
inlinestatic

◆ HSD_SynthSFXKeyOff()

void HSD_SynthSFXKeyOff ( int  id)

◆ stopRange()

static void stopRange ( size_t  lo,
size_t  hi 
)
inlinestatic

◆ HSD_SynthSFXStopRange()

void HSD_SynthSFXStopRange ( int  bank_id)

◆ HSD_SynthSFXPause()

void HSD_SynthSFXPause ( int  sfx_id)

◆ HSD_SynthSFXResume()

void HSD_SynthSFXResume ( int  sfx_id)

◆ HSD_SynthSFXCheck()

int HSD_SynthSFXCheck ( int  sfx_id)

◆ HSD_SynthSFXSetVolumeFade()

void HSD_SynthSFXSetVolumeFade ( int  sfx_id,
u8  vol,
int  flag 
)

◆ HSD_SynthSFXSetUserVol()

void HSD_SynthSFXSetUserVol ( int  sfx_id,
u8  vol 
)

◆ HSD_SynthSFXSetMix()

void HSD_SynthSFXSetMix ( int  sfx_id,
float  mix_main,
float  mix_auxA,
float  mix_auxB 
)

◆ HSD_SynthSFXUpdatePitch()

void HSD_SynthSFXUpdatePitch ( struct HSD_SynthSFXNode node)

◆ HSD_SynthSFXSetPitchRatio()

void HSD_SynthSFXSetPitchRatio ( int  sfx_id,
int  flag,
float  ratio 
)

◆ HSD_SynthSFXSetPriority()

void HSD_SynthSFXSetPriority ( int  id,
int  prio 
)

◆ HSD_SynthSFXUpdateVolume()

void HSD_SynthSFXUpdateVolume ( struct HSD_SynthSFXNode node)

◆ my_memzero()

static void my_memzero ( void *  dst_raw,
size_t  size 
)
inlinestatic

◆ HSD_SynthSFXUpdateMix()

void HSD_SynthSFXUpdateMix ( struct HSD_SynthSFXNode node,
int  interpolate 
)

◆ updateAllVolume()

static void updateAllVolume ( u32  mask)
inlinestatic

◆ HSD_SynthSFXUpdateAllVolume()

void HSD_SynthSFXUpdateAllVolume ( int  vol,
u16  fade_frames,
int  channel 
)

◆ HSD_SynthSFXSetDriverInactivatedCallback()

void HSD_SynthSFXSetDriverInactivatedCallback ( UNK_T  callback)

◆ HSD_SynthSFXSetDriverMasterClockCallback()

void HSD_SynthSFXSetDriverMasterClockCallback ( UNK_T  callback)

◆ HSD_SynthSFXSetDriverPauseCallback()

void HSD_SynthSFXSetDriverPauseCallback ( UNK_T  callback)

◆ HSD_SynthCallback()

void HSD_SynthCallback ( void  )

◆ HSD_SynthResetStreamCounters()

void HSD_SynthResetStreamCounters ( int  result,
int  length,
void *  buf,
bool  b 
)

◆ HSD_Synth_8038AD74()

void HSD_Synth_8038AD74 ( u32  offset,
uintptr_t  src 
)

◆ HSD_SynthPStreamFirstHakoHeaderCallback()

void HSD_SynthPStreamFirstHakoHeaderCallback ( void  )

#HSD_Synth_8038ADD0(void)

HSD_Synth_8038B120

◆ HSD_Synth_8038B5AC_inline()

static void HSD_Synth_8038B5AC_inline ( void  )
inlinestatic

◆ HSD_Synth_8038B5AC()

int HSD_Synth_8038B5AC ( int  entrynum,
u8  vol,
u8  vol2,
int  channel 
)

◆ HSD_SynthStreamSetVolume()

void HSD_SynthStreamSetVolume ( f32  volume)

◆ HSD_SynthInit()

void HSD_SynthInit ( int  dsp_size,
int  voices,
int  stream_size,
int  bank_size 
)

Loop unrolled to match original binary (loop version adds 8 bytes to stack frame due to compiler allocating space for the counter)

Variable Documentation

◆ HSD_Synth_804D7730

void* HSD_Synth_804D7730
extern

◆ data_pad

u8 data_pad[0x2C] = { 0 }

◆ data_pad_2

u8 data_pad_2[0x84] = { 0 }

◆ lbl_80407FB4

AXPBMIX lbl_80407FB4 = { 0 }
static

◆ HSD_Synth_80407FD8

AXPBSRC HSD_Synth_80407FD8 = { 1, 0, 0, { 0, 0, 0, 0 } }
static

◆ lbl_8040806C

u8 lbl_8040806C[]
static
Initial value:
= {
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04,
0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0A,
0x0B, 0x0B, 0x0C, 0x0C, 0x0D, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x10, 0x10,
0x11, 0x11, 0x12, 0x12, 0x13, 0x13, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16,
0x16, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19,
0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B,
0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
}

◆ HSD_Synth_804D7764

s32 HSD_Synth_804D7764
extern