Fix phase reset macro

This commit is contained in:
cam900 2024-02-12 12:54:07 +09:00 committed by tildearrow
parent c3c50e3ccf
commit b868e37c42
2 changed files with 8 additions and 3 deletions

View file

@ -140,6 +140,8 @@ void DivPlatformNDS::tick(bool sysTick) {
if ((chan[i].std.phaseReset.val==1) && chan[i].active) { if ((chan[i].std.phaseReset.val==1) && chan[i].active) {
chan[i].audPos=0; chan[i].audPos=0;
chan[i].setPos=true; chan[i].setPos=true;
if ((rRead8(0x03+i*16)&0x80)==0)
chan[i].busy=true;
} }
} }
if (chan[i].setPos) { if (chan[i].setPos) {
@ -164,8 +166,8 @@ void DivPlatformNDS::tick(bool sysTick) {
if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq<0) chan[i].freq=0;
if (chan[i].freq>65535) chan[i].freq=65535; if (chan[i].freq>65535) chan[i].freq=65535;
if ((!chan[i].keyOn) && ((rRead8(0x03+i*16)&0x80)==0)) if ((!chan[i].keyOn) && ((rRead8(0x03+i*16)&0x80)==0))
chan[i].active=false; chan[i].busy=false;
ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x08:0x10); ctrl|=(chan[i].busy?0x80:0)|((s->isLoopable())?0x08:0x10);
if (chan[i].keyOn) { if (chan[i].keyOn) {
unsigned int start=0; unsigned int start=0;
int loopStart=0; int loopStart=0;
@ -287,6 +289,7 @@ int DivPlatformNDS::dispatch(DivCommand c) {
chan[c.chan].note=c.value; chan[c.chan].note=c.value;
} }
chan[c.chan].active=true; chan[c.chan].active=true;
chan[c.chan].busy=true;
chan[c.chan].keyOn=true; chan[c.chan].keyOn=true;
chan[c.chan].macroInit(ins); chan[c.chan].macroInit(ins);
if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) {
@ -297,6 +300,7 @@ int DivPlatformNDS::dispatch(DivCommand c) {
case DIV_CMD_NOTE_OFF: case DIV_CMD_NOTE_OFF:
chan[c.chan].sample=-1; chan[c.chan].sample=-1;
chan[c.chan].active=false; chan[c.chan].active=false;
chan[c.chan].busy=false;
chan[c.chan].keyOff=true; chan[c.chan].keyOff=true;
chan[c.chan].macroInit(NULL); chan[c.chan].macroInit(NULL);
break; break;

View file

@ -30,7 +30,7 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf {
unsigned int audPos; unsigned int audPos;
int sample, wave; int sample, wave;
int panning, duty; int panning, duty;
bool setPos, pcm; bool setPos, pcm, busy;
int macroVolMul; int macroVolMul;
Channel(): Channel():
SharedChannel<int>(127), SharedChannel<int>(127),
@ -41,6 +41,7 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf {
duty(0), duty(0),
setPos(false), setPos(false),
pcm(false), pcm(false),
busy(false),
macroVolMul(64) {} macroVolMul(64) {}
}; };
Channel chan[16]; Channel chan[16];