diff --git a/demos/misc/Dreamliner_FMTowns.fur b/demos/misc/Dreamliner_FMTowns.fur new file mode 100644 index 00000000..d7120416 Binary files /dev/null and b/demos/misc/Dreamliner_FMTowns.fur differ diff --git a/demos/pce/Ma-Da-Ra.fur b/demos/pce/Ma-Da-Ra.fur new file mode 100644 index 00000000..98139ed7 Binary files /dev/null and b/demos/pce/Ma-Da-Ra.fur differ diff --git a/demos/snes/MM8_Frost_Man.fur b/demos/snes/MM8_Frost_Man.fur new file mode 100644 index 00000000..bad1ceee Binary files /dev/null and b/demos/snes/MM8_Frost_Man.fur differ diff --git a/instruments/FM/synth/Metallic FM Lead.fui b/instruments/FM/synth/Metallic FM Lead.fui new file mode 100644 index 00000000..6852ef08 Binary files /dev/null and b/instruments/FM/synth/Metallic FM Lead.fui differ diff --git a/src/engine/platform/k007232.cpp b/src/engine/platform/k007232.cpp index e174a277..be53c01e 100644 --- a/src/engine/platform/k007232.cpp +++ b/src/engine/platform/k007232.cpp @@ -397,9 +397,13 @@ void DivPlatformK007232::forceIns() { while (!writes.empty()) writes.pop(); for (int i=0; i<2; i++) { chan[i].insChanged=true; + chan[i].volumeChanged=true; chan[i].freqChanged=true; - chan[i].sample=-1; + chan[i].prevFreq=-1; + chan[i].prevBank=-1; } + lastLoop=0; + lastVolume=0; } void* DivPlatformK007232::getChanState(int ch) { @@ -422,6 +426,7 @@ void DivPlatformK007232::reset() { k007232.reset(); lastLoop=0; lastVolume=0; + delay=0; for (int i=0; i<2; i++) { chan[i]=DivPlatformK007232::Channel(); chan[i].std.setEngine(parent); diff --git a/src/engine/platform/pokemini.cpp b/src/engine/platform/pokemini.cpp index bcbe73bb..39632294 100644 --- a/src/engine/platform/pokemini.cpp +++ b/src/engine/platform/pokemini.cpp @@ -123,7 +123,7 @@ int DivPlatformPokeMini::dispatch(DivCommand c) { vol=(chan[c.chan].outVol==2)?3:chan[c.chan].outVol; chan[c.chan].active=true; chan[c.chan].keyOn=true; - chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_BEEPER)); + chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_POKEMINI)); if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { chan[c.chan].outVol=chan[c.chan].vol; } diff --git a/src/engine/platform/sound/ymfm/README.md b/src/engine/platform/sound/ymfm/README.md index 788b9901..40e64f19 100644 --- a/src/engine/platform/sound/ymfm/README.md +++ b/src/engine/platform/sound/ymfm/README.md @@ -4,7 +4,7 @@ # modified version -this is a modified version of ymfm with a small bug fix. +this is a modified version which contains many fixes. ## Supported environments diff --git a/src/engine/platform/sound/ymfm/ymfm_opm.h b/src/engine/platform/sound/ymfm/ymfm_opm.h index 2034b5f4..830b195e 100644 --- a/src/engine/platform/sound/ymfm/ymfm_opm.h +++ b/src/engine/platform/sound/ymfm/ymfm_opm.h @@ -174,7 +174,7 @@ public: // system-wide registers uint32_t test() const { return byte(0x01, 0, 8); } uint32_t lfo_reset() const { return byte(0x01, 1, 1); } - uint32_t noise_frequency() const { return byte(0x0f, 0, 5) ^ 0x1f; } + uint32_t noise_frequency() const { return byte(0x0f, 0, 5); } uint32_t noise_enable() const { return byte(0x0f, 7, 1); } uint32_t timer_a_value() const { return word(0x10, 0, 8, 0x11, 0, 2); } uint32_t timer_b_value() const { return byte(0x12, 0, 8); } diff --git a/src/winMain.cpp b/src/winMain.cpp index 853b1153..c904b996 100644 --- a/src/winMain.cpp +++ b/src/winMain.cpp @@ -22,6 +22,10 @@ typedef HRESULT (*SPDA)(int); int WINAPI WinMain(HINSTANCE inst, HINSTANCE prevInst, PSTR args, int state) { + if (AttachConsole(ATTACH_PARENT_PROCESS)==0) { + if (GetLastError()==ERROR_ACCESS_DENIED) FreeConsole(); + } + int argc=0; wchar_t** argw=CommandLineToArgvW(GetCommandLineW(),&argc); char** argv=new char*[argc+1];