summaryrefslogtreecommitdiff
path: root/src/m4a.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/m4a.c')
-rw-r--r--src/m4a.c200
1 files changed, 102 insertions, 98 deletions
diff --git a/src/m4a.c b/src/m4a.c
index 2144c8b..3c96c88 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -273,13 +273,13 @@ void MPlayExtender(struct CgbChannel *cgbChans)
CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
- cgbChans[0].ty = 1;
+ cgbChans[0].type = 1;
cgbChans[0].panMask = 0x11;
- cgbChans[1].ty = 2;
+ cgbChans[1].type = 2;
cgbChans[1].panMask = 0x22;
- cgbChans[2].ty = 3;
+ cgbChans[2].type = 3;
cgbChans[2].panMask = 0x44;
- cgbChans[3].ty = 4;
+ cgbChans[3].type = 4;
cgbChans[3].panMask = 0x88;
soundInfo->ident = ident;
@@ -334,15 +334,15 @@ void SoundInit(struct SoundInfo *soundInfo)
soundInfo->maxChans = 8;
soundInfo->masterVolume = 15;
- soundInfo->plynote = (u32)ply_note;
+ soundInfo->plynote = ply_note;
soundInfo->CgbSound = DummyFunc;
- soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
- soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
- soundInfo->ExtVolPit = (u32)DummyFunc;
+ soundInfo->CgbOscOff = (CgbOscOffFunc)DummyFunc;
+ soundInfo->MidiKeyToCgbFreq = (MidiKeyToCgbFreqFunc)DummyFunc;
+ soundInfo->ExtVolPit = (ExtVolPitFunc)DummyFunc;
MPlayJumpTableCopy(gMPlayJumpTable);
- soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+ soundInfo->MPlayJumpTable = gMPlayJumpTable;
SampleFreqSet(SOUND_MODE_FREQ_13379);
@@ -409,7 +409,7 @@ void m4aSoundMode(u32 mode)
while (temp != 0)
{
- chan->status = 0;
+ chan->statusFlags = 0;
temp--;
chan++;
}
@@ -455,7 +455,7 @@ void SoundClear(void)
while (i > 0)
{
- ((struct SoundChannel *)chan)->status = 0;
+ ((struct SoundChannel *)chan)->statusFlags = 0;
i--;
chan = (void *)((s32)chan + sizeof(struct SoundChannel));
}
@@ -469,7 +469,7 @@ void SoundClear(void)
while (i <= 4)
{
soundInfo->CgbOscOff(i);
- ((struct CgbChannel *)chan)->sf = 0;
+ ((struct CgbChannel *)chan)->statusFlags = 0;
i++;
chan = (void *)((s32)chan + sizeof(struct CgbChannel));
}
@@ -544,15 +544,19 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
tracks++;
}
- if (soundInfo->func != 0)
+ // append music player and MPlayMain to linked list
+
+ if (soundInfo->MPlayMainHead != 0)
{
- mplayInfo->func = soundInfo->func;
- mplayInfo->intp = soundInfo->intp;
- soundInfo->func = 0;
+ mplayInfo->MPlayMainNext = soundInfo->MPlayMainHead;
+ mplayInfo->musicPlayerNext = soundInfo->musicPlayerHead;
+ // NULL assignment semantically useless, but required for match
+ soundInfo->MPlayMainHead = NULL;
+
}
- soundInfo->intp = (u32)mplayInfo;
- soundInfo->func = (u32)MPlayMain;
+ soundInfo->musicPlayerHead = mplayInfo;
+ soundInfo->MPlayMainHead = MPlayMain;
soundInfo->ident = ID_NUMBER;
mplayInfo->ident = ID_NUMBER;
}
@@ -842,17 +846,17 @@ void CgbModVol(struct CgbChannel *chan)
if (!CgbPan(chan))
{
chan->pan = 0xFF;
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16;
+ chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) / 16;
}
else
{
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16;
- if (chan->eg > 15)
- chan->eg = 15;
+ chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) / 16;
+ if (chan->envelopeGoal > 15)
+ chan->envelopeGoal = 15;
}
- chan->sg = (chan->eg * chan->su + 15) >> 4;
+ chan->sustainGoal = (chan->envelopeGoal * chan->sustain + 15) >> 4;
chan->pan &= chan->panMask;
}
@@ -879,7 +883,7 @@ void CgbSound(void)
for (ch = 1, channels = soundInfo->cgbChans; ch <= 4; ch++, channels++)
{
- if (!(channels->sf & 0xc7))
+ if (!(channels->statusFlags & 0xc7))
continue;
switch (ch)
@@ -917,53 +921,53 @@ void CgbSound(void)
prevC15 = soundInfo->c15;
evAdd = *nrx2ptr;
- if (channels->sf & 0x80)
+ if (channels->statusFlags & 0x80)
{
- if (!(channels->sf & 0x40))
+ if (!(channels->statusFlags & 0x40))
{
- channels->sf = 3;
- channels->mo = 3;
+ channels->statusFlags = 3;
+ channels->modify = 3;
CgbModVol(channels);
switch (ch)
{
case 1:
- *nrx0ptr = channels->sw;
+ *nrx0ptr = channels->sweep;
// fallthrough
case 2:
- *nrx1ptr = ((u32)channels->wp << 6) + channels->le;
+ *nrx1ptr = ((u32)channels->wavePointer << 6) + channels->length;
goto loc_82E0E30;
case 3:
- if ((u32)channels->wp != channels->cp)
+ if (channels->wavePointer != channels->currentPointer)
{
*nrx0ptr = 0x40;
- REG_WAVE_RAM0 = channels->wp[0];
- REG_WAVE_RAM1 = channels->wp[1];
- REG_WAVE_RAM2 = channels->wp[2];
- REG_WAVE_RAM3 = channels->wp[3];
- channels->cp = (u32)channels->wp;
+ REG_WAVE_RAM0 = channels->wavePointer[0];
+ REG_WAVE_RAM1 = channels->wavePointer[1];
+ REG_WAVE_RAM2 = channels->wavePointer[2];
+ REG_WAVE_RAM3 = channels->wavePointer[3];
+ channels->currentPointer = channels->wavePointer;
}
*nrx0ptr = 0;
- *nrx1ptr = channels->le;
- if (channels->le)
+ *nrx1ptr = channels->length;
+ if (channels->length)
channels->n4 = -64;
else
channels->n4 = -128;
break;
default:
- *nrx1ptr = channels->le;
- *nrx3ptr = (u32)channels->wp << 3;
+ *nrx1ptr = channels->length;
+ *nrx3ptr = (u32)channels->wavePointer << 3;
loc_82E0E30:
- evAdd = channels->at + 8;
- if (channels->le)
+ evAdd = channels->attack + 8;
+ if (channels->length)
channels->n4 = 64;
else
channels->n4 = 0;
break;
}
- channels->ec = channels->at;
- if ((s8)(channels->at & mask))
+ channels->envelopeCounter = channels->attack;
+ if ((s8)(channels->attack & mask))
{
- channels->ev = 0;
+ channels->envelopeVolume = 0;
goto EC_MINUS;
}
else
@@ -976,28 +980,28 @@ void CgbSound(void)
goto loc_82E0E82;
}
}
- else if (channels->sf & 0x04)
+ else if (channels->statusFlags & 0x04)
{
channels->echoLength--;
if ((s8)(channels->echoLength & mask) <= 0)
{
loc_82E0E82:
CgbOscOff(ch);
- channels->sf = 0;
+ channels->statusFlags = 0;
goto LAST_LABEL;
}
goto loc_82E0FD6;
}
- else if ((channels->sf & 0x40) && (channels->sf & 0x03))
+ else if ((channels->statusFlags & 0x40) && (channels->statusFlags & 0x03))
{
- channels->sf &= 0xfc;
- channels->ec = channels->re;
- if ((s8)(channels->re & mask))
+ channels->statusFlags &= 0xfc;
+ channels->envelopeCounter = channels->release;
+ if ((s8)(channels->release & mask))
{
- channels->mo |= 1;
+ channels->modify |= 1;
if (ch != 3)
{
- evAdd = channels->re;
+ evAdd = channels->release;
}
goto EC_MINUS;
}
@@ -1009,24 +1013,24 @@ void CgbSound(void)
else
{
loc_82E0ED0:
- if (channels->ec == 0)
+ if (channels->envelopeCounter == 0)
{
if (ch == 3)
{
- channels->mo |= 1;
+ channels->modify |= 1;
}
CgbModVol(channels);
- if ((channels->sf & 0x3) == 0)
+ if ((channels->statusFlags & 0x3) == 0)
{
- channels->ev--;
- if ((s8)(channels->ev & mask) <= 0)
+ channels->envelopeVolume--;
+ if ((s8)(channels->envelopeVolume & mask) <= 0)
{
loc_82E0F02:
- channels->ev = ((channels->eg * channels->echoVolume) + 0xFF) >> 8;
- if (channels->ev)
+ channels->envelopeVolume = ((channels->envelopeGoal * channels->echoVolume) + 0xFF) >> 8;
+ if (channels->envelopeVolume)
{
- channels->sf |= 0x4;
- channels->mo |= 1;
+ channels->statusFlags |= 0x4;
+ channels->modify |= 1;
if (ch != 3)
{
evAdd = 8;
@@ -1040,34 +1044,34 @@ void CgbSound(void)
}
else
{
- channels->ec = channels->re;
+ channels->envelopeCounter = channels->release;
}
}
- else if ((channels->sf & 0x3) == 1)
+ else if ((channels->statusFlags & 0x3) == 1)
{
loc_82E0F3A:
- channels->ev = channels->sg;
- channels->ec = 7;
+ channels->envelopeVolume = channels->sustainGoal;
+ channels->envelopeCounter = 7;
}
- else if ((channels->sf & 0x3) == 2)
+ else if ((channels->statusFlags & 0x3) == 2)
{
int ev, sg;
- channels->ev--;
- ev = (s8)(channels->ev & mask);
- sg = (s8)(channels->sg);
+ channels->envelopeVolume--;
+ ev = (s8)(channels->envelopeVolume & mask);
+ sg = (s8)(channels->sustainGoal);
if (ev <= sg)
{
loc_82E0F5A:
- if (channels->su == 0)
+ if (channels->sustain == 0)
{
- channels->sf &= 0xfc;
+ channels->statusFlags &= 0xfc;
goto loc_82E0F02;
}
else
{
- channels->sf--;
- channels->mo |= 1;
+ channels->statusFlags--;
+ channels->modify |= 1;
if (ch != 3)
{
evAdd = 8;
@@ -1077,24 +1081,24 @@ void CgbSound(void)
}
else
{
- channels->ec = channels->de;
+ channels->envelopeCounter = channels->decay;
}
}
else
{
- channels->ev++;
- if ((u8)(channels->ev & mask) >= channels->eg)
+ channels->envelopeVolume++;
+ if ((u8)(channels->envelopeVolume & mask) >= channels->envelopeGoal)
{
loc_82E0F96:
- channels->sf--;
- channels->ec = channels->de;
- if ((u8)(channels->ec & mask))
+ channels->statusFlags--;
+ channels->envelopeCounter = channels->decay;
+ if ((u8)(channels->envelopeCounter & mask))
{
- channels->mo |= 1;
- channels->ev = channels->eg;
+ channels->modify |= 1;
+ channels->envelopeVolume = channels->envelopeGoal;
if (ch != 3)
{
- evAdd = channels->de;
+ evAdd = channels->decay;
}
}
else
@@ -1104,14 +1108,14 @@ void CgbSound(void)
}
else
{
- channels->ec = channels->at;
+ channels->envelopeCounter = channels->attack;
}
}
}
}
EC_MINUS:
- channels->ec--;
+ channels->envelopeCounter--;
if (prevC15 == 0)
{
prevC15--;
@@ -1119,39 +1123,39 @@ void CgbSound(void)
}
loc_82E0FD6:
- if (channels->mo & 0x2)
+ if (channels->modify & 0x2)
{
- if (ch < 4 && (channels->ty & 0x08))
+ if (ch < 4 && (channels->type & 0x08))
{
int biasH = REG_SOUNDBIAS_H;
if (biasH < 64)
{
- channels->fr = (channels->fr + 2) & 0x7fc;
+ channels->frequency = (channels->frequency + 2) & 0x7fc;
}
else if (biasH < 128)
{
- channels->fr = (channels->fr + 1) & 0x7fe;
+ channels->frequency = (channels->frequency + 1) & 0x7fe;
}
}
if (ch != 4)
{
- *nrx3ptr = channels->fr;
+ *nrx3ptr = channels->frequency;
}
else
{
- *nrx3ptr = (*nrx3ptr & 0x08) | channels->fr;
+ *nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency;
}
- channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->fr) + 1));
+ channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1));
*nrx4ptr = (s8)(channels->n4 & mask);
}
- if (channels->mo & 1)
+ if (channels->modify & 1)
{
REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan;
if (ch == 3)
{
- *nrx2ptr = gCgb3Vol[channels->ev];
+ *nrx2ptr = gCgb3Vol[channels->envelopeVolume];
if (channels->n4 & 0x80)
{
*nrx0ptr = 0x80;
@@ -1162,7 +1166,7 @@ void CgbSound(void)
else
{
evAdd &= 0xf;
- *nrx2ptr = (channels->ev << 4) + evAdd;
+ *nrx2ptr = (channels->envelopeVolume << 4) + evAdd;
*nrx4ptr = channels->n4 | 0x80;
if (ch == 1 && !(*nrx0ptr & 0x08))
{
@@ -1172,7 +1176,7 @@ void CgbSound(void)
}
LAST_LABEL:
- channels->mo = 0;
+ channels->modify = 0;
}
}
@@ -1532,13 +1536,13 @@ void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
{
- track->echoVolume = *track->cmdPtr;
+ track->pseudoEchoVolume = *track->cmdPtr;
track->cmdPtr++;
}
void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
{
- track->echoLength = *track->cmdPtr;
+ track->pseudoEchoLength = *track->cmdPtr;
track->cmdPtr++;
}