Virtual Boy: fix noise phase reset

This commit is contained in:
tildearrow 2022-10-11 03:52:25 -05:00
parent 385a9adab2
commit 8b87905304
3 changed files with 18 additions and 4 deletions

View File

@ -128,9 +128,11 @@ void DivPlatformVB::updateWave(int ch) {
} }
} }
void DivPlatformVB::writeEnv(int ch) { void DivPlatformVB::writeEnv(int ch, bool upperByteToo) {
chWrite(ch,0x04,(chan[ch].outVol<<4)|(chan[ch].envLow&15)); chWrite(ch,0x04,(chan[ch].outVol<<4)|(chan[ch].envLow&15));
chWrite(ch,0x05,chan[ch].envHigh); if (ch<5 || upperByteToo) {
chWrite(ch,0x05,chan[ch].envHigh);
}
} }
void DivPlatformVB::tick(bool sysTick) { void DivPlatformVB::tick(bool sysTick) {
@ -298,7 +300,7 @@ int DivPlatformVB::dispatch(DivCommand c) {
if (c.chan!=5) break; if (c.chan!=5) break;
chan[c.chan].envHigh&=~0x70; chan[c.chan].envHigh&=~0x70;
chan[c.chan].envHigh|=(c.value&7)<<4; chan[c.chan].envHigh|=(c.value&7)<<4;
writeEnv(c.chan); writeEnv(c.chan,true);
break; break;
case DIV_CMD_STD_NOISE_FREQ: case DIV_CMD_STD_NOISE_FREQ:
chan[c.chan].envHigh&=~3; chan[c.chan].envHigh&=~3;

View File

@ -81,7 +81,7 @@ class DivPlatformVB: public DivDispatch {
VSU* vb; VSU* vb;
unsigned char regPool[0x600]; unsigned char regPool[0x600];
void updateWave(int ch); void updateWave(int ch);
void writeEnv(int ch); void writeEnv(int ch, bool upperByteToo=false);
friend void putDispatchChip(void*,int); friend void putDispatchChip(void*,int);
friend void putDispatchChan(void*,int,int); friend void putDispatchChan(void*,int,int);
public: public:

View File

@ -438,6 +438,12 @@ void FurnaceGUI::initSystemPresets() {
0 0
} }
)); ));
cat.systems.push_back(FurnaceGUISysDef(
"Virtual Boy", {
DIV_SYSTEM_VBOY, 64, 0, 0,
0
}
));
cat.systems.push_back(FurnaceGUISysDef( cat.systems.push_back(FurnaceGUISysDef(
"Seta/Allumer X1-010", { "Seta/Allumer X1-010", {
DIV_SYSTEM_X1_010, 64, 0, 0, DIV_SYSTEM_X1_010, 64, 0, 0,
@ -704,6 +710,12 @@ void FurnaceGUI::initSystemPresets() {
0 0
} }
)); ));
cat.systems.push_back(FurnaceGUISysDef(
"Virtual Boy", {
DIV_SYSTEM_VBOY, 64, 0, 0,
0
}
));
cat.systems.push_back(FurnaceGUISysDef( cat.systems.push_back(FurnaceGUISysDef(
"Gamate", { "Gamate", {
DIV_SYSTEM_AY8910, 64, 0, 73, DIV_SYSTEM_AY8910, 64, 0, 73,