From 8b879053047383cf86b942b27dfe7280ccccf1bd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 11 Oct 2022 03:52:25 -0500 Subject: [PATCH] Virtual Boy: fix noise phase reset --- src/engine/platform/vb.cpp | 8 +++++--- src/engine/platform/vb.h | 2 +- src/gui/presets.cpp | 12 ++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/vb.cpp b/src/engine/platform/vb.cpp index dfb79348..ddc1e568 100644 --- a/src/engine/platform/vb.cpp +++ b/src/engine/platform/vb.cpp @@ -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,0x05,chan[ch].envHigh); + if (ch<5 || upperByteToo) { + chWrite(ch,0x05,chan[ch].envHigh); + } } void DivPlatformVB::tick(bool sysTick) { @@ -298,7 +300,7 @@ int DivPlatformVB::dispatch(DivCommand c) { if (c.chan!=5) break; chan[c.chan].envHigh&=~0x70; chan[c.chan].envHigh|=(c.value&7)<<4; - writeEnv(c.chan); + writeEnv(c.chan,true); break; case DIV_CMD_STD_NOISE_FREQ: chan[c.chan].envHigh&=~3; diff --git a/src/engine/platform/vb.h b/src/engine/platform/vb.h index af3ef6dc..baefc03f 100644 --- a/src/engine/platform/vb.h +++ b/src/engine/platform/vb.h @@ -81,7 +81,7 @@ class DivPlatformVB: public DivDispatch { VSU* vb; unsigned char regPool[0x600]; void updateWave(int ch); - void writeEnv(int ch); + void writeEnv(int ch, bool upperByteToo=false); friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); public: diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index f78f7514..a8c49703 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -438,6 +438,12 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Virtual Boy", { + DIV_SYSTEM_VBOY, 64, 0, 0, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Seta/Allumer X1-010", { DIV_SYSTEM_X1_010, 64, 0, 0, @@ -704,6 +710,12 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Virtual Boy", { + DIV_SYSTEM_VBOY, 64, 0, 0, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Gamate", { DIV_SYSTEM_AY8910, 64, 0, 73,