Skip to content

Commit

Permalink
Minor refactoring & channel allocation fix
Browse files Browse the repository at this point in the history
  • Loading branch information
fincs committed Oct 26, 2014
1 parent eddecdb commit c0f69d6
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 10 deletions.
1 change: 0 additions & 1 deletion arm7/source/commands.c
Expand Up @@ -21,7 +21,6 @@ static void PrepareCh(fss_channel_t* pCh, int nCh)
//pCh->decayRate = 0;
pCh->releaseRate = 0xFFFF;

FSS_ChnVol[nCh] = 0;
FSS_NoteLengths[nCh] = -1;
}

Expand Down
10 changes: 6 additions & 4 deletions arm7/source/fssplayer.arm.c
Expand Up @@ -114,9 +114,9 @@ static int readvl(const u8** ppData)
return x;
}

static inline vs16* getVarPtr(int var, int trkId)
static inline vs16* getVarPtr(int var, fss_track_t* trk)
{
return _FSS_GetVarPtr(FSS_SharedWork, trkId, var);
return _FSS_GetVarPtr(FSS_SharedWork, trk->ply-FSS_Players, var);
}

static int readovr(const u8** ppData, fss_track_t* trk)
Expand All @@ -125,7 +125,7 @@ static int readovr(const u8** ppData, fss_track_t* trk)
if (trk->state & TS_OVRVARBIT)
{
trk->state &= ~TS_OVRVARBIT;
return *getVarPtr(read8(ppData), trk-FSS_Tracks);
return *getVarPtr(read8(ppData), trk);
}
return trk->ovrValue;
}
Expand Down Expand Up @@ -389,6 +389,9 @@ int Note_On(int trkNo, int key, int vel, int len)
fss_channel_t* chn;
int nCh;

if (trk->patch > GetBnkInstrCount(pBnk))
return -1;

u32 instInfo = GetInstrInBnk(pBnk, trk->patch);
const u8* pInstData = GetInstData(pBnk, instInfo);
const SBNKNOTEDEF* pNoteDef = NULL;
Expand Down Expand Up @@ -466,7 +469,6 @@ int Note_On(int trkNo, int key, int vel, int len)
chn->modDelayCnt = 0;
chn->modCounter = 0;
FSS_NoteLengths[nCh] = len;
FSS_ChnVol[nCh] = 0x7FF;

chn->attackLvl = Cnv_Attack(trk->a == 0xFF ? pNoteDef->a : trk->a);
chn->decayRate = Cnv_Fall(trk->d == 0xFF ? pNoteDef->d : trk->d);
Expand Down
5 changes: 5 additions & 0 deletions arm7/source/sbnkswar.h
Expand Up @@ -27,6 +27,11 @@ static inline const SWAVINFO* GetWavInWar(const u8* pWar, int id)
return (const SWAVINFO*)(pWar + ((const int*)(pWar+60))[id]);
}

static inline u32 GetBnkInstrCount(const u8* pBnk)
{
return *(const u32*)(pBnk + 56);
}

static inline u32 GetInstrInBnk(const u8* pBnk, int id)
{
return *(const u32*)(pBnk + 60 + sizeof(u32)*id);
Expand Down
6 changes: 3 additions & 3 deletions arm7/source/sndchannel.arm.c
Expand Up @@ -297,8 +297,8 @@ void Snd_UpdChannel(fss_channel_t* pCh, int nCh)
int Chn_Alloc(int type, int prio)
{
static const byte_t pcmChnArray[] = { 4, 5, 6, 7, 2, 0, 3, 1, 8, 9, 10, 11, 14, 12, 15, 13 };
static const byte_t psgChnArray[] = { 13, 12, 11, 10, 9, 8 };
static const byte_t noiseChnArray[] = { 15, 14 };
static const byte_t psgChnArray[] = { 8, 9, 10, 11, 12, 13 };
static const byte_t noiseChnArray[] = { 14, 15 };
static const byte_t arraySizes[] = { sizeof(pcmChnArray), sizeof(psgChnArray), sizeof(noiseChnArray) };
static const byte_t* const arrayArray[] = { pcmChnArray, psgChnArray, noiseChnArray };

Expand Down Expand Up @@ -326,7 +326,7 @@ int Chn_Alloc(int type, int prio)

if (curChnNo == -1 || prio < FSS_Channels[curChnNo].prio) return -1;
FSS_NoteLengths[curChnNo] = -1;
FSS_ChnVol[curChnNo] = 0;
FSS_ChnVol[curChnNo] = 0x7FF; // Special value that indicates 'unprocessed'
return curChnNo;
}

Expand Down
4 changes: 2 additions & 2 deletions common_inc/fsscommon.h
Expand Up @@ -172,12 +172,12 @@ typedef struct
s16 playerVars[FSS_PLAYERCOUNT][FSS_PLAYERVARCOUNT];
} fss_sharedwork_t;

static inline vs16* _FSS_GetVarPtr(volatile fss_sharedwork_t* sw, int trkId, int varId)
static inline vs16* _FSS_GetVarPtr(volatile fss_sharedwork_t* sw, int plyId, int varId)
{
if (varId < 0 || varId > (FSS_PLAYERVARCOUNT+FSS_GLOBALVARCOUNT))
varId = 0;
if (varId < FSS_PLAYERVARCOUNT)
return &sw->playerVars[trkId][varId];
return &sw->playerVars[plyId][varId];
return sw->globalVars + varId - FSS_PLAYERVARCOUNT;
}

Expand Down

0 comments on commit c0f69d6

Please sign in to comment.