From 6095255fce6619b154decb067a040f72b5df7838 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 5 Jun 2022 14:42:03 -0500 Subject: [PATCH 001/152] update to-do list again --- TODO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.md b/TODO.md index 0823e2d0..6c500f49 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,6 @@ # to-do for 0.6pre1 +- instrument loading selector - rewrite the system name detection function anyway - add another FM editor layout - if macros have release, note off should release them From af0103d76e9f43b92c2ac34e237802b97f794d8a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 5 Jun 2022 16:24:12 -0500 Subject: [PATCH 002/152] macroInt: add hasRelease variable --- src/engine/macroInt.cpp | 8 +++++++- src/engine/macroInt.h | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/engine/macroInt.cpp b/src/engine/macroInt.cpp index 6f853bff..06f04682 100644 --- a/src/engine/macroInt.cpp +++ b/src/engine/macroInt.cpp @@ -101,6 +101,7 @@ void DivMacroInt::init(DivInstrument* which) { macroListLen=0; subTick=1; + hasRelease=false; released=false; if (ins==NULL) return; @@ -236,7 +237,12 @@ void DivMacroInt::init(DivInstrument* which) { } for (size_t i=0; iprepare(*macroSource[i],e); + if (macroSource[i]!=NULL) { + macroList[i]->prepare(*macroSource[i],e); + hasRelease=(macroSource[i]->rel>=0 && macroSource[i]->rellen); + } else { + hasRelease=false; + } } } diff --git a/src/engine/macroInt.h b/src/engine/macroInt.h index d82cb2b2..83962555 100644 --- a/src/engine/macroInt.h +++ b/src/engine/macroInt.h @@ -96,6 +96,9 @@ class DivMacroInt { ksr() {} } op[4]; + // state + bool hasRelease; + /** * trigger macro release. */ @@ -149,7 +152,8 @@ class DivMacroInt { ex5(), ex6(), ex7(), - ex8() { + ex8(), + hasRelease(false) { memset(macroList,0,128*sizeof(void*)); memset(macroSource,0,128*sizeof(void*)); } From 2932a7281dc005bed50bf2df492d77eb9ceb5c14 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 5 Jun 2022 18:17:00 -0500 Subject: [PATCH 003/152] implement getChanMacroInt() on supported systems --- TODO.md | 1 - src/engine/platform/amiga.cpp | 4 ++++ src/engine/platform/amiga.h | 1 + src/engine/platform/arcade.cpp | 4 ++++ src/engine/platform/arcade.h | 1 + src/engine/platform/ay.cpp | 4 ++++ src/engine/platform/ay.h | 1 + src/engine/platform/ay8930.cpp | 4 ++++ src/engine/platform/ay8930.h | 1 + src/engine/platform/bubsyswsg.cpp | 4 ++++ src/engine/platform/bubsyswsg.h | 1 + src/engine/platform/c64.cpp | 4 ++++ src/engine/platform/c64.h | 1 + src/engine/platform/fds.cpp | 4 ++++ src/engine/platform/fds.h | 1 + src/engine/platform/gb.cpp | 4 ++++ src/engine/platform/gb.h | 1 + src/engine/platform/genesis.cpp | 4 ++++ src/engine/platform/genesis.h | 1 + src/engine/platform/genesisext.cpp | 6 ++++++ src/engine/platform/genesisext.h | 1 + src/engine/platform/lynx.cpp | 4 ++++ src/engine/platform/lynx.h | 1 + src/engine/platform/mmc5.cpp | 4 ++++ src/engine/platform/mmc5.h | 1 + src/engine/platform/msm6258.cpp | 4 ++++ src/engine/platform/msm6258.h | 1 + src/engine/platform/msm6295.cpp | 4 ++++ src/engine/platform/msm6295.h | 1 + src/engine/platform/n163.cpp | 4 ++++ src/engine/platform/n163.h | 1 + src/engine/platform/namcowsg.cpp | 4 ++++ src/engine/platform/namcowsg.h | 1 + src/engine/platform/nes.cpp | 4 ++++ src/engine/platform/nes.h | 1 + src/engine/platform/opl.cpp | 4 ++++ src/engine/platform/opl.h | 1 + src/engine/platform/opll.cpp | 4 ++++ src/engine/platform/opll.h | 1 + src/engine/platform/pce.cpp | 4 ++++ src/engine/platform/pce.h | 1 + src/engine/platform/pcspkr.cpp | 4 ++++ src/engine/platform/pcspkr.h | 1 + src/engine/platform/pet.cpp | 4 ++++ src/engine/platform/pet.h | 1 + src/engine/platform/qsound.cpp | 4 ++++ src/engine/platform/qsound.h | 1 + src/engine/platform/rf5c68.cpp | 4 ++++ src/engine/platform/rf5c68.h | 1 + src/engine/platform/saa.cpp | 4 ++++ src/engine/platform/saa.h | 1 + src/engine/platform/scc.cpp | 4 ++++ src/engine/platform/scc.h | 1 + src/engine/platform/segapcm.cpp | 4 ++++ src/engine/platform/segapcm.h | 1 + src/engine/platform/sms.cpp | 4 ++++ src/engine/platform/sms.h | 1 + src/engine/platform/su.cpp | 4 ++++ src/engine/platform/su.h | 1 + src/engine/platform/swan.cpp | 4 ++++ src/engine/platform/swan.h | 1 + src/engine/platform/tia.cpp | 4 ++++ src/engine/platform/tia.h | 1 + src/engine/platform/tx81z.cpp | 4 ++++ src/engine/platform/tx81z.h | 1 + src/engine/platform/vera.cpp | 4 ++++ src/engine/platform/vera.h | 1 + src/engine/platform/vic20.cpp | 4 ++++ src/engine/platform/vic20.h | 1 + src/engine/platform/vrc6.cpp | 4 ++++ src/engine/platform/vrc6.h | 1 + src/engine/platform/x1_010.cpp | 4 ++++ src/engine/platform/x1_010.h | 1 + src/engine/platform/ym2203.cpp | 5 +++++ src/engine/platform/ym2203.h | 1 + src/engine/platform/ym2203ext.cpp | 6 ++++++ src/engine/platform/ym2203ext.h | 1 + src/engine/platform/ym2608.cpp | 5 +++++ src/engine/platform/ym2608.h | 1 + src/engine/platform/ym2608ext.cpp | 7 +++++++ src/engine/platform/ym2608ext.h | 1 + src/engine/platform/ym2610.cpp | 5 +++++ src/engine/platform/ym2610.h | 1 + src/engine/platform/ym2610b.cpp | 5 +++++ src/engine/platform/ym2610b.h | 1 + src/engine/platform/ym2610bext.cpp | 7 +++++++ src/engine/platform/ym2610bext.h | 1 + src/engine/platform/ym2610ext.cpp | 8 +++++++- src/engine/platform/ym2610ext.h | 1 + src/engine/platform/ymz280b.cpp | 4 ++++ src/engine/platform/ymz280b.h | 1 + src/engine/platform/zxbeeper.cpp | 4 ++++ src/engine/platform/zxbeeper.h | 1 + src/engine/playback.cpp | 16 +++++++++++++++- 94 files changed, 262 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 6c500f49..19918981 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,6 @@ - instrument loading selector - rewrite the system name detection function anyway - add another FM editor layout -- if macros have release, note off should release them - add ability to move selection by dragging - find and replace - implement Defle slide bug when using E1xy/E2xy and repeating origin note (requires format change) diff --git a/src/engine/platform/amiga.cpp b/src/engine/platform/amiga.cpp index 03961b0a..8037feaf 100644 --- a/src/engine/platform/amiga.cpp +++ b/src/engine/platform/amiga.cpp @@ -427,6 +427,10 @@ bool DivPlatformAmiga::keyOffAffectsArp(int ch) { return true; } +DivMacroInt* DivPlatformAmiga::getChanMacroInt(int ch) { + return &chan[ch].std; +} + void DivPlatformAmiga::notifyInsChange(int ins) { for (int i=0; i<4; i++) { if (chan[i].ins==ins) { diff --git a/src/engine/platform/amiga.h b/src/engine/platform/amiga.h index 539f7830..e7372e63 100644 --- a/src/engine/platform/amiga.h +++ b/src/engine/platform/amiga.h @@ -99,6 +99,7 @@ class DivPlatformAmiga: public DivDispatch { void muteChannel(int ch, bool mute); bool isStereo(); bool keyOffAffectsArp(int ch); + DivMacroInt* getChanMacroInt(int ch); void setFlags(unsigned int flags); void notifyInsChange(int ins); void notifyWaveChange(int wave); diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index 121183d1..87c402e0 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -913,6 +913,10 @@ void* DivPlatformArcade::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformArcade::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformArcade::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/arcade.h b/src/engine/platform/arcade.h index 6f68eeda..e73c0618 100644 --- a/src/engine/platform/arcade.h +++ b/src/engine/platform/arcade.h @@ -116,6 +116,7 @@ class DivPlatformArcade: public DivDispatch { void forceIns(); void tick(bool sysTick=true); void muteChannel(int ch, bool mute); + DivMacroInt* getChanMacroInt(int ch); void notifyInsChange(int ins); void setFlags(unsigned int flags); bool isStereo(); diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index a3d325ad..0bca2766 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -509,6 +509,10 @@ void* DivPlatformAY8910::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformAY8910::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformAY8910::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ay.h b/src/engine/platform/ay.h index f93d34bd..0b05eb44 100644 --- a/src/engine/platform/ay.h +++ b/src/engine/platform/ay.h @@ -102,6 +102,7 @@ class DivPlatformAY8910: public DivDispatch { void setFlags(unsigned int flags); bool isStereo(); bool keyOffAffectsArp(int ch); + DivMacroInt* getChanMacroInt(int ch); bool getDCOffRequired(); void notifyInsDeletion(void* ins); void poke(unsigned int addr, unsigned short val); diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index fb498b2c..a92f185c 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -539,6 +539,10 @@ void* DivPlatformAY8930::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformAY8930::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformAY8930::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ay8930.h b/src/engine/platform/ay8930.h index 67420f48..10ac7736 100644 --- a/src/engine/platform/ay8930.h +++ b/src/engine/platform/ay8930.h @@ -98,6 +98,7 @@ class DivPlatformAY8930: public DivDispatch { void setFlags(unsigned int flags); bool isStereo(); bool keyOffAffectsArp(int ch); + DivMacroInt* getChanMacroInt(int ch); void notifyInsDeletion(void* ins); void poke(unsigned int addr, unsigned short val); void poke(std::vector& wlist); diff --git a/src/engine/platform/bubsyswsg.cpp b/src/engine/platform/bubsyswsg.cpp index 5793277d..85d50e66 100644 --- a/src/engine/platform/bubsyswsg.cpp +++ b/src/engine/platform/bubsyswsg.cpp @@ -281,6 +281,10 @@ void* DivPlatformBubSysWSG::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformBubSysWSG::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformBubSysWSG::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/bubsyswsg.h b/src/engine/platform/bubsyswsg.h index cb30d85c..e288493c 100644 --- a/src/engine/platform/bubsyswsg.h +++ b/src/engine/platform/bubsyswsg.h @@ -78,6 +78,7 @@ class DivPlatformBubSysWSG: public DivDispatch { void muteChannel(int ch, bool mute); bool isStereo(); bool keyOffAffectsArp(int ch); + DivMacroInt* getChanMacroInt(int ch); void setFlags(unsigned int flags); void notifyWaveChange(int wave); void notifyInsDeletion(void* ins); diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 72692887..3372c820 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -491,6 +491,10 @@ void* DivPlatformC64::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformC64::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformC64::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/c64.h b/src/engine/platform/c64.h index 495da461..d9dc0804 100644 --- a/src/engine/platform/c64.h +++ b/src/engine/platform/c64.h @@ -97,6 +97,7 @@ class DivPlatformC64: public DivDispatch { void setFlags(unsigned int flags); void notifyInsChange(int ins); bool getDCOffRequired(); + DivMacroInt* getChanMacroInt(int ch); void notifyInsDeletion(void* ins); void poke(unsigned int addr, unsigned short val); void poke(std::vector& wlist); diff --git a/src/engine/platform/fds.cpp b/src/engine/platform/fds.cpp index fabeeed9..ea4b83e9 100644 --- a/src/engine/platform/fds.cpp +++ b/src/engine/platform/fds.cpp @@ -436,6 +436,10 @@ void* DivPlatformFDS::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformFDS::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformFDS::getOscBuffer(int ch) { return oscBuf; } diff --git a/src/engine/platform/fds.h b/src/engine/platform/fds.h index c563a47f..f655a777 100644 --- a/src/engine/platform/fds.h +++ b/src/engine/platform/fds.h @@ -88,6 +88,7 @@ class DivPlatformFDS: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 40bf6a83..999d31b9 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -433,6 +433,10 @@ void* DivPlatformGB::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformGB::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformGB::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/gb.h b/src/engine/platform/gb.h index cce1ffb6..fe2f6e51 100644 --- a/src/engine/platform/gb.h +++ b/src/engine/platform/gb.h @@ -72,6 +72,7 @@ class DivPlatformGB: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 683fa3b2..46e28ccb 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -1145,6 +1145,10 @@ void* DivPlatformGenesis::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformGenesis::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformGenesis::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index 26c6c58b..14257409 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -130,6 +130,7 @@ class DivPlatformGenesis: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index e105f560..f7fdaf44 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -543,6 +543,12 @@ void* DivPlatformGenesisExt::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformGenesisExt::getChanMacroInt(int ch) { + if (ch>=6) return &chan[ch-3].std; + if (ch>=2) return NULL; // currently not implemented + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformGenesisExt::getOscBuffer(int ch) { if (ch>=6) return oscBuf[ch-3]; if (ch<3) return oscBuf[ch]; diff --git a/src/engine/platform/genesisext.h b/src/engine/platform/genesisext.h index f6c1e3dc..07e0d5cc 100644 --- a/src/engine/platform/genesisext.h +++ b/src/engine/platform/genesisext.h @@ -55,6 +55,7 @@ class DivPlatformGenesisExt: public DivPlatformGenesis { public: int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); void reset(); void forceIns(); diff --git a/src/engine/platform/lynx.cpp b/src/engine/platform/lynx.cpp index dce2fb04..4fd30db9 100644 --- a/src/engine/platform/lynx.cpp +++ b/src/engine/platform/lynx.cpp @@ -424,6 +424,10 @@ void* DivPlatformLynx::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformLynx::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformLynx::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/lynx.h b/src/engine/platform/lynx.h index 4f221d03..849c3182 100644 --- a/src/engine/platform/lynx.h +++ b/src/engine/platform/lynx.h @@ -88,6 +88,7 @@ class DivPlatformLynx: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/mmc5.cpp b/src/engine/platform/mmc5.cpp index 9a35ac8c..2b97f46f 100644 --- a/src/engine/platform/mmc5.cpp +++ b/src/engine/platform/mmc5.cpp @@ -353,6 +353,10 @@ void* DivPlatformMMC5::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformMMC5::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformMMC5::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/mmc5.h b/src/engine/platform/mmc5.h index 2213b995..f09092d5 100644 --- a/src/engine/platform/mmc5.h +++ b/src/engine/platform/mmc5.h @@ -74,6 +74,7 @@ class DivPlatformMMC5: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/msm6258.cpp b/src/engine/platform/msm6258.cpp index 44986fc7..db1848cf 100644 --- a/src/engine/platform/msm6258.cpp +++ b/src/engine/platform/msm6258.cpp @@ -254,6 +254,10 @@ void* DivPlatformMSM6258::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformMSM6258::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformMSM6258::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/msm6258.h b/src/engine/platform/msm6258.h index f60f8bc9..e3b50a17 100644 --- a/src/engine/platform/msm6258.h +++ b/src/engine/platform/msm6258.h @@ -104,6 +104,7 @@ class DivPlatformMSM6258: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index 32de1e09..aeb29dd3 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -227,6 +227,10 @@ void* DivPlatformMSM6295::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformMSM6295::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformMSM6295::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/msm6295.h b/src/engine/platform/msm6295.h index 2930a169..3e019208 100644 --- a/src/engine/platform/msm6295.h +++ b/src/engine/platform/msm6295.h @@ -112,6 +112,7 @@ class DivPlatformMSM6295: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/n163.cpp b/src/engine/platform/n163.cpp index 58a41693..50f9d836 100644 --- a/src/engine/platform/n163.cpp +++ b/src/engine/platform/n163.cpp @@ -625,6 +625,10 @@ void* DivPlatformN163::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformN163::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformN163::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/n163.h b/src/engine/platform/n163.h index 6ecb1e0c..5e44d3dd 100644 --- a/src/engine/platform/n163.h +++ b/src/engine/platform/n163.h @@ -95,6 +95,7 @@ class DivPlatformN163: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/namcowsg.cpp b/src/engine/platform/namcowsg.cpp index 88cba360..1e8ff46d 100644 --- a/src/engine/platform/namcowsg.cpp +++ b/src/engine/platform/namcowsg.cpp @@ -467,6 +467,10 @@ void* DivPlatformNamcoWSG::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformNamcoWSG::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformNamcoWSG::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/namcowsg.h b/src/engine/platform/namcowsg.h index 652181e0..4ab81bdc 100644 --- a/src/engine/platform/namcowsg.h +++ b/src/engine/platform/namcowsg.h @@ -79,6 +79,7 @@ class DivPlatformNamcoWSG: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index a688a256..50e548ea 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -610,6 +610,10 @@ void* DivPlatformNES::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformNES::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformNES::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index a03efc7a..35c51df7 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -89,6 +89,7 @@ class DivPlatformNES: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 666826ba..fbf91448 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -1483,6 +1483,10 @@ void* DivPlatformOPL::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformOPL::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformOPL::getOscBuffer(int ch) { if (ch>=18) return NULL; return oscBuf[ch]; diff --git a/src/engine/platform/opl.h b/src/engine/platform/opl.h index 61ea4648..a051074a 100644 --- a/src/engine/platform/opl.h +++ b/src/engine/platform/opl.h @@ -125,6 +125,7 @@ class DivPlatformOPL: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 8ce21534..6d77ca1f 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -896,6 +896,10 @@ void* DivPlatformOPLL::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformOPLL::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformOPLL::getOscBuffer(int ch) { if (ch>=9) return NULL; return oscBuf[ch]; diff --git a/src/engine/platform/opll.h b/src/engine/platform/opll.h index d2d20826..dad660de 100644 --- a/src/engine/platform/opll.h +++ b/src/engine/platform/opll.h @@ -102,6 +102,7 @@ class DivPlatformOPLL: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index 1816cd07..b8c580e5 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -477,6 +477,10 @@ void* DivPlatformPCE::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformPCE::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformPCE::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/pce.h b/src/engine/platform/pce.h index 58fa6600..870b5218 100644 --- a/src/engine/platform/pce.h +++ b/src/engine/platform/pce.h @@ -89,6 +89,7 @@ class DivPlatformPCE: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index 9e8ba0f4..d977690f 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -485,6 +485,10 @@ void* DivPlatformPCSpeaker::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformPCSpeaker::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformPCSpeaker::getOscBuffer(int ch) { return oscBuf; } diff --git a/src/engine/platform/pcspkr.h b/src/engine/platform/pcspkr.h index 8b0371a8..cb6f070f 100644 --- a/src/engine/platform/pcspkr.h +++ b/src/engine/platform/pcspkr.h @@ -98,6 +98,7 @@ class DivPlatformPCSpeaker: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/pet.cpp b/src/engine/platform/pet.cpp index 233027e2..0decd909 100644 --- a/src/engine/platform/pet.cpp +++ b/src/engine/platform/pet.cpp @@ -249,6 +249,10 @@ void* DivPlatformPET::getChanState(int ch) { return &chan; } +DivMacroInt* DivPlatformPET::getChanMacroInt(int ch) { + return &chan.std; +} + DivDispatchOscBuffer* DivPlatformPET::getOscBuffer(int ch) { return oscBuf; } diff --git a/src/engine/platform/pet.h b/src/engine/platform/pet.h index 1e5e49ce..a5037045 100644 --- a/src/engine/platform/pet.h +++ b/src/engine/platform/pet.h @@ -66,6 +66,7 @@ class DivPlatformPET: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/qsound.cpp b/src/engine/platform/qsound.cpp index 4bd9c322..8af565df 100644 --- a/src/engine/platform/qsound.cpp +++ b/src/engine/platform/qsound.cpp @@ -530,6 +530,10 @@ void* DivPlatformQSound::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformQSound::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformQSound::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/qsound.h b/src/engine/platform/qsound.h index d12e952e..28576013 100644 --- a/src/engine/platform/qsound.h +++ b/src/engine/platform/qsound.h @@ -78,6 +78,7 @@ class DivPlatformQSound: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/rf5c68.cpp b/src/engine/platform/rf5c68.cpp index ae5138c1..2106a5a7 100644 --- a/src/engine/platform/rf5c68.cpp +++ b/src/engine/platform/rf5c68.cpp @@ -300,6 +300,10 @@ void* DivPlatformRF5C68::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformRF5C68::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformRF5C68::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/rf5c68.h b/src/engine/platform/rf5c68.h index 79d7d58b..6946b490 100644 --- a/src/engine/platform/rf5c68.h +++ b/src/engine/platform/rf5c68.h @@ -75,6 +75,7 @@ class DivPlatformRF5C68: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/saa.cpp b/src/engine/platform/saa.cpp index c3ce1444..dc9a13e8 100644 --- a/src/engine/platform/saa.cpp +++ b/src/engine/platform/saa.cpp @@ -401,6 +401,10 @@ void* DivPlatformSAA1099::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformSAA1099::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformSAA1099::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/saa.h b/src/engine/platform/saa.h index 70edaa24..fafb36d7 100644 --- a/src/engine/platform/saa.h +++ b/src/engine/platform/saa.h @@ -91,6 +91,7 @@ class DivPlatformSAA1099: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/scc.cpp b/src/engine/platform/scc.cpp index 2ab6f1aa..011f63bc 100644 --- a/src/engine/platform/scc.cpp +++ b/src/engine/platform/scc.cpp @@ -310,6 +310,10 @@ void* DivPlatformSCC::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformSCC::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformSCC::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/scc.h b/src/engine/platform/scc.h index df6ef84e..31f6abc5 100644 --- a/src/engine/platform/scc.h +++ b/src/engine/platform/scc.h @@ -70,6 +70,7 @@ class DivPlatformSCC: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/segapcm.cpp b/src/engine/platform/segapcm.cpp index 6d2f6b82..19b8eb82 100644 --- a/src/engine/platform/segapcm.cpp +++ b/src/engine/platform/segapcm.cpp @@ -400,6 +400,10 @@ void* DivPlatformSegaPCM::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformSegaPCM::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformSegaPCM::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/segapcm.h b/src/engine/platform/segapcm.h index f5fa4ecb..6edc8530 100644 --- a/src/engine/platform/segapcm.h +++ b/src/engine/platform/segapcm.h @@ -101,6 +101,7 @@ class DivPlatformSegaPCM: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index d9e2e5fc..a32305a3 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -352,6 +352,10 @@ void* DivPlatformSMS::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformSMS::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformSMS::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/sms.h b/src/engine/platform/sms.h index 3c97a9a5..9054eb7a 100644 --- a/src/engine/platform/sms.h +++ b/src/engine/platform/sms.h @@ -76,6 +76,7 @@ class DivPlatformSMS: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); void reset(); void forceIns(); diff --git a/src/engine/platform/su.cpp b/src/engine/platform/su.cpp index 1f85cd33..692fbbee 100644 --- a/src/engine/platform/su.cpp +++ b/src/engine/platform/su.cpp @@ -484,6 +484,10 @@ void* DivPlatformSoundUnit::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformSoundUnit::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformSoundUnit::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/su.h b/src/engine/platform/su.h index 857ae725..1d39854f 100644 --- a/src/engine/platform/su.h +++ b/src/engine/platform/su.h @@ -112,6 +112,7 @@ class DivPlatformSoundUnit: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/swan.cpp b/src/engine/platform/swan.cpp index c941a8ff..73dc7928 100644 --- a/src/engine/platform/swan.cpp +++ b/src/engine/platform/swan.cpp @@ -464,6 +464,10 @@ void* DivPlatformSwan::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformSwan::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformSwan::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/swan.h b/src/engine/platform/swan.h index 32f400e5..aafb17ac 100644 --- a/src/engine/platform/swan.h +++ b/src/engine/platform/swan.h @@ -79,6 +79,7 @@ class DivPlatformSwan: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/tia.cpp b/src/engine/platform/tia.cpp index 60e064b5..da347244 100644 --- a/src/engine/platform/tia.cpp +++ b/src/engine/platform/tia.cpp @@ -293,6 +293,10 @@ void* DivPlatformTIA::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformTIA::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformTIA::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/tia.h b/src/engine/platform/tia.h index 76064d06..cabe9153 100644 --- a/src/engine/platform/tia.h +++ b/src/engine/platform/tia.h @@ -52,6 +52,7 @@ class DivPlatformTIA: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/tx81z.cpp b/src/engine/platform/tx81z.cpp index f15de0e7..30db376d 100644 --- a/src/engine/platform/tx81z.cpp +++ b/src/engine/platform/tx81z.cpp @@ -1027,6 +1027,10 @@ void* DivPlatformTX81Z::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformTX81Z::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformTX81Z::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/tx81z.h b/src/engine/platform/tx81z.h index 60ea66ae..ece914d1 100644 --- a/src/engine/platform/tx81z.h +++ b/src/engine/platform/tx81z.h @@ -103,6 +103,7 @@ class DivPlatformTX81Z: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/vera.cpp b/src/engine/platform/vera.cpp index 353a9f60..62e1ea68 100644 --- a/src/engine/platform/vera.cpp +++ b/src/engine/platform/vera.cpp @@ -397,6 +397,10 @@ void* DivPlatformVERA::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformVERA::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformVERA::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/vera.h b/src/engine/platform/vera.h index 734db020..612b4354 100644 --- a/src/engine/platform/vera.h +++ b/src/engine/platform/vera.h @@ -66,6 +66,7 @@ class DivPlatformVERA: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/vic20.cpp b/src/engine/platform/vic20.cpp index 708db4ab..a766ba44 100644 --- a/src/engine/platform/vic20.cpp +++ b/src/engine/platform/vic20.cpp @@ -278,6 +278,10 @@ void* DivPlatformVIC20::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformVIC20::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformVIC20::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/vic20.h b/src/engine/platform/vic20.h index f05ad8f2..d23f27be 100644 --- a/src/engine/platform/vic20.h +++ b/src/engine/platform/vic20.h @@ -68,6 +68,7 @@ class DivPlatformVIC20: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/vrc6.cpp b/src/engine/platform/vrc6.cpp index 16ba73b0..08c6d053 100644 --- a/src/engine/platform/vrc6.cpp +++ b/src/engine/platform/vrc6.cpp @@ -438,6 +438,10 @@ void* DivPlatformVRC6::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformVRC6::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformVRC6::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/vrc6.h b/src/engine/platform/vrc6.h index dd6863d5..450e09b9 100644 --- a/src/engine/platform/vrc6.h +++ b/src/engine/platform/vrc6.h @@ -85,6 +85,7 @@ class DivPlatformVRC6: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/x1_010.cpp b/src/engine/platform/x1_010.cpp index 1cbfd68e..dc5c7ed2 100644 --- a/src/engine/platform/x1_010.cpp +++ b/src/engine/platform/x1_010.cpp @@ -842,6 +842,10 @@ void* DivPlatformX1_010::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformX1_010::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformX1_010::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/x1_010.h b/src/engine/platform/x1_010.h index 939280ef..7a85b633 100644 --- a/src/engine/platform/x1_010.h +++ b/src/engine/platform/x1_010.h @@ -129,6 +129,7 @@ class DivPlatformX1_010: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index cebf7087..5507b11c 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -933,6 +933,11 @@ void* DivPlatformYM2203::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2203::getChanMacroInt(int ch) { + if (ch>=3) return ay->getChanMacroInt(ch-3); + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2203::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ym2203.h b/src/engine/platform/ym2203.h index ab527eea..f91b7e0f 100644 --- a/src/engine/platform/ym2203.h +++ b/src/engine/platform/ym2203.h @@ -108,6 +108,7 @@ class DivPlatformYM2203: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 1a4f60bb..3a38bde2 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -471,6 +471,12 @@ void* DivPlatformYM2203Ext::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2203Ext::getChanMacroInt(int ch) { + if (ch>=6) return ay->getChanMacroInt(ch-6); + if (ch>=2) return NULL; // currently not implemented + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2203Ext::getOscBuffer(int ch) { if (ch>=6) return oscBuf[ch-3]; if (ch<3) return oscBuf[ch]; diff --git a/src/engine/platform/ym2203ext.h b/src/engine/platform/ym2203ext.h index 5025881c..1a398d1a 100644 --- a/src/engine/platform/ym2203ext.h +++ b/src/engine/platform/ym2203ext.h @@ -40,6 +40,7 @@ class DivPlatformYM2203Ext: public DivPlatformYM2203 { public: int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); void reset(); void forceIns(); diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index c02cbba8..773f9ed5 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1257,6 +1257,11 @@ void* DivPlatformYM2608::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2608::getChanMacroInt(int ch) { + if (ch>=6 && ch<9) return ay->getChanMacroInt(ch-6); + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2608::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index 5c673629..f65c4cd6 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -121,6 +121,7 @@ class DivPlatformYM2608: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 4802cc65..f7d3217f 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -484,6 +484,13 @@ void* DivPlatformYM2608Ext::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2608Ext::getChanMacroInt(int ch) { + if (ch>=9 && ch<12) return ay->getChanMacroInt(ch-9); + if (ch>=6) return &chan[ch-3].std; + if (ch>=2) return NULL; // currently not implemented + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2608Ext::getOscBuffer(int ch) { if (ch>=6) return oscBuf[ch-3]; if (ch<3) return oscBuf[ch]; diff --git a/src/engine/platform/ym2608ext.h b/src/engine/platform/ym2608ext.h index a0966dfe..bc3d4f99 100644 --- a/src/engine/platform/ym2608ext.h +++ b/src/engine/platform/ym2608ext.h @@ -40,6 +40,7 @@ class DivPlatformYM2608Ext: public DivPlatformYM2608 { public: int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); void reset(); void forceIns(); diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index de3112c7..ccb9bfda 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -1304,6 +1304,11 @@ void* DivPlatformYM2610::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2610::getChanMacroInt(int ch) { + if (ch>=4 && ch<7) return ay->getChanMacroInt(ch-4); + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2610::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ym2610.h b/src/engine/platform/ym2610.h index 92f4ca07..1d807213 100644 --- a/src/engine/platform/ym2610.h +++ b/src/engine/platform/ym2610.h @@ -134,6 +134,7 @@ class DivPlatformYM2610: public DivPlatformYM2610Base { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 172fbca2..c327645b 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -1282,6 +1282,11 @@ void* DivPlatformYM2610B::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2610B::getChanMacroInt(int ch) { + if (ch>=6 && ch<9) return ay->getChanMacroInt(ch-6); + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2610B::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ym2610b.h b/src/engine/platform/ym2610b.h index 3a034028..fe2126dd 100644 --- a/src/engine/platform/ym2610b.h +++ b/src/engine/platform/ym2610b.h @@ -107,6 +107,7 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index 42a1f2e1..f208bf18 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -484,6 +484,13 @@ void* DivPlatformYM2610BExt::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYM2610BExt::getChanMacroInt(int ch) { + if (ch>=9 && ch<12) return ay->getChanMacroInt(ch-9); + if (ch>=6) return &chan[ch-3].std; + if (ch>=2) return NULL; // currently not implemented + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2610BExt::getOscBuffer(int ch) { if (ch>=6) return oscBuf[ch-3]; if (ch<3) return oscBuf[ch]; diff --git a/src/engine/platform/ym2610bext.h b/src/engine/platform/ym2610bext.h index c17fd8d8..732678fe 100644 --- a/src/engine/platform/ym2610bext.h +++ b/src/engine/platform/ym2610bext.h @@ -40,6 +40,7 @@ class DivPlatformYM2610BExt: public DivPlatformYM2610B { public: int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); void reset(); void forceIns(); diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index 8e940381..af9a3da0 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -478,13 +478,19 @@ void DivPlatformYM2610Ext::forceIns() { } } - void* DivPlatformYM2610Ext::getChanState(int ch) { if (ch>=5) return &chan[ch-3]; if (ch>=1) return &opChan[ch-1]; return &chan[ch]; } +DivMacroInt* DivPlatformYM2610Ext::getChanMacroInt(int ch) { + if (ch>=7 && ch<10) return ay->getChanMacroInt(ch-7); + if (ch>=5) return &chan[ch-3].std; + if (ch>=1) return NULL; // currently not implemented + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYM2610Ext::getOscBuffer(int ch) { if (ch>=5) return oscBuf[ch-3]; if (ch<2) return oscBuf[ch]; diff --git a/src/engine/platform/ym2610ext.h b/src/engine/platform/ym2610ext.h index 492eb5de..119d6356 100644 --- a/src/engine/platform/ym2610ext.h +++ b/src/engine/platform/ym2610ext.h @@ -40,6 +40,7 @@ class DivPlatformYM2610Ext: public DivPlatformYM2610 { public: int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); void reset(); void forceIns(); diff --git a/src/engine/platform/ymz280b.cpp b/src/engine/platform/ymz280b.cpp index 1c4997c2..ed50ccd4 100644 --- a/src/engine/platform/ymz280b.cpp +++ b/src/engine/platform/ymz280b.cpp @@ -333,6 +333,10 @@ void* DivPlatformYMZ280B::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformYMZ280B::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformYMZ280B::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/ymz280b.h b/src/engine/platform/ymz280b.h index 4957d899..fbba3319 100644 --- a/src/engine/platform/ymz280b.h +++ b/src/engine/platform/ymz280b.h @@ -74,6 +74,7 @@ class DivPlatformYMZ280B: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/platform/zxbeeper.cpp b/src/engine/platform/zxbeeper.cpp index ff14d161..34265f8a 100644 --- a/src/engine/platform/zxbeeper.cpp +++ b/src/engine/platform/zxbeeper.cpp @@ -251,6 +251,10 @@ void* DivPlatformZXBeeper::getChanState(int ch) { return &chan[ch]; } +DivMacroInt* DivPlatformZXBeeper::getChanMacroInt(int ch) { + return &chan[ch].std; +} + DivDispatchOscBuffer* DivPlatformZXBeeper::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/zxbeeper.h b/src/engine/platform/zxbeeper.h index 9520ea71..a9b400cb 100644 --- a/src/engine/platform/zxbeeper.h +++ b/src/engine/platform/zxbeeper.h @@ -77,6 +77,7 @@ class DivPlatformZXBeeper: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); unsigned char* getRegisterPool(); int getRegisterPoolSize(); diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 73e12238..0297a56b 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -17,6 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "macroInt.h" #include #define _USE_MATH_DEFINES #include "dispatch.h" @@ -901,13 +902,26 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { while (!pendingNotes.empty()) { DivNoteEvent& note=pendingNotes.front(); + if (note.channel<0 || note.channel>=chans) { + pendingNotes.pop(); + continue; + } if (note.on) { dispatchCmd(DivCommand(DIV_CMD_INSTRUMENT,note.channel,note.ins,1)); dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,note.channel,note.note)); keyHit[note.channel]=true; chan[note.channel].noteOnInhibit=true; } else { - dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,note.channel)); + DivMacroInt* macroInt=disCont[dispatchOfChan[note.channel]].dispatch->getChanMacroInt(dispatchChanOfChan[note.channel]); + if (macroInt!=NULL) { + if (macroInt->hasRelease) { + dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF_ENV,note.channel)); + } else { + dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,note.channel)); + } + } else { + dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,note.channel)); + } } pendingNotes.pop(); } From eb71c27ad9256cb9c2974eb5c7f368df5dc29283 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 5 Jun 2022 19:04:41 -0500 Subject: [PATCH 004/152] GUI: preliminary "select instrument" dialog --- src/gui/gui.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++------- src/gui/gui.h | 4 ++- 2 files changed, 65 insertions(+), 10 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index bc18ae3c..68196c35 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3330,8 +3330,16 @@ bool FurnaceGUI::loop() { if (!e->getWarnings().empty()) { showWarning(e->getWarnings(),GUI_WARN_GENERIC); } - for (DivInstrument* i: instruments) { - e->addInstrumentPtr(i); + if (instruments.size()>1) { // ask which instruments to load + for (DivInstrument* i: instruments) { + pendingIns.push_back(std::make_pair(i,false)); + } + displayPendingIns=true; + pendingInsSingle=false; + } else { // load the only instrument + for (DivInstrument* i: instruments) { + e->addInstrumentPtr(i); + } } } else { showError("cannot load instrument! ("+e->getLastError()+")"); @@ -3344,13 +3352,21 @@ bool FurnaceGUI::loop() { if (!e->getWarnings().empty()) { showWarning(e->getWarnings(),GUI_WARN_GENERIC); } - if (curIns>=0 && curIns<(int)e->song.ins.size()) { - *e->song.ins[curIns]=*instruments[0]; - } else { - showError("...but you haven't selected an instrument!"); - } - for (DivInstrument* i: instruments) { - delete i; + if (instruments.size()>1) { // ask which instrument + for (DivInstrument* i: instruments) { + pendingIns.push_back(std::make_pair(i,false)); + } + displayPendingIns=true; + pendingInsSingle=true; + } else { // replace with the only instrument + if (curIns>=0 && curIns<(int)e->song.ins.size()) { + *e->song.ins[curIns]=*instruments[0]; + } else { + showError("...but you haven't selected an instrument!"); + } + for (DivInstrument* i: instruments) { + delete i; + } } } else { showError("cannot load instrument! ("+e->getLastError()+")"); @@ -3442,6 +3458,11 @@ bool FurnaceGUI::loop() { ImGui::OpenPopup("Error"); } + if (displayPendingIns) { + displayPendingIns=false; + ImGui::OpenPopup("Select Instrument"); + } + if (displayExporting) { displayExporting=false; ImGui::OpenPopup("Rendering..."); @@ -3792,6 +3813,36 @@ bool FurnaceGUI::loop() { ImGui::EndPopup(); } + // TODO: + // - multiple selection + // - replace instrument + if (ImGui::BeginPopupModal("Select Instrument",NULL,ImGuiWindowFlags_AlwaysAutoResize)) { + bool quitPlease=false; + if (pendingInsSingle) { + ImGui::Text("this is an instrument bank! select which one to use:"); + } else { + ImGui::Text("this is an instrument bank! select which ones to load:"); + } + for (size_t i=0; iname); + if (ImGui::Selectable(id.c_str())) { + pendingIns[i].second=true; + e->addInstrumentPtr(pendingIns[i].first); + quitPlease=true; + } + } + if (quitPlease) { + ImGui::CloseCurrentPopup(); + for (std::pair i: pendingIns) { + if (!i.second) { + delete i.first; + } + } + pendingIns.clear(); + } + ImGui::EndPopup(); + } + layoutTimeEnd=SDL_GetPerformanceCounter(); // backup trigger @@ -4198,6 +4249,8 @@ FurnaceGUI::FurnaceGUI(): preserveChanPos(false), wantScrollList(false), noteInputPoly(true), + displayPendingIns(false), + pendingInsSingle(false), vgmExportVersion(0x171), drawHalt(10), macroPointSize(16), diff --git a/src/gui/gui.h b/src/gui/gui.h index 60d49263..5bda0246 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "fileDialog.h" @@ -816,6 +817,7 @@ class FurnaceGUI { bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu; bool displayNew, fullScreen, preserveChanPos, wantScrollList, noteInputPoly; + bool displayPendingIns, pendingInsSingle; bool willExport[32]; int vgmExportVersion; int drawHalt; @@ -1130,7 +1132,7 @@ class FurnaceGUI { std::vector activeNotes; std::vector cmdStream; std::vector particles; - std::vector pendingIns; + std::vector> pendingIns; std::vector sysCategories; From b8c785230e304bfa8c1e4c98c60cc21141fc742a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 5 Jun 2022 23:34:58 -0500 Subject: [PATCH 005/152] GUI: implement instrument bank ins picker --- TODO.md | 1 - src/gui/gui.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/TODO.md b/TODO.md index 19918981..5bd4e892 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,5 @@ # to-do for 0.6pre1 -- instrument loading selector - rewrite the system name detection function anyway - add another FM editor layout - add ability to move selection by dragging diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 68196c35..154000ef 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3823,19 +3823,57 @@ bool FurnaceGUI::loop() { } else { ImGui::Text("this is an instrument bank! select which ones to load:"); } - for (size_t i=0; iname); - if (ImGui::Selectable(id.c_str())) { - pendingIns[i].second=true; - e->addInstrumentPtr(pendingIns[i].first); + bool anySelected=false; + float sizeY=ImGui::GetFrameHeightWithSpacing()*pendingIns.size(); + if (sizeY>(scrH-180.0)*dpiScale) { + sizeY=(scrH-180.0)*dpiScale; + if (sizeY<60.0*dpiScale) sizeY=60.0*dpiScale; + } + if (ImGui::BeginTable("PendingInsList",1,ImGuiTableFlags_ScrollY,ImVec2(0.0f,sizeY))) { + for (size_t i=0; iname); + if (pendingInsSingle) { + if (ImGui::Selectable(id.c_str())) { + pendingIns[i].second=true; + quitPlease=true; + } + } else { + ImGui::Checkbox(id.c_str(),&pendingIns[i].second); + } + if (pendingIns[i].second) anySelected=true; + } + ImGui::EndTable(); + } + if (!pendingInsSingle) { + ImGui::BeginDisabled(!anySelected); + if (ImGui::Button("OK")) { quitPlease=true; } + ImGui::EndDisabled(); + ImGui::SameLine(); + } + if (ImGui::Button("Cancel")) { + for (std::pair& i: pendingIns) { + i.second=false; + } + quitPlease=true; } if (quitPlease) { ImGui::CloseCurrentPopup(); - for (std::pair i: pendingIns) { - if (!i.second) { + for (std::pair& i: pendingIns) { + if (!i.second || pendingInsSingle) { + if (i.second) { + if (curIns>=0 && curIns<(int)e->song.ins.size()) { + *e->song.ins[curIns]=*i.first; + } else { + showError("...but you haven't selected an instrument!"); + } + } delete i.first; + } else { + e->addInstrumentPtr(i.first); } } pendingIns.clear(); From 177836293383c5296d33982745f65d8400099cd0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 5 Jun 2022 23:44:52 -0500 Subject: [PATCH 006/152] GUI: add all/none buttons to ins selector --- src/gui/gui.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 154000ef..4ecc719d 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3822,6 +3822,18 @@ bool FurnaceGUI::loop() { ImGui::Text("this is an instrument bank! select which one to use:"); } else { ImGui::Text("this is an instrument bank! select which ones to load:"); + ImGui::SameLine(); + if (ImGui::Button("All")) { + for (std::pair& i: pendingIns) { + i.second=true; + } + } + ImGui::SameLine(); + if (ImGui::Button("None")) { + for (std::pair& i: pendingIns) { + i.second=false; + } + } } bool anySelected=false; float sizeY=ImGui::GetFrameHeightWithSpacing()*pendingIns.size(); From 5a0a9db9c3a830aa172d43de8e74bc800622a030 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 01:05:06 -0500 Subject: [PATCH 007/152] highlight cur row instead of next one on playback --- src/engine/engine.cpp | 15 +++++++++++++-- src/engine/engine.h | 4 +++- src/engine/playback.cpp | 3 +++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 07e74922..093f6d94 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -780,6 +780,8 @@ void DivEngine::changeSong(size_t songIndex) { curSubSongIndex=songIndex; curOrder=0; curRow=0; + prevOrder=0; + prevRow=0; } void DivEngine::swapChannelsP(int src, int dest) { @@ -871,6 +873,7 @@ void DivEngine::clearSubSongs() { song.clearSongData(); changeSong(0); curOrder=0; + prevOrder=0; saveLock.unlock(); BUSY_END; } @@ -1113,6 +1116,8 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { int goal=curOrder; curOrder=0; curRow=0; + prevOrder=0; + prevRow=0; stepPlay=0; int prevDrift; prevDrift=clockDrift; @@ -1162,6 +1167,8 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { if (!preserveDrift) { ticks=1; subticks=1; + prevOrder=curOrder; + prevRow=curRow; } skipping=false; cmdStream.clear(); @@ -1288,6 +1295,7 @@ unsigned int DivEngine::convertPanLinearToSplit(int val, unsigned char bits, int void DivEngine::play() { BUSY_BEGIN_SOFT; + curOrder=prevOrder; sPreview.sample=-1; sPreview.wave=-1; sPreview.pos=0; @@ -1583,11 +1591,11 @@ int DivEngine::getMaxVolumeChan(int ch) { } unsigned char DivEngine::getOrder() { - return curOrder; + return prevOrder; } int DivEngine::getRow() { - return curRow; + return prevRow; } size_t DivEngine::getCurrentSubSong() { @@ -2564,6 +2572,7 @@ void DivEngine::setOrder(unsigned char order) { BUSY_BEGIN_SOFT; curOrder=order; if (order>=curSubSong->ordersLen) curOrder=0; + prevOrder=curOrder; if (playing && !freelance) { playSub(false); } @@ -2757,6 +2766,8 @@ void DivEngine::quitDispatch() { tempoAccum=0; curRow=0; curOrder=0; + prevRow=0; + prevOrder=0; nextSpeed=3; changeOrd=-1; changePos=0; diff --git a/src/engine/engine.h b/src/engine/engine.h index 3bd4fc28..ec48e187 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -303,7 +303,7 @@ class DivEngine { bool systemsRegistered; bool hasLoadedSomething; int softLockCount; - int subticks, ticks, curRow, curOrder, remainingLoops, nextSpeed; + int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, nextSpeed; size_t curSubSongIndex; double divider; int cycles; @@ -935,6 +935,8 @@ class DivEngine { ticks(0), curRow(0), curOrder(0), + prevRow(0), + prevOrder(0), remainingLoops(-1), nextSpeed(3), curSubSongIndex(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 0297a56b..f7c1646f 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -798,6 +798,9 @@ void DivEngine::nextRow() { printf("| %.2x:%s | \x1b[1;33m%3d%s\x1b[m\n",curOrder,pb1,curRow,pb3); } + prevOrder=curOrder; + prevRow=curRow; + for (int i=0; i Date: Mon, 6 Jun 2022 01:08:15 -0500 Subject: [PATCH 008/152] GUI: better selection cursor tracking during playb --- src/gui/pattern.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index ee06a1b8..fa00243c 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -320,7 +320,13 @@ void FurnaceGUI::drawPattern() { bool inhibitMenu=false; float scrollX=0; - if (e->isPlaying() && followPattern && (!e->isStepping() || pendingStepUpdate)) cursor.y=oldRow+((pendingStepUpdate)?1:0); + if (e->isPlaying() && followPattern && (!e->isStepping() || pendingStepUpdate)) { + cursor.y=oldRow+((pendingStepUpdate)?1:0); + if (selStart.xCoarse==selEnd.xCoarse && selStart.xFine==selEnd.xFine && selStart.y==selEnd.y && !selecting) { + selStart=cursor; + selEnd=cursor; + } + } demandX=0; sel1=selStart; sel2=selEnd; From 8b33525a36d3320009eebe6958aae41a30a46d96 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 01:23:35 -0500 Subject: [PATCH 009/152] GUI: always go to beginning of song when loading --- src/gui/gui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 4ecc719d..309d605b 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1657,6 +1657,8 @@ int FurnaceGUI::load(String path) { curNibble=false; orderNibble=false; orderCursor=-1; + curOrder=0; + oldRow=0; samplePos=0; updateSampleTex=true; selStart=SelectionPoint(); @@ -1666,6 +1668,7 @@ int FurnaceGUI::load(String path) { undoHist.clear(); redoHist.clear(); updateWindowTitle(); + updateScroll(0); if (!e->getWarnings().empty()) { showWarning(e->getWarnings(),GUI_WARN_GENERIC); } From fe4aec70dbbbb49746f4f8b61f9222fd5d6b821e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 01:28:46 -0500 Subject: [PATCH 010/152] GUI: add play from beginning hotkey --- src/gui/doAction.cpp | 6 ++++++ src/gui/gui.h | 1 + src/gui/guiConst.cpp | 1 + src/gui/settings.cpp | 1 + 4 files changed, 9 insertions(+) diff --git a/src/gui/doAction.cpp b/src/gui/doAction.cpp index 17b515b2..83fdad38 100644 --- a/src/gui/doAction.cpp +++ b/src/gui/doAction.cpp @@ -87,6 +87,12 @@ void FurnaceGUI::doAction(int what) { case GUI_ACTION_STOP: stop(); break; + case GUI_ACTION_PLAY_START: + e->setOrder(0); + if (!e->isPlaying()) { + play(); + } + break; case GUI_ACTION_PLAY_REPEAT: play(); e->setRepeatPattern(true); diff --git a/src/gui/gui.h b/src/gui/gui.h index 5bda0246..86301b0a 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -309,6 +309,7 @@ enum FurnaceGUIActions { GUI_ACTION_PLAY_TOGGLE, GUI_ACTION_PLAY, GUI_ACTION_STOP, + GUI_ACTION_PLAY_START, GUI_ACTION_PLAY_REPEAT, GUI_ACTION_PLAY_CURSOR, GUI_ACTION_STEP_ONE, diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 722c5652..a9541222 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -447,6 +447,7 @@ const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={ D("PLAY_TOGGLE", "Play/Stop (toggle)", SDLK_RETURN), D("PLAY", "Play", 0), D("STOP", "Stop", 0), + D("PLAY_START", "Play (from beginning)", SDLK_F5), D("PLAY_REPEAT", "Play (repeat pattern)", 0), D("PLAY_CURSOR", "Play from cursor", FURKMOD_SHIFT|SDLK_RETURN), D("STEP_ONE", "Step row", FURKMOD_CMD|SDLK_RETURN), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 18490ad9..eef892ab 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1545,6 +1545,7 @@ void FurnaceGUI::drawSettings() { UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_TOGGLE); UI_KEYBIND_CONFIG(GUI_ACTION_PLAY); UI_KEYBIND_CONFIG(GUI_ACTION_STOP); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_START); UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_REPEAT); UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_CURSOR); UI_KEYBIND_CONFIG(GUI_ACTION_STEP_ONE); From d1ba9e2c3ef417483f1fb02311005191b55b85d5 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 01:50:35 -0500 Subject: [PATCH 011/152] audio: JACK verbose error messages --- src/audio/jack.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++--- src/audio/jack.h | 2 ++ 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/audio/jack.cpp b/src/audio/jack.cpp index 33a464d5..6e7b7bf1 100644 --- a/src/audio/jack.cpp +++ b/src/audio/jack.cpp @@ -19,6 +19,7 @@ #include #include "jack.h" +#include "../ta-log.h" int taJACKonSampleRate(jack_nframes_t rate, void* inst) { TAAudioJACK* in=(TAAudioJACK*)inst; @@ -74,7 +75,10 @@ bool TAAudioJACK::quit() { if (running) { running=false; - if (jack_deactivate(ac)) return false; + if (jack_deactivate(ac)) { + logE("could not deactivate!"); + return false; + } } for (int i=0; i Date: Mon, 6 Jun 2022 03:05:55 -0500 Subject: [PATCH 012/152] fade out experiments - DO NOT COMPILE --- TODO.md | 1 + src/engine/engine.cpp | 53 ++++++++++++++++++++++++++++++++++------- src/engine/engine.h | 9 +++++-- src/engine/playback.cpp | 5 ++++ src/gui/gui.cpp | 6 ++++- src/gui/gui.h | 2 ++ 6 files changed, 65 insertions(+), 11 deletions(-) diff --git a/TODO.md b/TODO.md index 5bd4e892..edf0caf6 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,6 @@ # to-do for 0.6pre1 +- fade out in audio export - rewrite the system name detection function anyway - add another FM editor layout - add ability to move selection by dragging diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 093f6d94..5c73817a 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -193,6 +193,9 @@ bool DivEngine::isExporting() { #ifdef HAVE_SNDFILE void DivEngine::runExportThread() { + size_t fadeOutSamples=got.rate*exportFadeOut; + size_t curFadeOutSample=0; + bool isFadingOut=false; switch (exportMode) { case DIV_EXPORT_MODE_ONE: { SNDFILE* sf; @@ -220,15 +223,36 @@ void DivEngine::runExportThread() { logI("rendering to file..."); while (playing) { + size_t total=0; nextBuf(NULL,outBuf,0,2,EXPORT_BUFSIZE); - for (int i=0; iEXPORT_BUFSIZE) { logE("error: total processed is bigger than export bufsize! %d>%d",totalProcessed,EXPORT_BUFSIZE); + totalProcessed=EXPORT_BUFSIZE; } - if (sf_writef_float(sf,outBuf[2],totalProcessed)!=(int)totalProcessed) { + if (totalProcessed!=EXPORT_BUFSIZE) { + logW("wait what? %d != %d",totalProcessed,EXPORT_BUFSIZE); + } + for (int i=0; i<(int)totalProcessed; i++) { + total++; + if (isFadingOut) { + double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples)); + outBuf[2][i<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][i]))*mul; + outBuf[2][1+(i<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][i]))*mul; + if (++curFadeOutSample>=fadeOutSamples) { + playing=false; + break; + } + } else { + outBuf[2][i<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][i])); + outBuf[2][1+(i<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][i])); + if (lastLoopPos>-1 && i>=lastLoopPos && totalLoops>=exportLoopCount) { + logD("start fading out..."); + isFadingOut=true; + } + } + } + + if (sf_writef_float(sf,outBuf[2],total)!=(int)total) { logE("error: failed to write entire buffer!"); break; } @@ -382,7 +406,12 @@ void DivEngine::runExportThread() { } curOrder=0; - remainingLoops=loopCount; + prevOrder=0; + if (exportFadeOut<=0.01) { + remainingLoops=loopCount; + } else { + remainingLoops=-1; + } playSub(false); while (playing) { @@ -448,13 +477,14 @@ void DivEngine::runExportThread() { } #endif -bool DivEngine::saveAudio(const char* path, int loops, DivAudioExportModes mode) { +bool DivEngine::saveAudio(const char* path, int loops, DivAudioExportModes mode, double fadeOutTime) { #ifndef HAVE_SNDFILE logE("Furnace was not compiled with libsndfile. cannot export!"); return false; #else exportPath=path; exportMode=mode; + exportFadeOut=fadeOutTime; if (exportMode!=DIV_EXPORT_MODE_ONE) { // remove extension String lowerCase=exportPath; @@ -471,7 +501,12 @@ bool DivEngine::saveAudio(const char* path, int loops, DivAudioExportModes mode) stop(); repeatPattern=false; setOrder(0); - remainingLoops=loops; + if (exportFadeOut<=0.01) { + remainingLoops=loops; + } else { + remainingLoops=-1; + } + exportLoopCount=loops; exportThread=new std::thread(_runExportThread,this); return true; #endif @@ -1131,6 +1166,8 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { totalTicks=0; totalSeconds=0; totalTicksR=0; + totalLoops=0; + lastLoopPos=-1; } speedAB=false; playing=true; diff --git a/src/engine/engine.h b/src/engine/engine.h index ec48e187..dc16584d 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -303,7 +303,7 @@ class DivEngine { bool systemsRegistered; bool hasLoadedSomething; int softLockCount; - int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, nextSpeed; + int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, totalLoops, lastLoopPos, exportLoopCount, nextSpeed; size_t curSubSongIndex; double divider; int cycles; @@ -318,6 +318,7 @@ class DivEngine { DivChannelState chan[DIV_MAX_CHANS]; DivAudioEngines audioEngine; DivAudioExportModes exportMode; + double exportFadeOut; std::map conf; std::queue pendingNotes; bool isMuted[DIV_MAX_CHANS]; @@ -463,7 +464,7 @@ class DivEngine { // dump to VGM. SafeWriter* saveVGM(bool* sysToExport=NULL, bool loop=true, int version=0x171); // export to an audio file - bool saveAudio(const char* path, int loops, DivAudioExportModes mode); + bool saveAudio(const char* path, int loops, DivAudioExportModes mode, double fadeOutTime=0.0); // wait for audio export to finish void waitAudioFile(); // stop audio file export @@ -938,6 +939,9 @@ class DivEngine { prevRow(0), prevOrder(0), remainingLoops(-1), + totalLoops(0), + lastLoopPos(0), + exportLoopCount(0), nextSpeed(3), curSubSongIndex(0), divider(60), @@ -961,6 +965,7 @@ class DivEngine { haltOn(DIV_HALT_NONE), audioEngine(DIV_AUDIO_NULL), exportMode(DIV_EXPORT_MODE_ONE), + exportFadeOut(0.0), midiBaseChan(0), midiPoly(true), midiAgeCounter(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index f7c1646f..ed70da94 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1096,6 +1096,8 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { } void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsigned int size) { + lastLoopPos=-1; + if (out!=NULL) { memset(out[0],0,size*sizeof(float)); memset(out[1],0,size*sizeof(float)); @@ -1287,6 +1289,9 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi } } if (nextTick()) { + lastLoopPos=size-(runLeftG>>MASTER_CLOCK_PREC); + logD("last loop pos: %d for a size of %d and runLeftG of %d",lastLoopPos,size,runLeftG); + totalLoops++; if (remainingLoops>0) { remainingLoops--; if (!remainingLoops) { diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 309d605b..6e464184 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1676,7 +1676,7 @@ int FurnaceGUI::load(String path) { } void FurnaceGUI::exportAudio(String path, DivAudioExportModes mode) { - e->saveAudio(path.c_str(),exportLoops+1,mode); + e->saveAudio(path.c_str(),exportLoops+1,mode,exportFadeOut); displayExporting=true; } @@ -2827,6 +2827,9 @@ bool FurnaceGUI::loop() { if (ImGui::InputInt("Loops",&exportLoops,1,2)) { if (exportLoops<0) exportLoops=0; } + if (ImGui::InputDouble("Fade out (seconds)",&exportFadeOut,1.0,2.0,"%.1f")) { + if (exportFadeOut<0.0) exportFadeOut=0.0; + } ImGui::EndMenu(); } if (ImGui::BeginMenu("export VGM...")) { @@ -4351,6 +4354,7 @@ FurnaceGUI::FurnaceGUI(): latchTarget(0), wheelX(0), wheelY(0), + exportFadeOut(5.0), editControlsOpen(true), ordersOpen(true), insListOpen(true), diff --git a/src/gui/gui.h b/src/gui/gui.h index 86301b0a..7001c88e 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1072,6 +1072,8 @@ class FurnaceGUI { int loopOrder, loopRow, loopEnd, isClipping, extraChannelButtons, patNameTarget, newSongCategory, latchTarget; int wheelX, wheelY; + double exportFadeOut; + bool editControlsOpen, ordersOpen, insListOpen, songInfoOpen, patternOpen, insEditOpen; bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen; bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; From 64fa5f804b91be19a01c10761fd45c793ebe1ddf Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 04:00:56 -0500 Subject: [PATCH 013/152] finish fade out on audio export option --- TODO.md | 1 - src/engine/engine.cpp | 86 ++++++++++++++++++++++++++++++++----------- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/TODO.md b/TODO.md index edf0caf6..5bd4e892 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,5 @@ # to-do for 0.6pre1 -- fade out in audio export - rewrite the system name detection function anyway - add another FM editor layout - add ability to move selection by dragging diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 5c73817a..76b2cd11 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -229,9 +229,6 @@ void DivEngine::runExportThread() { logE("error: total processed is bigger than export bufsize! %d>%d",totalProcessed,EXPORT_BUFSIZE); totalProcessed=EXPORT_BUFSIZE; } - if (totalProcessed!=EXPORT_BUFSIZE) { - logW("wait what? %d != %d",totalProcessed,EXPORT_BUFSIZE); - } for (int i=0; i<(int)totalProcessed; i++) { total++; if (isFadingOut) { @@ -310,7 +307,10 @@ void DivEngine::runExportThread() { float* outBuf[2]; outBuf[0]=new float[EXPORT_BUFSIZE]; outBuf[1]=new float[EXPORT_BUFSIZE]; - short* sysBuf=new short[EXPORT_BUFSIZE*2]; + short* sysBuf[32]; + for (int i=0; iisStereo()) { - sysBuf[j]=disCont[i].bbOut[0][j]; - } else { - sysBuf[j<<1]=disCont[i].bbOut[0][j]; - sysBuf[1+(j<<1)]=disCont[i].bbOut[1][j]; + if (totalProcessed>EXPORT_BUFSIZE) { + logE("error: total processed is bigger than export bufsize! %d>%d",totalProcessed,EXPORT_BUFSIZE); + totalProcessed=EXPORT_BUFSIZE; + } + for (int j=0; j<(int)totalProcessed; j++) { + total++; + if (isFadingOut) { + double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples)); + for (int i=0; iisStereo()) { + sysBuf[i][j]=(double)disCont[i].bbOut[0][j]*mul; + } else { + sysBuf[i][j<<1]=(double)disCont[i].bbOut[0][j]*mul; + sysBuf[i][1+(j<<1)]=(double)disCont[i].bbOut[1][j]*mul; + } + } + if (++curFadeOutSample>=fadeOutSamples) { + playing=false; + break; + } + } else { + for (int i=0; iisStereo()) { + sysBuf[i][j]=disCont[i].bbOut[0][j]; + } else { + sysBuf[i][j<<1]=disCont[i].bbOut[0][j]; + sysBuf[i][1+(j<<1)]=disCont[i].bbOut[1][j]; + } + } + if (lastLoopPos>-1 && j>=lastLoopPos && totalLoops>=exportLoopCount) { + logD("start fading out..."); + isFadingOut=true; } } - if (totalProcessed>EXPORT_BUFSIZE) { - logE("error: total processed is bigger than export bufsize! (%d) %d>%d",i,totalProcessed,EXPORT_BUFSIZE); - } - if (sf_writef_short(sf[i],sysBuf,totalProcessed)!=(int)totalProcessed) { + } + for (int i=0; iEXPORT_BUFSIZE) { logE("error: total processed is bigger than export bufsize! %d>%d",totalProcessed,EXPORT_BUFSIZE); + totalProcessed=EXPORT_BUFSIZE; } - if (sf_writef_float(sf,outBuf[2],totalProcessed)!=(int)totalProcessed) { + for (int j=0; j<(int)totalProcessed; j++) { + total++; + if (isFadingOut) { + double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples)); + outBuf[2][j<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][j]))*mul; + outBuf[2][1+(j<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][j]))*mul; + if (++curFadeOutSample>=fadeOutSamples) { + playing=false; + break; + } + } else { + outBuf[2][j<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][j])); + outBuf[2][1+(j<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][j])); + if (lastLoopPos>-1 && j>=lastLoopPos && totalLoops>=exportLoopCount) { + logD("start fading out..."); + isFadingOut=true; + } + } + } + if (sf_writef_float(sf,outBuf[2],total)!=(int)total) { logE("error: failed to write entire buffer!"); break; } From 9edc4818b5a03230325428200f0d5e7f5aa9ca7f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 05:03:19 -0500 Subject: [PATCH 014/152] prepare for find and replace window --- CMakeLists.txt | 1 + src/gui/doAction.cpp | 6 ++++++ src/gui/findReplace.cpp | 19 ++++++++++++++++ src/gui/gui.cpp | 48 ++++++++++++++++------------------------- src/gui/gui.h | 15 +++++-------- src/gui/guiConst.cpp | 1 + 6 files changed, 51 insertions(+), 39 deletions(-) create mode 100644 src/gui/findReplace.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index bbaf81eb..fe6a12fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -494,6 +494,7 @@ src/gui/doAction.cpp src/gui/editing.cpp src/gui/editControls.cpp src/gui/effectList.cpp +src/gui/findReplace.cpp src/gui/insEdit.cpp src/gui/log.cpp src/gui/mixer.cpp diff --git a/src/gui/doAction.cpp b/src/gui/doAction.cpp index 83fdad38..60c9d5c3 100644 --- a/src/gui/doAction.cpp +++ b/src/gui/doAction.cpp @@ -250,6 +250,9 @@ void FurnaceGUI::doAction(int what) { case GUI_ACTION_WINDOW_CHAN_OSC: nextWindow=GUI_WINDOW_CHAN_OSC; break; + case GUI_ACTION_WINDOW_FIND: + nextWindow=GUI_WINDOW_FIND; + break; case GUI_ACTION_COLLAPSE_WINDOW: collapseWindow=true; @@ -331,6 +334,9 @@ void FurnaceGUI::doAction(int what) { case GUI_WINDOW_CHAN_OSC: chanOscOpen=false; break; + case GUI_WINDOW_FIND: + findOpen=false; + break; default: break; } diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp new file mode 100644 index 00000000..3a5ec75f --- /dev/null +++ b/src/gui/findReplace.cpp @@ -0,0 +1,19 @@ +#include "gui.h" +#include "imgui.h" +#include "IconsFontAwesome4.h" +#include "misc/cpp/imgui_stdlib.h" + +void FurnaceGUI::drawFindReplace() { + if (nextWindow==GUI_WINDOW_FIND) { + findOpen=true; + ImGui::SetNextWindowFocus(); + nextWindow=GUI_WINDOW_NOTHING; + } + if (!findOpen) return; + ImGui::SetNextWindowSizeConstraints(ImVec2(64.0f*dpiScale,32.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale)); + if (ImGui::Begin("Find/Replace",&findOpen,globalWinFlags)) { + ImGui::Text("What am I gonna do with you?"); + } + if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_FIND; + ImGui::End(); +} diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 6e464184..20d3436b 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1899,6 +1899,12 @@ void FurnaceGUI::processDrags(int dragX, int dragY) { void FurnaceGUI::editOptions(bool topMenu) { char id[4096]; editOptsVisible=true; + + if (topMenu) { + ImGui::Text("..."); + ImGui::Separator(); + } + if (ImGui::MenuItem("cut",BIND_FOR(GUI_ACTION_PAT_CUT))) doCopy(true); if (ImGui::MenuItem("copy",BIND_FOR(GUI_ACTION_PAT_COPY))) doCopy(false); if (ImGui::MenuItem("paste",BIND_FOR(GUI_ACTION_PAT_PASTE))) doPaste(); @@ -2200,6 +2206,17 @@ void FurnaceGUI::editOptions(bool topMenu) { if (ImGui::MenuItem("collapse",BIND_FOR(GUI_ACTION_PAT_COLLAPSE_ROWS))) doCollapse(2); if (ImGui::MenuItem("expand",BIND_FOR(GUI_ACTION_PAT_EXPAND_ROWS))) doExpand(2); + if (topMenu) { + ImGui::Separator(); + if (ImGui::MenuItem("find/replace",BIND_FOR(GUI_ACTION_WINDOW_FIND),findOpen)) { + if (findOpen) { + findOpen=false; + } else { + nextWindow=GUI_WINDOW_FIND; + } + } + } + /*if (topMenu) { ImGui::Separator(); ImGui::MenuItem("collapse pattern",BIND_FOR(GUI_ACTION_PAT_COLLAPSE_PAT)); @@ -3084,6 +3101,7 @@ bool FurnaceGUI::loop() { ImGui::DockSpaceOverViewport(NULL,lockLayout?(ImGuiDockNodeFlags_NoWindowMenuButton|ImGuiDockNodeFlags_NoMove|ImGuiDockNodeFlags_NoResize|ImGuiDockNodeFlags_NoCloseButton|ImGuiDockNodeFlags_NoDocking|ImGuiDockNodeFlags_NoDockingSplitMe|ImGuiDockNodeFlags_NoDockingSplitOther):0); drawSubSongs(); + drawFindReplace(); drawPattern(); drawEditControls(); drawSongInfo(); @@ -4382,35 +4400,7 @@ FurnaceGUI::FurnaceGUI(): effectListOpen(false), chanOscOpen(false), subSongsOpen(true), - /* - editControlsDocked(false), - ordersDocked(false), - insListDocked(false), - songInfoDocked(false), - patternDocked(false), - insEditDocked(false), - waveListDocked(false), - waveEditDocked(false), - sampleListDocked(false), - sampleEditDocked(false), - aboutDocked(false), - settingsDocked(false), - mixerDocked(false), - debugDocked(false), - inspectorDocked(false), - oscDocked(false), - volMeterDocked(false), - statsDocked(false), - compatFlagsDocked(false), - pianoDocked(false), - notesDocked(false), - channelsDocked(false), - regViewDocked(false), - logDocked(false), - effectListDocked(false), - chanOscDocked(false), - subSongsDocked(false), - */ + findOpen(false), selecting(false), selectingFull(false), curNibble(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index 7001c88e..a1ff2b3d 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -245,7 +245,8 @@ enum FurnaceGUIWindows { GUI_WINDOW_LOG, GUI_WINDOW_EFFECT_LIST, GUI_WINDOW_CHAN_OSC, - GUI_WINDOW_SUBSONGS + GUI_WINDOW_SUBSONGS, + GUI_WINDOW_FIND }; enum FurnaceGUIFileDialogs { @@ -354,6 +355,7 @@ enum FurnaceGUIActions { GUI_ACTION_WINDOW_EFFECT_LIST, GUI_ACTION_WINDOW_CHAN_OSC, GUI_ACTION_WINDOW_SUBSONGS, + GUI_ACTION_WINDOW_FIND, GUI_ACTION_COLLAPSE_WINDOW, GUI_ACTION_CLOSE_WINDOW, @@ -1078,15 +1080,7 @@ class FurnaceGUI { bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen; bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; bool pianoOpen, notesOpen, channelsOpen, regViewOpen, logOpen, effectListOpen, chanOscOpen; - bool subSongsOpen; - - /* there ought to be a better way... - bool editControlsDocked, ordersDocked, insListDocked, songInfoDocked, patternDocked, insEditDocked; - bool waveListDocked, waveEditDocked, sampleListDocked, sampleEditDocked, aboutDocked, settingsDocked; - bool mixerDocked, debugDocked, inspectorDocked, oscDocked, volMeterDocked, statsDocked, compatFlagsDocked; - bool pianoDocked, notesDocked, channelsDocked, regViewDocked, logDocked, effectListDocked, chanOscDocked; - bool subSongsDocked; - */ + bool subSongsOpen, findOpen; SelectionPoint selStart, selEnd, cursor; bool selecting, selectingFull, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI; @@ -1355,6 +1349,7 @@ class FurnaceGUI { void drawLog(); void drawEffectList(); void drawSubSongs(); + void drawFindReplace(); void parseKeybinds(); void promptKey(int which); diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index a9541222..80f9b5d8 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -492,6 +492,7 @@ const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={ D("WINDOW_SUBSONGS", "Subsongs", 0), D("EFFECT_LIST", "Effect List", 0), D("WINDOW_CHAN_OSC", "Oscilloscope (per-channel)", 0), + D("WINDOW_FIND", "Find/Replace", FURKMOD_CMD|SDLK_f), D("COLLAPSE_WINDOW", "Collapse/expand current window", 0), D("CLOSE_WINDOW", "Close current window", FURKMOD_SHIFT|SDLK_ESCAPE), From e0e6a45000baa89f7bbe08a2d03883a29bc7c0cf Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 19:04:52 +0900 Subject: [PATCH 015/152] Prepare for reducing duplicates for 4op FM related codes, Add and correct bunch of presets, Add various clock, type options for chips Prepare for reducing duplicates for 4op FM related codes Add and correct bunch of presets - mostly based on MAME source. - Neo Geo AES uses slightly difference clock for NTSC, PAL colorbust frequency. - Turbosound FM + SAA: Some Turbosound FM has additional SAA1099, for additional sound channel and Plays SAM coupe tune? - PC-98: - Sound Orchestra: OPN with hardpanned stereo, some model has with OPL family FM addons. V variation has Y8950 and supports ADPCM. - Sound Blaster 16 for PC-9800: This famous PC sound card is also exists for PC-98, with optional OPN PC-9801-26(K) compatibility on some models. - IBM PCjr: PC with SN PSG sound, but less popular than previous models, and compatible Tandy 1000. - Tandy 1000: PCjr and previous IBM PC compatible, also has SN PSG (later embedded in their ASIC, like Sega). - Hexion: One of konami's budget arcade hardware with SCC + MSM6295 sound system, like their amusement hardware in this era. - DJ Boy, Atari JSA IIIs, Skimaxx: How to panning sound or plays stereo sound on MSM6295 - just use MSM6295s per each output! - Air Buster: One of arcade hardware with OPN + MSM6295 sound system, Used this configuration is also some hardwares. - Tecmo system: One of arcade hardware with pretty unique sound system: OPL3, YMZ280B, MSM6295; first 2 entry is mostly used in music, last entry is mostly used in sound effect. - Sunsoft Shanghai 3: Predecessor of Sunsoft Arcade is using YM2149 rather than FM, MSM6295 is still there. - Atari Klax: example of arcade hardware sound system with single MSM6295 only. - Ikari warriors: This early SNK Triple-Z80 hardware uses 2 OPL1s and no ADPCM supports. - Coreland Cyber Tank: This rare arcade machine's stereo sound is like SB Pro, but it's actually produced in 2 Y8950s. - Data East MLC: Latest arcade hardware from Data East, with single YMZ280B for sound. - Kaneko Jackie Chan: Predecessor of Super Kaneko Nova System hardware, also with YMZ280B. - Super Kaneko Nova System: Latest arcade hardware from Kaneko, with single YMZ280B for sound. this announced 3D acceleration addon, but finally cancelled. - Toaplan 1: Home of Late 80-Early 90s Good ol' stuffs, Example of arcade sound system with single OPL2 - Namco Pac-Land: and this era, Namco start to change Custom 15 WSG to their Custom 30 WSG with featured RAM based waveform, and mailbox feature. - Namco System 1: One of latest usage of Custom 30 WSG, with OPM FM hardware and 8 bit DAC and Stereo output. Add various clock, type options for chips - SN7: Prepare to add 17 bit noise variation, Game gear stereo extentsion, NCR PSG variation (MAME core only for now) - OPN, OPNA: Add placeholder for prescaler option - OPL: Prepare for OPL3L, OPL4 downscaled output rate option --- extern/Nuked-PSG/ympsg.c | 9 +- extern/Nuked-PSG/ympsg.h | 5 +- src/engine/platform/arcade.cpp | 61 +- src/engine/platform/arcade.h | 19 +- src/engine/platform/ay.cpp | 100 +- src/engine/platform/ay.h | 8 + src/engine/platform/fmshared_OPM.h | 21 +- src/engine/platform/fmshared_OPN.h | 25 +- .../{genesisshared.h => fmsharedbase.h} | 65 +- src/engine/platform/genesis.cpp | 8 +- src/engine/platform/genesis.h | 15 +- src/engine/platform/genesisext.cpp | 4 - src/engine/platform/msm6258.h | 13 +- src/engine/platform/msm6295.cpp | 57 +- src/engine/platform/msm6295.h | 109 +-- src/engine/platform/opl.cpp | 102 +- src/engine/platform/opl.h | 6 +- src/engine/platform/scc.cpp | 27 +- src/engine/platform/scc.h | 1 + src/engine/platform/sms.cpp | 211 +++-- src/engine/platform/sms.h | 15 +- src/engine/platform/sound/sn76496.cpp | 83 +- src/engine/platform/sound/sn76496.h | 113 ++- src/engine/platform/tx81z.cpp | 36 +- src/engine/platform/tx81z.h | 19 +- src/engine/platform/ym2203.cpp | 57 +- src/engine/platform/ym2203.h | 23 +- src/engine/platform/ym2203ext.cpp | 5 +- src/engine/platform/ym2203shared.h | 45 - src/engine/platform/ym2608.cpp | 40 +- src/engine/platform/ym2608.h | 24 +- src/engine/platform/ym2608ext.cpp | 3 - src/engine/platform/ym2610.cpp | 43 +- src/engine/platform/ym2610.h | 26 +- src/engine/platform/ym2610b.cpp | 40 +- src/engine/platform/ym2610b.h | 17 +- src/engine/platform/ym2610bext.cpp | 3 - src/engine/platform/ym2610ext.cpp | 3 - src/engine/platform/ym2610shared.h | 45 - src/engine/platform/ymz280b.cpp | 44 +- src/engine/platform/ymz280b.h | 1 + src/engine/song.h | 124 ++- src/gui/insEdit.cpp | 7 +- src/gui/presets.cpp | 893 +++++++++++++++--- src/gui/sysConf.cpp | 352 ++++--- src/main.cpp | 1 + 46 files changed, 2027 insertions(+), 901 deletions(-) rename src/engine/platform/{genesisshared.h => fmsharedbase.h} (60%) delete mode 100644 src/engine/platform/ym2203shared.h delete mode 100644 src/engine/platform/ym2610shared.h diff --git a/extern/Nuked-PSG/ympsg.c b/extern/Nuked-PSG/ympsg.c index 3df4f8e3..935b43ea 100644 --- a/extern/Nuked-PSG/ympsg.c +++ b/extern/Nuked-PSG/ympsg.c @@ -130,7 +130,7 @@ static void YMPSG_ClockInternal1(ympsg_t *chip) else if (noise_of && !chip->noise_of) { noise_bit1 = (chip->noise >> chip->noise_tap2) & 1; - noise_bit2 = (chip->noise >> 12) & 1; + noise_bit2 = (chip->noise >> chip->noise_tap1) & 1; noise_bit1 ^= noise_bit2; noise_next = ((noise_bit1 && ((chip->noise_data >> 2) & 1)) || ((chip->noise & chip->noise_size) == 0)); chip->noise <<= 1; @@ -257,13 +257,14 @@ uint16_t YMPSG_Read(ympsg_t *chip) return data; } -void YMPSG_Init(ympsg_t *chip, uint8_t real_sn) +void YMPSG_Init(ympsg_t *chip, uint8_t real_sn, uint8_t noise_tap1, uint8_t noise_tap2, uint32_t noise_size) { uint32_t i; memset(chip, 0, sizeof(ympsg_t)); YMPSG_SetIC(chip, 1); - chip->noise_tap2 = real_sn ? 13 : 15; - chip->noise_size = real_sn ? 16383 : 32767; + chip->noise_tap1 = noise_tap1; + chip->noise_tap2 = noise_tap2; + chip->noise_size = noise_size; for (i = 0; i < 17; i++) { chip->vol_table[i]=(real_sn?tipsg_vol[i]:ympsg_vol[i]) * 8192.0f; diff --git a/extern/Nuked-PSG/ympsg.h b/extern/Nuked-PSG/ympsg.h index c00b3d72..97e039e3 100644 --- a/extern/Nuked-PSG/ympsg.h +++ b/extern/Nuked-PSG/ympsg.h @@ -46,8 +46,9 @@ typedef struct { uint8_t sign_l; uint8_t noise_sign_l; uint16_t noise; + uint8_t noise_tap1; uint8_t noise_tap2; - uint16_t noise_size; + uint32_t noise_size; uint8_t test; uint8_t volume_out[4]; @@ -68,7 +69,7 @@ typedef struct { void YMPSG_Write(ympsg_t *chip, uint8_t data); uint16_t YMPSG_Read(ympsg_t *chip); -void YMPSG_Init(ympsg_t *chip, uint8_t real_sn); +void YMPSG_Init(ympsg_t *chip, uint8_t real_sn, uint8_t noise_tap1, uint8_t noise_tap2, uint32_t noise_size); void YMPSG_SetIC(ympsg_t *chip, uint32_t ic); void YMPSG_Clock(ympsg_t *chip); int YMPSG_GetOutput(ympsg_t *chip); diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index 56446725..f6fa7d70 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -22,38 +22,6 @@ #include #include -#include "fmshared_OPM.h" - -static unsigned short chanOffs[8]={ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 -}; -static unsigned short opOffs[4]={ - 0x00, 0x08, 0x10, 0x18 -}; -static bool isOutput[8][4]={ - // 1 3 2 4 - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,true ,true}, - {false,true ,true ,true}, - {false,true ,true ,true}, - {true ,true ,true ,true}, -}; -static unsigned char dtTable[8]={ - 7,6,5,0,1,2,3,4 -}; - -static int orderedOps[4]={ - 0,2,1,3 -}; - -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } - -#define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) - const char* regCheatSheetOPM[]={ "Test", "00", "NoteCtl", "08", @@ -198,7 +166,7 @@ void DivPlatformArcade::acquire_nuked(short* bufL, short* bufR, size_t start, si OPM_Write(&fm,1,w.val); regPool[w.addr&0xff]=w.val; //printf("write: %x = %.2x\n",w.addr,w.val); - writes.pop(); + writes.pop_front(); } else { OPM_Write(&fm,0,w.addr); w.addrOrVal=true; @@ -239,7 +207,7 @@ void DivPlatformArcade::acquire_ymfm(short* bufL, short* bufR, size_t start, siz fm_ymfm->write(0x0+((w.addr>>8)<<1),w.addr); fm_ymfm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0xff]=w.val; - writes.pop(); + writes.pop_front(); delay=1; } } @@ -934,7 +902,7 @@ void DivPlatformArcade::poke(std::vector& wlist) { } void DivPlatformArcade::reset() { - while (!writes.empty()) writes.pop(); + while (!writes.empty()) writes.pop_front(); memset(regPool,0,256); if (useYMFM) { fm_ymfm->reset(); @@ -974,15 +942,20 @@ void DivPlatformArcade::reset() { } void DivPlatformArcade::setFlags(unsigned int flags) { - if (flags==2) { - chipClock=4000000.0; - baseFreqOff=-122; - } else if (flags==1) { - chipClock=COLOR_PAL*4.0/5.0; - baseFreqOff=12; - } else { - chipClock=COLOR_NTSC; - baseFreqOff=0; + switch (flags&0xff) { + default: + case 0: + chipClock=COLOR_NTSC; + baseFreqOff=0; + break; + case 1: + chipClock=COLOR_PAL*4.0/5.0; + baseFreqOff=12; + break; + case 2: + chipClock=4000000.0; + baseFreqOff=-122; + break; } rate=chipClock/64; for (int i=0; i<8; i++) { diff --git a/src/engine/platform/arcade.h b/src/engine/platform/arcade.h index 6f68eeda..9d0e3968 100644 --- a/src/engine/platform/arcade.h +++ b/src/engine/platform/arcade.h @@ -20,18 +20,23 @@ #ifndef _ARCADE_H #define _ARCADE_H #include "../dispatch.h" +#include "../macroInt.h" #include "../instrument.h" #include #include "../../../extern/opm/opm.h" #include "sound/ymfm/ymfm_opm.h" -#include "../macroInt.h" +#include "fmshared_OPM.h" class DivArcadeInterface: public ymfm::ymfm_interface { }; -class DivPlatformArcade: public DivDispatch { +class DivPlatformArcade: public DivDispatch, public DivPlatformOPMBase { protected: + const unsigned short chanOffs[8]={ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 + }; + struct Channel { DivInstrumentFM state; DivMacroInt std; @@ -71,17 +76,9 @@ class DivPlatformArcade: public DivDispatch { }; Channel chan[8]; DivDispatchOscBuffer* oscBuf[8]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::queue writes; opm_t fm; - int delay, baseFreqOff; + int baseFreqOff; int pcmL, pcmR, pcmCycles; - unsigned char lastBusy; unsigned char amDepth, pmDepth; ymfm::ym2151* fm_ymfm; diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index a3d325ad..2f2b20c5 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -27,7 +27,7 @@ #define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} #define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(regRemap(a),v); if (dumpWrites) {addWrite(regRemap(a),v);} } -#define CHIP_DIVIDER ((sunsoft||clockSel)?16:8) +#define CHIP_DIVIDER (extMode?extDiv:((sunsoft||clockSel)?16:8)) const char* regCheatSheetAY[]={ "FreqL_A", "0", @@ -561,8 +561,6 @@ void DivPlatformAY8910::reset() { delay=0; - extMode=false; - ioPortA=false; ioPortB=false; portAVal=0; @@ -592,49 +590,61 @@ void DivPlatformAY8910::poke(std::vector& wlist) { } void DivPlatformAY8910::setFlags(unsigned int flags) { - clockSel=(flags>>7)&1; - switch (flags&15) { - case 1: - chipClock=COLOR_PAL*2.0/5.0; - break; - case 2: - chipClock=1750000; - break; - case 3: - chipClock=2000000; - break; - case 4: - chipClock=1500000; - break; - case 5: - chipClock=1000000; - break; - case 6: - chipClock=COLOR_NTSC/4.0; - break; - case 7: - chipClock=COLOR_PAL*3.0/8.0; - break; - case 8: - chipClock=COLOR_PAL*3.0/16.0; - break; - case 9: - chipClock=COLOR_PAL/4.0; - break; - case 10: - chipClock=2097152; - break; - case 11: - chipClock=COLOR_NTSC; - break; - case 12: - chipClock=3600000; - break; - default: - chipClock=COLOR_NTSC/2.0; - break; + if (extMode) { + chipClock=extClock; + rate=chipClock/extDiv; + } else { + clockSel=(flags>>7)&1; + switch (flags&15) { + default: + case 0: + chipClock=COLOR_NTSC/2.0; + break; + case 1: + chipClock=COLOR_PAL*2.0/5.0; + break; + case 2: + chipClock=1750000; + break; + case 3: + chipClock=2000000; + break; + case 4: + chipClock=1500000; + break; + case 5: + chipClock=1000000; + break; + case 6: + chipClock=COLOR_NTSC/4.0; + break; + case 7: + chipClock=COLOR_PAL*3.0/8.0; + break; + case 8: + chipClock=COLOR_PAL*3.0/16.0; + break; + case 9: + chipClock=COLOR_PAL/4.0; + break; + case 10: + chipClock=2097152; + break; + case 11: + chipClock=COLOR_NTSC; + break; + case 12: + chipClock=3600000; + break; + case 13: + chipClock=20000000/16; + break; + case 14: + chipClock=1536000; + break; + } + rate=chipClock/8; } - rate=chipClock/8; for (int i=0; i<3; i++) { oscBuf[i]->rate=rate; } diff --git a/src/engine/platform/ay.h b/src/engine/platform/ay.h index f93d34bd..8ff5f39c 100644 --- a/src/engine/platform/ay.h +++ b/src/engine/platform/ay.h @@ -70,6 +70,9 @@ class DivPlatformAY8910: public DivDispatch { int delay; bool extMode; + unsigned int extClock; + unsigned char extDiv; + bool stereo, sunsoft, intellivision, clockSel; bool ioPortA, ioPortB; unsigned char portAVal, portBVal; @@ -110,5 +113,10 @@ class DivPlatformAY8910: public DivDispatch { const char* getEffectName(unsigned char effect); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); + DivPlatformAY8910(bool useExtMode=false, unsigned int eclk=COLOR_NTSC, unsigned char ediv=8): + DivDispatch(), + extMode(useExtMode), + extClock(eclk), + extDiv(ediv) {} }; #endif diff --git a/src/engine/platform/fmshared_OPM.h b/src/engine/platform/fmshared_OPM.h index 0ab05344..ed5f63dd 100644 --- a/src/engine/platform/fmshared_OPM.h +++ b/src/engine/platform/fmshared_OPM.h @@ -17,6 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifndef _FMSHARED_OPM_H +#define _FMSHARED_OPM_H + +#include "fmsharedbase.h" + #define ADDR_MULT_DT 0x40 #define ADDR_TL 0x60 #define ADDR_RS_AR 0x80 @@ -26,4 +31,18 @@ #define ADDR_NOTE 0x28 #define ADDR_KF 0x30 #define ADDR_FMS_AMS 0x38 -#define ADDR_LR_FB_ALG 0x20 \ No newline at end of file +#define ADDR_LR_FB_ALG 0x20 + +#define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) + +class DivPlatformOPMBase: public DivPlatformFMBase { + protected: + const unsigned short opOffs[4]={ + 0x00, 0x08, 0x10, 0x18 + }; + + DivPlatformOPMBase(): + DivPlatformFMBase() {} +}; + +#endif diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index a709aa1a..6e5426b5 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -20,6 +20,8 @@ #ifndef _FMSHARED_OPN_H #define _FMSHARED_OPN_H +#include "fmsharedbase.h" + #define ADDR_MULT_DT 0x30 #define ADDR_TL 0x40 #define ADDR_RS_AR 0x50 @@ -32,6 +34,9 @@ #define ADDR_FB_ALG 0xb0 #define ADDR_LRAF 0xb4 +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + #define PLEASE_HELP_ME(_targetChan) \ int boundaryBottom=parent->calcBaseFreq(chipClock,CHIP_FREQBASE,0,false); \ int boundaryTop=parent->calcBaseFreq(chipClock,CHIP_FREQBASE,12,false); \ @@ -93,4 +98,22 @@ return 2; \ } -#endif \ No newline at end of file +class DivPlatformOPNBase: public DivPlatformFMBase { + protected: + const unsigned short opOffs[4]={ + 0x00, 0x04, 0x08, 0x0c + }; + + const double fmFreqBase; + const double fmDivBase; + const unsigned char ayDiv; + + DivPlatformOPNBase(double f=9440540.0, double d=72, unsigned char a=32): + DivPlatformFMBase(), + fmFreqBase(f), + fmDivBase(d), + ayDiv(a) {} + +}; + +#endif diff --git a/src/engine/platform/genesisshared.h b/src/engine/platform/fmsharedbase.h similarity index 60% rename from src/engine/platform/genesisshared.h rename to src/engine/platform/fmsharedbase.h index d58d339e..a3b0e634 100644 --- a/src/engine/platform/genesisshared.h +++ b/src/engine/platform/fmsharedbase.h @@ -17,30 +17,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -static unsigned short chanOffs[6]={ - 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 -}; -static unsigned short opOffs[4]={ - 0x00, 0x04, 0x08, 0x0c -}; -static bool isOutput[8][4]={ - // 1 3 2 4 - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,true ,true}, - {false,true ,true ,true}, - {false,true ,true ,true}, - {true ,true ,true ,true}, -}; -static unsigned char dtTable[8]={ - 7,6,5,0,1,2,3,4 -}; +#ifndef _FMSHARED_BASE_H +#define _FMSHARED_BASE_H -static int orderedOps[4]={ - 0,2,1,3 -}; +#include #define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} #define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } @@ -57,4 +37,41 @@ static int orderedOps[4]={ } \ } -#include "fmshared_OPN.h" +class DivPlatformFMBase { + protected: + const bool isOutput[8][4]={ + // 1 3 2 4 + {false,false,false,true}, + {false,false,false,true}, + {false,false,false,true}, + {false,false,false,true}, + {false,false,true ,true}, + {false,true ,true ,true}, + {false,true ,true ,true}, + {true ,true ,true ,true}, + }; + const unsigned char dtTable[8]={ + 7,6,5,0,1,2,3,4 + }; + + const int orderedOps[4]={ + 0,2,1,3 + }; + + struct QueuedWrite { + unsigned short addr; + unsigned char val; + bool addrOrVal; + QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} + }; + std::deque writes; + + unsigned char lastBusy; + int delay; + + DivPlatformFMBase(): + lastBusy(0), + delay(0) {} +}; + +#endif diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 6cba30dd..a832bab4 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -22,13 +22,10 @@ #include #include -#include "genesisshared.h" - static unsigned char konOffs[6]={ 0, 1, 2, 4, 5, 6 }; -#define CHIP_FREQBASE 9440540 const char* DivPlatformGenesis::getEffectName(unsigned char effect) { switch (effect) { @@ -1169,12 +1166,13 @@ void DivPlatformGenesis::setSoftPCM(bool value) { } void DivPlatformGenesis::setFlags(unsigned int flags) { - switch (flags) { + switch (flags&(~0x80000000)) { + default: + case 0: chipClock=COLOR_NTSC*15.0/7.0; break; case 1: chipClock=COLOR_PAL*12.0/7.0; break; case 2: chipClock=8000000.0; break; case 3: chipClock=COLOR_NTSC*12.0/7.0; break; case 4: chipClock=COLOR_NTSC*9.0/4.0; break; - default: chipClock=COLOR_NTSC*15.0/7.0; break; } ladder=flags&0x80000000; OPN2_SetChipType(ladder?ym3438_mode_ym2612:0); diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index b4862427..71493fa5 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -20,18 +20,22 @@ #ifndef _GENESIS_H #define _GENESIS_H #include "../dispatch.h" -#include +#include "../macroInt.h" #include "../../../extern/Nuked-OPN2/ym3438.h" #include "sound/ymfm/ymfm_opn.h" -#include "sms.h" +#include "fmshared_OPN.h" class DivYM2612Interface: public ymfm::ymfm_interface { }; -class DivPlatformGenesis: public DivDispatch { +class DivPlatformGenesis: public DivDispatch, public DivPlatformOPNBase { protected: + const unsigned short chanOffs[6]={ + 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 + }; + struct Channel { DivInstrumentFM state; DivMacroInt std; @@ -98,8 +102,6 @@ class DivPlatformGenesis: public DivDispatch { }; std::deque writes; ym3438_t fm; - int delay; - unsigned char lastBusy; ymfm::ym2612* fm_ymfm; ymfm::ym2612::output_data out_ymfm; @@ -150,6 +152,9 @@ class DivPlatformGenesis: public DivDispatch { const char* getEffectName(unsigned char effect); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); + DivPlatformGenesis(): + DivDispatch(), + DivPlatformOPNBase(9440540.0, 72, 32) {} ~DivPlatformGenesis(); }; #endif diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index cc4abc88..76837f64 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -21,10 +21,6 @@ #include "../engine.h" #include -#include "genesisshared.h" - -#define CHIP_FREQBASE 9440540 - int DivPlatformGenesisExt::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformGenesis::dispatch(c); diff --git a/src/engine/platform/msm6258.h b/src/engine/platform/msm6258.h index ea0482f3..3a05bcf8 100644 --- a/src/engine/platform/msm6258.h +++ b/src/engine/platform/msm6258.h @@ -26,10 +26,6 @@ class DivPlatformMSM6258: public DivDispatch { protected: - const unsigned short chanOffs[6]={ - 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 - }; - struct Channel { unsigned char freqH, freqL; int freq, baseFreq, pitch, pitch2, portaPauseFreq, note, ins; @@ -77,12 +73,10 @@ class DivPlatformMSM6258: public DivDispatch { struct QueuedWrite { unsigned short addr; unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} + QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v) {} }; std::queue writes; okim6258_device* msm; - unsigned char regPool[512]; unsigned char lastBusy; unsigned char* adpcmMem; @@ -91,11 +85,6 @@ class DivPlatformMSM6258: public DivDispatch { int delay, updateOsc, sample, samplePos; - bool extMode; - - short oldWrites[512]; - short pendingWrites[512]; - friend void putDispatchChan(void*,int,int); public: diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index 541dded6..0d88d35d 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -24,6 +24,7 @@ #include #define rWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } +#define rWriteDelay(a,v,d) if (!skipRegisterWrites) {writes.emplace(a,v,d); if (dumpWrites) {addWrite(a,v);} } const char** DivPlatformMSM6295::getRegisterSheet() { return NULL; @@ -38,8 +39,11 @@ const char* DivPlatformMSM6295::getEffectName(unsigned char effect) { return NULL; } -u8 DivMSM6295Interface::read_byte(u32 address) { - return adpcmMem[address&0xffff]; +u8 DivPlatformMSM6295::read_byte(u32 address) { + if (adpcmMem==NULL || address>=getSampleMemCapacity(0)) { + return 0; + } + return adpcmMem[address&0x3ffff]; } void DivPlatformMSM6295::acquire(short* bufL, short* bufR, size_t start, size_t len) { @@ -49,7 +53,7 @@ void DivPlatformMSM6295::acquire(short* bufL, short* bufR, size_t start, size_t QueuedWrite& w=writes.front(); switch (w.addr) { case 0: // command - msm->command_w(w.val); + msm.command_w(w.val); break; case 8: // chip clock select (VGM) case 9: @@ -57,7 +61,7 @@ void DivPlatformMSM6295::acquire(short* bufL, short* bufR, size_t start, size_t case 11: break; case 12: // rate select - msm->ss_w(!w.val); + msm.ss_w(!w.val); break; case 14: // enable bankswitch break; @@ -70,21 +74,21 @@ void DivPlatformMSM6295::acquire(short* bufL, short* bufR, size_t start, size_t break; } writes.pop(); - delay=32; + delay=w.delay; } } else { delay--; } - msm->tick(); + msm.tick(); - bufL[h]=msm->out()<<4; + bufL[h]=msm.out()<<4; if (++updateOsc>=22) { updateOsc=0; // TODO: per-channel osc for (int i=0; i<4; i++) { - oscBuf[i]->data[oscBuf[i]->needle++]=msm->m_voice[i].m_muted?0:(msm->m_voice[i].m_out<<6); + oscBuf[i]->data[oscBuf[i]->needle++]=msm.m_voice[i].m_muted?0:(msm.m_voice[i].m_out<<6); } } } @@ -118,7 +122,7 @@ int DivPlatformMSM6295::dispatch(DivCommand c) { } chan[c.chan].active=true; chan[c.chan].keyOn=true; - rWrite(0,(8<getSample(12*sampleBank+c.value%12); chan[c.chan].sample=12*sampleBank+c.value%12; - rWrite(0,(8<(parent->song.sample.size()/12)) { sampleBank=parent->song.sample.size()/12; } - iface.sampleBank=sampleBank; break; case DIV_CMD_LEGATO: { break; @@ -212,7 +215,7 @@ int DivPlatformMSM6295::dispatch(DivCommand c) { void DivPlatformMSM6295::muteChannel(int ch, bool mute) { isMuted[ch]=mute; - msm->m_voice[ch].m_muted=mute; + msm.m_voice[ch].m_muted=mute; } void DivPlatformMSM6295::forceIns() { @@ -249,8 +252,8 @@ void DivPlatformMSM6295::poke(std::vector& wlist) { void DivPlatformMSM6295::reset() { while (!writes.empty()) writes.pop(); - msm->reset(); - msm->ss_w(false); + msm.reset(); + msm.ss_w(rateSelInit); if (dumpWrites) { addWrite(0xffffffff,0); } @@ -264,7 +267,8 @@ void DivPlatformMSM6295::reset() { } sampleBank=0; - rateSel=false; + rateSel=rateSelInit; + rWrite(12,!rateSelInit); delay=0; } @@ -339,7 +343,9 @@ void DivPlatformMSM6295::renderSamples() { } void DivPlatformMSM6295::setFlags(unsigned int flags) { - switch (flags) { + rateSelInit=(flags>>7)&1; + switch (flags&0x7f) { + default: case 0: chipClock=4000000/4; break; @@ -379,8 +385,11 @@ void DivPlatformMSM6295::setFlags(unsigned int flags) { case 12: chipClock=1500000; break; - default: - chipClock=4000000/4; + case 13: + chipClock=3000000; + break; + case 14: + chipClock=COLOR_NTSC/3.0; break; } rate=chipClock/3; @@ -388,14 +397,16 @@ void DivPlatformMSM6295::setFlags(unsigned int flags) { isMuted[i]=false; oscBuf[i]->rate=rate/22; } + if (rateSel!=rateSelInit) { + rWrite(12,!rateSelInit); + rateSel=rateSelInit; + } } int DivPlatformMSM6295::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { parent=p; adpcmMem=new unsigned char[getSampleMemCapacity(0)]; adpcmMemLen=0; - iface.adpcmMem=adpcmMem; - iface.sampleBank=0; dumpWrites=false; skipRegisterWrites=false; updateOsc=0; @@ -403,7 +414,6 @@ int DivPlatformMSM6295::init(DivEngine* p, int channels, int sugRate, unsigned i isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - msm=new msm6295_core(iface); setFlags(flags); reset(); return 4; @@ -413,7 +423,6 @@ void DivPlatformMSM6295::quit() { for (int i=0; i<4; i++) { delete oscBuf[i]; } - delete msm; delete[] adpcmMem; } diff --git a/src/engine/platform/msm6295.h b/src/engine/platform/msm6295.h index 2930a169..463384f1 100644 --- a/src/engine/platform/msm6295.h +++ b/src/engine/platform/msm6295.h @@ -24,60 +24,31 @@ #include #include "sound/oki/msm6295.hpp" -class DivMSM6295Interface: public vgsound_emu_mem_intf { - public: - unsigned char* adpcmMem; - int sampleBank; - u8 read_byte(u32 address); - DivMSM6295Interface(): adpcmMem(NULL), sampleBank(0) {} -}; - -class DivPlatformMSM6295: public DivDispatch { +class DivPlatformMSM6295: public DivDispatch, public vgsound_emu_mem_intf { protected: - const unsigned short chanOffs[6]={ - 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 - }; - struct Channel { - unsigned char freqH, freqL; - int freq, baseFreq, pitch, pitch2, portaPauseFreq, note, ins; - unsigned char psgMode, autoEnvNum, autoEnvDen; + int note, ins; signed char konCycles; - bool active, insChanged, freqChanged, keyOn, keyOff, portaPause, inPorta, furnacePCM, hardReset; + bool active, insChanged, freqChanged, keyOn, keyOff, furnacePCM, hardReset; int vol, outVol; int sample; - unsigned char pan; DivMacroInt std; void macroInit(DivInstrument* which) { std.init(which); - pitch2=0; } Channel(): - freqH(0), - freqL(0), - freq(0), - baseFreq(0), - pitch(0), - pitch2(0), - portaPauseFreq(0), note(0), ins(-1), - psgMode(1), - autoEnvNum(0), - autoEnvDen(0), active(false), insChanged(true), freqChanged(false), keyOn(false), keyOff(false), - portaPause(false), - inPorta(false), furnacePCM(false), hardReset(false), vol(0), outVol(15), - sample(-1), - pan(3) {} + sample(-1) {} }; Channel chan[4]; DivDispatchOscBuffer* oscBuf[4]; @@ -85,56 +56,58 @@ class DivPlatformMSM6295: public DivDispatch { struct QueuedWrite { unsigned short addr; unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} + unsigned short delay; + QueuedWrite(unsigned short a, unsigned char v, unsigned short d=32): + addr(a), + val(v), + delay(d) {} }; std::queue writes; - msm6295_core* msm; - unsigned char regPool[512]; + msm6295_core msm; unsigned char lastBusy; unsigned char* adpcmMem; size_t adpcmMemLen; - DivMSM6295Interface iface; unsigned char sampleBank; int delay, updateOsc; - bool extMode; - bool rateSel; + bool rateSel=false, rateSelInit=false; - short oldWrites[512]; - short pendingWrites[512]; - friend void putDispatchChan(void*,int,int); public: - void acquire(short* bufL, short* bufR, size_t start, size_t len); - int dispatch(DivCommand c); - void* getChanState(int chan); - DivDispatchOscBuffer* getOscBuffer(int chan); - unsigned char* getRegisterPool(); - int getRegisterPoolSize(); - void reset(); - void forceIns(); - void tick(bool sysTick=true); - void muteChannel(int ch, bool mute); - bool keyOffAffectsArp(int ch); - float getPostAmp(); - void notifyInsChange(int ins); - void notifyInsDeletion(void* ins); - void poke(unsigned int addr, unsigned short val); - void poke(std::vector& wlist); - void setFlags(unsigned int flags); - const char** getRegisterSheet(); - const char* getEffectName(unsigned char effect); - const void* getSampleMem(int index); - size_t getSampleMemCapacity(int index); - size_t getSampleMemUsage(int index); - void renderSamples(); + virtual u8 read_byte(u32 address) override; + virtual void acquire(short* bufL, short* bufR, size_t start, size_t len) override; + virtual int dispatch(DivCommand c) override; + virtual void* getChanState(int chan) override; + virtual DivDispatchOscBuffer* getOscBuffer(int chan) override; + virtual unsigned char* getRegisterPool() override; + virtual int getRegisterPoolSize() override; + virtual void reset() override; + virtual void forceIns() override; + virtual void tick(bool sysTick=true) override; + virtual void muteChannel(int ch, bool mute) override; + virtual bool keyOffAffectsArp(int ch) override; + virtual float getPostAmp() override; + virtual void notifyInsChange(int ins) override; + virtual void notifyInsDeletion(void* ins) override; + virtual void poke(unsigned int addr, unsigned short val) override; + virtual void poke(std::vector& wlist) override; + virtual void setFlags(unsigned int flags) override; + virtual const char** getRegisterSheet() override; + virtual const char* getEffectName(unsigned char effect) override; + virtual const void* getSampleMem(int index) override; + virtual size_t getSampleMemCapacity(int index) override; + virtual size_t getSampleMemUsage(int index) override; + virtual void renderSamples() override; - int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); - void quit(); + virtual int init(DivEngine* parent, int channels, int sugRate, unsigned int flags) override; + virtual void quit() override; + DivPlatformMSM6295(): + DivDispatch(), + vgsound_emu_mem_intf(), + msm(*this) {} ~DivPlatformMSM6295(); }; #endif diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index c8d72829..a40f4114 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -277,8 +277,13 @@ void DivPlatformOPL::acquire_nuked(short* bufL, short* bufR, size_t start, size_ regPool[w.addr&511]=w.val; writes.pop(); } - - OPL3_Generate(&fm,o); os[0]+=o[0]; os[1]+=o[1]; + + if (downsample) { + OPL3_GenerateResampled(&fm,o); + } else { + OPL3_Generate(&fm,o); + } + os[0]+=o[0]; os[1]+=o[1]; if (adpcmChan>=0) { adpcmB->clock(); @@ -778,7 +783,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { immWrite(11,(end>>2)&0xff); immWrite(12,(end>>10)&0xff); immWrite(7,(s->loopStart>=0)?0xb0:0xa0); // start/repeat - int freq=(65536.0*(double)s->rate)/(double)rate; + int freq=(65536.0*(double)s->rate)/(double)chipRateBase; immWrite(16,freq&0xff); immWrite(17,(freq>>8)&0xff); } @@ -1504,7 +1509,12 @@ void DivPlatformOPL::reset() { fm_ymfm->reset(); } */ - OPL3_Reset(&fm,rate); + if (downsample) { + const unsigned int downsampledRate=(unsigned int)(49716.0*(double(rate)/chipRateBase)); + OPL3_Reset(&fm,downsampledRate); + } else { + OPL3_Reset(&fm,rate); + } if (dumpWrites) { addWrite(0xffffffff,0); } @@ -1621,6 +1631,7 @@ void DivPlatformOPL::setYMFM(bool use) { void DivPlatformOPL::setOPLType(int type, bool drums) { pretendYMU=false; + downsample=false; adpcmChan=-1; switch (type) { case 1: case 2: case 8950: @@ -1650,10 +1661,13 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { if (type==759) { pretendYMU=true; adpcmChan=16; + } else if (type==4) { + downsample=true; } break; } - if (type==759) { + chipType=type; + if (type==759 || type==4) { oplType=3; } else if (type==8950) { oplType=1; @@ -1688,17 +1702,73 @@ void DivPlatformOPL::setFlags(unsigned int flags) { rate=chipClock/36; }*/ - if (oplType==3) { - chipClock=COLOR_NTSC*4.0; - rate=chipClock/288; - } else { - chipClock=COLOR_NTSC; - rate=chipClock/72; - } - - if (pretendYMU) { - rate=48000; - chipClock=rate*288; + switch (chipType) { + default: + case 1: case 2: case 8950: + switch (flags&0xff) { + case 0x00: + chipClock=COLOR_NTSC; + break; + case 0x01: + chipClock=COLOR_PAL*4.0/5.0; + break; + case 0x02: + chipClock=4000000.0; + break; + case 0x03: + chipClock=3000000.0; + break; + case 0x04: + chipClock=31948800/8; + break; + case 0x05: + chipClock=3500000.0; + break; + } + rate=chipClock/72; + chipRateBase=double(rate); + break; + case 3: + switch (flags&0xff) { + case 0x00: + chipClock=COLOR_NTSC*4.0; + break; + case 0x01: + chipClock=COLOR_PAL*16.0/5.0; + break; + case 0x02: + chipClock=14000000.0; + break; + case 0x03: + chipClock=16000000.0; + break; + case 0x04: + chipClock=15000000.0; + break; + } + rate=chipClock/288; + chipRateBase=double(rate); + break; + case 4: + switch (flags&0xff) { + case 0x02: + chipClock=33868800.0; + break; + case 0x00: + chipClock=COLOR_NTSC*8.0; + break; + case 0x01: + chipClock=COLOR_PAL*32.0/5.0; + break; + } + chipRateBase=double(chipClock)/684.0; + rate=chipClock/768; + break; + case 759: + rate=48000; + chipRateBase=double(rate); + chipClock=rate*288; + break; } for (int i=0; i<18; i++) { diff --git a/src/engine/platform/opl.h b/src/engine/platform/opl.h index 61ea4648..9d2d1774 100644 --- a/src/engine/platform/opl.h +++ b/src/engine/platform/opl.h @@ -95,8 +95,8 @@ class DivPlatformOPL: public DivDispatch { const unsigned char** slots; const unsigned short* chanMap; const unsigned char* outChanMap; - double chipFreqBase; - int delay, oplType, chans, melodicChans, totalChans, adpcmChan, sampleBank; + double chipFreqBase, chipRateBase; + int delay, chipType, oplType, chans, melodicChans, totalChans, adpcmChan, sampleBank; unsigned char lastBusy; unsigned char drumState; unsigned char drumVol[5]; @@ -107,7 +107,7 @@ class DivPlatformOPL: public DivDispatch { unsigned char lfoValue; - bool useYMFM, update4OpMask, pretendYMU; + bool useYMFM, update4OpMask, pretendYMU, downsample; short oldWrites[512]; short pendingWrites[512]; diff --git a/src/engine/platform/scc.cpp b/src/engine/platform/scc.cpp index 2ab6f1aa..1b70d956 100644 --- a/src/engine/platform/scc.cpp +++ b/src/engine/platform/scc.cpp @@ -373,6 +373,27 @@ void DivPlatformSCC::setChipModel(bool isplus) { isPlus=isplus; } +void DivPlatformSCC::setFlags(unsigned int flags) { + switch (flags&0x7f) { + case 0x00: + chipClock=COLOR_NTSC/2.0; + break; + case 0x01: + chipClock=COLOR_PAL*2.0/5.0; + break; + case 0x02: + chipClock=3000000.0/2.0; + break; + case 0x03: + chipClock=4000000.0/2.0; + break; + } + rate=chipClock/8; + for (int i=0; i<5; i++) { + oscBuf[i]->rate=rate; + } +} + int DivPlatformSCC::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { parent=p; dumpWrites=false; @@ -382,11 +403,7 @@ int DivPlatformSCC::init(DivEngine* p, int channels, int sugRate, unsigned int f isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - chipClock=COLOR_NTSC/2.0; - rate=chipClock/8; - for (int i=0; i<5; i++) { - oscBuf[i]->rate=rate; - } + setFlags(flags); if (isPlus) { scc=new k052539_scc_core; regBase=0xa0; diff --git a/src/engine/platform/scc.h b/src/engine/platform/scc.h index df6ef84e..d83e0293 100644 --- a/src/engine/platform/scc.h +++ b/src/engine/platform/scc.h @@ -84,6 +84,7 @@ class DivPlatformSCC: public DivDispatch { void poke(std::vector& wlist); const char** getRegisterSheet(); const char* getEffectName(unsigned char effect); + void setFlags(unsigned int flags); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void setChipModel(bool isPlus); void quit(); diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index c5cf1091..c83108a6 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -21,15 +21,21 @@ #include "../engine.h" #include -#define rWrite(v) {if (!skipRegisterWrites) {writes.push(v); if (dumpWrites) {addWrite(0x200,v);}}} +#define rWrite(a,v) {if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(0x200+a,v);}}} const char* regCheatSheetSN[]={ "DATA", "0", NULL }; +const char* regCheatSheetGG[]={ + "DATA", "0", + "Stereo", "1", + NULL +}; + const char** DivPlatformSMS::getRegisterSheet() { - return regCheatSheetSN; + return isStereo()?regCheatSheetGG:regCheatSheetSN; } const char* DivPlatformSMS::getEffectName(unsigned char effect) { @@ -45,8 +51,8 @@ void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_ int o=0; for (size_t h=start; hwrite(w); + QueuedWrite w=writes.front(); + if (stereo && (w.addr&1)) + sn->stereo_w(w.val); + else + sn->write(w.val); writes.pop(); } + sn->sound_stream_update(snBuf,len); + if (stereo) { + for (size_t i=0; isound_stream_update(bufL+h,1); for (int i=0; i<4; i++) { if (isMuted[i]) { oscBuf[i]->data[oscBuf[i]->needle++]=0; @@ -106,23 +133,17 @@ void DivPlatformSMS::acquire(short* bufL, short* bufR, size_t start, size_t len) } } -int DivPlatformSMS::acquireOne() { - short v; - sn->sound_stream_update(&v,1); - return v; -} - void DivPlatformSMS::tick(bool sysTick) { for (int i=0; i<4; i++) { int CHIP_DIVIDER=64; - if (i==3 && isRealSN) CHIP_DIVIDER=60; + if (i==3) CHIP_DIVIDER=noiseDivider; chan[i].std.next(); if (chan[i].std.vol.had) { chan[i].outVol=MIN(15,chan[i].std.vol.val)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; // old formula // ((chan[i].vol&15)*MIN(15,chan[i].std.vol.val))>>4; - rWrite(0x90|(i<<5)|(isMuted[i]?15:(15-(chan[i].outVol&15)))); + rWrite(0,0x90|(i<<5)|(isMuted[i]?15:(15-(chan[i].outVol&15)))); } if (chan[i].std.arp.had) { if (!chan[i].inPorta) { @@ -161,6 +182,13 @@ void DivPlatformSMS::tick(bool sysTick) { } } } + if (isStereo()) { + if (chan[i].std.panL.had) { + lastPan&=~(0x11<>1)&1)<1023) chan[i].freq=1023; if (chan[i].freq<8) chan[i].freq=1; //if (chan[i].actualNote>0x5d) chan[i].freq=0x01; - rWrite(0x80|i<<5|(chan[i].freq&15)); - rWrite(chan[i].freq>>4); + rWrite(0,0x80|i<<5|(chan[i].freq&15)); + rWrite(0,chan[i].freq>>4); // what? /*if (i==2 && snNoiseMode&2) { chan[3].baseFreq=chan[2].baseFreq; @@ -188,24 +216,24 @@ void DivPlatformSMS::tick(bool sysTick) { } } if (chan[3].freqChanged || updateSNMode) { - chan[3].freq=parent->calcFreq(chan[3].baseFreq,chan[3].pitch,true,0,chan[3].pitch2,chipClock,isRealSN?60:64); + chan[3].freq=parent->calcFreq(chan[3].baseFreq,chan[3].pitch,true,0,chan[3].pitch2,chipClock,noiseDivider); if (chan[3].freq>1023) chan[3].freq=1023; if (chan[3].actualNote>0x5d) chan[3].freq=0x01; if (snNoiseMode&2) { // take period from channel 3 if (updateSNMode || resetPhase) { if (snNoiseMode&1) { - rWrite(0xe7); + rWrite(0,0xe7); } else { - rWrite(0xe3); + rWrite(0,0xe3); } if (updateSNMode) { - rWrite(0xdf); + rWrite(0,0xdf); } } if (chan[3].freqChanged) { - rWrite(0xc0|(chan[3].freq&15)); - rWrite(chan[3].freq>>4); + rWrite(0,0xc0|(chan[3].freq&15)); + rWrite(0,chan[3].freq>>4); } } else { // 3 fixed values unsigned char value; @@ -222,7 +250,7 @@ void DivPlatformSMS::tick(bool sysTick) { value=2-value; if (value!=oldValue || updateSNMode || resetPhase) { oldValue=value; - rWrite(0xe0|value|((snNoiseMode&1)<<2)); + rWrite(0,0xe0|value|((snNoiseMode&1)<<2)); } } } @@ -233,7 +261,7 @@ void DivPlatformSMS::tick(bool sysTick) { int DivPlatformSMS::dispatch(DivCommand c) { int CHIP_DIVIDER=64; - if (c.chan==3 && isRealSN) CHIP_DIVIDER=60; + if (c.chan==3) CHIP_DIVIDER=noiseDivider; switch (c.cmd) { case DIV_CMD_NOTE_ON: if (c.value!=DIV_NOTE_NULL) { @@ -243,7 +271,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { chan[c.chan].actualNote=c.value; } chan[c.chan].active=true; - rWrite(0x90|c.chan<<5|(isMuted[c.chan]?15:(15-(chan[c.chan].vol&15)))); + rWrite(0,0x90|c.chan<<5|(isMuted[c.chan]?15:(15-(chan[c.chan].vol&15)))); chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_STD)); if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { chan[c.chan].outVol=chan[c.chan].vol; @@ -251,7 +279,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { break; case DIV_CMD_NOTE_OFF: chan[c.chan].active=false; - rWrite(0x9f|c.chan<<5); + rWrite(0,0x9f|c.chan<<5); chan[c.chan].macroInit(NULL); break; case DIV_CMD_NOTE_OFF_ENV: @@ -268,7 +296,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { if (!chan[c.chan].std.vol.has) { chan[c.chan].outVol=c.value; } - if (chan[c.chan].active) rWrite(0x90|c.chan<<5|(isMuted[c.chan]?15:(15-(chan[c.chan].vol&15)))); + if (chan[c.chan].active) rWrite(0,0x90|c.chan<<5|(isMuted[c.chan]?15:(15-(chan[c.chan].vol&15)))); } break; case DIV_CMD_GET_VOLUME: @@ -308,6 +336,18 @@ int DivPlatformSMS::dispatch(DivCommand c) { snNoiseMode=(c.value&1)|((c.value&16)>>3); updateSNMode=true; break; + case DIV_CMD_PANNING: { + if (isStereo()) { + lastPan&=~(0x11<0) pan|=0x01; + if (c.value2>0) pan|=0x10; + if (pan==0) pan=0x11; + lastPan|=pan<device_start(); - YMPSG_Init(&sn_nuked,isRealSN); + YMPSG_Init(&sn_nuked,isRealSN,12,isRealSN?13:15,isRealSN?16383:32767); snNoiseMode=3; - rWrite(0xe7); + rWrite(0,0xe7); updateSNMode=false; oldValue=0xff; + lastPan=0xff; + if (isStereo()) { + rWrite(1,0xff); + } +} + +bool DivPlatformSMS::isStereo() { + return (!nuked) && stereo; } bool DivPlatformSMS::keyOffAffectsArp(int ch) { @@ -391,45 +439,88 @@ void DivPlatformSMS::notifyInsDeletion(void* ins) { } void DivPlatformSMS::poke(unsigned int addr, unsigned short val) { - rWrite(val); + rWrite(addr,val); } void DivPlatformSMS::poke(std::vector& wlist) { - for (DivRegWrite& i: wlist) rWrite(i.val); + for (DivRegWrite& i: wlist) rWrite(i.addr,i.val); } void DivPlatformSMS::setFlags(unsigned int flags) { - if ((flags&3)==3) { - chipClock=COLOR_NTSC/2.0; - } else if ((flags&3)==2) { - chipClock=4000000; - } else if ((flags&3)==1) { - chipClock=COLOR_PAL*4.0/5.0; - } else { - chipClock=COLOR_NTSC; + switch (flags&0xff03) { + default: + case 0x0000: + chipClock=COLOR_NTSC; + break; + case 0x0001: + chipClock=COLOR_PAL*4.0/5.0; + break; + case 0x0002: + chipClock=4000000; + break; + case 0x0003: + chipClock=COLOR_NTSC/2.0; + break; + case 0x0100: + chipClock=3000000; + break; + case 0x0101: + chipClock=2000000; + break; } resetPhase=!(flags&16); - + noiseDivider=64; if (sn!=NULL) delete sn; - switch ((flags>>2)&3) { - case 1: // TI - sn=new sn76496_base_device(0x4000, 0x4000, 0x01, 0x02, true, 1, false, true); - isRealSN=true; - break; - case 2: // TI+Atari - sn=new sn76496_base_device(0x4000, 0x0f35, 0x01, 0x02, true, 1, false, true); - isRealSN=true; - break; - case 3: // Game Gear (not fully emulated yet!) - sn=new sn76496_base_device(0x8000, 0x8000, 0x01, 0x08, false, 1, false, false); - isRealSN=false; - break; + switch (flags&0xcc) { default: // Sega - sn=new sn76496_base_device(0x8000, 0x8000, 0x01, 0x08, false, 1, false, false); + case 0x00: + sn=new segapsg_device(); isRealSN=false; + stereo=false; + break; + case 0x04: // TI SN76489 + sn=new sn76489_device(); + isRealSN=true; + noiseDivider=60; + stereo=false; + break; + case 0x08: // TI+Atari + sn=new sn76496_base_device(0x4000, 0x0f35, 0x01, 0x02, true, false, 8, false, true); + isRealSN=true; + noiseDivider=60; + stereo=false; + break; + case 0x0c: // Game Gear (not fully emulated yet!) + sn=new gamegear_device(); + isRealSN=false; + stereo=true; + break; + case 0x40: // TI SN76489A + sn=new sn76489a_device(); + isRealSN=false; // TODO + noiseDivider=68; + stereo=false; + break; + case 0x44: // TI SN76496 + sn=new sn76496_device(); + isRealSN=false; // TODO + noiseDivider=68; + stereo=false; + break; + case 0x48: // NCR 8496 + sn=new ncr8496_device(); + isRealSN=false; + noiseDivider=64; + stereo=false; + break; + case 0x4c: // Tandy PSSJ 3-voice sound + sn=new pssj3_device(); + isRealSN=false; + noiseDivider=64; + stereo=false; break; } - rate=chipClock/16; + rate=nuked?chipClock/16:chipClock/2; for (int i=0; i<4; i++) { oscBuf[i]->rate=rate; } @@ -445,12 +536,15 @@ int DivPlatformSMS::init(DivEngine* p, int channels, int sugRate, unsigned int f skipRegisterWrites=false; resetPhase=false; oldValue=0xff; + lastPan=0xff; for (int i=0; i<4; i++) { isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } sn=NULL; setFlags(flags); + snBufLen=65536; + for (int i=0; i<2; i++) snBuf[i]=new short[snBufLen]; reset(); return 4; } @@ -459,6 +553,9 @@ void DivPlatformSMS::quit() { for (int i=0; i<4; i++) { delete oscBuf[i]; } + for (int i=0; i<2; i++) { + delete[] snBuf[i]; + } if (sn!=NULL) delete sn; } diff --git a/src/engine/platform/sms.h b/src/engine/platform/sms.h index 3c97a9a5..56f6beda 100644 --- a/src/engine/platform/sms.h +++ b/src/engine/platform/sms.h @@ -58,21 +58,31 @@ class DivPlatformSMS: public DivDispatch { Channel chan[4]; DivDispatchOscBuffer* oscBuf[4]; bool isMuted[4]; + unsigned char lastPan; + short* snBuf[2]; + size_t snBufLen; unsigned char oldValue; unsigned char snNoiseMode; + int noiseDivider=64; bool updateSNMode; bool resetPhase; bool isRealSN; + bool stereo; bool nuked; sn76496_base_device* sn; ympsg_t sn_nuked; - std::queue writes; + struct QueuedWrite { + unsigned short addr; + unsigned char val; + bool addrOrVal; + QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} + }; + std::queue writes; friend void putDispatchChan(void*,int,int); void acquire_nuked(short* bufL, short* bufR, size_t start, size_t len); void acquire_mame(short* bufL, short* bufR, size_t start, size_t len); public: - int acquireOne(); void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); @@ -81,6 +91,7 @@ class DivPlatformSMS: public DivDispatch { void forceIns(); void tick(bool sysTick=true); void muteChannel(int ch, bool mute); + bool isStereo(); bool keyOffAffectsArp(int ch); bool keyOffAffectsPorta(int ch); int getPortaFloor(int ch); diff --git a/src/engine/platform/sound/sn76496.cpp b/src/engine/platform/sound/sn76496.cpp index 351c94d8..5062ea7a 100644 --- a/src/engine/platform/sound/sn76496.cpp +++ b/src/engine/platform/sound/sn76496.cpp @@ -128,7 +128,7 @@ 10/12/2019: Michael Zapf * READY line handling by own emu_timer, not depending on sound_stream_update - additional modifications by tildearrow for furnace + additional modifications by tildearrow, cam900 for furnace TODO: * Implement the TMS9919 - any difference to sn94624? * Implement the T6W28; has registers in a weird order, needs writes @@ -150,18 +150,20 @@ sn76496_base_device::sn76496_base_device( int feedbackmask, - int noise_start, + int noise_start, int noisetap1, int noisetap2, bool negate, + bool stereo, int clockdivider, bool ncr, bool sega) : m_feedback_mask(feedbackmask) - , m_noise_start(noise_start) + , m_noise_start(noise_start) , m_whitenoise_tap1(noisetap1) , m_whitenoise_tap2(noisetap2) - , m_negate(negate) + , m_negate(negate) + , m_stereo(stereo) , m_clock_divider(clockdivider) , m_ncr_style_psg(ncr) , m_sega_style_psg(sega) @@ -169,10 +171,54 @@ sn76496_base_device::sn76496_base_device( } sn76496_device::sn76496_device() - : sn76496_base_device(0x8000, 0x8000, 0x01, 0x08, false, 1, false, false) + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 8, false, true) { } +y2404_device::y2404_device() + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 8, false, true) +{ +} + +sn76489_device::sn76489_device() + : sn76496_base_device(0x4000, 0x01, 0x02, true, false, 8, false, true) +{ +} + +sn76489a_device::sn76489a_device() + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 8, false, true) +{ +} + +sn76494_device::sn76494_device() + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 1, false, true) +{ +} + +sn94624_device::sn94624_device() + : sn76496_base_device(0x4000, 0x01, 0x02, true, false, 1, false, true) +{ +} + +ncr8496_device::ncr8496_device() + : sn76496_base_device(0x8000, 0x02, 0x20, true, false, 8, true, true) +{ +} + +pssj3_device::pssj3_device() + : sn76496_base_device(0x8000, 0x02, 0x20, false, false, 8, true, true) +{ +} + +gamegear_device::gamegear_device() + : sn76496_base_device(0x8000, 0x01, 0x08, true, true, 8, false, false) +{ +} + +segapsg_device::segapsg_device() + : sn76496_base_device(0x8000, 0x01, 0x08, true, false, 8, false, false) +{ +} void sn76496_base_device::device_start() { @@ -199,6 +245,7 @@ void sn76496_base_device::device_start() m_RNG = m_feedback_mask; m_output[3] = m_RNG & 1; + m_stereo_mask = 0xFF; // all channels enabled m_current_clock = m_clock_divider-1; // set gain @@ -225,6 +272,11 @@ void sn76496_base_device::device_start() m_ready_state = true; } +void sn76496_base_device::stereo_w(u8 data) +{ + if (m_stereo) m_stereo_mask = data; +} + void sn76496_base_device::write(u8 data) { int n, r, c; @@ -285,7 +337,7 @@ inline bool sn76496_base_device::in_noise_mode() return ((m_register[6] & 4)!=0); } -void sn76496_base_device::sound_stream_update(short* outputs, int outLen) +void sn76496_base_device::sound_stream_update(short** outputs, int outLen) { int i; @@ -336,13 +388,30 @@ void sn76496_base_device::sound_stream_update(short* outputs, int outLen) } } + if (m_stereo) + { + out = ((((m_stereo_mask & 0x10)!=0) && (m_output[0]!=0))? m_volume[0] : 0) + + ((((m_stereo_mask & 0x20)!=0) && (m_output[1]!=0))? m_volume[1] : 0) + + ((((m_stereo_mask & 0x40)!=0) && (m_output[2]!=0))? m_volume[2] : 0) + + ((((m_stereo_mask & 0x80)!=0) && (m_output[3]!=0))? m_volume[3] : 0); + + out2= ((((m_stereo_mask & 0x1)!=0) && (m_output[0]!=0))? m_volume[0] : 0) + + ((((m_stereo_mask & 0x2)!=0) && (m_output[1]!=0))? m_volume[1] : 0) + + ((((m_stereo_mask & 0x4)!=0) && (m_output[2]!=0))? m_volume[2] : 0) + + ((((m_stereo_mask & 0x8)!=0) && (m_output[3]!=0))? m_volume[3] : 0); + } + else + { out= ((m_output[0]!=0)? m_volume[0]:0) +((m_output[1]!=0)? m_volume[1]:0) +((m_output[2]!=0)? m_volume[2]:0) +((m_output[3]!=0)? m_volume[3]:0); + } if (m_negate) { out = -out; out2 = -out2; } - outputs[sampindex]=out; + outputs[0][sampindex]=out; + if (m_stereo) + outputs[1][sampindex]=out; } } diff --git a/src/engine/platform/sound/sn76496.h b/src/engine/platform/sound/sn76496.h index 4c24e938..7a8a5c62 100644 --- a/src/engine/platform/sound/sn76496.h +++ b/src/engine/platform/sound/sn76496.h @@ -1,7 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria -// additional modifications by tildearrow for furnace +// additional modifications by tildearrow, cam900 for furnace #ifndef MAME_SOUND_SN76496_H #define MAME_SOUND_SN76496_H @@ -14,34 +14,57 @@ class sn76496_base_device { public: void stereo_w(u8 data); void write(u8 data); - void device_start(); - void sound_stream_update(short* outputs, int outLen); - inline int32_t get_channel_output(int ch) { - return ((m_output[ch]!=0)?m_volume[ch]:0); - } + void device_start(); + void sound_stream_update(short** outputs, int outLen); + inline int32_t get_channel_output(int ch) { + return ((m_output[ch]!=0)?m_volume[ch]:0); + } //DECLARE_READ_LINE_MEMBER( ready_r ) { return m_ready_state ? 1 : 0; } sn76496_base_device( int feedbackmask, - int noise_start, + int noise_start, int noisetap1, int noisetap2, bool negate, + bool stereo, int clockdivider, bool ncr, bool sega); + sn76496_base_device( + int feedbackmask, + int noisetap1, + int noisetap2, + bool negate, + bool stereo, + int clockdivider, + bool ncr, + bool sega) + : sn76496_base_device( + feedbackmask, + feedbackmask, + noisetap1, + noisetap2, + negate, + stereo, + clockdivider, + ncr, + sega) + {} + private: inline bool in_noise_mode(); bool m_ready_state; - const int32_t m_feedback_mask; // mask for feedback - const int32_t m_noise_start; // noise start value - const int32_t m_whitenoise_tap1; // mask for white noise tap 1 (higher one, usually bit 14) - const int32_t m_whitenoise_tap2; // mask for white noise tap 2 (lower one, usually bit 13) - bool m_negate; // output negate flag - const int32_t m_clock_divider; // clock divider + const int32_t m_feedback_mask; // mask for feedback + const int32_t m_noise_start; // noise start value + const int32_t m_whitenoise_tap1; // mask for white noise tap 1 (higher one, usually bit 14) + const int32_t m_whitenoise_tap2; // mask for white noise tap 2 (lower one, usually bit 13) + bool m_negate; // output negate flag + const bool m_stereo; // whether we're dealing with stereo or not + const int32_t m_clock_divider; // clock divider const bool m_ncr_style_psg; // flag to ignore writes to regs 1,3,5,6,7 with bit 7 low const bool m_sega_style_psg; // flag to make frequency zero acts as if it is one more than max (0x3ff+1) or if it acts like 0; the initial register is pointing to 0x3 instead of 0x0; the volume reg is preloaded with 0xF instead of 0x0 @@ -51,6 +74,7 @@ private: int32_t m_volume[4]; // db volume of voice 0-2 and noise uint32_t m_RNG; // noise generator LFSR int32_t m_current_clock; + int32_t m_stereo_mask; // the stereo output mask int32_t m_period[4]; // Length of 1/2 of waveform int32_t m_count[4]; // Position within the waveform int32_t m_output[4]; // 1-bit output of each channel, pre-volume @@ -63,4 +87,67 @@ public: sn76496_device(); }; +// Y2404 not verified yet. todo: verify; (don't be fooled by the Y, it's a TI chip, not Yamaha) +class y2404_device : public sn76496_base_device +{ +public: + y2404_device(); +}; + +// SN76489 not verified yet. todo: verify; +class sn76489_device : public sn76496_base_device +{ +public: + sn76489_device(); +}; + +// SN76489A: whitenoise verified, phase verified, periodic verified (by plgdavid) +class sn76489a_device : public sn76496_base_device +{ +public: + sn76489a_device(); +}; + +// SN76494 not verified, (according to datasheet: same as sn76489a but without the /8 divider) +class sn76494_device : public sn76496_base_device +{ +public: + sn76494_device(); +}; + +// SN94624 whitenoise verified, phase verified, period verified; verified by PlgDavid +class sn94624_device : public sn76496_base_device +{ +public: + sn94624_device(); +}; + +// NCR8496 whitenoise verified, phase verified; verified by ValleyBell & NewRisingSun +class ncr8496_device : public sn76496_base_device +{ +public: + ncr8496_device(); +}; + +// PSSJ-3 whitenoise verified, phase verified; verified by ValleyBell & NewRisingSun +class pssj3_device : public sn76496_base_device +{ +public: + pssj3_device(); +}; + +// Verified by Justin Kerk +class gamegear_device : public sn76496_base_device +{ +public: + gamegear_device(); +}; + +// todo: verify; from smspower wiki, assumed to have same invert as gamegear +class segapsg_device : public sn76496_base_device +{ +public: + segapsg_device(); +}; + #endif // MAME_SOUND_SN76496_H diff --git a/src/engine/platform/tx81z.cpp b/src/engine/platform/tx81z.cpp index 569f722b..d530d9ee 100644 --- a/src/engine/platform/tx81z.cpp +++ b/src/engine/platform/tx81z.cpp @@ -22,43 +22,11 @@ #include #include -#include "fmshared_OPM.h" - // actually 0x40 but the upper bit of data selects address #define ADDR_WS_FINE 0x100 // actually 0xc0 but bit 5 of data selects address #define ADDR_EGS_REV 0x120 -static unsigned short chanOffs[8]={ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 -}; -static unsigned short opOffs[4]={ - 0x00, 0x08, 0x10, 0x18 -}; -static bool isOutput[8][4]={ - // 1 3 2 4 - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,true ,true}, - {false,true ,true ,true}, - {false,true ,true ,true}, - {true ,true ,true ,true}, -}; -static unsigned char dtTable[8]={ - 7,6,5,0,1,2,3,4 -}; - -static int orderedOps[4]={ - 0,2,1,3 -}; - -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } - -#define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) - const char* regCheatSheetOPZ[]={ "Test", "00", "NoteCtl", "08", @@ -233,7 +201,7 @@ void DivPlatformTX81Z::acquire(short* bufL, short* bufR, size_t start, size_t le fm_ymfm->write(0x0+((w.addr>>8)<<1),w.addr); fm_ymfm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0xff]=w.val; - writes.pop(); + writes.pop_front(); delay=1; } } @@ -1048,7 +1016,7 @@ void DivPlatformTX81Z::poke(std::vector& wlist) { } void DivPlatformTX81Z::reset() { - while (!writes.empty()) writes.pop(); + while (!writes.empty()) writes.pop_front(); memset(regPool,0,330); fm_ymfm->reset(); if (dumpWrites) { diff --git a/src/engine/platform/tx81z.h b/src/engine/platform/tx81z.h index 60ea66ae..93f220f1 100644 --- a/src/engine/platform/tx81z.h +++ b/src/engine/platform/tx81z.h @@ -20,17 +20,22 @@ #ifndef _TX81Z_H #define _TX81Z_H #include "../dispatch.h" +#include "../macroInt.h" #include "../instrument.h" #include #include "sound/ymfm/ymfm_opz.h" -#include "../macroInt.h" +#include "fmshared_OPM.h" class DivTXInterface: public ymfm::ymfm_interface { }; -class DivPlatformTX81Z: public DivDispatch { +class DivPlatformTX81Z: public DivDispatch, public DivPlatformOPMBase { protected: + const unsigned short chanOffs[8]={ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 + }; + struct Channel { DivInstrumentFM state; DivMacroInt std; @@ -69,16 +74,8 @@ class DivPlatformTX81Z: public DivDispatch { }; Channel chan[8]; DivDispatchOscBuffer* oscBuf[8]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::queue writes; - int delay, baseFreqOff; + int baseFreqOff; int pcmL, pcmR, pcmCycles; - unsigned char lastBusy; unsigned char amDepth, pmDepth; ymfm::ym2414* fm_ymfm; diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 3303fbf8..de54d8a6 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -23,16 +23,7 @@ #include #include -#include "sound/ymfm/ymfm_opn.h" -#include "ym2203shared.h" -#include "fmshared_OPN.h" - -static unsigned char konOffs[3]={ - 0, 1, 2 -}; - -#define CHIP_DIVIDER 32 const char* regCheatSheetYM2203[]={ // SSG @@ -299,7 +290,7 @@ void DivPlatformYM2203::acquire(short* bufL, short* bufR, size_t start, size_t l fm->write(0x0,w.addr); fm->write(0x1,w.val); regPool[w.addr&0xff]=w.val; - writes.pop(); + writes.pop_front(); delay=6; } } @@ -954,7 +945,7 @@ void DivPlatformYM2203::poke(std::vector& wlist) { } void DivPlatformYM2203::reset() { - while (!writes.empty()) writes.pop(); + while (!writes.empty()) writes.pop_front(); memset(regPool,0,256); if (dumpWrites) { addWrite(0xffffffff,0); @@ -1016,21 +1007,27 @@ void DivPlatformYM2203::setSkipRegisterWrites(bool value) { } void DivPlatformYM2203::setFlags(unsigned int flags) { - unsigned char ayFlags=16; - if (flags==3) { - chipClock=3000000.0; - ayFlags=20; - } else if (flags==2) { - chipClock=4000000.0; - ayFlags=19; - } else if (flags==1) { - chipClock=COLOR_PAL*4.0/5.0; - ayFlags=17; - } else { - chipClock=COLOR_NTSC; - ayFlags=16; + switch (flags&0x3f) { + default: + case 0x00: + chipClock=COLOR_NTSC; + break; + case 0x01: + chipClock=COLOR_PAL*4.0/5.0; + break; + case 0x02: + chipClock=4000000.0; + break; + case 0x03: + chipClock=3000000.0; + break; + case 0x04: + chipClock=31948800/8; + break; + case 0x05: + chipClock=3000000.0/2.0; + break; } - ay->setFlags(ayFlags); rate=fm->sample_rate(chipClock); for (int i=0; i<6; i++) { oscBuf[i]->rate=rate; @@ -1047,14 +1044,14 @@ int DivPlatformYM2203::init(DivEngine* p, int channels, int sugRate, unsigned in } fm=new ymfm::ym2203(iface); fm->set_fidelity(ymfm::OPN_FIDELITY_MIN); - // YM2149, 2MHz - ay=new DivPlatformAY8910; - ay->init(p,3,sugRate,19); - ay->toggleRegisterDump(true); setFlags(flags); + // YM2149, 2MHz + ay=new DivPlatformAY8910(true,chipClock,ayDiv); + ay->init(p,3,sugRate,16); + ay->toggleRegisterDump(true); reset(); - return 16; + return 6; } void DivPlatformYM2203::quit() { diff --git a/src/engine/platform/ym2203.h b/src/engine/platform/ym2203.h index ab527eea..c072647c 100644 --- a/src/engine/platform/ym2203.h +++ b/src/engine/platform/ym2203.h @@ -21,21 +21,25 @@ #define _YM2203_H #include "../dispatch.h" #include "../macroInt.h" -#include #include "sound/ymfm/ymfm_opn.h" #include "ay.h" +#include "fmshared_OPN.h" class DivYM2203Interface: public ymfm::ymfm_interface { }; -class DivPlatformYM2203: public DivDispatch { +class DivPlatformYM2203: public DivDispatch, public DivPlatformOPNBase { protected: const unsigned short chanOffs[3]={ 0x00, 0x01, 0x02 }; + const unsigned char konOffs[3]={ + 0, 1, 2 + }; + struct Channel { DivInstrumentFM state; unsigned char freqH, freqL; @@ -79,24 +83,14 @@ class DivPlatformYM2203: public DivDispatch { Channel chan[6]; DivDispatchOscBuffer* oscBuf[6]; bool isMuted[6]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::queue writes; ymfm::ym2203* fm; ymfm::ym2203::output_data fmout; DivYM2203Interface iface; - unsigned char regPool[512]; - unsigned char lastBusy; + unsigned char regPool[256]; DivPlatformAY8910* ay; unsigned char sampleBank; - int delay; - bool extMode; short oldWrites[256]; @@ -127,6 +121,9 @@ class DivPlatformYM2203: public DivDispatch { void setFlags(unsigned int flags); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); + DivPlatformYM2203(): + DivDispatch(), + DivPlatformOPNBase(4720270.0, 36, 16) {} ~DivPlatformYM2203(); }; #endif diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 95937207..350a5870 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -21,9 +21,6 @@ #include "../engine.h" #include -#include "ym2203shared.h" -#include "fmshared_OPN.h" - int DivPlatformYM2203Ext::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformYM2203::dispatch(c); @@ -510,7 +507,7 @@ int DivPlatformYM2203Ext::init(DivEngine* parent, int channels, int sugRate, uns } reset(); - return 19; + return 9; } void DivPlatformYM2203Ext::quit() { diff --git a/src/engine/platform/ym2203shared.h b/src/engine/platform/ym2203shared.h deleted file mode 100644 index 5aec7916..00000000 --- a/src/engine/platform/ym2203shared.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Furnace Tracker - multi-system chiptune tracker - * Copyright (C) 2021-2022 tildearrow and contributors - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -static unsigned short opOffs[4]={ - 0x00, 0x04, 0x08, 0x0c -}; -static bool isOutput[8][4]={ - // 1 3 2 4 - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,true ,true}, - {false,true ,true ,true}, - {false,true ,true ,true}, - {true ,true ,true ,true}, -}; -static unsigned char dtTable[8]={ - 7,6,5,0,1,2,3,4 -}; - -static int orderedOps[4]={ - 0,2,1,3 -}; - -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } - -#define CHIP_FREQBASE 4720270 diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index b6f1e16f..9756a44a 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -24,16 +24,7 @@ #include #include -#include "sound/ymfm/ymfm_opn.h" -#include "ym2610shared.h" -#include "fmshared_OPN.h" - -static unsigned char konOffs[6]={ - 0, 1, 2, 4, 5, 6 -}; - -#define CHIP_DIVIDER 32 const char* regCheatSheetYM2608[]={ // SSG @@ -450,7 +441,7 @@ void DivPlatformYM2608::acquire(short* bufL, short* bufR, size_t start, size_t l fm->write(0x0+((w.addr>>8)<<1),w.addr); fm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; - writes.pop(); + writes.pop_front(); delay=4; } } @@ -1278,7 +1269,7 @@ void DivPlatformYM2608::poke(std::vector& wlist) { } void DivPlatformYM2608::reset() { - while (!writes.empty()) writes.pop(); + while (!writes.empty()) writes.pop_front(); memset(regPool,0,512); if (dumpWrites) { addWrite(0xffffffff,0); @@ -1397,6 +1388,22 @@ void DivPlatformYM2608::renderSamples() { adpcmBMemLen=memPos+256; } +void DivPlatformYM2608::setFlags(unsigned int flags) { + switch (flags&0x3f) { + default: + case 0x00: + chipClock=8000000.0; + break; + case 0x01: + chipClock=31948800/4; + break; + } + rate=fm->sample_rate(chipClock); + for (int i=0; i<16; i++) { + oscBuf[i]->rate=rate; + } +} + int DivPlatformYM2608::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { parent=p; adpcmBMem=new unsigned char[getSampleMemCapacity(0)]; @@ -1409,16 +1416,11 @@ int DivPlatformYM2608::init(DivEngine* p, int channels, int sugRate, unsigned in isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - chipClock=8000000; fm=new ymfm::ym2608(iface); - fm->set_fidelity(ymfm::OPN_FIDELITY_MIN); - rate=fm->sample_rate(chipClock); - for (int i=0; i<16; i++) { - oscBuf[i]->rate=rate; - } + setFlags(flags); // YM2149, 2MHz - ay=new DivPlatformAY8910; - ay->init(p,3,sugRate,19); + ay=new DivPlatformAY8910(true,chipClock,32); + ay->init(p,3,sugRate,16); ay->toggleRegisterDump(true); reset(); return 16; diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index 5c673629..ffa7a160 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -21,10 +21,10 @@ #define _YM2608_H #include "../dispatch.h" #include "../macroInt.h" -#include #include "sound/ymfm/ymfm_opn.h" #include "ay.h" +#include "fmshared_OPN.h" class DivYM2608Interface: public ymfm::ymfm_interface { public: @@ -35,12 +35,16 @@ class DivYM2608Interface: public ymfm::ymfm_interface { DivYM2608Interface(): adpcmBMem(NULL), sampleBank(0) {} }; -class DivPlatformYM2608: public DivDispatch { +class DivPlatformYM2608: public DivDispatch, public DivPlatformOPNBase { protected: const unsigned short chanOffs[6]={ 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 }; + const unsigned char konOffs[6]={ + 0, 1, 2, 4, 5, 6 + }; + struct Channel { DivInstrumentFM state; unsigned char freqH, freqL; @@ -86,17 +90,9 @@ class DivPlatformYM2608: public DivDispatch { Channel chan[16]; DivDispatchOscBuffer* oscBuf[16]; bool isMuted[16]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::queue writes; ymfm::ym2608* fm; ymfm::ym2608::output_data fmout; unsigned char regPool[512]; - unsigned char lastBusy; unsigned char* adpcmBMem; size_t adpcmBMemLen; @@ -106,9 +102,9 @@ class DivPlatformYM2608: public DivDispatch { unsigned char sampleBank; unsigned char writeRSSOff, writeRSSOn; - int delay; - bool extMode; + double fmFreqBase; + unsigned char ayDiv; short oldWrites[512]; short pendingWrites[512]; @@ -141,8 +137,12 @@ class DivPlatformYM2608: public DivDispatch { size_t getSampleMemCapacity(int index); size_t getSampleMemUsage(int index); void renderSamples(); + void setFlags(unsigned int flags); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); + DivPlatformYM2608(): + DivDispatch(), + DivPlatformOPNBase(9440540.0, 72, 32) {} ~DivPlatformYM2608(); }; #endif diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 441640b4..38d2b4b2 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -21,9 +21,6 @@ #include "../engine.h" #include -#include "ym2610shared.h" -#include "fmshared_OPN.h" - int DivPlatformYM2608Ext::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformYM2608::dispatch(c); diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 89ccc6c0..d8d8e857 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -24,19 +24,6 @@ #include #include -#include "ym2610shared.h" - -#include "fmshared_OPN.h" - -static unsigned char konOffs[4]={ - 1, 2, 5, 6 -}; - -static unsigned char bchOffs[4]={ - 1, 2, 4, 5 -}; - -#define CHIP_DIVIDER 32 const char* regCheatSheetYM2610[]={ // SSG @@ -494,7 +481,7 @@ void DivPlatformYM2610::acquire(short* bufL, short* bufR, size_t start, size_t l fm->write(0x0+((w.addr>>8)<<1),w.addr); fm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; - writes.pop(); + writes.pop_front(); delay=4; } } @@ -1325,7 +1312,7 @@ void DivPlatformYM2610::poke(std::vector& wlist) { } void DivPlatformYM2610::reset() { - while (!writes.empty()) writes.pop(); + while (!writes.empty()) writes.pop_front(); memset(regPool,0,512); if (dumpWrites) { addWrite(0xffffffff,0); @@ -1397,6 +1384,22 @@ void DivPlatformYM2610::setSkipRegisterWrites(bool value) { ay->setSkipRegisterWrites(value); } +void DivPlatformYM2610::setFlags(unsigned int flags) { + switch (flags&0xff) { + default: + case 0x00: + chipClock=8000000.0; + break; + case 0x01: + chipClock=24167829/3; + break; + } + rate=chipClock/16; + for (int i=0; i<14; i++) { + oscBuf[i]->rate=rate; + } +} + int DivPlatformYM2610::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { DivPlatformYM2610Base::init(p, channels, sugRate, flags); dumpWrites=false; @@ -1405,15 +1408,11 @@ int DivPlatformYM2610::init(DivEngine* p, int channels, int sugRate, unsigned in isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - chipClock=8000000; - rate=chipClock/16; - for (int i=0; i<14; i++) { - oscBuf[i]->rate=rate; - } fm=new ymfm::ym2610(iface); + setFlags(flags); // YM2149, 2MHz - ay=new DivPlatformAY8910; - ay->init(p,3,sugRate,19); + ay=new DivPlatformAY8910(true,chipClock,32); + ay->init(p,3,sugRate,16); ay->toggleRegisterDump(true); reset(); return 14; diff --git a/src/engine/platform/ym2610.h b/src/engine/platform/ym2610.h index 92f4ca07..37c0fa83 100644 --- a/src/engine/platform/ym2610.h +++ b/src/engine/platform/ym2610.h @@ -21,8 +21,8 @@ #define _YM2610_H #include "../dispatch.h" #include "../macroInt.h" -#include #include "ay.h" +#include "fmshared_OPN.h" #include "sound/ymfm/ymfm_opn.h" class DivYM2610Interface: public ymfm::ymfm_interface { @@ -35,7 +35,7 @@ class DivYM2610Interface: public ymfm::ymfm_interface { DivYM2610Interface(): adpcmAMem(NULL), adpcmBMem(NULL), sampleBank(0) {} }; -class DivPlatformYM2610Base: public DivDispatch { +class DivPlatformYM2610Base: public DivDispatch, public DivPlatformOPNBase { protected: unsigned char* adpcmAMem; size_t adpcmAMemLen; @@ -50,6 +50,9 @@ class DivPlatformYM2610Base: public DivDispatch { void renderSamples(); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); + DivPlatformYM2610Base(): + DivDispatch(), + DivPlatformOPNBase(9440540.0, 72, 32) {} }; class DivPlatformYM2610: public DivPlatformYM2610Base { @@ -58,6 +61,14 @@ class DivPlatformYM2610: public DivPlatformYM2610Base { 0x01, 0x02, 0x101, 0x102 }; + const unsigned char konOffs[4]={ + 1, 2, 5, 6 + }; + + const unsigned char bchOffs[4]={ + 1, 2, 4, 5 + }; + struct Channel { DivInstrumentFM state; unsigned char freqH, freqL; @@ -103,24 +114,14 @@ class DivPlatformYM2610: public DivPlatformYM2610Base { Channel chan[14]; DivDispatchOscBuffer* oscBuf[14]; bool isMuted[14]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::queue writes; ymfm::ym2610* fm; ymfm::ym2610::output_data fmout; DivPlatformAY8910* ay; unsigned char regPool[512]; - unsigned char lastBusy; unsigned char sampleBank; - int delay; - bool extMode; short oldWrites[512]; @@ -150,6 +151,7 @@ class DivPlatformYM2610: public DivPlatformYM2610Base { void poke(std::vector& wlist); const char** getRegisterSheet(); const char* getEffectName(unsigned char effect); + void setFlags(unsigned int flags); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); ~DivPlatformYM2610(); diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 0e466f6f..90ddeb40 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -23,16 +23,6 @@ #include #include -#include "ym2610shared.h" - -#include "fmshared_OPN.h" - -static unsigned char konOffs[6]={ - 0, 1, 2, 4, 5, 6 -}; - -#define CHIP_DIVIDER 32 - const char* regCheatSheetYM2610B[]={ // SSG "SSG_FreqL_A", "000", @@ -472,7 +462,7 @@ void DivPlatformYM2610B::acquire(short* bufL, short* bufR, size_t start, size_t fm->write(0x0+((w.addr>>8)<<1),w.addr); fm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; - writes.pop(); + writes.pop_front(); delay=4; } } @@ -1303,7 +1293,7 @@ void DivPlatformYM2610B::poke(std::vector& wlist) { } void DivPlatformYM2610B::reset() { - while (!writes.empty()) writes.pop(); + while (!writes.empty()) writes.pop_front(); memset(regPool,0,512); if (dumpWrites) { addWrite(0xffffffff,0); @@ -1375,6 +1365,22 @@ void DivPlatformYM2610B::setSkipRegisterWrites(bool value) { ay->setSkipRegisterWrites(value); } +void DivPlatformYM2610B::setFlags(unsigned int flags) { + switch (flags&0xff) { + default: + case 0x00: + chipClock=8000000.0; + break; + case 0x01: + chipClock=24167829/3; + break; + } + rate=chipClock/16; + for (int i=0; i<16; i++) { + oscBuf[i]->rate=rate; + } +} + int DivPlatformYM2610B::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { DivPlatformYM2610Base::init(p, channels, sugRate, flags); dumpWrites=false; @@ -1383,15 +1389,11 @@ int DivPlatformYM2610B::init(DivEngine* p, int channels, int sugRate, unsigned i isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - chipClock=8000000; - rate=chipClock/16; - for (int i=0; i<16; i++) { - oscBuf[i]->rate=rate; - } fm=new ymfm::ym2610b(iface); + setFlags(flags); // YM2149, 2MHz - ay=new DivPlatformAY8910; - ay->init(p,3,sugRate,19); + ay=new DivPlatformAY8910(true,chipClock,32); + ay->init(p,3,sugRate,16); ay->toggleRegisterDump(true); reset(); return 16; diff --git a/src/engine/platform/ym2610b.h b/src/engine/platform/ym2610b.h index 3a034028..1262ba02 100644 --- a/src/engine/platform/ym2610b.h +++ b/src/engine/platform/ym2610b.h @@ -32,6 +32,10 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base { 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 }; + const unsigned char konOffs[6]={ + 0, 1, 2, 4, 5, 6 + }; + struct Channel { DivInstrumentFM state; unsigned char freqH, freqL; @@ -77,24 +81,16 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base { Channel chan[16]; DivDispatchOscBuffer* oscBuf[16]; bool isMuted[16]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::queue writes; ymfm::ym2610b* fm; ymfm::ym2610b::output_data fmout; unsigned char regPool[512]; - unsigned char lastBusy; DivPlatformAY8910* ay; unsigned char sampleBank; - int delay; - bool extMode; + double fmFreqBase=9440540; + unsigned char ayDiv=32; short oldWrites[512]; short pendingWrites[512]; @@ -123,6 +119,7 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base { void poke(std::vector& wlist); const char** getRegisterSheet(); const char* getEffectName(unsigned char effect); + void setFlags(unsigned int flags); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); ~DivPlatformYM2610B(); diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index cd7e494b..b4c154fa 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -21,9 +21,6 @@ #include "../engine.h" #include -#include "ym2610shared.h" -#include "fmshared_OPN.h" - int DivPlatformYM2610BExt::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformYM2610B::dispatch(c); diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index bf6df44e..0ac118a1 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -21,9 +21,6 @@ #include "../engine.h" #include -#include "ym2610shared.h" -#include "fmshared_OPN.h" - int DivPlatformYM2610Ext::dispatch(DivCommand c) { if (c.chan<1) { return DivPlatformYM2610::dispatch(c); diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h deleted file mode 100644 index 8d8847c2..00000000 --- a/src/engine/platform/ym2610shared.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Furnace Tracker - multi-system chiptune tracker - * Copyright (C) 2021-2022 tildearrow and contributors - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -static unsigned short opOffs[4]={ - 0x00, 0x04, 0x08, 0x0c -}; -static bool isOutput[8][4]={ - // 1 3 2 4 - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,false,true}, - {false,false,true ,true}, - {false,true ,true ,true}, - {false,true ,true ,true}, - {true ,true ,true ,true}, -}; -static unsigned char dtTable[8]={ - 7,6,5,0,1,2,3,4 -}; - -static int orderedOps[4]={ - 0,2,1,3 -}; - -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } - -#define CHIP_FREQBASE 9440540 diff --git a/src/engine/platform/ymz280b.cpp b/src/engine/platform/ymz280b.cpp index 1c4997c2..87497238 100644 --- a/src/engine/platform/ymz280b.cpp +++ b/src/engine/platform/ymz280b.cpp @@ -431,6 +431,42 @@ void DivPlatformYMZ280B::setChipModel(int type) { chipType=type; } +void DivPlatformYMZ280B::setFlags(unsigned int flags) { + switch (chipType) { + default: + case 280: + switch (flags&0xff) { + case 0x00: + chipClock=16934400; + break; + case 0x01: + chipClock=COLOR_NTSC*4.0; + break; + case 0x02: + chipClock=COLOR_PAL*16.0/5.0; + break; + case 0x03: + chipClock=16000000; + break; + case 0x04: + chipClock=50000000.0/3.0; + break; + case 0x05: + chipClock=14000000; + break; + } + rate=chipClock/384; + break; + case 759: + rate=32000; + chipClock=rate*384; + break; + } + for (int i=0; i<8; i++) { + oscBuf[i]->rate=rate; + } +} + int DivPlatformYMZ280B::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { parent=p; dumpWrites=false; @@ -440,18 +476,12 @@ int DivPlatformYMZ280B::init(DivEngine* p, int channels, int sugRate, unsigned i isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - setFlags(flags); - - rate=(chipType==759)?32000:44100; - chipClock=rate*384; sampleMem=new unsigned char[getSampleMemCapacity()]; sampleMemLen=0; ymz280b.device_start(sampleMem); + setFlags(flags); reset(); - for (int i=0; i<8; i++) { - oscBuf[i]->rate=rate; - } return 8; } diff --git a/src/engine/platform/ymz280b.h b/src/engine/platform/ymz280b.h index 4957d899..97c64d21 100644 --- a/src/engine/platform/ymz280b.h +++ b/src/engine/platform/ymz280b.h @@ -95,6 +95,7 @@ class DivPlatformYMZ280B: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); void renderSamples(); + void setFlags(unsigned int flags); int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); private: diff --git a/src/engine/song.h b/src/engine/song.h index 10c00d27..a5b68c26 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -237,28 +237,42 @@ struct DivSong { // - 1: PAL // - 2: Dendy // - SMS/SN76489: - // - bit 0-1: clock rate - // - 0: NTSC (3.58MHz) - // - 1: PAL (3.55MHz) - // - 2: Other (4MHz) - // - 3: half NTSC (1.79MHz) - // - bit 2-3: noise type - // - 0: Sega VDP (16-bit noise) - // - 1: real SN76489 (15-bit noise) - // - 2: real SN76489 with Atari-like short noise buzz (15-bit noise) - // - 3: Game Gear (16-bit noise, stereo) + // - bit 0-1, 8-15: clock rate + // - 0000: 3.58MHz (NTSC) + // - 0001: 3.55MHz (PAL) + // - 0002: 4MHz (Other) + // - 0003: 1.79MHz (half NTSC) + // - 0100: 3MHz + // - 0101: 2MHz + // - bit 2-3, 6-7: chip type + // - 00: Sega VDP (16-bit noise) + // - 04: real SN76489 (15-bit noise) + // - 08: real SN76489 with Atari-like short noise buzz (15-bit noise) + // - 0c: Game Gear (16-bit noise, stereo) + // - 40: real SN76489A (17-bit noise) + // - 44: real SN76496 (17-bit noise) + // - 48: NCR 8496 (16-bit noise) + // - 4c: Tandy PSSJ-3 (16-bit noise) // - bit 4: disable noise phase reset - // - YM2612: - // - bit 0-1: clock rate + // - YM2612/YM3438: + // - bit 0-30: clock rate // - 0: Genesis NTSC (7.67MHz) // - 1: Genesis PAL (7.61MHz) - // - 2: 8MHz + // - 2: FM Towns (8MHz) // - 3: AtGames Genesis (6.13MHz) + // - 4: Sega System 32 (8.06MHz) + // - bit 31: DAC distortion + // - 0: disable + // - 1: enable // - YM2151: - // - bit 0-1: clock rate + // - bit 0-7: clock rate // - 0: 3.58MHz (NTSC) // - 1: 3.55MHz (PAL) // - 2: 4MHz + // - YM2610(B): + // - bit 0-7: clock rate + // - 0: 8MHz (Neo Geo MVS) + // - 1: 8.06MHz (Neo Geo AES) // - AY-3-8910/AY8930: // - bit 0-3: clock rate // - 0: 1.79MHz (MSX NTSC) @@ -274,6 +288,8 @@ struct DivSong { // - 10: 2.097152MHz (Game Boy) // - 11: 3.58MHz (Darky) // - 12: 3.6MHz (Darky) + // - 13: 1.25MHz + // - 14: 1.536MHz // - bit 4-5: chip type (ignored on AY8930) // - 0: AY-3-8910 or similar // - 1: YM2149 @@ -287,9 +303,9 @@ struct DivSong { // - 1: low (internally divided to half) // - SAA1099: // - bit 0-1: clock rate - // - 0: 8MHz (SAM Coupé, Game Blaster) - // - 1: 7.15MHz - // - 2: 7.09MHz + // - 0: 8MHz (SAM Coupé) + // - 1: 7.15MHz (Game Blaster, NTSC) + // - 2: 7.09MHz (PAL) // - Amiga: // - bit 0: clock rate // - 0: 7.15MHz (NTSC) @@ -330,6 +346,80 @@ struct DivSong { // - bit 4: stereo // - 0: mono // - 1: stereo + // - YM2203: + // - bit 0-4: clock rate + // - 0: 3.58MHz (MTSC) + // - 1: 3.55MHz (PAL) + // - 2: 4MHz + // - 3: 3MHz + // - 4: 3.9936MHz (PC-88, PC-98) + // - 5: 1.5MHz + // - bit 5-6: output rate (TODO) + // - 0: FM: clock / 72, SSG: clock / 16 + // - 1: FM: clock / 36, SSG: clock / 8 + // - 2: FM: clock / 24, SSG: clock / 4 + // - YM2608: + // - bit 0-4: clock rate + // - 0: 8MHz + // - 1: 7.987MHz (PC-88, PC-98) + // - bit 5-6: output rate (TODO) + // - 0: FM: clock / 144, SSG: clock / 32 + // - 1: FM: clock / 72, SSG: clock / 16 + // - 2: FM: clock / 48, SSG: clock / 8 + // - YM3526, YM3812, Y8950: + // - bit 0-7: clock rate + // - 0: 3.58MHz (MTSC) + // - 1: 3.55MHz (PAL) + // - 2: 4MHz + // - 3: 3MHz + // - 4: 3.9936MHz (PC-88, PC-98) + // - 5: 3.5MHz + // - YMF262: + // - bit 0-7: clock rate + // - 0: 14.32MHz (MTSC) + // - 1: 14.19MHz (PAL) + // - 2: 14MHz + // - 3: 16MHz + // - 4: 15MHz + // - YMF289B: (TODO) + // - bit 0-7: clock rate + // - 0: 33.8688MHz + // - 1: 28.64MHz (MTSC) + // - 2: 28.38MHz (PAL) + // - MSM6295: + // - bit 0-6: clock rate + // - 0: 1MHz + // - 1: 1.056MHz + // - 2: 4MHz + // - 3: 4.224MHz + // - 4: 3.58MHz (NTSC) + // - 5: 1.79MHz (Half NTSC) + // - 6: 1.023MHz + // - 7: 0.895MHz (Quarter NTSC) + // - 8: 2MHz + // - 9: 2.112MHz + // - 10: 0.875MHz + // - 11: 0.9375MHz + // - 12: 1.5MHz + // - 13: 3MHz + // - 14: 1.193MHz + // - bit 7: Output rate + // - 0: clock / 132 + // - 1: clock / 165 + // - SCC/+: + // - bit 0-6: clock rate + // - 0: 1.79MHz (MSX NTSC) + // - 1: 1.77MHz (PAL) + // - 2: 1.5MHz + // - 3: 2MHz + // - YMZ280B: + // - bit 0-7: clock rate + // - 0: 16.9344MHz + // - 1: 14.32MHz (MTSC) + // - 2: 14.19MHz (PAL) + // - 3: 16MHz + // - 4: 16.67MHz + // - 5: 14MHz unsigned int systemFlags[32]; // song information diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 7d7fa050..94dbd5b4 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -3092,7 +3092,12 @@ void FurnaceGUI::drawInsEdit() { int panMax=0; bool panSingle=false; bool panSingleNoBit=false; - if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPL || ins->type==DIV_INS_GB || ins->type==DIV_INS_OPZ || ins->type==DIV_INS_VERA) { + if (ins->type==DIV_INS_STD ||//Game Gear + ins->type==DIV_INS_FM || + ins->type==DIV_INS_OPL || + ins->type==DIV_INS_GB || + ins->type==DIV_INS_OPZ || + ins->type==DIV_INS_VERA) { panMax=1; panSingle=true; } diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 994902e8..a841f15b 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -221,18 +221,55 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "TI SN76489A", { + DIV_SYSTEM_SMS, 64, 0, 0x40, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "TI SN76496", { + DIV_SYSTEM_SMS, 64, 0, 0x44, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NCR 8496", { + DIV_SYSTEM_SMS, 64, 0, 0x48, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tandy PSSJ 3-voice sound", { + DIV_SYSTEM_SMS, 64, 0, 0x4c, + // 8 bit DAC + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Sega PSG (SN76489-like)", { DIV_SYSTEM_SMS, 64, 0, 0, 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega PSG (SN76489-like, Stereo)", { + DIV_SYSTEM_SMS, 64, 0, 0xc, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "AY-3-8910", { DIV_SYSTEM_AY8910, 64, 0, 0, 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "AY-3-8914", { + DIV_SYSTEM_AY8910, 64, 0, 48, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Yamaha YM2149(F)", { DIV_SYSTEM_AY8910, 64, 0, 16, @@ -515,6 +552,12 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega Game Gear", { + DIV_SYSTEM_SMS, 64, 0, 0xc, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Game Boy", { DIV_SYSTEM_GB, 64, 0, 0, @@ -603,13 +646,13 @@ void FurnaceGUI::initSystemPresets() { )); cat.systems.push_back(FurnaceGUISysDef( "Neo Geo AES", { - DIV_SYSTEM_YM2610_FULL, 64, 0, 0, + DIV_SYSTEM_YM2610_FULL, 64, 0, 1, 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Neo Geo AES (extended channel 2)", { - DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, 0, + DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, 1, 0 } )); @@ -779,7 +822,7 @@ void FurnaceGUI::initSystemPresets() { cat.systems.push_back(FurnaceGUISysDef( "MSX + Playsoniq", { DIV_SYSTEM_AY8910, 64, 0, 16, - DIV_SYSTEM_SMS, 64, 0, 0, + DIV_SYSTEM_SMS, 64, 0, 0, // Sega VDP DIV_SYSTEM_C64_8580, 64, 0, 0, DIV_SYSTEM_SCC_PLUS, 64, 0, 0, 0 @@ -800,26 +843,110 @@ void FurnaceGUI::initSystemPresets() { } )); cat.systems.push_back(FurnaceGUISysDef( - "NEC PC-98 (with PC-9801-26K)", { - DIV_SYSTEM_OPN, 64, 0, 3, + "NEC PC-98 (with PC-9801-26/K)", { + DIV_SYSTEM_OPN, 64, 0, 4, // 3.9936MHz but some compatible card has 4MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "NEC PC-98 (with PC-9801-26K; extended channel 3)", { - DIV_SYSTEM_OPN_EXT, 64, 0, 3, + "NEC PC-98 (with PC-9801-26/K; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 4, // 3.9936MHz but some compatible card has 4MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "NEC PC-98 (with PC-9801-86)", { - DIV_SYSTEM_PC98, 64, 0, 3, + "NEC PC-98 (with Sound Orchestra)", { + DIV_SYSTEM_OPN, 64, 0, 4, + DIV_SYSTEM_OPL2, 64, 0, 4, 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "NEC PC-98 (with PC-9801-86; extended channel 3)", { - DIV_SYSTEM_PC98_EXT, 64, 0, 3, + "NEC PC-98 (with Sound Orchestra; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 4, + DIV_SYSTEM_OPL2, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Orchestra in drums mode)", { + DIV_SYSTEM_OPN, 64, 0, 4, + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Orchestra in drums mode; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 4, + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Orchestra V)", { + DIV_SYSTEM_OPN, 64, 0, 4, + DIV_SYSTEM_Y8950, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Orchestra V; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 4, + DIV_SYSTEM_Y8950, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Orchestra V in drums mode)", { + DIV_SYSTEM_OPN, 64, 0, 4, + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Orchestra V in drums mode; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 4, + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 4, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with PC-9801-86)", { // -73 also has OPNA + DIV_SYSTEM_PC98, 64, 0, 1, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with PC-9801-86; extended channel 3)", { // -73 also has OPNA + DIV_SYSTEM_PC98_EXT, 64, 0, 1, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible)", { + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPL3, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPL3, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible in drums mode)", { + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPL3_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible in drums mode; extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPL3_DRUMS, 64, 0, 2, 0 } )); @@ -839,8 +966,76 @@ void FurnaceGUI::initSystemPresets() { cat.systems.push_back(FurnaceGUISysDef( "ZX Spectrum (128K) with TurboSound FM", { DIV_SYSTEM_AY8910, 64, 0, 1, - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_OPN, 64, 0, 0, + DIV_SYSTEM_OPN, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM (extended channel 3 on first OPN)", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM (extended channel 3 on second OPN)", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM (extended channel 3 on both OPNs)", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM + SAA", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + DIV_SYSTEM_SAA1099, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM + SAA (extended channel 3 on first OPN)", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + DIV_SYSTEM_SAA1099, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM + SAA (extended channel 3 on second OPN)", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + DIV_SYSTEM_SAA1099, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound FM + SAA (extended channel 3 on both OPNs)", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + DIV_SYSTEM_OPN_EXT, 64, 0, 1, + DIV_SYSTEM_SAA1099, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ZX Spectrum (128K) with TurboSound", { + DIV_SYSTEM_AY8910, 64, 0, 1, + DIV_SYSTEM_AY8910, 64, 0, 1, // or YM2149 + DIV_SYSTEM_AY8910, 64, 0, 1, // or YM2149 0 } )); @@ -858,7 +1053,7 @@ void FurnaceGUI::initSystemPresets() { )); cat.systems.push_back(FurnaceGUISysDef( "BBC Micro", { - DIV_SYSTEM_SMS, 64, 0, 6, + DIV_SYSTEM_SMS, 64, 0, 0x42, // SN76489A 4MHz 0 } )); @@ -868,6 +1063,20 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "IBM PCjr", { + // it can be enable sound output at once + DIV_SYSTEM_SMS, 64, 0, 0x44, // SN76496 + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tandy 1000", { + DIV_SYSTEM_SMS, 64, 0, 0x44, // NCR 8496 or SN76496 or Tandy PSSJ(with 8 bit DAC) + DIV_SYSTEM_PCSPKR, 64, 0, 0, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "PC + Covox Sound Master", { DIV_SYSTEM_AY8930, 64, 0, 3, @@ -990,7 +1199,7 @@ void FurnaceGUI::initSystemPresets() { )); cat.systems.push_back(FurnaceGUISysDef( "FM Towns", { - DIV_SYSTEM_YM2612, 64, 0, 2, + DIV_SYSTEM_YM2612, 64, 0, 2, // YM3438 DIV_SYSTEM_RF5C68, 64, 0, 0, 0 } @@ -1007,32 +1216,172 @@ void FurnaceGUI::initSystemPresets() { cat=FurnaceGUISysCategory("Arcade systems","INSERT COIN"); cat.systems.push_back(FurnaceGUISysDef( "Bally Midway MCR", { - DIV_SYSTEM_AY8910, 64, 0, 0, - DIV_SYSTEM_AY8910, 64, 0, 0, + // SSIO sound board + DIV_SYSTEM_AY8910, 64, 0, 3, // 2MHz + DIV_SYSTEM_AY8910, 64, 0, 3, // 2MHz + // additional sound boards, mostly software controlled DAC 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Gyruss", { + "Konami Gyruss", { DIV_SYSTEM_AY8910, 64, 0, 0, DIV_SYSTEM_AY8910, 64, 0, 0, DIV_SYSTEM_AY8910, 64, 0, 0, DIV_SYSTEM_AY8910, 64, 0, 0, DIV_SYSTEM_AY8910, 64, 0, 0, + // additional discrete sound logics + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Konami Bubble System", { + DIV_SYSTEM_AY8910, 64, 0, 0, + DIV_SYSTEM_AY8910, 64, 0, 0, + DIV_SYSTEM_BUBSYS_WSG, 64, 0, 0, + // VLM5030 exists but not used for music at all + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Konami Hexion", { + DIV_SYSTEM_SCC, 64, 0, 2, // 1.5MHz (3MHz input) + DIV_SYSTEM_MSM6295, 64, 0, 1, 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Sega Kyugo", { - DIV_SYSTEM_AY8910, 64, 0, 4, - DIV_SYSTEM_AY8910, 64, 0, 4, + DIV_SYSTEM_AY8910, 64, 0, 14, + DIV_SYSTEM_AY8910, 64, 0, 14, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 1", { + DIV_SYSTEM_SMS, 64, 0, 0x42, // SN76489A 4MHz + DIV_SYSTEM_SMS, 64, 0, 0x0141, // SN76489A 2MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega Hang-On", { + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_SEGAPCM, 64, 0, 0, // discrete logics, 62.5KHz output rate + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega Hang-On (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_SEGAPCM, 64, 0, 0, // discrete logics, 62.5KHz output rate 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Sega OutRun/X Board", { - DIV_SYSTEM_YM2151, 64, 0, 2, - DIV_SYSTEM_SEGAPCM, 64, 0, 0, + DIV_SYSTEM_YM2151, 64, 0, 2, // 4MHz + DIV_SYSTEM_SEGAPCM, 64, 0, 0, // ASIC, 31.25KHz output rate + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 18", { + DIV_SYSTEM_YM2612, 64, 0, 2, // discrete 8MHz YM3438 + DIV_SYSTEM_YM2612, 64, 0, 2, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 1, // 10MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 18 (extended channel 3 on first OPN2C)", { + DIV_SYSTEM_YM2612_EXT, 64, 0, 2, // discrete 8MHz YM3438 + DIV_SYSTEM_YM2612, 64, 0, 2, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 1, // 10MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 18 (extended channel 3 on second OPN2C)", { + DIV_SYSTEM_YM2612, 64, 0, 2, // discrete 8MHz YM3438 + DIV_SYSTEM_YM2612_EXT, 64, 0, 2, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 1, // 10MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 18 (extended channel 3 on both OPN2Cs)", { + DIV_SYSTEM_YM2612_EXT, 64, 0, 2, // discrete 8MHz YM3438 + DIV_SYSTEM_YM2612_EXT, 64, 0, 2, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 1, // 10MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 32", { + DIV_SYSTEM_YM2612, 64, 0, 4, // discrete 8.05MHz YM3438 + DIV_SYSTEM_YM2612, 64, 0, 4, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 2, // 12.5MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 32 (extended channel 3 on first OPN2C)", { + DIV_SYSTEM_YM2612_EXT, 64, 0, 4, // discrete 8.05MHz YM3438 + DIV_SYSTEM_YM2612, 64, 0, 4, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 2, // 12.5MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 32 (extended channel 3 on second OPN2C)", { + DIV_SYSTEM_YM2612, 64, 0, 4, // discrete 8.05MHz YM3438 + DIV_SYSTEM_YM2612_EXT, 64, 0, 4, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 2, // 12.5MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System 32 (extended channel 3 on both OPN2Cs)", { + DIV_SYSTEM_YM2612_EXT, 64, 0, 4, // discrete 8.05MHz YM3438 + DIV_SYSTEM_YM2612_EXT, 64, 0, 4, // ^^ + DIV_SYSTEM_RF5C68, 64, 0, 2, // 12.5MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Capcom Exed Eyes", { + DIV_SYSTEM_AY8910, 64, 0, 4, // 1.5MHz + DIV_SYSTEM_SMS, 64, 0, 0x0104, // SN76489 3MHz + DIV_SYSTEM_SMS, 64, 0, 0x0104, // SN76489 3MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Capcom Arcade", { // 1943, Side arms, etc + DIV_SYSTEM_OPN, 64, 0, 5, // 4 or 1.5MHz; various per games + DIV_SYSTEM_OPN, 64, 0, 5, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Capcom Arcade (extended channel 3 on first OPN)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 5, + DIV_SYSTEM_OPN, 64, 0, 5, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Capcom Arcade (extended channel 3 on second OPN)", { + DIV_SYSTEM_OPN, 64, 0, 5, + DIV_SYSTEM_OPN_EXT, 64, 0, 5, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Capcom Arcade (extended channel 3 on both OPNs)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 5, + DIV_SYSTEM_OPN_EXT, 64, 0, 5, 0 } )); @@ -1043,145 +1392,433 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Capcom CPS-2 (QSound)", { + DIV_SYSTEM_QSOUND, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Jaleco Ginga NinkyouDen", { + DIV_SYSTEM_AY8910, 64, 0, 16, // 1.79MHz + DIV_SYSTEM_Y8950, 64, 0, 0, // 3.58MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Jaleco Ginga NinkyouDen (drums mode)", { + DIV_SYSTEM_AY8910, 64, 0, 16, // 1.79MHz + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 0, // 3.58MHz + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Jaleco Mega System 1", { - DIV_SYSTEM_YM2151, 64, 0, 2, - DIV_SYSTEM_MSM6295, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 0, + DIV_SYSTEM_YM2151, 64, 0, 1, // 3.5MHz (7MHz / 2) + DIV_SYSTEM_MSM6295, 64, 0, 2, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 2, // 4MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( "NMK 16-bit Arcade", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 2, - DIV_SYSTEM_MSM6295, 64, 0, 2, + DIV_SYSTEM_OPN, 64, 0, 5, // 1.5MHz; optional + DIV_SYSTEM_MSM6295, 64, 0, 130, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 130, // ^^ 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Data East Arcade", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_OPL2, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 0, + "NMK 16-bit Arcade (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 5, // 1.5MHz; optional + DIV_SYSTEM_MSM6295, 64, 0, 130, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 130, // ^^ + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Kaneko DJ Boy", { + DIV_SYSTEM_OPN, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, -127, 12, // 1.5MHz, Left output + DIV_SYSTEM_MSM6295, 64, 127, 12, // 1.5MHz, Right output + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Kaneko DJ Boy (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, -127, 12, // 1.5MHz, Left output + DIV_SYSTEM_MSM6295, 64, 127, 12, // 1.5MHz, Right output + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Kaneko Air Buster", { + DIV_SYSTEM_OPN, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, 0, 141, // 3MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Kaneko Air Buster (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, 0, 141, // 3MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Kaneko Toybox System", { - DIV_SYSTEM_AY8910, 64, 0, 1, - DIV_SYSTEM_AY8910, 64, 0, 1, - DIV_SYSTEM_MSM6295, 64, 0, 0, + DIV_SYSTEM_AY8910, 64, 0, 19, // YM2149 2MHz + DIV_SYSTEM_AY8910, 64, 0, 19, // ^^ + DIV_SYSTEM_MSM6295, 64, 0, 8, // 2MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Tecmo Arcade", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 0, + "Kaneko Jackie Chan", { + DIV_SYSTEM_YMZ280B, 64, 0, 3, // 16MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Seibu Kaihatsu Arcade", { - DIV_SYSTEM_OPL2, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 0, + "Super Kaneko Nova System", { + DIV_SYSTEM_YMZ280B, 64, 0, 4, // 16.67MHz (33.33MHz / 2) 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Data East Arcade (Dark Seal)", { - DIV_SYSTEM_YM2151, 64, 0, 2, - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 8, + "Tecmo Ninja Gaiden", { // Ninja Gaiden, Raiga, etc + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tecmo Ninja Gaiden (extended channel 3 on first OPN)", { // Ninja Gaiden, Raiga, etc + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tecmo Ninja Gaiden (extended channel 3 on second OPN)", { // Ninja Gaiden, Raiga, etc + DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tecmo Ninja Gaiden (extended channel 3 on both OPNs)", { // Ninja Gaiden, Raiga, etc + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tecmo System", { + DIV_SYSTEM_OPL3, 64, 0, 0, + DIV_SYSTEM_YMZ280B, 64, 0, 0, + DIV_SYSTEM_MSM6295, 64, 0, 8, // 2MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Tecmo System (drums mode)", { + DIV_SYSTEM_OPL3_DRUMS, 64, 0, 0, + DIV_SYSTEM_YMZ280B, 64, 0, 0, + DIV_SYSTEM_MSM6295, 64, 0, 8, // 2MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Seibu Kaihatsu Raiden", { // Raiden, Seibu cup soccer, Zero team, etc + DIV_SYSTEM_OPL2, 64, 0, 0, // YM3812 3.58MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 or 1.023MHz (28.636363MHz / 28); various per games + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Seibu Kaihatsu Raiden (drums mode)", { // Raiden, Seibu cup soccer, Zero team, etc + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 0, // YM3812 3.58MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 or 1.023MHz (28.636363MHz / 28); various per games + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sunsoft Shanghai 3", { + DIV_SYSTEM_AY8910, 64, 0, 20, // YM2149 1.5MHz + DIV_SYSTEM_MSM6295, 64, 0, 1, // 1.056MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Sunsoft Arcade", { - DIV_SYSTEM_YM2612, 64, 0, 4, - DIV_SYSTEM_MSM6295, 64, 0, 0, + DIV_SYSTEM_YM2612, 64, 0, 2, // discrete YM3438 8MHz + DIV_SYSTEM_MSM6295, 64, 0, 1, // 1.056MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Atari Arcade (Rampart)", { - DIV_SYSTEM_OPLL, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 0, + "Sunsoft Arcade (extended channel 3)", { + DIV_SYSTEM_YM2612_EXT, 64, 0, 2, // discrete YM3438 8MHz + DIV_SYSTEM_MSM6295, 64, 0, 1, // 1.056MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Data East Deco 156", { - DIV_SYSTEM_MSM6295, 64, 0, 0, - DIV_SYSTEM_MSM6295, 64, 0, 8, + "Atari Klax", { + DIV_SYSTEM_MSM6295, 64, 0, 7, // 0.895MHz (3.579545MHz / 4) 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "SNK Triple Z80 (Chopper)", { //or Namco? - DIV_SYSTEM_Y8950, 64, 0, 0, - DIV_SYSTEM_OPL2, 64, 0, 0, + "Atari Rampart", { + DIV_SYSTEM_OPLL, 64, 0, 0, // 3.579545MHz + DIV_SYSTEM_MSM6295, 64, 0, 14, // 1.193MHz (3.579545MHz / 3) 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Sega System 18", { - DIV_SYSTEM_YM2612, 64, 0, 2, - DIV_SYSTEM_YM2612, 64, 0, 2, - DIV_SYSTEM_RF5C68, 64, 0, 1, + "Atari Rampart (drums mode)", { + DIV_SYSTEM_OPLL_DRUMS, 64, 0, 0, // 3.579545MHz + DIV_SYSTEM_MSM6295, 64, 0, 14, // 1.193MHz (3.579545MHz / 3) 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Sega System 1", { - DIV_SYSTEM_SMS, 64, 0, 2, - DIV_SYSTEM_SMS, 64, 0, 3, - 0 - } - )); - cat.systems.push_back(FurnaceGUISysDef( - "Sega System 32", { - DIV_SYSTEM_YM2612, 64, 0, 4, - DIV_SYSTEM_YM2612, 64, 0, 4, - DIV_SYSTEM_RF5C68, 64, 0, 2, - 0 - } - )); - cat.systems.push_back(FurnaceGUISysDef( - "Sega Hang-On", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_SEGAPCM, 64, 0, 0, - 0 - } - )); - cat.systems.push_back(FurnaceGUISysDef( - "SNK Alpha-68K", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_OPLL, 64, 0, 0, + "Atari JSA IIIs", { + DIV_SYSTEM_YM2151, 64, 0, 0, // 3.579545MHz + DIV_SYSTEM_MSM6295, 64, -127, 14, // 1.193MHz (3.579545MHz / 3), Left output + DIV_SYSTEM_MSM6295, 64, 127, 14, // 1.193MHz (3.579545MHz / 3), Right output 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Data East Karnov", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_OPL, 64, 0, 0, + DIV_SYSTEM_OPN, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL, 64, 0, 3, // 3MHz 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Capcom Arcade", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_OPN, 64, 0, 0, + "Data East Karnov (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL, 64, 0, 3, // 3MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Karnov (drums mode)", { + DIV_SYSTEM_OPN, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL_DRUMS, 64, 0, 3, // 3MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Karnov (extended channel 3; drums mode)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL_DRUMS, 64, 0, 3, // 3MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Arcade", { // Bad dudes, Robocop, etc + DIV_SYSTEM_OPN, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL2, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 to 1.056MHz; various per games or optional + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Arcade (extended channel 3)", { // Bad dudes, Robocop, etc + DIV_SYSTEM_OPN_EXT, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL2, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 to 1.056MHz; various per games or optional + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Arcade (drums mode)", { // Bad dudes, Robocop, etc + DIV_SYSTEM_OPN, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 to 1.056MHz; various per games or optional + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Arcade (extended channel 3; drums mode)", { // Bad dudes, Robocop, etc + DIV_SYSTEM_OPN_EXT, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 3, // 3MHz + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 to 1.056MHz; various per games or optional 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Data East PCX", { - DIV_SYSTEM_OPN, 64, 0, 0, - DIV_SYSTEM_PCE, 64, 0, 2, + DIV_SYSTEM_OPN, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_PCE, 64, 0, 0, + // software controlled MSM5205 + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East PCX (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 5, // 1.5MHz + DIV_SYSTEM_PCE, 64, 0, 0, + // software controlled MSM5205 + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Dark Seal", { // Dark Seal, Crude Buster, Vapor Trail, etc + DIV_SYSTEM_YM2151, 64, 0, 0, // 3.580MHz (32.22MHz / 9) + DIV_SYSTEM_OPN, 64, 0, 2, // 4.0275MHz (32.22MHz / 8); optional + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1.007MHz (32.22MHz / 32) + DIV_SYSTEM_MSM6295, 64, 0, 8, // 2.014MHz (32.22MHz / 16); optional + // HuC6280 is for control them, internal sound isn't used + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Dark Seal (extended channel 3)", { // Dark Seal, Crude Buster, Vapor Trail, etc + DIV_SYSTEM_YM2151, 64, 0, 0, // 3.580MHz (32.22MHz / 9) + DIV_SYSTEM_OPN_EXT, 64, 0, 2, // 4.0275MHz (32.22MHz / 8); optional + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1.007MHz (32.22MHz / 32) + DIV_SYSTEM_MSM6295, 64, 0, 8, // 2.014MHz (32.22MHz / 16); optional + // HuC6280 is for control them, internal sound isn't used + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East Deco 156", { + DIV_SYSTEM_MSM6295, 64, 0, 0, // 1 or 1.007MHz (32.22MHz / 32); various per games + DIV_SYSTEM_MSM6295, 64, 0, 8, // 1 or 2 or 2.014MHz (32.22MHz / 16); various per games + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Data East MLC", { + DIV_SYSTEM_YMZ280B, 64, 0, 5, // 14MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Ikari Warriors", { + DIV_SYSTEM_OPL, 64, 0, 2, + DIV_SYSTEM_OPL, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Ikari Warriors (drums mode on first OPL)", { + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + DIV_SYSTEM_OPL, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Ikari Warriors (drums mode on second OPL)", { + DIV_SYSTEM_OPL, 64, 0, 2, + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Ikari Warriors (drums mode on both OPLs)", { + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Triple Z80", { + DIV_SYSTEM_Y8950, 64, 0, 2, + DIV_SYSTEM_OPL, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Triple Z80 (drums mode on Y8950)", { + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 2, + DIV_SYSTEM_OPL, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Triple Z80 (drums mode on OPL)", { + DIV_SYSTEM_Y8950, 64, 0, 2, + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Triple Z80 (drums mode on Y8950 and OPL)", { + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 2, + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Chopper I", { + DIV_SYSTEM_Y8950, 64, 0, 2, + DIV_SYSTEM_OPL2, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Chopper I (drums mode on Y8950)", { + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 2, + DIV_SYSTEM_OPL2, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Chopper I (drums mode on OPL2)", { + DIV_SYSTEM_Y8950, 64, 0, 2, + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Chopper I (drums mode on Y8950 and OPL2)", { + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 2, + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Alpha denshi Alpha-68K", { + DIV_SYSTEM_OPN, 64, 0, 3, // 3MHz + DIV_SYSTEM_OPLL, 64, 0, 0, // 3.58MHz + // software controlled 8 bit DAC + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Alpha denshi Alpha-68K (extended channel 3)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 3, // 3MHz + DIV_SYSTEM_OPLL, 64, 0, 0, // 3.58MHz + // software controlled 8 bit DAC + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Alpha denshi Alpha-68K (drums mode)", { + DIV_SYSTEM_OPN, 64, 0, 3, // 3MHz + DIV_SYSTEM_OPLL_DRUMS, 64, 0, 0, // 3.58MHz + // software controlled 8 bit DAC + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Alpha denshi Alpha-68K (extended channel 3; drums mode)", { + DIV_SYSTEM_OPN_EXT, 64, 0, 3, // 3MHz + DIV_SYSTEM_OPLL_DRUMS, 64, 0, 0, // 3.58MHz + // software controlled 8 bit DAC 0 } )); @@ -1198,35 +1835,34 @@ void FurnaceGUI::initSystemPresets() { } )); cat.systems.push_back(FurnaceGUISysDef( - "Capcom Exed Eyes", { - DIV_SYSTEM_AY8910, 64, 0, 0, - DIV_SYSTEM_SMS, 64, 0, 0, - DIV_SYSTEM_SMS, 64, 0, 0, + "Nichibutsu Mag Max", { + DIV_SYSTEM_AY8910, 64, 0, 13, + DIV_SYSTEM_AY8910, 64, 0, 13, + DIV_SYSTEM_AY8910, 64, 0, 13, 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Nichibutsu Arcade", { - DIV_SYSTEM_AY8910, 64, 0, 0, - DIV_SYSTEM_AY8910, 64, 0, 0, - DIV_SYSTEM_AY8910, 64, 0, 0, - 0 - } - )); - cat.systems.push_back(FurnaceGUISysDef( - "Namco (3-channel WSG)", { + "Namco (3-channel WSG)", { // Pac-Man, Galaga, Xevious, etc DIV_SYSTEM_NAMCO, 64, 0, 0, 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Namco (8-channel WSG)", { + "Namco Mappy", { // Mappy, Super Pac-Man, Libble Rabble, etc DIV_SYSTEM_NAMCO_15XX, 64, 0, 0, 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Namco Pac-Land", { // Pac-Land, Baraduke, Sky kid, etc + DIV_SYSTEM_NAMCO_CUS30, 64, 0, 0, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Namco System 1", { + DIV_SYSTEM_YM2151, 64, 0, 0, DIV_SYSTEM_NAMCO_CUS30, 64, 0, 0, 0 } @@ -1243,12 +1879,6 @@ void FurnaceGUI::initSystemPresets() { 0 } )); - cat.systems.push_back(FurnaceGUISysDef( - "Capcom CPS-2 (QSound)", { - DIV_SYSTEM_QSOUND, 64, 0, 0, - 0 - } - )); cat.systems.push_back(FurnaceGUISysDef( "Seta 1", { DIV_SYSTEM_X1_010, 64, 0, 0, @@ -1275,18 +1905,37 @@ void FurnaceGUI::initSystemPresets() { } )); cat.systems.push_back(FurnaceGUISysDef( - "SNK Triple Z80", { - DIV_SYSTEM_Y8950, 64, 0, 0, - DIV_SYSTEM_OPL, 64, 0, 0, + "Coreland Cyber Tank", { + DIV_SYSTEM_Y8950, 64, -127, 0, // 3.58MHz, Left output + DIV_SYSTEM_Y8950, 64, 127, 0, // 3.58MHz, Right output 0 } )); cat.systems.push_back(FurnaceGUISysDef( - "Konami Bubble System", { - DIV_SYSTEM_AY8910, 64, 0, 0, - DIV_SYSTEM_AY8910, 64, 0, 0, - DIV_SYSTEM_BUBSYS_WSG, 64, 0, 0, - // VLM5030 exists but not used for music at all + "Coreland Cyber Tank (drums mode)", { + DIV_SYSTEM_Y8950, 64, -127, 0, // 3.58MHz, Left output + DIV_SYSTEM_Y8950, 64, 127, 0, // 3.58MHz, Right output + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "ICE Skimaxx", { + DIV_SYSTEM_MSM6295, 64, -127, 130, // 4MHz, Left output + DIV_SYSTEM_MSM6295, 64, 127, 130, // 4MHz, Right output + DIV_SYSTEM_MSM6295, 64, -127, 8, // 2MHz, Left output + DIV_SYSTEM_MSM6295, 64, 127, 8, // 2MHz, Right output + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Toaplan 1", { + DIV_SYSTEM_OPL2, 64, 0, 5, // 3.5MHz + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Toaplan 1 (drums mode)", { + DIV_SYSTEM_OPL2_DRUMS, 64, 0, 5, // 3.5MHz 0 } )); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 91d542bd..8878ca8f 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -28,19 +28,19 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool case DIV_SYSTEM_YM2612_EXT: case DIV_SYSTEM_YM2612_FRAC: case DIV_SYSTEM_YM2612_FRAC_EXT: { - if (ImGui::RadioButton("NTSC (7.67MHz)",(flags&7)==0)) { + if (ImGui::RadioButton("NTSC (7.67MHz)",(flags&(~0x80000000))==0)) { copyOfFlags=(flags&0x80000000)|0; } - if (ImGui::RadioButton("PAL (7.61MHz)",(flags&7)==1)) { + if (ImGui::RadioButton("PAL (7.61MHz)",(flags&(~0x80000000))==1)) { copyOfFlags=(flags&0x80000000)|1; } - if (ImGui::RadioButton("FM Towns (8MHz)",(flags&7)==2)) { + if (ImGui::RadioButton("FM Towns (8MHz)",(flags&(~0x80000000))==2)) { copyOfFlags=(flags&0x80000000)|2; } - if (ImGui::RadioButton("AtGames Genesis (6.13MHz)",(flags&7)==3)) { + if (ImGui::RadioButton("AtGames Genesis (6.13MHz)",(flags&(~0x80000000))==3)) { copyOfFlags=(flags&0x80000000)|3; } - if (ImGui::RadioButton("Sega System 32 (8.05MHz)",(flags&7)==4)) { + if (ImGui::RadioButton("Sega System 32 (8.05MHz)",(flags&(~0x80000000))==4)) { copyOfFlags=(flags&0x80000000)|4; } bool ladder=flags&0x80000000; @@ -51,43 +51,52 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool } case DIV_SYSTEM_SMS: { ImGui::Text("Clock rate:"); - if (ImGui::RadioButton("NTSC (3.58MHz)",(flags&3)==0)) { - copyOfFlags=(flags&(~3))|0; - + if (ImGui::RadioButton("3.58MHz (NTSC)",(flags&0xff03)==0x0000)) { + copyOfFlags=(flags&(~0xff03))|0x0000; } - if (ImGui::RadioButton("PAL (3.55MHz)",(flags&3)==1)) { - copyOfFlags=(flags&(~3))|1; - + if (ImGui::RadioButton("3.55MHz (PAL)",(flags&0xff03)==0x0001)) { + copyOfFlags=(flags&(~0xff03))|0x0001; } - if (ImGui::RadioButton("BBC Micro (4MHz)",(flags&3)==2)) { - copyOfFlags=(flags&(~3))|2; - + if (ImGui::RadioButton("4MHz (BBC Micro)",(flags&0xff03)==0x0002)) { + copyOfFlags=(flags&(~0xff03))|0x0002; } - if (ImGui::RadioButton("Half NTSC (1.79MHz)",(flags&3)==3)) { - copyOfFlags=(flags&(~3))|3; - + if (ImGui::RadioButton("1.79MHz (Half NTSC)",(flags&0xff03)==0x0003)) { + copyOfFlags=(flags&(~0xff03))|0x0003; + } + if (ImGui::RadioButton("3MHz (Exed Exes)",(flags&0xff03)==0x0100)) { + copyOfFlags=(flags&(~0xff03))|0x0100; + } + if (ImGui::RadioButton("2MHz (Sega System 1)",(flags&0xff03)==0x0101)) { + copyOfFlags=(flags&(~0xff03))|0x0101; } ImGui::Text("Chip type:"); - if (ImGui::RadioButton("Sega VDP/Master System",((flags>>2)&3)==0)) { - copyOfFlags=(flags&(~12))|0; - + if (ImGui::RadioButton("Sega VDP/Master System",(flags&0xcc)==0x00)) { + copyOfFlags=(flags&(~0xcc))|0x00; } - if (ImGui::RadioButton("TI SN76489",((flags>>2)&3)==1)) { - copyOfFlags=(flags&(~12))|4; - + if (ImGui::RadioButton("TI SN76489",(flags&0xcc)==0x04)) { + copyOfFlags=(flags&(~0xcc))|0x04; } - if (ImGui::RadioButton("TI SN76489 with Atari-like short noise",((flags>>2)&3)==2)) { - copyOfFlags=(flags&(~12))|8; - + if (ImGui::RadioButton("TI SN76489 with Atari-like short noise",(flags&0xcc)==0x08)) { + copyOfFlags=(flags&(~0xcc))|0x08; + } + if (ImGui::RadioButton("Game Gear",(flags&0xcc)==0x0c)) { + copyOfFlags=(flags&(~0xcc))|0x0c; + } + if (ImGui::RadioButton("TI SN76489A",(flags&0xcc)==0x40)) { + copyOfFlags=(flags&(~0xcc))|0x40; + } + if (ImGui::RadioButton("TI SN76496",(flags&0xcc)==0x44)) { + copyOfFlags=(flags&(~0xcc))|0x44; + } + if (ImGui::RadioButton("NCR 8496",(flags&0xcc)==0x48)) { + copyOfFlags=(flags&(~0xcc))|0x48; + } + if (ImGui::RadioButton("Tandy PSSJ 3-voice sound",(flags&0xcc)==0x4c)) { + copyOfFlags=(flags&(~0xcc))|0x4c; } - /*if (ImGui::RadioButton("Game Gear",(flags>>2)==3)) { - copyOfFlags=(flags&3)|12); - }*/ - bool noPhaseReset=flags&16; if (ImGui::Checkbox("Disable noise period change phase reset",&noPhaseReset)) { copyOfFlags=(flags&(~16))|(noPhaseReset<<4); - } break; } @@ -97,37 +106,29 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool ImGui::Text("Clock rate:"); if (ImGui::RadioButton("NTSC (3.58MHz)",(flags&15)==0)) { copyOfFlags=(flags&(~15))|0; - } if (ImGui::RadioButton("PAL (3.55MHz)",(flags&15)==1)) { copyOfFlags=(flags&(~15))|1; - } if (ImGui::RadioButton("BBC Micro (4MHz)",(flags&15)==2)) { copyOfFlags=(flags&(~15))|2; - } if (ImGui::RadioButton("Half NTSC (1.79MHz)",(flags&15)==3)) { copyOfFlags=(flags&(~15))|3; - } if (type!=DIV_SYSTEM_VRC7) { ImGui::Text("Patch set:"); if (ImGui::RadioButton("Yamaha YM2413",((flags>>4)&15)==0)) { copyOfFlags=(flags&(~0xf0))|0; - } if (ImGui::RadioButton("Yamaha YMF281",((flags>>4)&15)==1)) { copyOfFlags=(flags&(~0xf0))|0x10; - } if (ImGui::RadioButton("Yamaha YM2423",((flags>>4)&15)==2)) { copyOfFlags=(flags&(~0xf0))|0x20; - } if (ImGui::RadioButton("Konami VRC7",((flags>>4)&15)==3)) { copyOfFlags=(flags&(~0xf0))|0x30; - } } break; @@ -135,15 +136,12 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool case DIV_SYSTEM_YM2151: if (ImGui::RadioButton("NTSC/X16 (3.58MHz)",flags==0)) { copyOfFlags=0; - } if (ImGui::RadioButton("PAL (3.55MHz)",flags==1)) { copyOfFlags=1; - } if (ImGui::RadioButton("X1/X68000 (4MHz)",flags==2)) { copyOfFlags=2; - } break; case DIV_SYSTEM_NES: @@ -152,30 +150,37 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool case DIV_SYSTEM_MMC5: if (ImGui::RadioButton("NTSC (1.79MHz)",flags==0)) { copyOfFlags=0; - } if (ImGui::RadioButton("PAL (1.67MHz)",flags==1)) { copyOfFlags=1; - } if (ImGui::RadioButton("Dendy (1.77MHz)",flags==2)) { copyOfFlags=2; - } break; case DIV_SYSTEM_C64_8580: case DIV_SYSTEM_C64_6581: if (ImGui::RadioButton("NTSC (1.02MHz)",flags==0)) { copyOfFlags=0; - } if (ImGui::RadioButton("PAL (0.99MHz)",flags==1)) { copyOfFlags=1; - } if (ImGui::RadioButton("SSI 2001 (0.89MHz)",flags==2)) { copyOfFlags=2; - + } + break; + case DIV_SYSTEM_YM2610: + case DIV_SYSTEM_YM2610_EXT: + case DIV_SYSTEM_YM2610_FULL: + case DIV_SYSTEM_YM2610_FULL_EXT: + case DIV_SYSTEM_YM2610B: + case DIV_SYSTEM_YM2610B_EXT: + if (ImGui::RadioButton("8MHz (Neo Geo MVS)",(flags&0xff)==0)) { + copyOfFlags=(flags&(~0xff))|0; + } + if (ImGui::RadioButton("8.06MHz (Neo Geo AES)",(flags&0xff)==1)) { + copyOfFlags=(flags&(~0xff))|1; } break; case DIV_SYSTEM_AY8910: @@ -183,87 +188,74 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool ImGui::Text("Clock rate:"); if (ImGui::RadioButton("1.79MHz (ZX Spectrum NTSC/MSX)",(flags&15)==0)) { copyOfFlags=(flags&(~15))|0; - } if (ImGui::RadioButton("1.77MHz (ZX Spectrum)",(flags&15)==1)) { copyOfFlags=(flags&(~15))|1; - } if (ImGui::RadioButton("1.75MHz (ZX Spectrum)",(flags&15)==2)) { copyOfFlags=(flags&(~15))|2; - } if (ImGui::RadioButton("2MHz (Atari ST/Sharp X1)",(flags&15)==3)) { copyOfFlags=(flags&(~15))|3; - } if (ImGui::RadioButton("1.5MHz (Vectrex)",(flags&15)==4)) { copyOfFlags=(flags&(~15))|4; - } if (ImGui::RadioButton("1MHz (Amstrad CPC)",(flags&15)==5)) { copyOfFlags=(flags&(~15))|5; - } if (ImGui::RadioButton("0.89MHz (Pre-divided Sunsoft 5B)",(flags&15)==6)) { copyOfFlags=(flags&(~15))|6; - } if (ImGui::RadioButton("1.67MHz (?)",(flags&15)==7)) { copyOfFlags=(flags&(~15))|7; - } if (ImGui::RadioButton("0.83MHz (Pre-divided Sunsoft 5B on PAL)",(flags&15)==8)) { copyOfFlags=(flags&(~15))|8; - } if (ImGui::RadioButton("1.10MHz (Gamate/VIC-20 PAL)",(flags&15)==9)) { copyOfFlags=(flags&(~15))|9; - } if (ImGui::RadioButton("2^21Hz (Game Boy)",(flags&15)==10)) { copyOfFlags=(flags&(~15))|10; - } if (ImGui::RadioButton("3.58MHz (Darky)",(flags&15)==11)) { copyOfFlags=(flags&(~15))|11; - } if (ImGui::RadioButton("3.6MHz (Darky)",(flags&15)==12)) { copyOfFlags=(flags&(~15))|12; - + } + if (ImGui::RadioButton("1.25MHz (Mag Max)",(flags&15)==13)) { + copyOfFlags=(flags&(~15))|13; + } + if (ImGui::RadioButton("1.536MHz (Kyugo)",(flags&15)==14)) { + copyOfFlags=(flags&(~15))|14; } if (type==DIV_SYSTEM_AY8910) { ImGui::Text("Chip type:"); if (ImGui::RadioButton("AY-3-8910",(flags&0x30)==0)) { copyOfFlags=(flags&(~0x30))|0; - } if (ImGui::RadioButton("YM2149(F)",(flags&0x30)==16)) { copyOfFlags=(flags&(~0x30))|16; - } if (ImGui::RadioButton("Sunsoft 5B",(flags&0x30)==32)) { copyOfFlags=(flags&(~0x30))|32; - } if (ImGui::RadioButton("AY-3-8914",(flags&0x30)==48)) { copyOfFlags=(flags&(~0x30))|48; - } } bool stereo=flags&0x40; ImGui::BeginDisabled((type==DIV_SYSTEM_AY8910) && ((flags&0x30)==32)); if (ImGui::Checkbox("Stereo##_AY_STEREO",&stereo)) { copyOfFlags=(flags&(~0x40))|(stereo?0x40:0); - } ImGui::EndDisabled(); bool clockSel=flags&0x80; ImGui::BeginDisabled((type==DIV_SYSTEM_AY8910) && ((flags&0x30)!=16)); if (ImGui::Checkbox("Half Clock divider##_AY_CLKSEL",&clockSel)) { copyOfFlags=(flags&(~0x80))|(clockSel?0x80:0); - } ImGui::EndDisabled(); break; @@ -375,86 +367,223 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool } break; } - case DIV_SYSTEM_OPN: { - if (ImGui::RadioButton("NTSC (3.58MHz)",(flags&3)==0)) { - copyOfFlags=(flags&0x80000000)|0; + case DIV_SYSTEM_OPN: + case DIV_SYSTEM_OPN_EXT: { + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("3.58MHz (NTSC)",(flags&31)==0)) { + copyOfFlags=(flags&(~31))|0; } - if (ImGui::RadioButton("PAL (3.54MHz)",(flags&3)==1)) { - copyOfFlags=(flags&0x80000000)|1; + if (ImGui::RadioButton("3.54MHz (PAL)",(flags&31)==1)) { + copyOfFlags=(flags&(~31))|1; } - if (ImGui::RadioButton("Arcade (4MHz)",(flags&3)==2)) { - copyOfFlags=(flags&0x80000000)|2; + if (ImGui::RadioButton("4MHz",(flags&31)==2)) { + copyOfFlags=(flags&(~31))|2; } - if (ImGui::RadioButton("PC-9801-26K? TODO: CONFIRM (3MHz)",(flags&3)==3)) { - copyOfFlags=(flags&0x80000000)|3; + if (ImGui::RadioButton("3MHz",(flags&31)==3)) { + copyOfFlags=(flags&(~31))|3; } + if (ImGui::RadioButton("3.9936MHz (PC-88/PC-98)",(flags&31)==4)) { + copyOfFlags=(flags&(~31))|4; + } + if (ImGui::RadioButton("1.5MHz",(flags&31)==5)) { + copyOfFlags=(flags&(~31))|5; + } + /* + ImGui::Text("Output rate: (DOES NOT WORK YET!)"); + if (ImGui::RadioButton("FM: clock / 72, SSG: clock / 16",(flags&96)==0)) { + copyOfFlags=(flags&(~96))|0; + } + if (ImGui::RadioButton("FM: clock / 36, SSG: clock / 8",(flags&96)==32)) { + copyOfFlags=(flags&(~96))|32; + } + if (ImGui::RadioButton("FM: clock / 24, SSG: clock / 4",(flags&96)==64)) { + copyOfFlags=(flags&(~96))|64; + } + */ + break; + } + case DIV_SYSTEM_PC98: + case DIV_SYSTEM_PC98_EXT: { + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("8MHz (Arcade)",(flags&31)==0)) { + copyOfFlags=(flags&(~31))|0; + } + if (ImGui::RadioButton("7.987MHz (PC-88/PC-98)",(flags&31)==1)) { + copyOfFlags=(flags&(~31))|1; + } + /* + ImGui::Text("Output rate: (DOES NOT WORK YET!)"); + if (ImGui::RadioButton("FM: clock / 144, SSG: clock / 32",(flags&96)==0)) { + copyOfFlags=(flags&(~96))|0; + } + if (ImGui::RadioButton("FM: clock / 72, SSG: clock / 16",(flags&96)==32)) { + copyOfFlags=(flags&(~96))|32; + } + if (ImGui::RadioButton("FM: clock / 48, SSG: clock / 8",(flags&96)==64)) { + copyOfFlags=(flags&(~96))|64; + } + */ break; } case DIV_SYSTEM_RF5C68: { ImGui::Text("Clock rate:"); if (ImGui::RadioButton("8MHz (FM Towns)",(flags&15)==0)) { copyOfFlags=(flags&(~15))|0; - } if (ImGui::RadioButton("10MHz (Sega System 18)",(flags&15)==1)) { copyOfFlags=(flags&(~15))|1; - } if (ImGui::RadioButton("12.5MHz (Sega CD/System 32)",(flags&15)==2)) { copyOfFlags=(flags&(~15))|2; - } ImGui::Text("Chip type:"); if (ImGui::RadioButton("RF5C68 (10-bit output)",((flags>>4)&15)==0)) { copyOfFlags=(flags&(~240))|0; - } if (ImGui::RadioButton("RF5C164 (16-bit output)",((flags>>4)&15)==1)) { copyOfFlags=(flags&(~240))|16; - } break; } case DIV_SYSTEM_MSM6295: { ImGui::Text("Clock rate:"); - if (ImGui::RadioButton("1MHz",flags==0)) { - copyOfFlags=0; + if (ImGui::RadioButton("1MHz",(flags&127)==0)) { + copyOfFlags=(flags&(~127))|0; } - if (ImGui::RadioButton("1.056MHz",flags==1)) { - copyOfFlags=1; + if (ImGui::RadioButton("1.056MHz",(flags&127)==1)) { + copyOfFlags=(flags&(~127))|1; } - if (ImGui::RadioButton("4MHz",flags==2)) { - copyOfFlags=2; + if (ImGui::RadioButton("4MHz",(flags&127)==2)) { + copyOfFlags=(flags&(~127))|2; } - if (ImGui::RadioButton("4.224MHz",flags==3)) { - copyOfFlags=3; + if (ImGui::RadioButton("4.224MHz",(flags&127)==3)) { + copyOfFlags=(flags&(~127))|3; } - if (ImGui::RadioButton("3.58MHz",flags==4)) { - copyOfFlags=4; + if (ImGui::RadioButton("3.58MHz",(flags&127)==4)) { + copyOfFlags=(flags&(~127))|4; } - if (ImGui::RadioButton("1.79MHz",flags==5)) { - copyOfFlags=5; + if (ImGui::RadioButton("1.79MHz",(flags&127)==5)) { + copyOfFlags=(flags&(~127))|5; } - if (ImGui::RadioButton("1.02MHz",flags==6)) { - copyOfFlags=6; + if (ImGui::RadioButton("1.02MHz",(flags&127)==6)) { + copyOfFlags=(flags&(~127))|6; } - if (ImGui::RadioButton("0.89MHz",flags==7)) { - copyOfFlags=7; + if (ImGui::RadioButton("0.89MHz",(flags&127)==7)) { + copyOfFlags=(flags&(~127))|7; } - if (ImGui::RadioButton("2MHz",flags==8)) { - copyOfFlags=8; + if (ImGui::RadioButton("2MHz",(flags&127)==8)) { + copyOfFlags=(flags&(~127))|8; } - if (ImGui::RadioButton("2.112MHz",flags==9)) { - copyOfFlags=9; + if (ImGui::RadioButton("2.112MHz",(flags&127)==9)) { + copyOfFlags=(flags&(~127))|9; } - if (ImGui::RadioButton("0.875MHz",flags==10)) { - copyOfFlags=10; + if (ImGui::RadioButton("0.875MHz",(flags&127)==10)) { + copyOfFlags=(flags&(~127))|10; } - if (ImGui::RadioButton("0.9375MHz",flags==11)) { - copyOfFlags=11; + if (ImGui::RadioButton("0.9375MHz",(flags&127)==11)) { + copyOfFlags=(flags&(~127))|11; } - if (ImGui::RadioButton("1.5MHz",flags==12)) { - copyOfFlags=12; + if (ImGui::RadioButton("1.5MHz",(flags&127)==12)) { + copyOfFlags=(flags&(~127))|12; + } + if (ImGui::RadioButton("3MHz",(flags&127)==13)) { + copyOfFlags=(flags&(~127))|13; + } + if (ImGui::RadioButton("1.193MHz (Atari)",(flags&127)==14)) { + copyOfFlags=(flags&(~127))|14; + } + ImGui::Text("Output rate:"); + if (ImGui::RadioButton("clock / 132",(flags&128)==0)) { + copyOfFlags=(flags&(~128))|0; + } + if (ImGui::RadioButton("clock / 165",(flags&128)==128)) { + copyOfFlags=(flags&(~128))|128; + } + break; + } + case DIV_SYSTEM_SCC: + case DIV_SYSTEM_SCC_PLUS: { + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("1.79MHz (NTSC/MSX)",(flags&127)==0)) { + copyOfFlags=(flags&(~127))|0; + } + if (ImGui::RadioButton("1.77MHz (PAL)",(flags&127)==1)) { + copyOfFlags=(flags&(~127))|1; + } + if (ImGui::RadioButton("1.5MHz (Arcade)",(flags&127)==2)) { + copyOfFlags=(flags&(~127))|2; + } + if (ImGui::RadioButton("2MHz",(flags&127)==3)) { + copyOfFlags=(flags&(~127))|3; + } + break; + } + case DIV_SYSTEM_OPL: + case DIV_SYSTEM_OPL_DRUMS: + case DIV_SYSTEM_OPL2: + case DIV_SYSTEM_OPL2_DRUMS: + case DIV_SYSTEM_Y8950: + case DIV_SYSTEM_Y8950_DRUMS: { + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("3.58MHz (NTSC)",(flags&255)==0)) { + copyOfFlags=(flags&(~255))|0; + } + if (ImGui::RadioButton("3.54MHz (PAL)",(flags&255)==1)) { + copyOfFlags=(flags&(~255))|1; + } + if (ImGui::RadioButton("4MHz",(flags&255)==2)) { + copyOfFlags=(flags&(~255))|2; + } + if (ImGui::RadioButton("3MHz",(flags&255)==3)) { + copyOfFlags=(flags&(~255))|3; + } + if (ImGui::RadioButton("3.9936MHz (PC-88/PC-98)",(flags&255)==4)) { + copyOfFlags=(flags&(~255))|4; + } + if (ImGui::RadioButton("3.5MHz",(flags&255)==5)) { + copyOfFlags=(flags&(~255))|5; + } + break; + } + case DIV_SYSTEM_OPL3: + case DIV_SYSTEM_OPL3_DRUMS: { + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("14.32MHz (MTSC)",(flags&255)==0)) { + copyOfFlags=(flags&(~255))|0; + } + if (ImGui::RadioButton("14.19MHz (PAL)",(flags&255)==1)) { + copyOfFlags=(flags&(~255))|1; + } + if (ImGui::RadioButton("14MHz",(flags&255)==2)) { + copyOfFlags=(flags&(~255))|2; + } + if (ImGui::RadioButton("16MHz",(flags&255)==3)) { + copyOfFlags=(flags&(~255))|3; + } + if (ImGui::RadioButton("15MHz",(flags&255)==4)) { + copyOfFlags=(flags&(~255))|4; + } + break; + } + case DIV_SYSTEM_YMZ280B: { + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("16.9344MHz",(flags&255)==0)) { + copyOfFlags=(flags&(~255))|0; + } + if (ImGui::RadioButton("14.32MHz (MTSC)",(flags&255)==1)) { + copyOfFlags=(flags&(~255))|1; + } + if (ImGui::RadioButton("14.19MHz (PAL)",(flags&255)==3)) { + copyOfFlags=(flags&(~255))|2; + } + if (ImGui::RadioButton("16MHz",(flags&255)==3)) { + copyOfFlags=(flags&(~255))|3; + } + if (ImGui::RadioButton("16.67MHz",(flags&255)==4)) { + copyOfFlags=(flags&(~255))|4; + } + if (ImGui::RadioButton("14MHz",(flags&255)==5)) { + copyOfFlags=(flags&(~255))|5; } break; } @@ -462,17 +591,8 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool case DIV_SYSTEM_SWAN: case DIV_SYSTEM_VERA: case DIV_SYSTEM_BUBSYS_WSG: - case DIV_SYSTEM_YM2610: - case DIV_SYSTEM_YM2610_EXT: - case DIV_SYSTEM_YM2610_FULL: - case DIV_SYSTEM_YM2610_FULL_EXT: - case DIV_SYSTEM_YM2610B: - case DIV_SYSTEM_YM2610B_EXT: case DIV_SYSTEM_YMU759: case DIV_SYSTEM_PET: - case DIV_SYSTEM_SCC: - case DIV_SYSTEM_SCC_PLUS: - case DIV_SYSTEM_YMZ280B: ImGui::Text("nothing to configure"); break; default: diff --git a/src/main.cpp b/src/main.cpp index 07905852..63cc5efb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -152,6 +152,7 @@ TAParamResult pVersion(String) { printf("- puNES by FHorse (GPLv2)\n"); printf("- reSID by Dag Lem (GPLv2)\n"); printf("- Stella by Stella Team (GPLv2)\n"); + printf("- vgsound_emu by cam900 (BSD 3-clause)\n"); return TA_PARAM_QUIT; } From d1aeabe464daacc1cc55bc473659be18b1cd072a Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 19:26:34 +0900 Subject: [PATCH 016/152] Fix compile --- src/engine/platform/fmshared_OPM.h | 22 +++++++++++----------- src/engine/platform/fmshared_OPN.h | 24 ++++++++++++------------ src/engine/platform/genesis.cpp | 4 ---- src/engine/platform/genesis.h | 4 ++++ 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/engine/platform/fmshared_OPM.h b/src/engine/platform/fmshared_OPM.h index ed5f63dd..c21d1c18 100644 --- a/src/engine/platform/fmshared_OPM.h +++ b/src/engine/platform/fmshared_OPM.h @@ -22,21 +22,21 @@ #include "fmsharedbase.h" -#define ADDR_MULT_DT 0x40 -#define ADDR_TL 0x60 -#define ADDR_RS_AR 0x80 -#define ADDR_AM_DR 0xa0 -#define ADDR_DT2_D2R 0xc0 -#define ADDR_SL_RR 0xe0 -#define ADDR_NOTE 0x28 -#define ADDR_KF 0x30 -#define ADDR_FMS_AMS 0x38 -#define ADDR_LR_FB_ALG 0x20 - #define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) class DivPlatformOPMBase: public DivPlatformFMBase { protected: + const unsigned char ADDR_MULT_DT=0x40; + const unsigned char ADDR_TL=0x60; + const unsigned char ADDR_RS_AR=0x80; + const unsigned char ADDR_AM_DR=0xa0; + const unsigned char ADDR_DT2_D2R=0xc0; + const unsigned char ADDR_SL_RR=0xe0; + const unsigned char ADDR_NOTE=0x28; + const unsigned char ADDR_KF=0x30; + const unsigned char ADDR_FMS_AMS=0x38; + const unsigned char ADDR_LR_FB_ALG=0x20; + const unsigned short opOffs[4]={ 0x00, 0x08, 0x10, 0x18 }; diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index 6e5426b5..ae40748b 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -22,18 +22,6 @@ #include "fmsharedbase.h" -#define ADDR_MULT_DT 0x30 -#define ADDR_TL 0x40 -#define ADDR_RS_AR 0x50 -#define ADDR_AM_DR 0x60 -#define ADDR_DT2_D2R 0x70 -#define ADDR_SL_RR 0x80 -#define ADDR_SSG 0x90 -#define ADDR_FREQ 0xa0 -#define ADDR_FREQH 0xa4 -#define ADDR_FB_ALG 0xb0 -#define ADDR_LRAF 0xb4 - #define CHIP_FREQBASE fmFreqBase #define CHIP_DIVIDER fmDivBase @@ -100,6 +88,18 @@ class DivPlatformOPNBase: public DivPlatformFMBase { protected: + const unsigned char ADDR_MULT_DT=0x30; + const unsigned char ADDR_TL=0x40; + const unsigned char ADDR_RS_AR=0x50; + const unsigned char ADDR_AM_DR=0x60; + const unsigned char ADDR_DT2_D2R=0x70; + const unsigned char ADDR_SL_RR=0x80; + const unsigned char ADDR_SSG=0x90; + const unsigned char ADDR_FREQ=0xa0; + const unsigned char ADDR_FREQH=0xa4; + const unsigned char ADDR_FB_ALG=0xb0; + const unsigned char ADDR_LRAF=0xb4; + const unsigned short opOffs[4]={ 0x00, 0x04, 0x08, 0x0c }; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 512f55f8..b9a5c686 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -22,10 +22,6 @@ #include #include -static unsigned char konOffs[6]={ - 0, 1, 2, 4, 5, 6 -}; - #define IS_REALLY_MUTED(x) (isMuted[x] && (x<5 || !softPCM || (isMuted[5] && isMuted[6]))) const char* DivPlatformGenesis::getEffectName(unsigned char effect) { diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index 70b3dc8a..e4bdfffa 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -36,6 +36,10 @@ class DivPlatformGenesis: public DivDispatch, public DivPlatformOPNBase { 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 }; + const unsigned char konOffs[6]={ + 0, 1, 2, 4, 5, 6 + }; + struct Channel { DivInstrumentFM state; DivMacroInt std; From ebbd9784e689af27feea032ef1ca55d1f5c105a4 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 19:40:37 +0900 Subject: [PATCH 017/152] Reduce more FM codes --- src/engine/platform/arcade.h | 10 ++-------- src/engine/platform/fmsharedbase.h | 7 ++++++- src/engine/platform/genesis.h | 10 ++-------- src/engine/platform/tx81z.h | 10 ++-------- src/engine/platform/ym2203.h | 10 ++-------- src/engine/platform/ym2608.h | 10 ++-------- src/engine/platform/ym2610.h | 10 ++-------- src/engine/platform/ym2610b.h | 7 +------ 8 files changed, 19 insertions(+), 55 deletions(-) diff --git a/src/engine/platform/arcade.h b/src/engine/platform/arcade.h index 189ce1e9..00af8f25 100644 --- a/src/engine/platform/arcade.h +++ b/src/engine/platform/arcade.h @@ -19,19 +19,18 @@ #ifndef _ARCADE_H #define _ARCADE_H -#include "../dispatch.h" +#include "fmshared_OPM.h" #include "../macroInt.h" #include "../instrument.h" #include #include "../../../extern/opm/opm.h" #include "sound/ymfm/ymfm_opm.h" -#include "fmshared_OPM.h" class DivArcadeInterface: public ymfm::ymfm_interface { }; -class DivPlatformArcade: public DivDispatch, public DivPlatformOPMBase { +class DivPlatformArcade: public DivPlatformOPMBase { protected: const unsigned short chanOffs[8]={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 @@ -85,14 +84,9 @@ class DivPlatformArcade: public DivDispatch, public DivPlatformOPMBase { ymfm::ym2151::output_data out_ymfm; DivArcadeInterface iface; - unsigned char regPool[256]; - bool extMode, useYMFM; bool isMuted[8]; - - short oldWrites[256]; - short pendingWrites[256]; int octave(int freq); int toFreq(int freq); diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index a3b0e634..355b05c2 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -20,6 +20,7 @@ #ifndef _FMSHARED_BASE_H #define _FMSHARED_BASE_H +#include "../dispatch.h" #include #define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} @@ -37,7 +38,7 @@ } \ } -class DivPlatformFMBase { +class DivPlatformFMBase: public DivDispatch { protected: const bool isOutput[8][4]={ // 1 3 2 4 @@ -69,6 +70,10 @@ class DivPlatformFMBase { unsigned char lastBusy; int delay; + unsigned char regPool[512]; + short oldWrites[512]; + short pendingWrites[512]; + DivPlatformFMBase(): lastBusy(0), delay(0) {} diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index e4bdfffa..ace427f6 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -19,18 +19,17 @@ #ifndef _GENESIS_H #define _GENESIS_H -#include "../dispatch.h" +#include "fmshared_OPN.h" #include "../macroInt.h" #include "../../../extern/Nuked-OPN2/ym3438.h" #include "sound/ymfm/ymfm_opn.h" -#include "fmshared_OPN.h" class DivYM2612Interface: public ymfm::ymfm_interface { }; -class DivPlatformGenesis: public DivDispatch, public DivPlatformOPNBase { +class DivPlatformGenesis: public DivPlatformOPNBase { protected: const unsigned short chanOffs[6]={ 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 @@ -112,7 +111,6 @@ class DivPlatformGenesis: public DivDispatch, public DivPlatformOPNBase { ymfm::ym2612* fm_ymfm; ymfm::ym2612::output_data out_ymfm; DivYM2612Interface iface; - unsigned char regPool[512]; unsigned char lfoValue; @@ -121,9 +119,6 @@ class DivPlatformGenesis: public DivDispatch, public DivPlatformOPNBase { bool extMode, softPCM, useYMFM; bool ladder; - short oldWrites[512]; - short pendingWrites[512]; - unsigned char dacVolTable[128]; friend void putDispatchChan(void*,int,int); @@ -160,7 +155,6 @@ class DivPlatformGenesis: public DivDispatch, public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformGenesis(): - DivDispatch(), DivPlatformOPNBase(9440540.0, 72, 32) {} ~DivPlatformGenesis(); }; diff --git a/src/engine/platform/tx81z.h b/src/engine/platform/tx81z.h index b185de5f..16167ede 100644 --- a/src/engine/platform/tx81z.h +++ b/src/engine/platform/tx81z.h @@ -19,18 +19,17 @@ #ifndef _TX81Z_H #define _TX81Z_H -#include "../dispatch.h" +#include "fmshared_OPM.h" #include "../macroInt.h" #include "../instrument.h" #include #include "sound/ymfm/ymfm_opz.h" -#include "fmshared_OPM.h" class DivTXInterface: public ymfm::ymfm_interface { }; -class DivPlatformTX81Z: public DivDispatch, public DivPlatformOPMBase { +class DivPlatformTX81Z: public DivPlatformOPMBase { protected: const unsigned short chanOffs[8]={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 @@ -82,15 +81,10 @@ class DivPlatformTX81Z: public DivDispatch, public DivPlatformOPMBase { ymfm::ym2414::output_data out_ymfm; DivTXInterface iface; - unsigned char regPool[330]; - bool extMode; bool isMuted[8]; - short oldWrites[330]; - short pendingWrites[330]; - int octave(int freq); int toFreq(int freq); diff --git a/src/engine/platform/ym2203.h b/src/engine/platform/ym2203.h index 70be354d..c650583d 100644 --- a/src/engine/platform/ym2203.h +++ b/src/engine/platform/ym2203.h @@ -19,18 +19,17 @@ #ifndef _YM2203_H #define _YM2203_H -#include "../dispatch.h" +#include "fmshared_OPN.h" #include "../macroInt.h" #include "sound/ymfm/ymfm_opn.h" #include "ay.h" -#include "fmshared_OPN.h" class DivYM2203Interface: public ymfm::ymfm_interface { }; -class DivPlatformYM2203: public DivDispatch, public DivPlatformOPNBase { +class DivPlatformYM2203: public DivPlatformOPNBase { protected: const unsigned short chanOffs[3]={ 0x00, 0x01, 0x02 @@ -86,16 +85,12 @@ class DivPlatformYM2203: public DivDispatch, public DivPlatformOPNBase { ymfm::ym2203* fm; ymfm::ym2203::output_data fmout; DivYM2203Interface iface; - unsigned char regPool[256]; DivPlatformAY8910* ay; unsigned char sampleBank; bool extMode; - short oldWrites[256]; - short pendingWrites[256]; - friend void putDispatchChan(void*,int,int); public: @@ -123,7 +118,6 @@ class DivPlatformYM2203: public DivDispatch, public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2203(): - DivDispatch(), DivPlatformOPNBase(4720270.0, 36, 16) {} ~DivPlatformYM2203(); }; diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index a6d4399a..21eb487f 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -19,12 +19,11 @@ #ifndef _YM2608_H #define _YM2608_H -#include "../dispatch.h" +#include "fmshared_OPN.h" #include "../macroInt.h" #include "sound/ymfm/ymfm_opn.h" #include "ay.h" -#include "fmshared_OPN.h" class DivYM2608Interface: public ymfm::ymfm_interface { public: @@ -35,7 +34,7 @@ class DivYM2608Interface: public ymfm::ymfm_interface { DivYM2608Interface(): adpcmBMem(NULL), sampleBank(0) {} }; -class DivPlatformYM2608: public DivDispatch, public DivPlatformOPNBase { +class DivPlatformYM2608: public DivPlatformOPNBase { protected: const unsigned short chanOffs[6]={ 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 @@ -92,7 +91,6 @@ class DivPlatformYM2608: public DivDispatch, public DivPlatformOPNBase { bool isMuted[16]; ymfm::ym2608* fm; ymfm::ym2608::output_data fmout; - unsigned char regPool[512]; unsigned char* adpcmBMem; size_t adpcmBMemLen; @@ -106,9 +104,6 @@ class DivPlatformYM2608: public DivDispatch, public DivPlatformOPNBase { double fmFreqBase; unsigned char ayDiv; - short oldWrites[512]; - short pendingWrites[512]; - double NOTE_OPNB(int ch, int note); double NOTE_ADPCMB(int note); friend void putDispatchChan(void*,int,int); @@ -142,7 +137,6 @@ class DivPlatformYM2608: public DivDispatch, public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2608(): - DivDispatch(), DivPlatformOPNBase(9440540.0, 72, 32) {} ~DivPlatformYM2608(); }; diff --git a/src/engine/platform/ym2610.h b/src/engine/platform/ym2610.h index 39bc82f3..069707dd 100644 --- a/src/engine/platform/ym2610.h +++ b/src/engine/platform/ym2610.h @@ -19,10 +19,9 @@ #ifndef _YM2610_H #define _YM2610_H -#include "../dispatch.h" +#include "fmshared_OPN.h" #include "../macroInt.h" #include "ay.h" -#include "fmshared_OPN.h" #include "sound/ymfm/ymfm_opn.h" class DivYM2610Interface: public ymfm::ymfm_interface { @@ -35,7 +34,7 @@ class DivYM2610Interface: public ymfm::ymfm_interface { DivYM2610Interface(): adpcmAMem(NULL), adpcmBMem(NULL), sampleBank(0) {} }; -class DivPlatformYM2610Base: public DivDispatch, public DivPlatformOPNBase { +class DivPlatformYM2610Base: public DivPlatformOPNBase { protected: unsigned char* adpcmAMem; size_t adpcmAMemLen; @@ -51,7 +50,6 @@ class DivPlatformYM2610Base: public DivDispatch, public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2610Base(): - DivDispatch(), DivPlatformOPNBase(9440540.0, 72, 32) {} }; @@ -118,15 +116,11 @@ class DivPlatformYM2610: public DivPlatformYM2610Base { ymfm::ym2610::output_data fmout; DivPlatformAY8910* ay; - unsigned char regPool[512]; unsigned char sampleBank; bool extMode; - short oldWrites[512]; - short pendingWrites[512]; - double NOTE_OPNB(int ch, int note); double NOTE_ADPCMB(int note); friend void putDispatchChan(void*,int,int); diff --git a/src/engine/platform/ym2610b.h b/src/engine/platform/ym2610b.h index 737251e4..0d1dca2b 100644 --- a/src/engine/platform/ym2610b.h +++ b/src/engine/platform/ym2610b.h @@ -19,12 +19,11 @@ #ifndef _YM2610B_H #define _YM2610B_H -#include "../dispatch.h" +#include "ym2610.h" #include "../macroInt.h" #include #include "sound/ymfm/ymfm_opn.h" -#include "ym2610.h" class DivPlatformYM2610B: public DivPlatformYM2610Base { protected: @@ -83,7 +82,6 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base { bool isMuted[16]; ymfm::ym2610b* fm; ymfm::ym2610b::output_data fmout; - unsigned char regPool[512]; DivPlatformAY8910* ay; unsigned char sampleBank; @@ -91,9 +89,6 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base { bool extMode; double fmFreqBase=9440540; unsigned char ayDiv=32; - - short oldWrites[512]; - short pendingWrites[512]; double NOTE_OPNB(int ch, int note); double NOTE_ADPCMB(int note); From 5473b8722dca28cc3e9a65cf4b6fa3cca7e61ab9 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 19:52:13 +0900 Subject: [PATCH 018/152] Fix compile, Remove unused include --- src/engine/platform/fmsharedbase.h | 31 +++++++++++++++--------------- src/engine/platform/ym2610b.h | 1 - 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index 355b05c2..2555d267 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -23,21 +23,6 @@ #include "../dispatch.h" #include -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } -#define urgentWrite(a,v) if (!skipRegisterWrites) { \ - if (writes.empty()) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else if (writes.size()>16 || writes.front().addrOrVal) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else { \ - writes.push_front(QueuedWrite(a,v)); \ - } \ - if (dumpWrites) { \ - addWrite(a,v); \ - } \ -} - class DivPlatformFMBase: public DivDispatch { protected: const bool isOutput[8][4]={ @@ -75,8 +60,24 @@ class DivPlatformFMBase: public DivDispatch { short pendingWrites[512]; DivPlatformFMBase(): + DivDispatch(), lastBusy(0), delay(0) {} }; +#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} +#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } +#define urgentWrite(a,v) if (!skipRegisterWrites) { \ + if (writes.empty()) { \ + writes.push_back(QueuedWrite(a,v)); \ + } else if (writes.size()>16 || writes.front().addrOrVal) { \ + writes.push_back(QueuedWrite(a,v)); \ + } else { \ + writes.push_front(QueuedWrite(a,v)); \ + } \ + if (dumpWrites) { \ + addWrite(a,v); \ + } \ +} + #endif diff --git a/src/engine/platform/ym2610b.h b/src/engine/platform/ym2610b.h index 0d1dca2b..fefb0692 100644 --- a/src/engine/platform/ym2610b.h +++ b/src/engine/platform/ym2610b.h @@ -21,7 +21,6 @@ #define _YM2610B_H #include "ym2610.h" #include "../macroInt.h" -#include #include "sound/ymfm/ymfm_opn.h" From 8bc545c8abc46e4061e2db47cc8de367dec3e93c Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 22:45:16 +0900 Subject: [PATCH 019/152] Fix compile (again) --- src/engine/platform/fmshared_OPM.h | 15 +++++++++++++++ src/engine/platform/fmshared_OPN.h | 15 +++++++++++++++ src/engine/platform/fmsharedbase.h | 15 --------------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/engine/platform/fmshared_OPM.h b/src/engine/platform/fmshared_OPM.h index c21d1c18..585a42d9 100644 --- a/src/engine/platform/fmshared_OPM.h +++ b/src/engine/platform/fmshared_OPM.h @@ -22,6 +22,21 @@ #include "fmsharedbase.h" +#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} +#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } +#define urgentWrite(a,v) if (!skipRegisterWrites) { \ + if (writes.empty()) { \ + writes.push_back(QueuedWrite(a,v)); \ + } else if (writes.size()>16 || writes.front().addrOrVal) { \ + writes.push_back(QueuedWrite(a,v)); \ + } else { \ + writes.push_front(QueuedWrite(a,v)); \ + } \ + if (dumpWrites) { \ + addWrite(a,v); \ + } \ +} + #define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) class DivPlatformOPMBase: public DivPlatformFMBase { diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index ae40748b..b3cd7c3a 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -22,6 +22,21 @@ #include "fmsharedbase.h" +#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} +#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } +#define urgentWrite(a,v) if (!skipRegisterWrites) { \ + if (writes.empty()) { \ + writes.push_back(QueuedWrite(a,v)); \ + } else if (writes.size()>16 || writes.front().addrOrVal) { \ + writes.push_back(QueuedWrite(a,v)); \ + } else { \ + writes.push_front(QueuedWrite(a,v)); \ + } \ + if (dumpWrites) { \ + addWrite(a,v); \ + } \ +} + #define CHIP_FREQBASE fmFreqBase #define CHIP_DIVIDER fmDivBase diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index 2555d267..f1312614 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -65,19 +65,4 @@ class DivPlatformFMBase: public DivDispatch { delay(0) {} }; -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } -#define urgentWrite(a,v) if (!skipRegisterWrites) { \ - if (writes.empty()) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else if (writes.size()>16 || writes.front().addrOrVal) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else { \ - writes.push_front(QueuedWrite(a,v)); \ - } \ - if (dumpWrites) { \ - addWrite(a,v); \ - } \ -} - #endif From 74e3892fd997e40148c64ce2e81c5a3f3ba9feb1 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 23:26:22 +0900 Subject: [PATCH 020/152] Finally fixed --- src/engine/platform/fmshared_OPM.h | 15 --------------- src/engine/platform/fmshared_OPN.h | 15 --------------- src/engine/platform/fmsharedbase.h | 28 ++++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/src/engine/platform/fmshared_OPM.h b/src/engine/platform/fmshared_OPM.h index 585a42d9..c21d1c18 100644 --- a/src/engine/platform/fmshared_OPM.h +++ b/src/engine/platform/fmshared_OPM.h @@ -22,21 +22,6 @@ #include "fmsharedbase.h" -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } -#define urgentWrite(a,v) if (!skipRegisterWrites) { \ - if (writes.empty()) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else if (writes.size()>16 || writes.front().addrOrVal) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else { \ - writes.push_front(QueuedWrite(a,v)); \ - } \ - if (dumpWrites) { \ - addWrite(a,v); \ - } \ -} - #define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) class DivPlatformOPMBase: public DivPlatformFMBase { diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index b3cd7c3a..ae40748b 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -22,21 +22,6 @@ #include "fmsharedbase.h" -#define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} -#define immWrite(a,v) if (!skipRegisterWrites) {writes.push_back(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } -#define urgentWrite(a,v) if (!skipRegisterWrites) { \ - if (writes.empty()) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else if (writes.size()>16 || writes.front().addrOrVal) { \ - writes.push_back(QueuedWrite(a,v)); \ - } else { \ - writes.push_front(QueuedWrite(a,v)); \ - } \ - if (dumpWrites) { \ - addWrite(a,v); \ - } \ -} - #define CHIP_FREQBASE fmFreqBase #define CHIP_DIVIDER fmDivBase diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index f1312614..64099739 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -59,6 +59,34 @@ class DivPlatformFMBase: public DivDispatch { short oldWrites[512]; short pendingWrites[512]; + inline void rWrite(unsigned short a, short v) { + if (!skipRegisterWrites) { + pendingWrites[a]=v; + } + } + inline void immWrite(unsigned short a, unsigned char v) { + if (!skipRegisterWrites) { + writes.push_back(QueuedWrite(a,v)); + if (dumpWrites) { + addWrite(a,v); + } + } + } + inline void urgentWrite(unsigned short a, unsigned char v) { + if (!skipRegisterWrites) { + if (writes.empty()) { + writes.push_back(QueuedWrite(a,v)); + } else if (writes.size()>16 || writes.front().addrOrVal) { + writes.push_back(QueuedWrite(a,v)); + } else { + writes.push_front(QueuedWrite(a,v)); + } + if (dumpWrites) { + addWrite(a,v); + } + } + } + DivPlatformFMBase(): DivDispatch(), lastBusy(0), From 44cee98868c46bdeba73e4288f800ba8920964a2 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 6 Jun 2022 23:46:33 +0900 Subject: [PATCH 021/152] Oops --- src/gui/sysConf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index fcd01e0d..e758b179 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -123,7 +123,7 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool } if (ImGui::RadioButton("Yamaha YMF281",((flags>>4)&15)==1)) { copyOfFlags=(flags&(~0xf0))|0x10; - + } if (ImGui::RadioButton("Yamaha YM2423",((flags>>4)&15)==2)) { copyOfFlags=(flags&(~0xf0))|0x20; } From 4d7c1c9e447684e5a275b8eae632cfedd85d09c9 Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Mon, 6 Jun 2022 16:49:39 +0200 Subject: [PATCH 022/152] docs update (#519) * docs update mentions of fractal, new chips documentation, and other minor stuff * add a link to the Fractal repo as suggested by @breakthetargets * better wording, less typos --- papers/doc/7-systems/c64.md | 4 +++- papers/doc/7-systems/namco.md | 13 +++++++++++++ papers/doc/7-systems/oki.md | 9 +++++++++ papers/doc/7-systems/ricoh.md | 8 ++++++++ papers/doc/7-systems/ym2612.md | 4 +++- papers/doc/7-systems/ymz280b.md | 7 +++++++ papers/doc/7-systems/zxbeep.md | 10 ++++++++++ 7 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 papers/doc/7-systems/namco.md create mode 100644 papers/doc/7-systems/oki.md create mode 100644 papers/doc/7-systems/ricoh.md create mode 100644 papers/doc/7-systems/ymz280b.md create mode 100644 papers/doc/7-systems/zxbeep.md diff --git a/papers/doc/7-systems/c64.md b/papers/doc/7-systems/c64.md index 1029eda9..9b3e8701 100644 --- a/papers/doc/7-systems/c64.md +++ b/papers/doc/7-systems/c64.md @@ -1,9 +1,11 @@ # Commodore 64 -a home computer with a synthesizer-grade sound chip of which people took decades to master. +a home computer with a synthesizer-grade sound chip of which people took decades to master. Three oscillators with four selectable waveforms, ring modulation, oscillator sync, multimode filter, ADSR envelope... very popular in Europe and mostly due to the demoscene, which stretched the machine's limbs to no end. +Two revisions do exist - 6581 (original chip) and 8580 (improved version with working waveform mixing and somewhat more consistent filter curves) + # effects - `10xx`: change wave. the following values are accepted: diff --git a/papers/doc/7-systems/namco.md b/papers/doc/7-systems/namco.md new file mode 100644 index 00000000..a856d8fb --- /dev/null +++ b/papers/doc/7-systems/namco.md @@ -0,0 +1,13 @@ +# Namco WSG | Namco C15 | Namco C30 + +a family of wavetable synth sound chips used by Namco in their arcade machines (Pacman and later). Waveforms are 4-bit, with 32-byte sample length. + +Everything starts with Namco WSG, simple 3ch wavetable with no extra frills. C15 is much more advanced sound source with 8 channels. C30 adds stereo output and noise mode. + +# effects + +-`10xx`: change waveform +-`11xx`: toggle noise mode WARNING: only on C30 + + + diff --git a/papers/doc/7-systems/oki.md b/papers/doc/7-systems/oki.md new file mode 100644 index 00000000..4b46eb21 --- /dev/null +++ b/papers/doc/7-systems/oki.md @@ -0,0 +1,9 @@ +# OKI MSM6258 | OKI MSM6295 + +MSM6258 is a single-channel ADPCM sound source developed by OKI. It allows max sample rate of 15.6 kHz... with no variable pitch. Most prominent use of this chip was Sharp X68000 computer, where it was paired with Yamaha YM2151. + +MSM6295 is an upgrade from 6258 - it provides 4 ADPCM channels, at max 32 kHz (still no variable pitch though). Between late 80s and late 90s, it was one of the most common, if not THE most common soundchip used in arcade machines (Capcom, Toaplan, Kaneko, Atari, Tecmo, the list can go on and on...) + +# effects + +- `20xx`: set chip output rate diff --git a/papers/doc/7-systems/ricoh.md b/papers/doc/7-systems/ricoh.md new file mode 100644 index 00000000..6f5405f2 --- /dev/null +++ b/papers/doc/7-systems/ricoh.md @@ -0,0 +1,8 @@ +# Ricoh RF5C68 + +YM2612's sidekick - poor man's SPC-700. 8ch PCM sample-based synthesizer used in Sega Mega CD, Fujitsu FM Towns and some of Sega's arcade machines. Supports up to 64 Kbytes of external PCM data. + +# effects + +none so far. + diff --git a/papers/doc/7-systems/ym2612.md b/papers/doc/7-systems/ym2612.md index e86dde9d..6b221201 100644 --- a/papers/doc/7-systems/ym2612.md +++ b/papers/doc/7-systems/ym2612.md @@ -2,6 +2,8 @@ one of two chips that powered the Sega Genesis. It is a six-channel, four-operator FM synthesizer. Channel #6 can be turned into 8-bit PCM player. +For 0.6pre1, Furnace can now support advanced YM2612 features that [Fractal](https://gitlab.com/Natsumi/Fractal-Sound) sound driver adds: two software-mixed PCM channels (variable pitch, sample offsets, max 13.7 khz rate) and CSM - ch3 special mode feature that can be abused to produce rudimentary speech synthesis. + # effects - `10xy`: set LFO parameters. @@ -64,4 +66,4 @@ one of two chips that powered the Sega Genesis. It is a six-channel, four-operat - `5Cxx`: set D2R/SR of operator 1. - `5Dxx`: set D2R/SR of operator 2. - `5Exx`: set D2R/SR of operator 3. -- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file +- `5Fxx`: set D2R/SR of operator 4. diff --git a/papers/doc/7-systems/ymz280b.md b/papers/doc/7-systems/ymz280b.md new file mode 100644 index 00000000..097fa6a4 --- /dev/null +++ b/papers/doc/7-systems/ymz280b.md @@ -0,0 +1,7 @@ +# Yamaha YMZ280B (PCMD8) + +8ch PCM/ADPCM sample-based synthesizer designed for use with arcade machines. Lived throughout mid to late 90s. It has 16-level stereo panning, up to 16-bit PCM and up to 16Mbytes of external PCM data. + +# effects + +none so far. diff --git a/papers/doc/7-systems/zxbeep.md b/papers/doc/7-systems/zxbeep.md new file mode 100644 index 00000000..1c6cd74f --- /dev/null +++ b/papers/doc/7-systems/zxbeep.md @@ -0,0 +1,10 @@ +# ZX Spectrum Speaker + +Rather than having a dedicated sound synthesizer, early ZX Spectrum models had one piezo beeper, controlled by Z80 CPU and ULA chip. It's capabilities should be on par with an IBM PC speaker... right? + +Not really - very soon talented programmers found out ways to output much more than one square wave channel. A lot of ZX beeper routines do exist, as of 0.6pre1 Furnace supports only one - Follin-like engine with 6 channels of narrow pulse wave and click drums. + +# effects + +- `12xx`: set pulse width +- `17xx`: trigger overlay drums. From 98f31877de839aa11fd5cae82f2667dcaf58f780 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 13:15:41 -0500 Subject: [PATCH 023/152] GUI: remove chan osc debug info --- src/gui/chanOsc.cpp | 4 ++-- src/gui/findReplace.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index fd9e2e10..5bd945f1 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -190,8 +190,8 @@ void FurnaceGUI::drawChanOsc() { needlePos-=alignment; */ - String cPhase=fmt::sprintf("%d cphase: %f",point,phase); - dl->AddText(inRect.Min,0xffffffff,cPhase.c_str()); + //String cPhase=fmt::sprintf("%d cphase: %f",point,phase); + //dl->AddText(inRect.Min,0xffffffff,cPhase.c_str()); needlePos-=displaySize; for (unsigned short i=0; i<512; i++) { diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 3a5ec75f..addc1a02 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -12,7 +12,7 @@ void FurnaceGUI::drawFindReplace() { if (!findOpen) return; ImGui::SetNextWindowSizeConstraints(ImVec2(64.0f*dpiScale,32.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale)); if (ImGui::Begin("Find/Replace",&findOpen,globalWinFlags)) { - ImGui::Text("What am I gonna do with you?"); + } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_FIND; ImGui::End(); From d3a3473f19877f3c305c4c69adab6234dfd5dd4a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 13:32:57 -0500 Subject: [PATCH 024/152] commit requested changes --- src/engine/platform/fmshared_OPN.h | 4 ++-- src/engine/platform/genesis.h | 4 ++-- src/engine/platform/ym2203.h | 4 ++-- src/engine/platform/ym2608.h | 4 ++-- src/engine/platform/ym2610.h | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index ae40748b..7632e78f 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -86,7 +86,7 @@ return 2; \ } -class DivPlatformOPNBase: public DivPlatformFMBase { +class DivPlatformOPN: public DivPlatformFMBase { protected: const unsigned char ADDR_MULT_DT=0x30; const unsigned char ADDR_TL=0x40; @@ -108,7 +108,7 @@ class DivPlatformOPNBase: public DivPlatformFMBase { const double fmDivBase; const unsigned char ayDiv; - DivPlatformOPNBase(double f=9440540.0, double d=72, unsigned char a=32): + DivPlatformOPN(double f=9440540.0, double d=72, unsigned char a=32): DivPlatformFMBase(), fmFreqBase(f), fmDivBase(d), diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index ace427f6..7d2004f3 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -29,7 +29,7 @@ class DivYM2612Interface: public ymfm::ymfm_interface { }; -class DivPlatformGenesis: public DivPlatformOPNBase { +class DivPlatformGenesis: public DivPlatformOPN { protected: const unsigned short chanOffs[6]={ 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 @@ -155,7 +155,7 @@ class DivPlatformGenesis: public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformGenesis(): - DivPlatformOPNBase(9440540.0, 72, 32) {} + DivPlatformOPN(9440540.0, 72, 32) {} ~DivPlatformGenesis(); }; #endif diff --git a/src/engine/platform/ym2203.h b/src/engine/platform/ym2203.h index c650583d..6d7bc420 100644 --- a/src/engine/platform/ym2203.h +++ b/src/engine/platform/ym2203.h @@ -29,7 +29,7 @@ class DivYM2203Interface: public ymfm::ymfm_interface { }; -class DivPlatformYM2203: public DivPlatformOPNBase { +class DivPlatformYM2203: public DivPlatformOPN { protected: const unsigned short chanOffs[3]={ 0x00, 0x01, 0x02 @@ -118,7 +118,7 @@ class DivPlatformYM2203: public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2203(): - DivPlatformOPNBase(4720270.0, 36, 16) {} + DivPlatformOPN(4720270.0, 36, 16) {} ~DivPlatformYM2203(); }; #endif diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index 21eb487f..c1f43f4d 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -34,7 +34,7 @@ class DivYM2608Interface: public ymfm::ymfm_interface { DivYM2608Interface(): adpcmBMem(NULL), sampleBank(0) {} }; -class DivPlatformYM2608: public DivPlatformOPNBase { +class DivPlatformYM2608: public DivPlatformOPN { protected: const unsigned short chanOffs[6]={ 0x00, 0x01, 0x02, 0x100, 0x101, 0x102 @@ -137,7 +137,7 @@ class DivPlatformYM2608: public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2608(): - DivPlatformOPNBase(9440540.0, 72, 32) {} + DivPlatformOPN(9440540.0, 72, 32) {} ~DivPlatformYM2608(); }; #endif diff --git a/src/engine/platform/ym2610.h b/src/engine/platform/ym2610.h index 069707dd..dde7ed10 100644 --- a/src/engine/platform/ym2610.h +++ b/src/engine/platform/ym2610.h @@ -34,7 +34,7 @@ class DivYM2610Interface: public ymfm::ymfm_interface { DivYM2610Interface(): adpcmAMem(NULL), adpcmBMem(NULL), sampleBank(0) {} }; -class DivPlatformYM2610Base: public DivPlatformOPNBase { +class DivPlatformYM2610Base: public DivPlatformOPN { protected: unsigned char* adpcmAMem; size_t adpcmAMemLen; @@ -50,7 +50,7 @@ class DivPlatformYM2610Base: public DivPlatformOPNBase { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2610Base(): - DivPlatformOPNBase(9440540.0, 72, 32) {} + DivPlatformOPN(9440540.0, 72, 32) {} }; class DivPlatformYM2610: public DivPlatformYM2610Base { From 6dc408d99c327df3d39a1ef7ff84bbc2760ae8dd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 15:05:08 -0500 Subject: [PATCH 025/152] SAA1099: remove MAME core closes #529 the MAME core is inaccurate. it doesn't emulate envelope too well. --- src/engine/dispatchContainer.cpp | 3 -- src/engine/platform/saa.cpp | 69 ++++---------------------------- src/engine/platform/saa.h | 12 ------ src/gui/gui.h | 2 - src/gui/settings.cpp | 12 ------ 5 files changed, 7 insertions(+), 91 deletions(-) diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index a23e4e8f..227f6067 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -312,10 +312,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do dispatch=new DivPlatformTX81Z; break; case DIV_SYSTEM_SAA1099: { - int saaCore=eng->getConfInt("saaCore",1); - if (saaCore<0 || saaCore>2) saaCore=0; dispatch=new DivPlatformSAA1099; - ((DivPlatformSAA1099*)dispatch)->setCore((DivSAACores)saaCore); break; } case DIV_SYSTEM_PCSPKR: diff --git a/src/engine/platform/saa.cpp b/src/engine/platform/saa.cpp index dc9a13e8..c562838a 100644 --- a/src/engine/platform/saa.cpp +++ b/src/engine/platform/saa.cpp @@ -71,28 +71,6 @@ const char* DivPlatformSAA1099::getEffectName(unsigned char effect) { return NULL; } -void DivPlatformSAA1099::acquire_mame(short* bufL, short* bufR, size_t start, size_t len) { - if (saaBufLenClear(); - break; - case DIV_SAA_CORE_E: - break; - } + saa_saaSound->Clear(); for (int i=0; i<6; i++) { chan[i]=DivPlatformSAA1099::Channel(); chan[i].std.setEngine(parent); @@ -500,16 +459,8 @@ void DivPlatformSAA1099::setFlags(unsigned int flags) { oscBuf[i]->rate=rate; } - switch (core) { - case DIV_SAA_CORE_MAME: - break; - case DIV_SAA_CORE_SAASOUND: - saa_saaSound->SetClockRate(chipClock); - saa_saaSound->SetSampleRate(rate); - break; - case DIV_SAA_CORE_E: - break; - } + saa_saaSound->SetClockRate(chipClock); + saa_saaSound->SetSampleRate(rate); } void DivPlatformSAA1099::poke(unsigned int addr, unsigned short val) { @@ -520,10 +471,6 @@ void DivPlatformSAA1099::poke(std::vector& wlist) { for (DivRegWrite& i: wlist) rWrite(i.addr,i.val); } -void DivPlatformSAA1099::setCore(DivSAACores c) { - core=c; -} - int DivPlatformSAA1099::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { parent=p; dumpWrites=false; @@ -533,11 +480,9 @@ int DivPlatformSAA1099::init(DivEngine* p, int channels, int sugRate, unsigned i isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - if (core==DIV_SAA_CORE_SAASOUND) { - saa_saaSound=CreateCSAASound(); - saa_saaSound->SetOversample(1); - saa_saaSound->SetSoundParameters(SAAP_NOFILTER|SAAP_16BIT|SAAP_STEREO); - } + saa_saaSound=CreateCSAASound(); + saa_saaSound->SetOversample(1); + saa_saaSound->SetSoundParameters(SAAP_NOFILTER|SAAP_16BIT|SAAP_STEREO); setFlags(flags); saaBufLen=65536; for (int i=0; i<2; i++) saaBuf[i]=new short[saaBufLen]; diff --git a/src/engine/platform/saa.h b/src/engine/platform/saa.h index fafb36d7..0efd498d 100644 --- a/src/engine/platform/saa.h +++ b/src/engine/platform/saa.h @@ -22,15 +22,8 @@ #include "../dispatch.h" #include "../macroInt.h" #include -#include "sound/saa1099.h" #include "../../../extern/SAASound/src/SAASound.h" -enum DivSAACores { - DIV_SAA_CORE_MAME=0, - DIV_SAA_CORE_SAASOUND, - DIV_SAA_CORE_E -}; - class DivPlatformSAA1099: public DivDispatch { protected: struct Channel { @@ -58,8 +51,6 @@ class DivPlatformSAA1099: public DivDispatch { QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} }; std::queue writes; - DivSAACores core; - saa1099_device saa; CSAASound* saa_saaSound; unsigned char regPool[32]; unsigned char lastBusy; @@ -83,9 +74,7 @@ class DivPlatformSAA1099: public DivDispatch { unsigned char saaNoise[2]; friend void putDispatchChan(void*,int,int); - void acquire_e(short* bufL, short* bufR, size_t start, size_t len); void acquire_saaSound(short* bufL, short* bufR, size_t start, size_t len); - void acquire_mame(short* bufL, short* bufR, size_t start, size_t len); public: void acquire(short* bufL, short* bufR, size_t start, size_t len); @@ -99,7 +88,6 @@ class DivPlatformSAA1099: public DivDispatch { void forceIns(); void tick(bool sysTick=true); void muteChannel(int ch, bool mute); - void setCore(DivSAACores core); void setFlags(unsigned int flags); bool isStereo(); int getPortaFloor(int ch); diff --git a/src/gui/gui.h b/src/gui/gui.h index a1ff2b3d..ab34af1e 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -873,7 +873,6 @@ class FurnaceGUI { int arcadeCore; int ym2612Core; int snCore; - int saaCore; int nesCore; int fdsCore; int pcSpeakerOutMethod; @@ -974,7 +973,6 @@ class FurnaceGUI { arcadeCore(0), ym2612Core(0), snCore(0), - saaCore(1), nesCore(0), fdsCore(0), pcSpeakerOutMethod(0), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index eef892ab..84f33db5 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -84,11 +84,6 @@ const char* snCores[]={ "Nuked-PSG Mod" }; -const char* saaCores[]={ - "MAME", - "SAASound" -}; - const char* nesCores[]={ "puNES", "NSFplay" @@ -899,10 +894,6 @@ void FurnaceGUI::drawSettings() { ImGui::SameLine(); ImGui::Combo("##SNCore",&settings.snCore,snCores,2); - ImGui::Text("SAA1099 core"); - ImGui::SameLine(); - ImGui::Combo("##SAACore",&settings.saaCore,saaCores,2); - ImGui::Text("NES core"); ImGui::SameLine(); ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2); @@ -1954,7 +1945,6 @@ void FurnaceGUI::syncSettings() { settings.arcadeCore=e->getConfInt("arcadeCore",0); settings.ym2612Core=e->getConfInt("ym2612Core",0); settings.snCore=e->getConfInt("snCore",0); - settings.saaCore=e->getConfInt("saaCore",1); settings.nesCore=e->getConfInt("nesCore",0); settings.fdsCore=e->getConfInt("fdsCore",0); settings.pcSpeakerOutMethod=e->getConfInt("pcSpeakerOutMethod",0); @@ -2048,7 +2038,6 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.arcadeCore,0,1); clampSetting(settings.ym2612Core,0,1); clampSetting(settings.snCore,0,1); - clampSetting(settings.saaCore,0,1); clampSetting(settings.nesCore,0,1); clampSetting(settings.fdsCore,0,1); clampSetting(settings.pcSpeakerOutMethod,0,4); @@ -2171,7 +2160,6 @@ void FurnaceGUI::commitSettings() { e->setConf("arcadeCore",settings.arcadeCore); e->setConf("ym2612Core",settings.ym2612Core); e->setConf("snCore",settings.snCore); - e->setConf("saaCore",settings.saaCore); e->setConf("nesCore",settings.nesCore); e->setConf("fdsCore",settings.fdsCore); e->setConf("pcSpeakerOutMethod",settings.pcSpeakerOutMethod); From eac59604dfe7ae6d3d5cdfcaf24a2ac19812f450 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 18:04:19 -0500 Subject: [PATCH 026/152] fix edit menu being too big --- src/gui/gui.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 20d3436b..8ddd5901 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1900,11 +1900,6 @@ void FurnaceGUI::editOptions(bool topMenu) { char id[4096]; editOptsVisible=true; - if (topMenu) { - ImGui::Text("..."); - ImGui::Separator(); - } - if (ImGui::MenuItem("cut",BIND_FOR(GUI_ACTION_PAT_CUT))) doCopy(true); if (ImGui::MenuItem("copy",BIND_FOR(GUI_ACTION_PAT_COPY))) doCopy(false); if (ImGui::MenuItem("paste",BIND_FOR(GUI_ACTION_PAT_PASTE))) doPaste(); @@ -2946,6 +2941,8 @@ bool FurnaceGUI::loop() { ImGui::EndMenu(); } if (ImGui::BeginMenu("edit")) { + ImGui::Text("..."); + ImGui::Separator(); if (ImGui::MenuItem("undo",BIND_FOR(GUI_ACTION_UNDO))) doUndo(); if (ImGui::MenuItem("redo",BIND_FOR(GUI_ACTION_REDO))) doRedo(); ImGui::Separator(); From 1b315266e1d4a305c565051240124b81cfde44f1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 18:04:27 -0500 Subject: [PATCH 027/152] update bruno_time.fur --- demos/bruno_time.fur | Bin 10311 -> 10806 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/bruno_time.fur b/demos/bruno_time.fur index 6d5756d71fb618e53f13a14528e267f30dadc579..0ad2d841eae8b1a9efa9c8e1a7cd6cf684da8e8d 100644 GIT binary patch literal 10806 zcmV-6D#_J&ob7!HbX?V$=Brhu(o&La%bRSMWy`w>1egRm35JBlge^D(NWvo9a;#u1 z+Ll8zS^CbL)8|Z|>F(*7PG=_cbP@st2ur}w#;j&>3>e$s9q*eg%aUcSCCOUn`@ehN zt5=d9xTebkoIx*=N>%T>|Nh_q|L?<@d)2BH%gYy4#P6+IylPp++(njU#jWJm{2Q*i zkuSnwpJiQh#XKuwMGE|Q!)F!X=YO(3{wqH3*x1b)<3MYtl$2`vYvgwvflieWo`Rw%R2U-Evx-+EGzW4mR0T)nty;dgdPVu7dn#7MS5__mQM7bv`LbnIrSXLi z#4o??+jHVeD$1)@tpK&kv1rty;D?zOW)be^JG~ z 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 AApigX literal 10311 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 Wcqf?5?;VV*_9oF7eBq57)Bgjlz_}{` From 21042a45db9de9aefeb44a85bcb977c9f4bbb0b3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 18:15:35 -0500 Subject: [PATCH 028/152] add instruments section --- instruments/FM/default.fui | Bin 0 -> 1668 bytes instruments/OPL/key.fui | Bin 0 -> 1664 bytes instruments/OPLL/Weeppiko-piano_guitar_idk.fui | Bin 0 -> 1641 bytes instruments/README.md | 17 +++++++++++++++++ instruments/other/compatibility.fui | Bin 0 -> 1802 bytes 5 files changed, 17 insertions(+) create mode 100644 instruments/FM/default.fui create mode 100644 instruments/OPL/key.fui create mode 100644 instruments/OPLL/Weeppiko-piano_guitar_idk.fui create mode 100644 instruments/README.md create mode 100644 instruments/other/compatibility.fui diff --git a/instruments/FM/default.fui b/instruments/FM/default.fui new file mode 100644 index 0000000000000000000000000000000000000000..6b8360d4bdd5dcbcec5ca637f8b4a243b37f6944 GIT binary patch literal 1668 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpQc}|rOLIyX7+4q>m_UN^ z9IVXzS_}-VAPyEF&%(&aZGcCfi;;z22#ZFjkUS?NCqLLGtZMifm>hu4VqoBaVjzVC z)HVi@rB3l0IXlNtCJvQsM=7}yyYm_P#jOw8>3 zVhjwdAPxf~m_#P{nHhPwfdUYDWEluso{N!%UkFniCL+(t$jJ}32_}L<^D{6xfNkXf z3WG2zkVoa>=lv%Du<1tEf*AnVbYT}mH;WJ-VhVXS5;7ZIek9n1?&smo$DRriqLlg{ zVG@4Us6D75fCw!Iwgqer%nTrD1_fq>I1U!7F{JZw7)zuu-hzmqA6QiYF)jcAlI|^r literal 0 HcmV?d00001 diff --git a/instruments/OPLL/Weeppiko-piano_guitar_idk.fui b/instruments/OPLL/Weeppiko-piano_guitar_idk.fui new file mode 100644 index 0000000000000000000000000000000000000000..1db0556cdc045aa9dc6864d0de6cffb6fc65244e GIT binary patch literal 1641 zcmdOOD=o@POioqE%quP_($kG%U|>)HVi@rB3l0IXqZoJ@3NjP(^7Ye8GfNVS7#P?Y z8JIva{H(0Z%o+>~tPC6=E(0T&L=gOpjBMOME=(RF17XQ?F|zOrp^GB;@|=vE{9v09 zVn{501||ovogmvGEVzqAl$?V2s6bTgT4&Ys(!OXw_c*eL>>@izAL$`o zB$d!cwvaRq91)mEs-8;x1mu$6$s@%Wjo?)lq&-S_Zr|GN04{?AjN jKsguu7ua+A%z$JFXqBl^5A(dIj;>Rci-_amCO*OyAOJFF literal 0 HcmV?d00001 From 575c9708135723156774445be8d3f4e86911116b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 18:17:11 -0500 Subject: [PATCH 029/152] update instrument submission guidelines --- instruments/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/instruments/README.md b/instruments/README.md index 191dba83..fdfae2f3 100644 --- a/instruments/README.md +++ b/instruments/README.md @@ -10,8 +10,9 @@ these are organized in the following categories: # submit instruments -you may submit your own instruments by creating a pull request or contacting me! +you may submit your own instruments by creating a pull request or contacting me! the only guidelines are: -the only guideline is that I (strongly) prefer original instruments. +- any format Furnace is able to load is accepted. +- I (strongly) prefer original instruments. thanks for your contribution! From 507ad335b168f232c06e887491fbc28ffbe815a3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 18:18:45 -0500 Subject: [PATCH 030/152] add instruments to make install --- .github/workflows/build.yml | 2 +- CMakeLists.txt | 1 + scripts/release-win32.sh | 3 ++- scripts/release-win64.sh | 3 ++- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8fd08833..9d130246 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -243,7 +243,7 @@ jobs: cp -v ../LICENSE LICENSE.txt cp -v ../README.md README.txt - cp -vr ../{papers,demos} ../${binPath}/furnace.exe ./ + cp -vr ../{papers,demos,instruments} ../${binPath}/furnace.exe ./ popd diff --git a/CMakeLists.txt b/CMakeLists.txt index fe6a12fe..d8491b45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -633,6 +633,7 @@ if (NOT ANDROID OR TERMUX) install(DIRECTORY papers DESTINATION ${CMAKE_INSTALL_DOCDIR}) install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/furnace) install(DIRECTORY demos DESTINATION ${CMAKE_INSTALL_DATADIR}/furnace) + install(DIRECTORY instruments DESTINATION ${CMAKE_INSTALL_DATADIR}/furnace) foreach(num 16 32 64 128 256 512) set(res ${num}x${num}) install(FILES res/icon.iconset/icon_${res}.png RENAME furnace.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${res}/apps) diff --git a/scripts/release-win32.sh b/scripts/release-win32.sh index 2257a595..7b3c76d7 100755 --- a/scripts/release-win32.sh +++ b/scripts/release-win32.sh @@ -29,8 +29,9 @@ cp ../../win32build/furnace.exe . || exit 1 cp ../../README.md README.txt || exit 1 cp -r ../../papers papers || exit 1 cp -r ../../demos demos || exit 1 +cp -r ../../instruments instruments || exit 1 -zip -r furnace.zip LICENSE.txt furnace.exe README.txt papers demos +zip -r furnace.zip LICENSE.txt furnace.exe README.txt papers demos instruments furName=$(git describe --tags | sed "s/v0/0/") diff --git a/scripts/release-win64.sh b/scripts/release-win64.sh index db580e09..75a07f51 100755 --- a/scripts/release-win64.sh +++ b/scripts/release-win64.sh @@ -29,8 +29,9 @@ cp ../../winbuild/furnace.exe . || exit 1 cp ../../README.md README.txt || exit 1 cp -r ../../papers papers || exit 1 cp -r ../../demos demos || exit 1 +cp -r ../../instruments instruments || exit 1 -zip -r furnace.zip LICENSE.txt furnace.exe README.txt papers demos +zip -r furnace.zip LICENSE.txt furnace.exe README.txt papers demos instruments furName=$(git describe --tags | sed "s/v0/0/") From 3e953f57b368f679c570ed1f95b9054c2dc97517 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 7 Jun 2022 12:57:09 +0900 Subject: [PATCH 031/152] Prepare for TI-99/4A support only works on MAME core only for now. --- src/engine/platform/arcade.h | 2 +- src/engine/platform/fmshared_OPM.h | 4 ++-- src/engine/platform/opl.cpp | 2 +- src/engine/platform/sms.cpp | 20 +++++++++++++++++++- src/engine/platform/sms.h | 1 + src/engine/platform/sound/sn76496.cpp | 16 ++++++++-------- src/engine/platform/tx81z.h | 2 +- src/engine/platform/ym2203.cpp | 2 +- src/engine/platform/ym2608.cpp | 2 +- src/engine/song.h | 3 +++ src/gui/presets.cpp | 6 ++++++ src/gui/sysConf.cpp | 9 +++++++++ 12 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/engine/platform/arcade.h b/src/engine/platform/arcade.h index 00af8f25..daa88362 100644 --- a/src/engine/platform/arcade.h +++ b/src/engine/platform/arcade.h @@ -30,7 +30,7 @@ class DivArcadeInterface: public ymfm::ymfm_interface { }; -class DivPlatformArcade: public DivPlatformOPMBase { +class DivPlatformArcade: public DivPlatformOPM { protected: const unsigned short chanOffs[8]={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 diff --git a/src/engine/platform/fmshared_OPM.h b/src/engine/platform/fmshared_OPM.h index c21d1c18..97844656 100644 --- a/src/engine/platform/fmshared_OPM.h +++ b/src/engine/platform/fmshared_OPM.h @@ -24,7 +24,7 @@ #define NOTE_LINEAR(x) (((x)<<6)+baseFreqOff+log2(parent->song.tuning/440.0)*12.0*64.0) -class DivPlatformOPMBase: public DivPlatformFMBase { +class DivPlatformOPM: public DivPlatformFMBase { protected: const unsigned char ADDR_MULT_DT=0x40; const unsigned char ADDR_TL=0x60; @@ -41,7 +41,7 @@ class DivPlatformOPMBase: public DivPlatformFMBase { 0x00, 0x08, 0x10, 0x18 }; - DivPlatformOPMBase(): + DivPlatformOPM(): DivPlatformFMBase() {} }; diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 43ce2f5f..45cbd619 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -1723,7 +1723,7 @@ void DivPlatformOPL::setFlags(unsigned int flags) { chipClock=3000000.0; break; case 0x04: - chipClock=31948800/8; + chipClock=38400*13*8; // 31948800/8 break; case 0x05: chipClock=3500000.0; diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index f6624b97..e5be2304 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -472,8 +472,12 @@ void DivPlatformSMS::setFlags(unsigned int flags) { case 0x0101: chipClock=2000000; break; + case 0x0102: + chipClock=COLOR_NTSC/8.0; + break; } resetPhase=!(flags&16); + divider=16; noiseDivider=64; if (sn!=NULL) delete sn; switch (flags&0xcc) { @@ -524,8 +528,22 @@ void DivPlatformSMS::setFlags(unsigned int flags) { noiseDivider=64; stereo=false; break; + case 0x80: // TI SN94624 + sn=new sn94624_device(); + isRealSN=true; + noiseDivider=60; + stereo=false; + divider=2; + break; + case 0x84: // TI SN76494 + sn=new sn76494_device(); + isRealSN=false; // TODO + noiseDivider=68; + stereo=false; + divider=2; + break; } - rate=nuked?chipClock/16:chipClock/2; + rate=chipClock/divider; for (int i=0; i<4; i++) { oscBuf[i]->rate=rate; } diff --git a/src/engine/platform/sms.h b/src/engine/platform/sms.h index c4e4179f..42399577 100644 --- a/src/engine/platform/sms.h +++ b/src/engine/platform/sms.h @@ -63,6 +63,7 @@ class DivPlatformSMS: public DivDispatch { size_t snBufLen; unsigned char oldValue; unsigned char snNoiseMode; + int divider=16; int noiseDivider=64; bool updateSNMode; bool resetPhase; diff --git a/src/engine/platform/sound/sn76496.cpp b/src/engine/platform/sound/sn76496.cpp index 5062ea7a..afb82ad3 100644 --- a/src/engine/platform/sound/sn76496.cpp +++ b/src/engine/platform/sound/sn76496.cpp @@ -171,22 +171,22 @@ sn76496_base_device::sn76496_base_device( } sn76496_device::sn76496_device() - : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 8, false, true) + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 1/*8*/, false, true) { } y2404_device::y2404_device() - : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 8, false, true) + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 1/*8*/, false, true) { } sn76489_device::sn76489_device() - : sn76496_base_device(0x4000, 0x01, 0x02, true, false, 8, false, true) + : sn76496_base_device(0x4000, 0x01, 0x02, true, false, 1/*8*/, false, true) { } sn76489a_device::sn76489a_device() - : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 8, false, true) + : sn76496_base_device(0x10000, 0x04, 0x08, false, false, 1/*8*/, false, true) { } @@ -201,22 +201,22 @@ sn94624_device::sn94624_device() } ncr8496_device::ncr8496_device() - : sn76496_base_device(0x8000, 0x02, 0x20, true, false, 8, true, true) + : sn76496_base_device(0x8000, 0x02, 0x20, true, false, 1/*8*/, true, true) { } pssj3_device::pssj3_device() - : sn76496_base_device(0x8000, 0x02, 0x20, false, false, 8, true, true) + : sn76496_base_device(0x8000, 0x02, 0x20, false, false, 1/*8*/, true, true) { } gamegear_device::gamegear_device() - : sn76496_base_device(0x8000, 0x01, 0x08, true, true, 8, false, false) + : sn76496_base_device(0x8000, 0x01, 0x08, true, true, 1/*8*/, false, false) { } segapsg_device::segapsg_device() - : sn76496_base_device(0x8000, 0x01, 0x08, true, false, 8, false, false) + : sn76496_base_device(0x8000, 0x01, 0x08, true, false, 1/*8*/, false, false) { } diff --git a/src/engine/platform/tx81z.h b/src/engine/platform/tx81z.h index 16167ede..e867416c 100644 --- a/src/engine/platform/tx81z.h +++ b/src/engine/platform/tx81z.h @@ -29,7 +29,7 @@ class DivTXInterface: public ymfm::ymfm_interface { }; -class DivPlatformTX81Z: public DivPlatformOPMBase { +class DivPlatformTX81Z: public DivPlatformOPM { protected: const unsigned short chanOffs[8]={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 3176a1a4..42314615 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -1027,7 +1027,7 @@ void DivPlatformYM2203::setFlags(unsigned int flags) { chipClock=3000000.0; break; case 0x04: - chipClock=31948800/8; + chipClock=38400*13*8; // 31948800/8 break; case 0x05: chipClock=3000000.0/2.0; diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index d4871486..875f4148 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1400,7 +1400,7 @@ void DivPlatformYM2608::setFlags(unsigned int flags) { chipClock=8000000.0; break; case 0x01: - chipClock=31948800/4; + chipClock=38400*13*16; // 31948800/4 break; } rate=fm->sample_rate(chipClock); diff --git a/src/engine/song.h b/src/engine/song.h index a5b68c26..6bbb00cf 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -244,6 +244,7 @@ struct DivSong { // - 0003: 1.79MHz (half NTSC) // - 0100: 3MHz // - 0101: 2MHz + // - 0102: 447KHz (NTSC / 8) // - bit 2-3, 6-7: chip type // - 00: Sega VDP (16-bit noise) // - 04: real SN76489 (15-bit noise) @@ -253,6 +254,8 @@ struct DivSong { // - 44: real SN76496 (17-bit noise) // - 48: NCR 8496 (16-bit noise) // - 4c: Tandy PSSJ-3 (16-bit noise) + // - 80: real SN94624 (15-bit noise) + // - 84: real SN76494 (17-bit noise) // - bit 4: disable noise phase reset // - YM2612/YM3438: // - bit 0-30: clock rate diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index a841f15b..d0e63c11 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1211,6 +1211,12 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "TI-99/4A", { + DIV_SYSTEM_SMS, 64, 0, 0x182, // SN94624 447KHz + 0 + } + )); sysCategories.push_back(cat); cat=FurnaceGUISysCategory("Arcade systems","INSERT COIN"); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index e758b179..02d06db3 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -69,6 +69,9 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool if (ImGui::RadioButton("2MHz (Sega System 1)",(flags&0xff03)==0x0101)) { copyOfFlags=(flags&(~0xff03))|0x0101; } + if (ImGui::RadioButton("447KHz (TI-99/4A)",(flags&0xff03)==0x0102)) { + copyOfFlags=(flags&(~0xff03))|0x0102; + } ImGui::Text("Chip type:"); if (ImGui::RadioButton("Sega VDP/Master System",(flags&0xcc)==0x00)) { copyOfFlags=(flags&(~0xcc))|0x00; @@ -94,6 +97,12 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool if (ImGui::RadioButton("Tandy PSSJ 3-voice sound",(flags&0xcc)==0x4c)) { copyOfFlags=(flags&(~0xcc))|0x4c; } + if (ImGui::RadioButton("TI SN94624",(flags&0xcc)==0x80)) { + copyOfFlags=(flags&(~0xcc))|0x80; + } + if (ImGui::RadioButton("TI SN76494",(flags&0xcc)==0x84)) { + copyOfFlags=(flags&(~0xcc))|0x84; + } bool noPhaseReset=flags&16; if (ImGui::Checkbox("Disable noise period change phase reset",&noPhaseReset)) { copyOfFlags=(flags&(~16))|(noPhaseReset<<4); From a30091675335b7ff639817dcb3d29afbbe1a47b8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 6 Jun 2022 23:46:15 -0500 Subject: [PATCH 032/152] GUI: fix effect val cell spacing not beinghPlease enter the commit message for your changes. Lines starting --- src/gui/settings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 84f33db5..ea1d9274 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -2025,6 +2025,7 @@ void FurnaceGUI::syncSettings() { settings.insCellSpacing=e->getConfInt("insCellSpacing",0); settings.volCellSpacing=e->getConfInt("volCellSpacing",0); settings.effectCellSpacing=e->getConfInt("effectCellSpacing",0); + settings.effectValCellSpacing=e->getConfInt("effectValCellSpacing",0); settings.doubleClickColumn=e->getConfInt("doubleClickColumn",1); settings.blankIns=e->getConfInt("blankIns",0); From 7bbfe3af7c8cab34ca65d9416e5dd0cedebc7d1e Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 7 Jun 2022 23:59:50 +0900 Subject: [PATCH 033/152] Fix per-channel osc --- src/engine/platform/sms.cpp | 24 ++++++++++++++---------- src/engine/platform/sound/sn76496.cpp | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index e5be2304..35bb9c40 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -101,7 +101,20 @@ void DivPlatformSMS::acquire_mame(short* bufL, short* bufR, size_t start, size_t sn->write(w.val); writes.pop(); } - sn->sound_stream_update(snBuf,len); + for (size_t h=0; hsound_stream_update(outs,1); + for (int i=0; i<4; i++) { + if (isMuted[i]) { + oscBuf[i]->data[oscBuf[i]->needle++]=0; + } else { + oscBuf[i]->data[oscBuf[i]->needle++]=sn->get_channel_output(i); + } + } + } if (stereo) { for (size_t i=0; idata[oscBuf[i]->needle++]=0; - } else { - oscBuf[i]->data[oscBuf[i]->needle++]=sn->get_channel_output(i); - } - } - } } void DivPlatformSMS::acquire(short* bufL, short* bufR, size_t start, size_t len) { diff --git a/src/engine/platform/sound/sn76496.cpp b/src/engine/platform/sound/sn76496.cpp index afb82ad3..4bbb5848 100644 --- a/src/engine/platform/sound/sn76496.cpp +++ b/src/engine/platform/sound/sn76496.cpp @@ -411,7 +411,7 @@ void sn76496_base_device::sound_stream_update(short** outputs, int outLen) if (m_negate) { out = -out; out2 = -out2; } outputs[0][sampindex]=out; - if (m_stereo) + if (m_stereo && (outputs[1] != nullptr)) outputs[1][sampindex]=out; } } From aa09ffeedda51919d732a53d3d93274024415f21 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 7 Jun 2022 13:49:12 -0500 Subject: [PATCH 034/152] GUI: find and replace, part 1 it does not work yet --- src/gui/findReplace.cpp | 65 ++++++++++++++++++++++++++++++++++++++++- src/gui/gui.cpp | 2 ++ src/gui/gui.h | 46 +++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index addc1a02..1d83ab4e 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -3,6 +3,16 @@ #include "IconsFontAwesome4.h" #include "misc/cpp/imgui_stdlib.h" +const char* queryModes[GUI_QUERY_MAX]={ + "ignore", + "equals", + "not equal", + "between", + "not between", + "any", + "none" +}; + void FurnaceGUI::drawFindReplace() { if (nextWindow==GUI_WINDOW_FIND) { findOpen=true; @@ -12,7 +22,60 @@ void FurnaceGUI::drawFindReplace() { if (!findOpen) return; ImGui::SetNextWindowSizeConstraints(ImVec2(64.0f*dpiScale,32.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale)); if (ImGui::Begin("Find/Replace",&findOpen,globalWinFlags)) { - + if (curQuery.empty()) { + curQuery.push_back(FurnaceGUIFindQuery()); + } + ImGui::Text("Find"); + for (FurnaceGUIFindQuery& i: curQuery) { + if (ImGui::BeginTable("FindRep",4,ImGuiTableFlags_BordersOuter)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.25); + ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.25); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Note"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##NCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Ins"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##ICondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Volume"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##VCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + + for (int j=0; jgetConfBool("logOpen",false); effectListOpen=e->getConfBool("effectListOpen",false); subSongsOpen=e->getConfBool("subSongsOpen",true); + findOpen=e->getConfBool("findOpen",false); tempoView=e->getConfBool("tempoView",true); waveHex=e->getConfBool("waveHex",false); @@ -4253,6 +4254,7 @@ bool FurnaceGUI::finish() { e->setConf("logOpen",logOpen); e->setConf("effectListOpen",effectListOpen); e->setConf("subSongsOpen",subSongsOpen); + e->setConf("findOpen",findOpen); // commit last window size e->setConf("lastWindowWidth",scrW); diff --git a/src/gui/gui.h b/src/gui/gui.h index ab34af1e..23eb9e1f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -803,6 +803,50 @@ struct FurnaceGUIMacroDesc { } }; +enum FurnaceGUIFindQueryModes { + GUI_QUERY_IGNORE=0, + GUI_QUERY_MATCH, + GUI_QUERY_MATCH_NOT, + GUI_QUERY_RANGE, + GUI_QUERY_RANGE_NOT, + GUI_QUERY_ANY, + GUI_QUERY_NONE, + + GUI_QUERY_MAX +}; + +struct FurnaceGUIFindQuery { + int noteMode, insMode, volMode, effectCount; + int effectMode[8]; + int effectValMode[8]; + int note, noteMax; + unsigned char ins, insMax; + unsigned char vol, volMax; + unsigned char effect[8]; + unsigned char effectMax[8]; + unsigned char effectVal[8]; + unsigned char effectValMax[8]; + + FurnaceGUIFindQuery(): + noteMode(GUI_QUERY_IGNORE), + insMode(GUI_QUERY_IGNORE), + volMode(GUI_QUERY_IGNORE), + effectCount(0), + note(0), + noteMax(0), + ins(0), + insMax(0), + vol(0), + volMax(0) { + memset(effectMode,0,8*sizeof(int)); + memset(effectValMode,0,8*sizeof(int)); + memset(effect,0,8); + memset(effectMax,0,8); + memset(effectVal,0,8); + memset(effectValMax,0,8); + } +}; + class FurnaceGUI { DivEngine* e; @@ -1117,6 +1161,8 @@ class FurnaceGUI { std::vector pgProgram; int pgSys, pgAddr, pgVal; + std::vector curQuery; + struct ActiveNote { int chan; int note; From 95dd07742fcea3a17a6986566a6f428f7945a0e5 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 7 Jun 2022 13:55:10 -0500 Subject: [PATCH 035/152] CI: only upload artifacts for master branch --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d130246..7e060924 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -278,6 +278,7 @@ jobs: popd - name: Upload artifact + if: ${{ github.repository == 'tildearrow/furnace' && github.ref_name == 'master' }} uses: actions/upload-artifact@v3 with: name: ${{ steps.package-identify.outputs.id }} From bfbbdbf1d6e7749ef494abc7a3e99788de2c4458 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 7 Jun 2022 18:51:18 -0500 Subject: [PATCH 036/152] GUI: find and replace, part 2 still does not work --- src/gui/findReplace.cpp | 291 +++++++++++++++++++++++++++++++++++++++- src/gui/gui.h | 11 ++ 2 files changed, 296 insertions(+), 6 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 1d83ab4e..a4da0128 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -2,6 +2,7 @@ #include "imgui.h" #include "IconsFontAwesome4.h" #include "misc/cpp/imgui_stdlib.h" +#include "guiConst.h" const char* queryModes[GUI_QUERY_MAX]={ "ignore", @@ -13,6 +14,15 @@ const char* queryModes[GUI_QUERY_MAX]={ "none" }; +const char* queryReplaceModes[GUI_QUERY_REPLACE_MAX]={ + "set", + "add", + "clear" +}; + +#define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) +#define SECOND_VISIBLE(x) (x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) + void FurnaceGUI::drawFindReplace() { if (nextWindow==GUI_WINDOW_FIND) { findOpen=true; @@ -25,55 +35,324 @@ void FurnaceGUI::drawFindReplace() { if (curQuery.empty()) { curQuery.push_back(FurnaceGUIFindQuery()); } - ImGui::Text("Find"); + int index=0; + int eraseIndex=-1; + char tempID[1024]; for (FurnaceGUIFindQuery& i: curQuery) { if (ImGui::BeginTable("FindRep",4,ImGuiTableFlags_BordersOuter)) { ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.25); ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.25); + ImGui::PushID(index); ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::Text("Note"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("##NCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.noteMode)) { + if ((i.noteMode==GUI_QUERY_RANGE || i.noteMode==GUI_QUERY_RANGE_NOT) && i.note>=120) { + i.note=0; + } + if (i.note==130) { + snprintf(tempID,1024,"REL"); + } else if (i.note==129) { + snprintf(tempID,1024,"==="); + } else if (i.note==128) { + snprintf(tempID,1024,"OFF"); + } else if (i.note>=-60 && i.note<120) { + snprintf(tempID,1024,"%s",noteNames[i.note+60]); + } else { + snprintf(tempID,1024,"???"); + i.note=0; + } + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##NN1",tempID)) { + for (int j=0; j<180; j++) { + snprintf(tempID,1024,"%s",noteNames[j]); + if (ImGui::Selectable(tempID,i.note==(j-60))) { + i.note=j-60; + } + } + if (i.noteMode!=GUI_QUERY_RANGE && i.noteMode!=GUI_QUERY_RANGE_NOT) { + if (ImGui::Selectable("OFF",i.note==128)) { + i.note=128; + } + if (ImGui::Selectable("===",i.note==129)) { + i.note=129; + } + if (ImGui::Selectable("REL",i.note==130)) { + i.note=130; + } + } + ImGui::EndCombo(); + } + } + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.noteMode)) { + if (i.noteMax<-60 || i.noteMax>=120) { + i.noteMax=0; + } + if (i.noteMax>=-60 && i.noteMax<120) { + snprintf(tempID,1024,"%s",noteNames[i.noteMax+60]); + } else { + snprintf(tempID,1024,"???"); + } + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##NN2",tempID)) { + for (int j=0; j<180; j++) { + snprintf(tempID,1024,"%s",noteNames[j]); + if (ImGui::Selectable(tempID,i.noteMax==(j-60))) { + i.noteMax=j-60; + } + } + ImGui::EndCombo(); + } + } ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::Text("Ins"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##ICondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + ImGui::Combo("##ICondition",&i.insMode,queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.insMode)) { + if (i.ins<0 || i.ins>255) i.ins=0; + snprintf(tempID,1024,"%.2X",i.ins); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("II1",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.ins==j)) { + i.ins=j; + } + } + ImGui::EndCombo(); + } + } + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.insMode)) { + if (i.insMax<0 || i.insMax>255) i.insMax=0; + snprintf(tempID,1024,"%.2X",i.insMax); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("II2",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.insMax==j)) { + i.insMax=j; + } + } + ImGui::EndCombo(); + } + } ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::Text("Volume"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##VCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + ImGui::Combo("##VCondition",&i.volMode,queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.volMode)) { + if (i.vol<0 || i.vol>255) i.vol=0; + snprintf(tempID,1024,"%.2X",i.vol); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("VV1",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.vol==j)) { + i.vol=j; + } + } + ImGui::EndCombo(); + } + } + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.volMode)) { + if (i.volMax<0 || i.volMax>255) i.volMax=0; + snprintf(tempID,1024,"%.2X",i.volMax); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("VV2",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.volMax==j)) { + i.volMax=j; + } + } + ImGui::EndCombo(); + } + } for (int j=0; j255) i.effect[j]=0; + snprintf(tempID,1024,"%.2X",i.effect[j]); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("EE1",tempID)) { + for (int k=0; k<256; k++) { + snprintf(tempID,1024,"%.2X",k); + if (ImGui::Selectable(tempID,i.effect[j]==k)) { + i.effect[j]=k; + } + } + ImGui::EndCombo(); + } + } + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.effectMode[j])) { + if (i.effectMax[j]<0 || i.effectMax[j]>255) i.effectMax[j]=0; + snprintf(tempID,1024,"%.2X",i.effectMax[j]); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("EE2",tempID)) { + for (int k=0; k<256; k++) { + snprintf(tempID,1024,"%.2X",k); + if (ImGui::Selectable(tempID,i.effectMax[j]==k)) { + i.effectMax[j]=k; + } + } + ImGui::EndCombo(); + } + } ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::Text("Value"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##EVCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + ImGui::Combo("##EVCondition",&i.effectValMode[j],queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.effectValMode[j])) { + if (i.effectVal[j]<0 || i.effectVal[j]>255) i.effectVal[j]=0; + snprintf(tempID,1024,"%.2X",i.effectVal[j]); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("EV1",tempID)) { + for (int k=0; k<256; k++) { + snprintf(tempID,1024,"%.2X",k); + if (ImGui::Selectable(tempID,i.effectVal[j]==k)) { + i.effectVal[j]=k; + } + } + ImGui::EndCombo(); + } + } + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.effectValMode[j])) { + if (i.effectValMax[j]<0 || i.effectValMax[j]>255) i.effectValMax[j]=0; + snprintf(tempID,1024,"%.2X",i.effectValMax[j]); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("EV2",tempID)) { + for (int k=0; k<256; k++) { + snprintf(tempID,1024,"%.2X",k); + if (ImGui::Selectable(tempID,i.effectValMax[j]==k)) { + i.effectValMax[j]=k; + } + } + ImGui::EndCombo(); + } + } + + ImGui::PopID(); } + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) { + eraseIndex=index; + } + ImGui::TableNextColumn(); + if (i.effectCount<8) { + if (ImGui::Button("Add effect")) { + i.effectCount++; + } + } + ImGui::TableNextColumn(); + if (i.effectCount>0) { + if (ImGui::Button("Remove effect")) { + i.effectCount--; + } + } + ImGui::PopID(); ImGui::EndTable(); } + index++; + } + if (ImGui::Button("Find")) { + + } + ImGui::SameLine(); + if (eraseIndex>=0) { + curQuery.erase(curQuery.begin()+eraseIndex); + } + if (ImGui::Button(ICON_FA_PLUS "##AddQuery")) { + curQuery.push_back(FurnaceGUIFindQuery()); + } + + if (ImGui::BeginTable("QueryLimits",2)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + + ImGui::Text("Search range:"); + + if (ImGui::RadioButton("Song",curQueryRangeY==0)) { + curQueryRangeY=0; + } + if (ImGui::RadioButton("Selection",curQueryRangeY==1)) { + curQueryRangeY=1; + } + if (ImGui::RadioButton("Pattern",curQueryRangeY==2)) { + curQueryRangeY=2; + } + + ImGui::TableNextColumn(); + ImGui::Checkbox("Confine to channels",&curQueryRangeX); + + ImGui::BeginDisabled(!curQueryRangeX); + snprintf(tempID,1024,"%d: %s",curQueryRangeXMin+1,e->getChannelName(curQueryRangeXMin)); + if (ImGui::BeginCombo("From",tempID)) { + for (int i=0; igetTotalChannelCount(); i++) { + snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i)); + if (ImGui::Selectable(tempID,curQueryRangeXMin==i)) { + curQueryRangeXMin=i; + } + } + ImGui::EndCombo(); + } + + snprintf(tempID,1024,"%d: %s",curQueryRangeXMax+1,e->getChannelName(curQueryRangeXMax)); + if (ImGui::BeginCombo("To",tempID)) { + for (int i=0; igetTotalChannelCount(); i++) { + snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i)); + if (ImGui::Selectable(tempID,curQueryRangeXMax==i)) { + curQueryRangeXMax=i; + } + } + ImGui::EndCombo(); + } + ImGui::EndDisabled(); + + ImGui::EndTable(); } if (ImGui::TreeNode("Replace")) { - ImGui::Text("Replace controls here."); + if (ImGui::BeginTable("QueryReplace",3)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("..."); + ImGui::EndTable(); + } + if (ImGui::Button("Replace##QueryReplace")) { + // TODO + } ImGui::TreePop(); } } diff --git a/src/gui/gui.h b/src/gui/gui.h index 23eb9e1f..c50b064d 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -815,6 +815,14 @@ enum FurnaceGUIFindQueryModes { GUI_QUERY_MAX }; +enum FurnaceGUIFindQueryReplaceModes { + GUI_QUERY_REPLACE_SET=0, + GUI_QUERY_REPLACE_ADD, + GUI_QUERY_REPLACE_CLEAR, + + GUI_QUERY_REPLACE_MAX +}; + struct FurnaceGUIFindQuery { int noteMode, insMode, volMode, effectCount; int effectMode[8]; @@ -1162,6 +1170,9 @@ class FurnaceGUI { int pgSys, pgAddr, pgVal; std::vector curQuery; + bool curQueryRangeX; + int curQueryRangeXMin, curQueryRangeXMax; + int curQueryRangeY; struct ActiveNote { int chan; From d90cfc0f331912d2fafa4b6e8cb527b0c181c19e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 7 Jun 2022 19:26:19 -0500 Subject: [PATCH 037/152] fix build --- src/gui/findReplace.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index a4da0128..324f7f30 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -120,7 +120,6 @@ void FurnaceGUI::drawFindReplace() { ImGui::Combo("##ICondition",&i.insMode,queryModes,GUI_QUERY_MAX); ImGui::TableNextColumn(); if (FIRST_VISIBLE(i.insMode)) { - if (i.ins<0 || i.ins>255) i.ins=0; snprintf(tempID,1024,"%.2X",i.ins); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("II1",tempID)) { @@ -135,7 +134,6 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextColumn(); if (SECOND_VISIBLE(i.insMode)) { - if (i.insMax<0 || i.insMax>255) i.insMax=0; snprintf(tempID,1024,"%.2X",i.insMax); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("II2",tempID)) { @@ -157,7 +155,6 @@ void FurnaceGUI::drawFindReplace() { ImGui::Combo("##VCondition",&i.volMode,queryModes,GUI_QUERY_MAX); ImGui::TableNextColumn(); if (FIRST_VISIBLE(i.volMode)) { - if (i.vol<0 || i.vol>255) i.vol=0; snprintf(tempID,1024,"%.2X",i.vol); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("VV1",tempID)) { @@ -172,7 +169,6 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextColumn(); if (SECOND_VISIBLE(i.volMode)) { - if (i.volMax<0 || i.volMax>255) i.volMax=0; snprintf(tempID,1024,"%.2X",i.volMax); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("VV2",tempID)) { @@ -196,7 +192,6 @@ void FurnaceGUI::drawFindReplace() { ImGui::Combo("##ECondition",&i.effectMode[j],queryModes,GUI_QUERY_MAX); ImGui::TableNextColumn(); if (FIRST_VISIBLE(i.effectMode[j])) { - if (i.effect[j]<0 || i.effect[j]>255) i.effect[j]=0; snprintf(tempID,1024,"%.2X",i.effect[j]); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("EE1",tempID)) { @@ -211,7 +206,6 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextColumn(); if (SECOND_VISIBLE(i.effectMode[j])) { - if (i.effectMax[j]<0 || i.effectMax[j]>255) i.effectMax[j]=0; snprintf(tempID,1024,"%.2X",i.effectMax[j]); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("EE2",tempID)) { @@ -233,7 +227,6 @@ void FurnaceGUI::drawFindReplace() { ImGui::Combo("##EVCondition",&i.effectValMode[j],queryModes,GUI_QUERY_MAX); ImGui::TableNextColumn(); if (FIRST_VISIBLE(i.effectValMode[j])) { - if (i.effectVal[j]<0 || i.effectVal[j]>255) i.effectVal[j]=0; snprintf(tempID,1024,"%.2X",i.effectVal[j]); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("EV1",tempID)) { @@ -248,7 +241,6 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextColumn(); if (SECOND_VISIBLE(i.effectValMode[j])) { - if (i.effectValMax[j]<0 || i.effectValMax[j]>255) i.effectValMax[j]=0; snprintf(tempID,1024,"%.2X",i.effectValMax[j]); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::BeginCombo("EV2",tempID)) { From dc3b0e83229c84c4217c1569e70aa695778b42fb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 7 Jun 2022 19:48:42 -0500 Subject: [PATCH 038/152] GUI: find and replace, part 3 --- src/gui/findReplace.cpp | 29 ++++++++++++++++++++++++++++- src/gui/gui.h | 3 ++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 324f7f30..0daf3412 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -331,7 +331,34 @@ void FurnaceGUI::drawFindReplace() { ImGui::EndCombo(); } ImGui::EndDisabled(); - + + ImGui::Text("Match effect position:"); + + if (ImGui::RadioButton("No",curQueryEffectPos==0)) { + curQueryEffectPos=0; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("match effects regardless of position."); + } + if (ImGui::RadioButton("Lax",curQueryEffectPos==1)) { + curQueryEffectPos=1; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("match effects only if they appear in-order."); + } + if (ImGui::RadioButton("Strict",curQueryEffectPos==2)) { + curQueryEffectPos=2; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("match effects only if they appear exactly as specified."); + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Checkbox("From start",&curQueryFromStart); + ImGui::TableNextColumn(); + ImGui::Checkbox("Backwards",&curQueryBackwards); + ImGui::EndTable(); } diff --git a/src/gui/gui.h b/src/gui/gui.h index c50b064d..2ee6170a 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1170,9 +1170,10 @@ class FurnaceGUI { int pgSys, pgAddr, pgVal; std::vector curQuery; - bool curQueryRangeX; + bool curQueryRangeX, curQueryFromStart, curQueryBackwards; int curQueryRangeXMin, curQueryRangeXMax; int curQueryRangeY; + int curQueryEffectPos; struct ActiveNote { int chan; From 6aa88b07705e2b618b58045e7478e116d041329e Mon Sep 17 00:00:00 2001 From: cam900 Date: Wed, 8 Jun 2022 10:10:55 +0900 Subject: [PATCH 039/152] Move on .cpp, prepare for variable rate support --- src/engine/platform/fmshared_OPN.h | 9 +++------ src/engine/platform/genesis.cpp | 3 +++ src/engine/platform/genesisext.cpp | 3 +++ src/engine/platform/ym2203.cpp | 3 ++- src/engine/platform/ym2203ext.cpp | 3 +++ src/engine/platform/ym2608.cpp | 3 ++- src/engine/platform/ym2608ext.cpp | 3 +++ src/engine/platform/ym2610.cpp | 2 ++ src/engine/platform/ym2610b.cpp | 3 +++ src/engine/platform/ym2610bext.cpp | 3 +++ src/engine/platform/ym2610ext.cpp | 3 +++ 11 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index 7632e78f..74e13219 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -22,9 +22,6 @@ #include "fmsharedbase.h" -#define CHIP_FREQBASE fmFreqBase -#define CHIP_DIVIDER fmDivBase - #define PLEASE_HELP_ME(_targetChan) \ int boundaryBottom=parent->calcBaseFreq(chipClock,CHIP_FREQBASE,0,false); \ int boundaryTop=parent->calcBaseFreq(chipClock,CHIP_FREQBASE,12,false); \ @@ -104,9 +101,9 @@ class DivPlatformOPN: public DivPlatformFMBase { 0x00, 0x04, 0x08, 0x0c }; - const double fmFreqBase; - const double fmDivBase; - const unsigned char ayDiv; + double fmFreqBase; + double fmDivBase; + unsigned char ayDiv; DivPlatformOPN(double f=9440540.0, double d=72, unsigned char a=32): DivPlatformFMBase(), diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index b9a5c686..b3afdd2a 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -22,6 +22,9 @@ #include #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + #define IS_REALLY_MUTED(x) (isMuted[x] && (x<5 || !softPCM || (isMuted[5] && isMuted[6]))) const char* DivPlatformGenesis::getEffectName(unsigned char effect) { diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 057049ea..cd4d603c 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -21,6 +21,9 @@ #include "../engine.h" #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + int DivPlatformGenesisExt::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformGenesis::dispatch(c); diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 42314615..a25c0e96 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -23,7 +23,8 @@ #include #include - +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase const char* regCheatSheetYM2203[]={ // SSG diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index fbef7b04..d3fd3487 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -21,6 +21,9 @@ #include "../engine.h" #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + int DivPlatformYM2203Ext::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformYM2203::dispatch(c); diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 875f4148..46b8b0ad 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -24,7 +24,8 @@ #include #include - +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase const char* regCheatSheetYM2608[]={ // SSG diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index d33bf9ed..91c3a897 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -21,6 +21,9 @@ #include "../engine.h" #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + int DivPlatformYM2608Ext::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformYM2608::dispatch(c); diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index df340804..bed59c20 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -24,6 +24,8 @@ #include #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase const char* regCheatSheetYM2610[]={ // SSG diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 16f198f7..a2291c3f 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -23,6 +23,9 @@ #include #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + const char* regCheatSheetYM2610B[]={ // SSG "SSG_FreqL_A", "000", diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index 61a99789..b5e1ac9f 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -21,6 +21,9 @@ #include "../engine.h" #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + int DivPlatformYM2610BExt::dispatch(DivCommand c) { if (c.chan<2) { return DivPlatformYM2610B::dispatch(c); diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index f2006c1c..6f9c8700 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -21,6 +21,9 @@ #include "../engine.h" #include +#define CHIP_FREQBASE fmFreqBase +#define CHIP_DIVIDER fmDivBase + int DivPlatformYM2610Ext::dispatch(DivCommand c) { if (c.chan<1) { return DivPlatformYM2610::dispatch(c); From 38f4b75b128178d27bcedc8fb48a8d04b0721efc Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 8 Jun 2022 18:02:04 -0500 Subject: [PATCH 040/152] GUI: find and replace, part 4 --- src/gui/findReplace.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 0daf3412..8c05be99 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -366,7 +366,24 @@ void FurnaceGUI::drawFindReplace() { if (ImGui::BeginTable("QueryReplace",3)) { ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("..."); + ImGui::Text("Note"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Ins"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Volume"); + + /*ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Effect"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Value");*/ + ImGui::EndTable(); } if (ImGui::Button("Replace##QueryReplace")) { From caf548c6394126748b1e233ee162c132620d17df Mon Sep 17 00:00:00 2001 From: itsragedev <66060223+itsragedev@users.noreply.github.com> Date: Thu, 9 Jun 2022 15:43:19 +0200 Subject: [PATCH 041/152] add terrible demo (#520) --- demos/the_erfngjt.fur | Bin 0 -> 739 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/the_erfngjt.fur diff --git a/demos/the_erfngjt.fur b/demos/the_erfngjt.fur new file mode 100644 index 0000000000000000000000000000000000000000..5d70dca8e8a0e47841c913bab96be83b1a14c033 GIT binary patch literal 739 zcmV<90v!E#ob6c6Zqq;zo?Y7{b^=C7oRElxkdTln^@hZSwm_vys8kSfu0_I6MAFJ7 z7fu}d47>s_zytKeQ}7_%V0SIYpINX1!49{Z#r+eGrfpybXu502thkWc5pkVobNB_excpkl*ydQmrQ8@fE z6~13jfyZ|lOX3*&DeOmWfQuUdk8cC~xC7wa1$Ywxe7^_q`@X2=0~x8nIk(kM&X^?~ zvy@+-%(&&ZofY&=d|^=v2Zyiw^7R%M%=I~W+XucQcOi7e*W7CS3n%OZe+m%i1L%S(oO&(dVE7CTQKUzwFILv%sv?)^ z+Pb6aTAK1Vd5ZD`&XIG$6d?rG+H6n{M%W6zA72#kz zNeq3s4)M@&A+CeG80a63^E_=aC8#YauP|FyrW7Aop%Vy#~%qf*;)h-#=@U}ao2l-nWPD>k){T#*H$fh`5!k^_&{hdqL7sb;d{4Sw~Iv4Ec>J30r9|zUPL3;Fl z9FO@aPD&4IsQ3-V0NG4YBVoT^Lvqx+%qlaah zW%2rCYLzw=&uyq~=5a?IK90dcC_g1oAHNQIr~||!hB`nzV#@4mnTDeDSQ)>*q0H-} VZ73_Zp{N<#*o~dB{{lA$)Q>%Rau)yq literal 0 HcmV?d00001 From 0e05f3b67bc6895bdca0d69b463256a1e350827b Mon Sep 17 00:00:00 2001 From: LoKiToon <98922449+LoKiToon@users.noreply.github.com> Date: Thu, 9 Jun 2022 20:41:01 +0300 Subject: [PATCH 042/152] Add files via upload --- demos/E1M4OPL2.fur | Bin 0 -> 4122 bytes demos/FDS TEST.fur | Bin 0 -> 1574 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/E1M4OPL2.fur create mode 100644 demos/FDS TEST.fur diff --git a/demos/E1M4OPL2.fur b/demos/E1M4OPL2.fur new file mode 100644 index 0000000000000000000000000000000000000000..19f8ce54f34c5214eac28024ce513c961d392c01 GIT binary patch literal 4122 zcmZvec|4Ts`^W7|ltD_#G8`$Ct(5FzsFN*aKbj#CM?yN5#>_+`V=1M>7>zx&*aszB zWUCp2$})(ujLJy18H}0vJ;V2RzUQ3Z@1J?i>$>mfxv%@WKG*y6L=omMN~CzX?Bn!i zcTwm^?cg;v*2Xeco{uepe~rS{xb$fv`R?8lxg3bA&i^!6G!S5C0lk~3XT95AGSO1n z*UoOYwT$mE&4PoS0q1~)D%G=gDK;P|!8mdur(u+u-83J0rKO%}JW9o*A{V&1+|}&* zSqh%WNm7%YQbX8065aK~v>JVbtz;0C6*3y(RYhd0iV>)fURO^lA2ULPG^ zYo^_MAXxaK!kAdk*qB$)8T&ax8z@whl~tQ!*)YqA*|NT@&d$>e_}JLZpR`B7W5@Lj z$4{{vX$rfV5jQ3$X&HjPEF0jUPmQd>{=sNgA-5uE^>buMrONl@@URNPsPpj#^l<5` zkM!~M!CfQ69{w#SyXa|m{ZrwW>wJjRK~hh7bTW0^b$2S=ko9xbKexG`Zd+zye)Boi zaaSfgqK!^vW;U&$h!+<0e_NI&E}Q$;%_tF{FBpt2dl28`8nF6q`!kVLdVWO~a?XdS zZ2mjrVC)kh zs19m~NH)9n3%$dSa>vaG(Xs!^Z1V`!Z;mj3YKYoxb47OVDc0vAidp>t^>)a0MvqoD z`>W;^$L1cY!9pmb&7N}ST3AG9FlA8rI%7kP64BgCwU0cB82Uu{vGIh6F#kc9V4h-i zULlx9v=HIupXoYMMyy^p!cJ5V_4{c;_HytQ9IBUkuZz&MTteB!9;1rpgfbFK2uO|; zMTzr}sBAVxcSA=qR?M?axsAjPE}=|Qn33h_U16+VId3b_5N7Qy+ABtMm znpIYW?4XO{gc$9EuQ`oJDrX~vT}Ks%-vtR8v*u$jUbpgg8{a*=6Ct3`qF!m-DPa7n zMefEBNBryz!?Ebpxw81))z*!3YhRgD$$MU)Gqf)ba*Tr4lV(a1dbQljycEp>R!*0B z1=jvFLXjgHS3jZ%E9(zCl%Qq1IT|R3nzbn1XcMdy^pY0kMScAb3aL2Y;HH~{zQgmS z-^`sx>!z|keOXpA9;mxJfr^^!j_qH3)3e;8xhKp;Ej0aSy*~8~K5M^=TUhu3xWU(V zch!l^8}^?D6k1CY6!u)bCQ)W@=1(wf_&haAx;PR;`8LUX_-2g9IaaZ9;7JC_#8M0Gdi2p$ppU9`A!%omnwHiOPGLsgQLF z_TD0Va>JOZF)=-1doi$go_UAi=ehpg;Du62EG>@F8j!aywCJ3LpW)83prU-Ed(5c3 zr@iHYFu|Umk5hi1lRnKU8m!vunL6v4iv9yTWM@RlR!OE5re=q0Ob9}C{wOkiF`+Pm z3!JfaJYgEIoMM=@v;Fo17n)Lvre&d1)>PC$&p_X_$rz9V7=Yvn+avk zticFjTs79sx;W*_WRMIHfpRfd(1Jn6cfXnZZB>`UD5Q8W6-hsi&2#ly6+mT>fv zJ*Vm8KdQ1Dl}G)UL;wKw7SY!QNkryTQNVE@P)0|p`NY}Uh&rG=vMnpp|22 zB{WWLCcSlOSVCmpyrwBh2iNorE)UMI#_~n0LOV|Eyi@nW=4h%}a}G#L6?)6$*d2#% z?W1`7a=dACTeq$wc7U+}4uurV3`n@@25|G|t-Gw&OEzt9=TALQY3G+#wNOGp3fOH9 z*Z@h`EpM_%;wv63<)SGOq-Gm&F0Singg5=;n$dnF@ybd+5mZl?%LoVd z)nrg(XG8mz+61)UACMhE2O#9&M-eV9x)AMT5dRVsn-sENGB`y1fK<&^8YwM-UYKrY z-LDw(WE$QGK0KwBBDsu_FZ1)~dTX#m)BELFUFU{d#w^#nX3QBthbC`{Nvouqg8NZE z8qi}RIu^QjI9>t$n>dyBEMUbEGn~ty73IyC%Y$u#@crSCfauk@9&mLpUbESYQ9U7; zms+9G9&p5fb@5q&{VU>xvr|kxz3e`zkQWC7HO~=qT9g~?a<{|wpGsd79PxbG7PoUB zvmEi31D@_!Pe?1-yuc}HGXZx7;nVNix%bPYnQ{e|I8`hu2k!u&2#pyY3n09%v?{Kt z?fSiFNXn4DFY~em$#-H!V_H#|93W9_0oqoG)LiUhs5(3FP&$nJl(FPQ^(4+sQd`Czih2biN)V zgzS$_c(Yv_=sYRqenMwbolg0Z<2p`+bQMlZWBA?a_H{f{10NQbzFQSi_!Nov!8}3Y zr2!$b14Cdtc-1Ii_}O$@`O?FSdGkwW@_n89?-7qQdBG9fJ{v6X19rqbS=%w^OO~B1 zFa+F}1B@NOrRN zFa)Z3h+y?r{4}Op4qnsrW_pR2>EbaSCiYuxN##s5UGNsrqZ|J4QBW7Gfn-ncwFp{mPtpJnc+v%vTBWH~nV>>Nmx3cg z?~2nkwcTGjmzpH%mplK;kOJ#a%>Oi*$z9Tsqlxz~kV-Mrtw|a8>Fay%GgCjILj|mW ztFW8N0Az0e1(|{g9Nwt4U$`5lOBc!qSjU?rAn37crWJ|>W?c5tUwm0%0osk$y#e{2 zhS%C=E(-2{89;9O7IOWnbdH8MAL72;?8-rlLxAmC;Aq_%Zr@*YaaG%{%U7nKzeA{W zfmj$=j}e!_^~UfbIm^%YUfuNoNpS{lk7FzGA!AIz8%R9<@5~K}_fq;#+!||=DfWN_ z^D*kW1W7TwA$$C>zz~c-JST8QLe%ghtYBZ0|HXBES=05+H*YU+W{iQ305EigTwhVw zN-+f|XP~$En?S({fkpPo6pVwby;Y${5%CXzAu6mTduY!;i<3QYSV!C9@mA+kP2ov< z0J&H{pAg!1Cc3a1U}Ly!knQKFycxeUSh+2uY0Z<>Pqy`^#rULF=x)Pv$Ft8EC`oH? zsdpcTbSYSKyHdC>7ij@Uh%#x~7SrO13<(4$U$3SqpwwpE{3X`}JP6%#Kj};RQ?fx4 zv*v(TdipbX?sT)22BOZ|@f?A=z@Im74+8vRpP~w*!P)xJjVmor3xH<+2F4}Sov_?` zNXV@xHPR40vxFh!Yf4)Q9+?4@pcTV6G z4@R9lh|zK>ueEF_UyZ3dQcV>itH+pi`G2?SCd|37u>&78pC#3uwY}2hH<3oB&#mfp zNIiF4eDnRnX7xbAeUIribrEO@|AWK2n%(#87pK0KOb*o_Mjc=aNn&F~pvA9Oeznv@ z4f{$cwv?{MFDhgf_o9soDIcOGkg!V@+JP2i{x8$nua~doF3BS7fcKIbkcs?NUX}cM zf$)0*S>bJO8<0&DN5v0%ina%q1uv<`d|$scJm;HreJ%uLiEejS5cg#~?V!K{%iDq2-5LqX?&zxemUP;^C0?}rJE9jY+W>w(q+Hgd3ng~X7?a=D^WDP;%$2Pkz_ AZvX%Q literal 0 HcmV?d00001 diff --git a/demos/FDS TEST.fur b/demos/FDS TEST.fur new file mode 100644 index 0000000000000000000000000000000000000000..54b6d3b40607fd0367a5de8f511989df758bb900 GIT binary patch literal 1574 zcmV+>2HE*|ob6mqOdCfOezVwsf!07t)Ssl;P>>QNDoC5EQq=}1(Aa7ye+J1G2TFYa zvJeGGRYhqz^pHlX)LOLXRDud@nM9QgQjtQAJ@!JXV5R9fRYOnhp&{;!ch}y+j+Zgp zWCzbPPky|adEc8i^Y-m}42_*L7bk{C!m={?(aia9;|KuAkR@MN=Lcz_xEKLkXlsEo za8;H70tviCeGPI_iv{H#{q(7GSQ#CeROI&2sd2gQld0*jBKL=*A#V-{Ux)ISjCP1mNvg@b4!9yiEYtF@M<%@Zl+dsnYA)N-br*RX0Nj)) zA9Ep8-jt)g47t43^i?|MK_0I}ZT5oHl8#HM#ydvS4ezFu1?^>wdARMtH}@w$M1i#% zi*+pTWOpoC?F$?$9NFFNzKzlbK`wI41kDLuMQ{_%nm2mAD$^)iXuw!#nz<}A_>Lg$ za|Oi~iM87xo2`Ra<7YK~M&k;N%QY_3*rT!TUWvxV8oM>teL@;b8tcCUrQK`}Mxxzm z?1l2%rw6+jJxMIqvAmPrv1GL`aIA3nDtx&b^DKO)xGa3Mf~V77)cPv@$3mhw)f-g+3aaowGD4%uM*+&!_ez91`@=kWglGVPz zvBD|%Li0M8g@!z(&@HL!gn+(Yqz{7sejK+`CY0-=MI-IwQ#o!f-Uk(nbu8~>cPv@$ z3mhw)LM%!yV^KQIWl^%CeAZ!SAMy0VFBa=q-pTG*vf39oRyYM;Xx`wW(4ePKXjt%A z@y)Rg_Qn56VzG|po$QV!t9^lEg;O|%X0UajBQ5AxZ1P@-`8iO(vGxMymoOjI+Kl`% z<|CM2#QZ$wLzqcPAqVy3fS%L^awty@;`aoa- zgUiQj+G^V>tG+%PnTtjT5_j&5jmKh&GCmYie!rYrTT5P2Ldngs_)0LbF%VJ`SX|y5 zOAII*!SO`Y-{bFzL?ZJiI($8m`MTq%rL^@cxwa}&*WT6}si|LzVrmEkHpXI!jg7<~ zTlbU8Yb(Lf>MuX8#S<7K9*-|C2b4hlwMbp0uI7uYXRA&Gc1*SzX5G6d`?w@k^e29j zdX)0Q&xaQYP*j51^v)rXgLN$6P(DtjpSNz~H}XCH-&8HYb<%NAmVs>4&$j-)v`W_V zQR-nZ7OlnuQujYyZK!Sq>95p!((kLO>ZtYAZQolNN{%UwRo}Ioymdo~1!8_*m9O{V z%H}|PVXn7f!N2r_qQrws{sn)aArMMLqkbIh1?*dQYk#kCixuN_Mv&d<#$9hFyYPNt z>5mxuv--ok|B}P}XZ447{~?ZQ6IUksfzAy$8Q_a8ZIL$Uh9yZ@PlFy6V?;RySc z{r?V3VfoK`WfcBvayB8dDPhNiSg(vuTM*v;XT35C|20`p2;&EkR>p)Z98j7ILA<*@RGUnaG!;$^Wq0uVI>< zGC(=>9*Vw%qId7ov-(f#ZHPDrXZytq?Ap^={a| zVVa!^Aa`&3*R$fX_P5J_yZjOH&(BZhcxDqq5((je1rhPL*MAm&$k|gSA&lRmwwi>H zg?wP;Y(nVg5ZPv9N2lp&vWL>&X?mJ0QTjVgPm`UtPgwVlAtCg02y+8Y)6+K;GVSj) YJxxZG{!Y`=WEZ8s)AUsNUy`BxAD+J{f&c&j literal 0 HcmV?d00001 From 6ccd2e222b97abc0fa5f28b17c46e07aaacaab4c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 9 Jun 2022 16:10:51 -0500 Subject: [PATCH 043/152] try CoInitializeEx on Windows --- src/main.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 07905852..8c90c7c8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,6 +30,7 @@ #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include +#include #include #else #include @@ -243,6 +244,12 @@ void initParams() { // TODO: add crash log int main(int argc, char** argv) { initLog(); +#ifdef _WIN32 + HRESULT coResult=CoInitializeEx(NULL,COINIT_MULTITHREADED); + if (coResult!=S_OK) { + logE("CoInitializeEx failed!"); + } +#endif #if !(defined(__APPLE__) || defined(_WIN32) || defined(ANDROID)) // workaround for Wayland HiDPI issue if (getenv("SDL_VIDEODRIVER")==NULL) { @@ -446,6 +453,12 @@ int main(int argc, char** argv) { logI("stopping engine."); e.quit(); + +#ifdef _WIN32 + if (coResult==S_OK || coResult==S_FALSE) { + CoUninitialize(); + } +#endif return 0; } From 7dc3dc96c4c0bec8e13f32feba056ba040c60239 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 9 Jun 2022 16:41:54 -0500 Subject: [PATCH 044/152] GUI: find and replace, part 5 --- src/gui/findReplace.cpp | 41 +++++++++++++++++++++++++++++++++++------ src/gui/gui.h | 19 +++++++++++++++++++ 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 8c05be99..071d05ea 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -17,6 +17,7 @@ const char* queryModes[GUI_QUERY_MAX]={ const char* queryReplaceModes[GUI_QUERY_REPLACE_MAX]={ "set", "add", + "add (overflow)", "clear" }; @@ -363,18 +364,33 @@ void FurnaceGUI::drawFindReplace() { } if (ImGui::TreeNode("Replace")) { - if (ImGui::BeginTable("QueryReplace",3)) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("Note"); + if (ImGui::BeginTable("QueryReplace",3,ImGuiTableFlags_BordersOuter)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5); ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Ins"); + ImGui::Checkbox("Note",&queryReplaceNoteDo); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##NRMode",&queryReplaceNoteMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); + ImGui::TableNextColumn(); + ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Volume"); + ImGui::Checkbox("Ins",&queryReplaceInsDo); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##IRMode",&queryReplaceInsMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Checkbox("Volume",&queryReplaceVolDo); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##VRMode",&queryReplaceVolMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); /*ImGui::TableNextRow(); ImGui::TableNextColumn(); @@ -386,6 +402,19 @@ void FurnaceGUI::drawFindReplace() { ImGui::EndTable(); } + ImGui::Text("Effect replace mode:"); + if (ImGui::RadioButton("Clear effects",queryReplaceEffectPos==0)) { + queryReplaceEffectPos=0; + } + if (ImGui::RadioButton("Replace matches only",queryReplaceEffectPos==1)) { + queryReplaceEffectPos=1; + } + if (ImGui::RadioButton("Replace matches, then free spaces",queryReplaceEffectPos==2)) { + queryReplaceEffectPos=2; + } + if (ImGui::RadioButton("Insert in free spaces",queryReplaceEffectPos==3)) { + queryReplaceEffectPos=3; + } if (ImGui::Button("Replace##QueryReplace")) { // TODO } diff --git a/src/gui/gui.h b/src/gui/gui.h index 2ee6170a..107deb9d 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -818,6 +818,7 @@ enum FurnaceGUIFindQueryModes { enum FurnaceGUIFindQueryReplaceModes { GUI_QUERY_REPLACE_SET=0, GUI_QUERY_REPLACE_ADD, + GUI_QUERY_REPLACE_ADD_OVERFLOW, GUI_QUERY_REPLACE_CLEAR, GUI_QUERY_REPLACE_MAX @@ -1175,6 +1176,24 @@ class FurnaceGUI { int curQueryRangeY; int curQueryEffectPos; + int queryReplaceEffectCount; + int queryReplaceEffectPos; + int queryReplaceNoteMode; + int queryReplaceInsMode; + int queryReplaceVolMode; + int queryReplaceEffectMode[8]; + int queryReplaceEffectValMode[8]; + int queryReplaceNote; + int queryReplaceIns; + int queryReplaceVol; + int queryReplaceEffect[8]; + int queryReplaceEffectVal[8]; + bool queryReplaceNoteDo; + bool queryReplaceInsDo; + bool queryReplaceVolDo; + bool queryReplaceEffectDo[8]; + bool queryReplaceEffectValDo[8]; + struct ActiveNote { int chan; int note; From 04bbffac13e4bbf3773b925be6b9ae884ef6d1af Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 9 Jun 2022 16:54:14 -0500 Subject: [PATCH 045/152] more MIDI debug messages --- src/audio/rtmidi.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/audio/rtmidi.cpp b/src/audio/rtmidi.cpp index a5c5bad0..b431a89d 100644 --- a/src/audio/rtmidi.cpp +++ b/src/audio/rtmidi.cpp @@ -75,8 +75,12 @@ bool TAMidiInRtMidi::openDevice(String name) { try { bool portOpen=false; unsigned int count=port->getPortCount(); + logD("finding port %s...",name); for (unsigned int i=0; igetPortName(i)==name) { + String portName=port->getPortName(i); + logV("- %d: %s",i,portName); + if (portName==name) { + logD("opening port %d...",i); port->openPort(i); portOpen=true; break; @@ -184,8 +188,12 @@ bool TAMidiOutRtMidi::openDevice(String name) { try { bool portOpen=false; unsigned int count=port->getPortCount(); + logD("finding port %s...",name); for (unsigned int i=0; igetPortName(i)==name) { + String portName=port->getPortName(i); + logV("- %d: %s",i,portName); + if (portName==name) { + logD("opening port %d...",i); port->openPort(i); portOpen=true; break; @@ -248,4 +256,4 @@ bool TAMidiOutRtMidi::quit() { port=NULL; } return true; -} \ No newline at end of file +} From eac4f50d9297f5478c8ca596389193f305f4cd19 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 9 Jun 2022 18:04:50 -0500 Subject: [PATCH 046/152] sanitize MIDI port names on Windows/Linux --- src/audio/rtmidi.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/audio/rtmidi.cpp b/src/audio/rtmidi.cpp index b431a89d..31a3e66a 100644 --- a/src/audio/rtmidi.cpp +++ b/src/audio/rtmidi.cpp @@ -21,6 +21,26 @@ #include "../ta-log.h" #include "taAudio.h" +String sanitizePortName(const String& name) { +#if defined(_WIN32) + // remove port number + size_t namePos=name.rfind(' '); + if (namePos!=String::npos) { + return name.substr(0,namePos); + } + return name; +#elif defined(__linux__) + // remove port location + size_t namePos=name.rfind(' '); + if (namePos!=String::npos) { + return name.substr(0,namePos); + } + return name; +#else + return name; +#endif +} + // --- IN --- bool TAMidiInRtMidi::gather() { @@ -56,7 +76,7 @@ std::vector TAMidiInRtMidi::listDevices() { unsigned int count=port->getPortCount(); logD("got port count."); for (unsigned int i=0; igetPortName(i); + String name=sanitizePortName(port->getPortName(i)); if (name!="") ret.push_back(name); } } catch (RtMidiError& e) { @@ -77,7 +97,7 @@ bool TAMidiInRtMidi::openDevice(String name) { unsigned int count=port->getPortCount(); logD("finding port %s...",name); for (unsigned int i=0; igetPortName(i); + String portName=sanitizePortName(port->getPortName(i)); logV("- %d: %s",i,portName); if (portName==name) { logD("opening port %d...",i); @@ -190,7 +210,7 @@ bool TAMidiOutRtMidi::openDevice(String name) { unsigned int count=port->getPortCount(); logD("finding port %s...",name); for (unsigned int i=0; igetPortName(i); + String portName=sanitizePortName(port->getPortName(i)); logV("- %d: %s",i,portName); if (portName==name) { logD("opening port %d...",i); @@ -230,7 +250,7 @@ std::vector TAMidiOutRtMidi::listDevices() { try { unsigned int count=port->getPortCount(); for (unsigned int i=0; igetPortName(i); + String name=sanitizePortName(port->getPortName(i)); if (name!="") ret.push_back(name); } } catch (RtMidiError& e) { From dd05429c0eb8da08f329bb0f8d37d2cd94915b1f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 9 Jun 2022 18:16:51 -0500 Subject: [PATCH 047/152] WaveSynth: initialize wave to 0 on SCC/Bubble Syst --- src/engine/platform/bubsyswsg.cpp | 2 +- src/engine/platform/scc.cpp | 2 +- src/engine/waveSynth.cpp | 7 ++++++- src/engine/waveSynth.h | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/bubsyswsg.cpp b/src/engine/platform/bubsyswsg.cpp index 85d50e66..48a07880 100644 --- a/src/engine/platform/bubsyswsg.cpp +++ b/src/engine/platform/bubsyswsg.cpp @@ -306,7 +306,7 @@ void DivPlatformBubSysWSG::reset() { for (int i=0; i<2; i++) { chan[i]=DivPlatformBubSysWSG::Channel(); chan[i].std.setEngine(parent); - chan[i].ws.setEngine(parent); + chan[i].ws.setEngine(parent,8); chan[i].ws.init(NULL,32,15,false); } if (dumpWrites) { diff --git a/src/engine/platform/scc.cpp b/src/engine/platform/scc.cpp index 011f63bc..0cfe5a46 100644 --- a/src/engine/platform/scc.cpp +++ b/src/engine/platform/scc.cpp @@ -332,7 +332,7 @@ void DivPlatformSCC::reset() { for (int i=0; i<5; i++) { chan[i]=DivPlatformSCC::Channel(); chan[i].std.setEngine(parent); - chan[i].ws.setEngine(parent); + chan[i].ws.setEngine(parent,128); chan[i].ws.init(NULL,32,255,false); chan[i].vol=15; chan[i].outVol=15; diff --git a/src/engine/waveSynth.cpp b/src/engine/waveSynth.cpp index e6903168..82b5d5dd 100644 --- a/src/engine/waveSynth.cpp +++ b/src/engine/waveSynth.cpp @@ -243,8 +243,13 @@ void DivWaveSynth::changeWave2(int num) { first=true; } -void DivWaveSynth::setEngine(DivEngine* engine) { +void DivWaveSynth::setEngine(DivEngine* engine, int waveFloor) { e=engine; + memset(wave1,waveFloor,256); + memset(wave2,waveFloor,256); + for (int i=0; i<256; i++) { + output[i]=waveFloor; + } } void DivWaveSynth::init(DivInstrument* which, int w, int h, bool insChanged) { diff --git a/src/engine/waveSynth.h b/src/engine/waveSynth.h index 8709b084..26f5b259 100644 --- a/src/engine/waveSynth.h +++ b/src/engine/waveSynth.h @@ -70,7 +70,7 @@ class DivWaveSynth { * @param insChanged whether the instrument has changed. */ void init(DivInstrument* which, int width, int height, bool insChanged=false); - void setEngine(DivEngine* engine); + void setEngine(DivEngine* engine, int waveFloor=0); DivWaveSynth(): e(NULL), pos(0), From 936d9dfa49f996910ff54b72abc3d13c8569865c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 9 Jun 2022 18:52:38 -0500 Subject: [PATCH 048/152] GUI: find and replace, part 6 --- src/gui/findReplace.cpp | 85 +++++++++++++++++++++++++++++++++++++---- src/gui/gui.cpp | 26 +++++++++++++ src/gui/gui.h | 2 +- src/gui/intConst.cpp | 1 + src/gui/intConst.h | 1 + 5 files changed, 106 insertions(+), 9 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 071d05ea..7ac12d1d 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -3,6 +3,7 @@ #include "IconsFontAwesome4.h" #include "misc/cpp/imgui_stdlib.h" #include "guiConst.h" +#include "intConst.h" const char* queryModes[GUI_QUERY_MAX]={ "ignore", @@ -290,7 +291,11 @@ void FurnaceGUI::drawFindReplace() { curQuery.push_back(FurnaceGUIFindQuery()); } - if (ImGui::BeginTable("QueryLimits",2)) { + if (ImGui::BeginTable("QueryLimits",3)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5f); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5f); + ImGui::TableNextRow(); ImGui::TableNextColumn(); @@ -333,6 +338,7 @@ void FurnaceGUI::drawFindReplace() { } ImGui::EndDisabled(); + ImGui::TableNextColumn(); ImGui::Text("Match effect position:"); if (ImGui::RadioButton("No",curQueryEffectPos==0)) { @@ -356,8 +362,6 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Checkbox("From start",&curQueryFromStart); - ImGui::TableNextColumn(); ImGui::Checkbox("Backwards",&curQueryBackwards); ImGui::EndTable(); @@ -373,10 +377,49 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextColumn(); ImGui::Checkbox("Note",&queryReplaceNoteDo); ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceNoteDo); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("##NRMode",&queryReplaceNoteMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); ImGui::TableNextColumn(); - + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (queryReplaceNoteMode==GUI_QUERY_REPLACE_SET) { + if (queryReplaceNote==130) { + snprintf(tempID,1024,"REL"); + } else if (queryReplaceNote==129) { + snprintf(tempID,1024,"==="); + } else if (queryReplaceNote==128) { + snprintf(tempID,1024,"OFF"); + } else if (queryReplaceNote>=-60 && queryReplaceNote<120) { + snprintf(tempID,1024,"%s",noteNames[queryReplaceNote+60]); + } else { + snprintf(tempID,1024,"???"); + queryReplaceNote=0; + } + if (ImGui::BeginCombo("##NRValueC",tempID)) { + for (int j=0; j<180; j++) { + snprintf(tempID,1024,"%s",noteNames[j]); + if (ImGui::Selectable(tempID,queryReplaceNote==(j-60))) { + queryReplaceNote=j-60; + } + } + if (ImGui::Selectable("OFF",queryReplaceNote==128)) { + queryReplaceNote=128; + } + if (ImGui::Selectable("===",queryReplaceNote==129)) { + queryReplaceNote=129; + } + if (ImGui::Selectable("REL",queryReplaceNote==130)) { + queryReplaceNote=130; + } + ImGui::EndCombo(); + } + } else if (queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD || queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##NRValue",&queryReplaceNote,1,12)) { + if (queryReplaceNote<-180) queryReplaceNote=-180; + if (queryReplaceNote>180) queryReplaceNote=180; + } + } + ImGui::EndDisabled(); ImGui::TableNextRow(); ImGui::TableNextColumn(); @@ -384,6 +427,19 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("##IRMode",&queryReplaceInsMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (queryReplaceInsMode==GUI_QUERY_REPLACE_SET) { + if (ImGui::InputScalar("##IRValueH",ImGuiDataType_S32,&queryReplaceIns,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { + if (queryReplaceIns<0) queryReplaceIns=0; + if (queryReplaceIns>255) queryReplaceIns=255; + } + } else if (queryReplaceInsMode==GUI_QUERY_REPLACE_ADD || queryReplaceInsMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##IRValue",&queryReplaceIns,1,12)) { + if (queryReplaceIns<-255) queryReplaceIns=-255; + if (queryReplaceIns>255) queryReplaceIns=255; + } + } ImGui::TableNextRow(); ImGui::TableNextColumn(); @@ -391,14 +447,27 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("##VRMode",&queryReplaceVolMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); - - /*ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Effect"); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (queryReplaceVolMode==GUI_QUERY_REPLACE_SET) { + if (ImGui::InputScalar("##VRValueH",ImGuiDataType_S32,&queryReplaceVol,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { + if (queryReplaceVol<0) queryReplaceVol=0; + if (queryReplaceVol>255) queryReplaceVol=255; + } + } else if (queryReplaceVolMode==GUI_QUERY_REPLACE_ADD || queryReplaceVolMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##VRValue",&queryReplaceVol,1,12)) { + if (queryReplaceVol<-255) queryReplaceVol=-255; + if (queryReplaceVol>255) queryReplaceVol=255; + } + } ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Value");*/ + ImGui::Text("Later"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Later"); ImGui::EndTable(); } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index ed1805f7..c1107d2e 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4431,6 +4431,25 @@ FurnaceGUI::FurnaceGUI(): wavePreviewLen(32), wavePreviewHeight(255), wavePreviewInit(true), + pgSys(0), + pgAddr(0), + pgVal(0), + curQueryRangeX(false), + curQueryBackwards(false), + curQueryRangeXMin(0), curQueryRangeXMax(0), + curQueryRangeY(0), + curQueryEffectPos(0), + queryReplaceEffectCount(0), + queryReplaceEffectPos(0), + queryReplaceNoteMode(0), + queryReplaceInsMode(0), + queryReplaceVolMode(0), + queryReplaceNote(0), + queryReplaceIns(0), + queryReplaceVol(0), + queryReplaceNoteDo(false), + queryReplaceInsDo(false), + queryReplaceVolDo(false), wavePreviewOn(false), wavePreviewKey((SDL_Scancode)0), wavePreviewNote(0), @@ -4624,4 +4643,11 @@ FurnaceGUI::FurnaceGUI(): memset(pianoKeyHit,0,sizeof(float)*180); memset(pianoKeyPressed,0,sizeof(bool)*180); + + memset(queryReplaceEffectMode,0,sizeof(int)*8); + memset(queryReplaceEffectValMode,0,sizeof(int)*8); + memset(queryReplaceEffect,0,sizeof(int)*8); + memset(queryReplaceEffectVal,0,sizeof(int)*8); + memset(queryReplaceEffectDo,0,sizeof(bool)*8); + memset(queryReplaceEffectValDo,0,sizeof(bool)*8); } diff --git a/src/gui/gui.h b/src/gui/gui.h index 107deb9d..8d565da2 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1171,7 +1171,7 @@ class FurnaceGUI { int pgSys, pgAddr, pgVal; std::vector curQuery; - bool curQueryRangeX, curQueryFromStart, curQueryBackwards; + bool curQueryRangeX, curQueryBackwards; int curQueryRangeXMin, curQueryRangeXMax; int curQueryRangeY; int curQueryEffectPos; diff --git a/src/gui/intConst.cpp b/src/gui/intConst.cpp index 9c7f53b9..8bee0f88 100644 --- a/src/gui/intConst.cpp +++ b/src/gui/intConst.cpp @@ -25,6 +25,7 @@ const int _THREE=3; const int _SEVEN=7; const int _TEN=10; const int _FIFTEEN=15; +const int _SIXTEEN=16; const int _THIRTY_ONE=31; const int _SIXTY_FOUR=64; const int _ONE_HUNDRED=100; diff --git a/src/gui/intConst.h b/src/gui/intConst.h index c6b13b9a..98c6c34f 100644 --- a/src/gui/intConst.h +++ b/src/gui/intConst.h @@ -27,6 +27,7 @@ extern const int _THREE; extern const int _SEVEN; extern const int _TEN; extern const int _FIFTEEN; +extern const int _SIXTEEN; extern const int _THIRTY_ONE; extern const int _SIXTY_FOUR; extern const int _ONE_HUNDRED; From 30bd73f83a5306fecfe2cc33591addf8f1f653cb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 10 Jun 2022 02:17:17 -0500 Subject: [PATCH 049/152] GUI: find and replace, part 7 the next parts will be dedicated on getting it working --- src/gui/findReplace.cpp | 69 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 7ac12d1d..36048737 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -425,6 +425,7 @@ void FurnaceGUI::drawFindReplace() { ImGui::TableNextColumn(); ImGui::Checkbox("Ins",&queryReplaceInsDo); ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceInsDo); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("##IRMode",&queryReplaceInsMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); ImGui::TableNextColumn(); @@ -440,11 +441,13 @@ void FurnaceGUI::drawFindReplace() { if (queryReplaceIns>255) queryReplaceIns=255; } } + ImGui::EndDisabled(); ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::Checkbox("Volume",&queryReplaceVolDo); ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceVolDo); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("##VRMode",&queryReplaceVolMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); ImGui::TableNextColumn(); @@ -460,14 +463,72 @@ void FurnaceGUI::drawFindReplace() { if (queryReplaceVol>255) queryReplaceVol=255; } } + ImGui::EndDisabled(); + + for (int i=0; i255) queryReplaceEffect[i]=255; + } + } else if (queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##ERValue",&queryReplaceEffect[i],1,12)) { + if (queryReplaceEffect[i]<-255) queryReplaceEffect[i]=-255; + if (queryReplaceEffect[i]>255) queryReplaceEffect[i]=255; + } + } + ImGui::EndDisabled(); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Checkbox("Value",&queryReplaceEffectValDo[i]); + ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceEffectValDo[i]); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##ERMode",&queryReplaceEffectValMode[i],queryReplaceModes,GUI_QUERY_REPLACE_MAX); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_SET) { + if (ImGui::InputScalar("##ERValueH",ImGuiDataType_S32,&queryReplaceEffectVal[i],&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { + if (queryReplaceEffectVal[i]<0) queryReplaceEffectVal[i]=0; + if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255; + } + } else if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##ERValue",&queryReplaceEffectVal[i],1,12)) { + if (queryReplaceEffectVal[i]<-255) queryReplaceEffectVal[i]=-255; + if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255; + } + } + ImGui::EndDisabled(); + + + ImGui::PopID(); + } ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Later"); - - ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Later"); + if (queryReplaceEffectCount<8) { + if (ImGui::Button("Add effect")) { + queryReplaceEffectCount++; + } + } + ImGui::TableNextColumn(); + if (queryReplaceEffectCount>0) { + if (ImGui::Button("Remove effect")) { + queryReplaceEffectCount--; + } + } ImGui::EndTable(); } From fa9fb6f8f5e79488f4739b3497b6b74d10df4237 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 10 Jun 2022 18:27:47 -0500 Subject: [PATCH 050/152] GUI: find and replace, part 8 --- src/gui/findReplace.cpp | 127 ++++++++++++++++++++++++++++++++++++++++ src/gui/gui.h | 16 +++++ 2 files changed, 143 insertions(+) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 36048737..a7dad8e8 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -22,6 +22,133 @@ const char* queryReplaceModes[GUI_QUERY_REPLACE_MAX]={ "clear" }; +int queryNote(int note, int octave) { + if (note==100) { + return 128; + } else if (note==101) { // note off and envelope release + return 129; + } else if (note==102) { // envelope release only + return 130; + } else if (octave==0 && note==0) { + return -1; + } else if (note==0 && octave!=0) { + return -1; // bug note? + } + int seek=(note+(signed char)octave*12); + if (seek<-60 || seek>=120) { + return -1; // out of range note + } + return seek; +} + +bool checkCondition(int mode, int arg, int argMax, int val, bool noteMode=false) { + switch (mode) { + case GUI_QUERY_IGNORE: + return true; + break; + case GUI_QUERY_MATCH: + return (val==arg); + break; + case GUI_QUERY_MATCH_NOT: + return (val!=-1 && val!=arg); + break; + case GUI_QUERY_RANGE: + return (val>=arg && val<=argMax); + break; + case GUI_QUERY_RANGE_NOT: + return (val!=-1 && (valargMax) && (!noteMode || val<120)); + break; + case GUI_QUERY_ANY: + return (val!=-1); + break; + case GUI_QUERY_NONE: + return (val==-1); + break; + } + return false; +} + +void FurnaceGUI::doFind() { + int firstOrder=0; + int lastOrder=e->curSubSong->ordersLen-1; + + if (curQueryRangeY==1 || curQueryRangeY==2) { + firstOrder=curOrder; + lastOrder=curOrder; + } + + int firstRow=0; + int lastRow=e->curSubSong->patLen-1; + + if (curQueryRangeY==1) { + firstRow=selStart.y; + lastRow=selEnd.y; + } + + int firstChan=0; + int lastChan=e->getTotalChannelCount()-1; + + if (curQueryRangeX) { + firstChan=curQueryRangeXMin; + lastChan=curQueryRangeXMax; + } + + curQueryResults.clear(); + + for (int i=firstOrder; i<=lastOrder; i++) { + for (int j=firstRow; j<=lastRow; j++) { + for (int k=firstChan; k<=lastChan; k++) { + DivPattern* p=e->curPat[k].getPattern(e->curOrders->ord[k][i],false); + bool matched=false; + for (FurnaceGUIFindQuery& l: curQuery) { + if (matched) break; + + if (!checkCondition(l.noteMode,l.note,l.noteMax,queryNote(p->data[j][0],p->data[j][1]),true)) continue; + if (!checkCondition(l.insMode,l.ins,l.insMax,p->data[j][2])) continue; + if (!checkCondition(l.volMode,l.vol,l.volMax,p->data[j][3])) continue; + + if (l.effectCount>0) { + bool notMatched=false; + switch (curQueryEffectPos) { + case 0: // no + // TODO + for (int m=0; mcurPat[k].effectCols; n++) { + if (!checkCondition(l.effectMode[m],l.effect[m],l.effectMax[m],p->data[j][4+m*2])) continue; + if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) continue; + } + } + break; + case 1: // lax + break; + case 2: // strict + for (int m=0; mdata[j][4+m*2])) { + notMatched=true; + break; + } + if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) { + notMatched=true; + break; + } + } + break; + } + if (notMatched) continue; + } + + matched=true; + } + if (matched) { + curQueryResults.push_back(FurnaceGUIQueryResult(e->getCurrentSubSong(),i,j,k)); + } + } + } + } + + printf("%d %d %d %d\n",firstOrder,lastOrder,firstRow,lastRow); +} + #define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) #define SECOND_VISIBLE(x) (x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) diff --git a/src/gui/gui.h b/src/gui/gui.h index 8d565da2..260a7341 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -856,6 +856,20 @@ struct FurnaceGUIFindQuery { } }; +struct FurnaceGUIQueryResult { + int subsong, order, x, y; + FurnaceGUIQueryResult(): + subsong(0), + order(0), + x(0), + y(0) {} + FurnaceGUIQueryResult(int ss, int o, int xPos, int yPos): + subsong(ss), + order(o), + x(xPos), + y(yPos) {} +}; + class FurnaceGUI { DivEngine* e; @@ -1171,6 +1185,7 @@ class FurnaceGUI { int pgSys, pgAddr, pgVal; std::vector curQuery; + std::vector curQueryResults; bool curQueryRangeX, curQueryBackwards; int curQueryRangeXMin, curQueryRangeXMax; int curQueryRangeY; @@ -1475,6 +1490,7 @@ class FurnaceGUI { void doExpand(int multiplier); void doUndo(); void doRedo(); + void doFind(); void editOptions(bool topMenu); void noteInput(int num, int key, int vol=-1); void valueInput(int num, bool direct=false, int target=-1); From 7354b1221ce7b9f554fabc78076ae7870e42b2c9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 11 Jun 2022 02:14:30 -0500 Subject: [PATCH 051/152] GUI: find and replace, part 9 --- src/gui/findReplace.cpp | 1022 +++++++++++++++++++++------------------ src/gui/gui.cpp | 1 + src/gui/gui.h | 1 + 3 files changed, 549 insertions(+), 475 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index a7dad8e8..700078bb 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -4,6 +4,7 @@ #include "misc/cpp/imgui_stdlib.h" #include "guiConst.h" #include "intConst.h" +#include "../ta-log.h" const char* queryModes[GUI_QUERY_MAX]={ "ignore", @@ -140,13 +141,12 @@ void FurnaceGUI::doFind() { matched=true; } if (matched) { - curQueryResults.push_back(FurnaceGUIQueryResult(e->getCurrentSubSong(),i,j,k)); + curQueryResults.push_back(FurnaceGUIQueryResult(e->getCurrentSubSong(),i,k,j)); } } } } - - printf("%d %d %d %d\n",firstOrder,lastOrder,firstRow,lastRow); + queryViewingResults=true; } #define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) @@ -167,515 +167,587 @@ void FurnaceGUI::drawFindReplace() { int index=0; int eraseIndex=-1; char tempID[1024]; - for (FurnaceGUIFindQuery& i: curQuery) { - if (ImGui::BeginTable("FindRep",4,ImGuiTableFlags_BordersOuter)) { - ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); - ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.25); - ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.25); - ImGui::PushID(index); - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("Note"); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##NCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); - ImGui::TableNextColumn(); - if (FIRST_VISIBLE(i.noteMode)) { - if ((i.noteMode==GUI_QUERY_RANGE || i.noteMode==GUI_QUERY_RANGE_NOT) && i.note>=120) { - i.note=0; - } - if (i.note==130) { - snprintf(tempID,1024,"REL"); - } else if (i.note==129) { - snprintf(tempID,1024,"==="); - } else if (i.note==128) { - snprintf(tempID,1024,"OFF"); - } else if (i.note>=-60 && i.note<120) { - snprintf(tempID,1024,"%s",noteNames[i.note+60]); + if (ImGui::BeginTabBar("FindOrReplace")) { + if (ImGui::BeginTabItem("Find")) { + if (queryViewingResults) { + if (!curQueryResults.empty()) { + ImVec2 avail=ImGui::GetContentRegionAvail(); + avail.y-=ImGui::GetFrameHeightWithSpacing(); + if (ImGui::BeginTable("FindResults",4,ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollY,avail)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("order").x); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("row").x); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch); + ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed); + + ImGui::TableSetupScrollFreeze(0,1); + + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); + ImGui::TableNextColumn(); + ImGui::Text("order"); + ImGui::TableNextColumn(); + ImGui::Text("row"); + ImGui::TableNextColumn(); + ImGui::Text("channel"); + ImGui::TableNextColumn(); + ImGui::Text("go"); + + int index=0; + for (FurnaceGUIQueryResult& i: curQueryResults) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (settings.orderRowsBase==1) { + ImGui::Text("%.2X",i.order); + } else { + ImGui::Text("%d",i.order); + } + ImGui::TableNextColumn(); + if (settings.patRowsBase==1) { + ImGui::Text("%.2X",i.y); + } else { + ImGui::Text("%d",i.y); + } + ImGui::TableNextColumn(); + ImGui::Text("%d (%s)",i.x+1,e->getChannelName(i.x)); + if (ImGui::TableNextColumn()) { + snprintf(tempID,1024,ICON_FA_CHEVRON_RIGHT "##_FR%d",index); + if (ImGui::Selectable(tempID)) { + e->changeSongP(i.subsong); + if (e->isPlaying()) { + followPattern=false; + } else { + e->setOrder(i.order); + } + curOrder=i.order; + cursor.xCoarse=i.x; + cursor.xFine=0; + cursor.y=i.y; + selStart=cursor; + selEnd=cursor; + demandScrollX=true; + updateScroll(cursor.y); + nextWindow=GUI_WINDOW_PATTERN; + } + } + index++; + } + ImGui::EndTable(); + } } else { - snprintf(tempID,1024,"???"); - i.note=0; + ImGui::Text("no matches found!"); } - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("##NN1",tempID)) { - for (int j=0; j<180; j++) { - snprintf(tempID,1024,"%s",noteNames[j]); - if (ImGui::Selectable(tempID,i.note==(j-60))) { - i.note=j-60; - } - } - if (i.noteMode!=GUI_QUERY_RANGE && i.noteMode!=GUI_QUERY_RANGE_NOT) { - if (ImGui::Selectable("OFF",i.note==128)) { - i.note=128; - } - if (ImGui::Selectable("===",i.note==129)) { - i.note=129; - } - if (ImGui::Selectable("REL",i.note==130)) { - i.note=130; - } - } - ImGui::EndCombo(); + if (ImGui::Button("Back")) { + queryViewingResults=false; } - } - ImGui::TableNextColumn(); - if (SECOND_VISIBLE(i.noteMode)) { - if (i.noteMax<-60 || i.noteMax>=120) { - i.noteMax=0; - } - if (i.noteMax>=-60 && i.noteMax<120) { - snprintf(tempID,1024,"%s",noteNames[i.noteMax+60]); - } else { - snprintf(tempID,1024,"???"); - } - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("##NN2",tempID)) { - for (int j=0; j<180; j++) { - snprintf(tempID,1024,"%s",noteNames[j]); - if (ImGui::Selectable(tempID,i.noteMax==(j-60))) { - i.noteMax=j-60; + } else { + for (FurnaceGUIFindQuery& i: curQuery) { + ImGui::PushID(index+0x100); + if (ImGui::BeginTable("FindRep",4,ImGuiTableFlags_BordersOuter)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.25); + ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.25); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Note"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##NCondition",&i.noteMode,queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.noteMode)) { + if ((i.noteMode==GUI_QUERY_RANGE || i.noteMode==GUI_QUERY_RANGE_NOT) && i.note>=120) { + i.note=0; + } + if (i.note==130) { + snprintf(tempID,1024,"REL"); + } else if (i.note==129) { + snprintf(tempID,1024,"==="); + } else if (i.note==128) { + snprintf(tempID,1024,"OFF"); + } else if (i.note>=-60 && i.note<120) { + snprintf(tempID,1024,"%s",noteNames[i.note+60]); + } else { + snprintf(tempID,1024,"???"); + i.note=0; + } + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##NN1",tempID)) { + for (int j=0; j<180; j++) { + snprintf(tempID,1024,"%s",noteNames[j]); + if (ImGui::Selectable(tempID,i.note==(j-60))) { + i.note=j-60; + } + } + if (i.noteMode!=GUI_QUERY_RANGE && i.noteMode!=GUI_QUERY_RANGE_NOT) { + if (ImGui::Selectable("OFF",i.note==128)) { + i.note=128; + } + if (ImGui::Selectable("===",i.note==129)) { + i.note=129; + } + if (ImGui::Selectable("REL",i.note==130)) { + i.note=130; + } + } + ImGui::EndCombo(); + } + } + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.noteMode)) { + if (i.noteMax<-60 || i.noteMax>=120) { + i.noteMax=0; + } + if (i.noteMax>=-60 && i.noteMax<120) { + snprintf(tempID,1024,"%s",noteNames[i.noteMax+60]); + } else { + snprintf(tempID,1024,"???"); + } + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##NN2",tempID)) { + for (int j=0; j<180; j++) { + snprintf(tempID,1024,"%s",noteNames[j]); + if (ImGui::Selectable(tempID,i.noteMax==(j-60))) { + i.noteMax=j-60; + } + } + ImGui::EndCombo(); + } } - } - ImGui::EndCombo(); - } - } - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("Ins"); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##ICondition",&i.insMode,queryModes,GUI_QUERY_MAX); - ImGui::TableNextColumn(); - if (FIRST_VISIBLE(i.insMode)) { - snprintf(tempID,1024,"%.2X",i.ins); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("II1",tempID)) { - for (int j=0; j<256; j++) { - snprintf(tempID,1024,"%.2X",j); - if (ImGui::Selectable(tempID,i.ins==j)) { - i.ins=j; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Ins"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##ICondition",&i.insMode,queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.insMode)) { + snprintf(tempID,1024,"%.2X",i.ins); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("II1",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.ins==j)) { + i.ins=j; + } + } + ImGui::EndCombo(); + } } - } - ImGui::EndCombo(); - } - } - ImGui::TableNextColumn(); - if (SECOND_VISIBLE(i.insMode)) { - snprintf(tempID,1024,"%.2X",i.insMax); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("II2",tempID)) { - for (int j=0; j<256; j++) { - snprintf(tempID,1024,"%.2X",j); - if (ImGui::Selectable(tempID,i.insMax==j)) { - i.insMax=j; + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.insMode)) { + snprintf(tempID,1024,"%.2X",i.insMax); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("II2",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.insMax==j)) { + i.insMax=j; + } + } + ImGui::EndCombo(); + } } - } - ImGui::EndCombo(); - } - } - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("Volume"); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##VCondition",&i.volMode,queryModes,GUI_QUERY_MAX); - ImGui::TableNextColumn(); - if (FIRST_VISIBLE(i.volMode)) { - snprintf(tempID,1024,"%.2X",i.vol); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("VV1",tempID)) { - for (int j=0; j<256; j++) { - snprintf(tempID,1024,"%.2X",j); - if (ImGui::Selectable(tempID,i.vol==j)) { - i.vol=j; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Volume"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##VCondition",&i.volMode,queryModes,GUI_QUERY_MAX); + ImGui::TableNextColumn(); + if (FIRST_VISIBLE(i.volMode)) { + snprintf(tempID,1024,"%.2X",i.vol); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("VV1",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.vol==j)) { + i.vol=j; + } + } + ImGui::EndCombo(); + } } - } - ImGui::EndCombo(); - } - } - ImGui::TableNextColumn(); - if (SECOND_VISIBLE(i.volMode)) { - snprintf(tempID,1024,"%.2X",i.volMax); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("VV2",tempID)) { - for (int j=0; j<256; j++) { - snprintf(tempID,1024,"%.2X",j); - if (ImGui::Selectable(tempID,i.volMax==j)) { - i.volMax=j; + ImGui::TableNextColumn(); + if (SECOND_VISIBLE(i.volMode)) { + snprintf(tempID,1024,"%.2X",i.volMax); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("VV2",tempID)) { + for (int j=0; j<256; j++) { + snprintf(tempID,1024,"%.2X",j); + if (ImGui::Selectable(tempID,i.volMax==j)) { + i.volMax=j; + } + } + ImGui::EndCombo(); + } } - } - ImGui::EndCombo(); - } - } - for (int j=0; j0) { + if (ImGui::Button("Remove effect")) { + i.effectCount--; + } + } + ImGui::EndTable(); + } + ImGui::PopID(); + index++; + } + if (eraseIndex>=0) { + curQuery.erase(curQuery.begin()+eraseIndex); + } + if (ImGui::Button(ICON_FA_PLUS "##AddQuery")) { + curQuery.push_back(FurnaceGUIFindQuery()); + } + + if (ImGui::BeginTable("QueryLimits",3)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5f); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5f); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + + ImGui::Text("Search range:"); + + if (ImGui::RadioButton("Song",curQueryRangeY==0)) { + curQueryRangeY=0; + } + if (ImGui::RadioButton("Selection",curQueryRangeY==1)) { + curQueryRangeY=1; + } + if (ImGui::RadioButton("Pattern",curQueryRangeY==2)) { + curQueryRangeY=2; + } + + ImGui::TableNextColumn(); + ImGui::Checkbox("Confine to channels",&curQueryRangeX); + + ImGui::BeginDisabled(!curQueryRangeX); + snprintf(tempID,1024,"%d: %s",curQueryRangeXMin+1,e->getChannelName(curQueryRangeXMin)); + if (ImGui::BeginCombo("From",tempID)) { + for (int i=0; igetTotalChannelCount(); i++) { + snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i)); + if (ImGui::Selectable(tempID,curQueryRangeXMin==i)) { + curQueryRangeXMin=i; + } + } + ImGui::EndCombo(); + } + + snprintf(tempID,1024,"%d: %s",curQueryRangeXMax+1,e->getChannelName(curQueryRangeXMax)); + if (ImGui::BeginCombo("To",tempID)) { + for (int i=0; igetTotalChannelCount(); i++) { + snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i)); + if (ImGui::Selectable(tempID,curQueryRangeXMax==i)) { + curQueryRangeXMax=i; + } + } + ImGui::EndCombo(); + } + ImGui::EndDisabled(); + + ImGui::TableNextColumn(); + ImGui::Text("Match effect position:"); + + if (ImGui::RadioButton("No",curQueryEffectPos==0)) { + curQueryEffectPos=0; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("match effects regardless of position."); + } + if (ImGui::RadioButton("Lax",curQueryEffectPos==1)) { + curQueryEffectPos=1; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("match effects only if they appear in-order."); + } + if (ImGui::RadioButton("Strict",curQueryEffectPos==2)) { + curQueryEffectPos=2; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("match effects only if they appear exactly as specified."); + } + + ImGui::EndTable(); + } + + if (ImGui::Button("Find")) { + doFind(); + } + } + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Replace")) { + if (ImGui::BeginTable("QueryReplace",3,ImGuiTableFlags_BordersOuter)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5); + ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Text("Effect"); + ImGui::Checkbox("Note",&queryReplaceNoteDo); + ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceNoteDo); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##NRMode",&queryReplaceNoteMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##ECondition",&i.effectMode[j],queryModes,GUI_QUERY_MAX); - ImGui::TableNextColumn(); - if (FIRST_VISIBLE(i.effectMode[j])) { - snprintf(tempID,1024,"%.2X",i.effect[j]); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("EE1",tempID)) { - for (int k=0; k<256; k++) { - snprintf(tempID,1024,"%.2X",k); - if (ImGui::Selectable(tempID,i.effect[j]==k)) { - i.effect[j]=k; + if (queryReplaceNoteMode==GUI_QUERY_REPLACE_SET) { + if (queryReplaceNote==130) { + snprintf(tempID,1024,"REL"); + } else if (queryReplaceNote==129) { + snprintf(tempID,1024,"==="); + } else if (queryReplaceNote==128) { + snprintf(tempID,1024,"OFF"); + } else if (queryReplaceNote>=-60 && queryReplaceNote<120) { + snprintf(tempID,1024,"%s",noteNames[queryReplaceNote+60]); + } else { + snprintf(tempID,1024,"???"); + queryReplaceNote=0; + } + if (ImGui::BeginCombo("##NRValueC",tempID)) { + for (int j=0; j<180; j++) { + snprintf(tempID,1024,"%s",noteNames[j]); + if (ImGui::Selectable(tempID,queryReplaceNote==(j-60))) { + queryReplaceNote=j-60; } } + if (ImGui::Selectable("OFF",queryReplaceNote==128)) { + queryReplaceNote=128; + } + if (ImGui::Selectable("===",queryReplaceNote==129)) { + queryReplaceNote=129; + } + if (ImGui::Selectable("REL",queryReplaceNote==130)) { + queryReplaceNote=130; + } ImGui::EndCombo(); } - } - ImGui::TableNextColumn(); - if (SECOND_VISIBLE(i.effectMode[j])) { - snprintf(tempID,1024,"%.2X",i.effectMax[j]); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("EE2",tempID)) { - for (int k=0; k<256; k++) { - snprintf(tempID,1024,"%.2X",k); - if (ImGui::Selectable(tempID,i.effectMax[j]==k)) { - i.effectMax[j]=k; - } - } - ImGui::EndCombo(); - } - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("Value"); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##EVCondition",&i.effectValMode[j],queryModes,GUI_QUERY_MAX); - ImGui::TableNextColumn(); - if (FIRST_VISIBLE(i.effectValMode[j])) { - snprintf(tempID,1024,"%.2X",i.effectVal[j]); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("EV1",tempID)) { - for (int k=0; k<256; k++) { - snprintf(tempID,1024,"%.2X",k); - if (ImGui::Selectable(tempID,i.effectVal[j]==k)) { - i.effectVal[j]=k; - } - } - ImGui::EndCombo(); - } - } - ImGui::TableNextColumn(); - if (SECOND_VISIBLE(i.effectValMode[j])) { - snprintf(tempID,1024,"%.2X",i.effectValMax[j]); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("EV2",tempID)) { - for (int k=0; k<256; k++) { - snprintf(tempID,1024,"%.2X",k); - if (ImGui::Selectable(tempID,i.effectValMax[j]==k)) { - i.effectValMax[j]=k; - } - } - ImGui::EndCombo(); - } - } - - ImGui::PopID(); - } - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) { - eraseIndex=index; - } - ImGui::TableNextColumn(); - if (i.effectCount<8) { - if (ImGui::Button("Add effect")) { - i.effectCount++; - } - } - ImGui::TableNextColumn(); - if (i.effectCount>0) { - if (ImGui::Button("Remove effect")) { - i.effectCount--; - } - } - ImGui::PopID(); - ImGui::EndTable(); - } - index++; - } - if (ImGui::Button("Find")) { - - } - ImGui::SameLine(); - if (eraseIndex>=0) { - curQuery.erase(curQuery.begin()+eraseIndex); - } - if (ImGui::Button(ICON_FA_PLUS "##AddQuery")) { - curQuery.push_back(FurnaceGUIFindQuery()); - } - - if (ImGui::BeginTable("QueryLimits",3)) { - ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5f); - ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5f); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - - ImGui::Text("Search range:"); - - if (ImGui::RadioButton("Song",curQueryRangeY==0)) { - curQueryRangeY=0; - } - if (ImGui::RadioButton("Selection",curQueryRangeY==1)) { - curQueryRangeY=1; - } - if (ImGui::RadioButton("Pattern",curQueryRangeY==2)) { - curQueryRangeY=2; - } - - ImGui::TableNextColumn(); - ImGui::Checkbox("Confine to channels",&curQueryRangeX); - - ImGui::BeginDisabled(!curQueryRangeX); - snprintf(tempID,1024,"%d: %s",curQueryRangeXMin+1,e->getChannelName(curQueryRangeXMin)); - if (ImGui::BeginCombo("From",tempID)) { - for (int i=0; igetTotalChannelCount(); i++) { - snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i)); - if (ImGui::Selectable(tempID,curQueryRangeXMin==i)) { - curQueryRangeXMin=i; - } - } - ImGui::EndCombo(); - } - - snprintf(tempID,1024,"%d: %s",curQueryRangeXMax+1,e->getChannelName(curQueryRangeXMax)); - if (ImGui::BeginCombo("To",tempID)) { - for (int i=0; igetTotalChannelCount(); i++) { - snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i)); - if (ImGui::Selectable(tempID,curQueryRangeXMax==i)) { - curQueryRangeXMax=i; - } - } - ImGui::EndCombo(); - } - ImGui::EndDisabled(); - - ImGui::TableNextColumn(); - ImGui::Text("Match effect position:"); - - if (ImGui::RadioButton("No",curQueryEffectPos==0)) { - curQueryEffectPos=0; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("match effects regardless of position."); - } - if (ImGui::RadioButton("Lax",curQueryEffectPos==1)) { - curQueryEffectPos=1; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("match effects only if they appear in-order."); - } - if (ImGui::RadioButton("Strict",curQueryEffectPos==2)) { - curQueryEffectPos=2; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("match effects only if they appear exactly as specified."); - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Checkbox("Backwards",&curQueryBackwards); - - ImGui::EndTable(); - } - - if (ImGui::TreeNode("Replace")) { - if (ImGui::BeginTable("QueryReplace",3,ImGuiTableFlags_BordersOuter)) { - ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5); - ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Checkbox("Note",&queryReplaceNoteDo); - ImGui::TableNextColumn(); - ImGui::BeginDisabled(!queryReplaceNoteDo); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##NRMode",&queryReplaceNoteMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (queryReplaceNoteMode==GUI_QUERY_REPLACE_SET) { - if (queryReplaceNote==130) { - snprintf(tempID,1024,"REL"); - } else if (queryReplaceNote==129) { - snprintf(tempID,1024,"==="); - } else if (queryReplaceNote==128) { - snprintf(tempID,1024,"OFF"); - } else if (queryReplaceNote>=-60 && queryReplaceNote<120) { - snprintf(tempID,1024,"%s",noteNames[queryReplaceNote+60]); - } else { - snprintf(tempID,1024,"???"); - queryReplaceNote=0; - } - if (ImGui::BeginCombo("##NRValueC",tempID)) { - for (int j=0; j<180; j++) { - snprintf(tempID,1024,"%s",noteNames[j]); - if (ImGui::Selectable(tempID,queryReplaceNote==(j-60))) { - queryReplaceNote=j-60; - } - } - if (ImGui::Selectable("OFF",queryReplaceNote==128)) { - queryReplaceNote=128; - } - if (ImGui::Selectable("===",queryReplaceNote==129)) { - queryReplaceNote=129; - } - if (ImGui::Selectable("REL",queryReplaceNote==130)) { - queryReplaceNote=130; - } - ImGui::EndCombo(); - } - } else if (queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD || queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { - if (ImGui::InputInt("##NRValue",&queryReplaceNote,1,12)) { - if (queryReplaceNote<-180) queryReplaceNote=-180; - if (queryReplaceNote>180) queryReplaceNote=180; - } - } - ImGui::EndDisabled(); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Checkbox("Ins",&queryReplaceInsDo); - ImGui::TableNextColumn(); - ImGui::BeginDisabled(!queryReplaceInsDo); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##IRMode",&queryReplaceInsMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (queryReplaceInsMode==GUI_QUERY_REPLACE_SET) { - if (ImGui::InputScalar("##IRValueH",ImGuiDataType_S32,&queryReplaceIns,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { - if (queryReplaceIns<0) queryReplaceIns=0; - if (queryReplaceIns>255) queryReplaceIns=255; - } - } else if (queryReplaceInsMode==GUI_QUERY_REPLACE_ADD || queryReplaceInsMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { - if (ImGui::InputInt("##IRValue",&queryReplaceIns,1,12)) { - if (queryReplaceIns<-255) queryReplaceIns=-255; - if (queryReplaceIns>255) queryReplaceIns=255; - } - } - ImGui::EndDisabled(); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Checkbox("Volume",&queryReplaceVolDo); - ImGui::TableNextColumn(); - ImGui::BeginDisabled(!queryReplaceVolDo); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##VRMode",&queryReplaceVolMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (queryReplaceVolMode==GUI_QUERY_REPLACE_SET) { - if (ImGui::InputScalar("##VRValueH",ImGuiDataType_S32,&queryReplaceVol,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { - if (queryReplaceVol<0) queryReplaceVol=0; - if (queryReplaceVol>255) queryReplaceVol=255; - } - } else if (queryReplaceVolMode==GUI_QUERY_REPLACE_ADD || queryReplaceVolMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { - if (ImGui::InputInt("##VRValue",&queryReplaceVol,1,12)) { - if (queryReplaceVol<-255) queryReplaceVol=-255; - if (queryReplaceVol>255) queryReplaceVol=255; - } - } - ImGui::EndDisabled(); - - for (int i=0; i255) queryReplaceEffect[i]=255; - } - } else if (queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) { - if (ImGui::InputInt("##ERValue",&queryReplaceEffect[i],1,12)) { - if (queryReplaceEffect[i]<-255) queryReplaceEffect[i]=-255; - if (queryReplaceEffect[i]>255) queryReplaceEffect[i]=255; + } else if (queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD || queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##NRValue",&queryReplaceNote,1,12)) { + if (queryReplaceNote<-180) queryReplaceNote=-180; + if (queryReplaceNote>180) queryReplaceNote=180; } } ImGui::EndDisabled(); ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Checkbox("Value",&queryReplaceEffectValDo[i]); + ImGui::Checkbox("Ins",&queryReplaceInsDo); ImGui::TableNextColumn(); - ImGui::BeginDisabled(!queryReplaceEffectValDo[i]); + ImGui::BeginDisabled(!queryReplaceInsDo); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::Combo("##ERMode",&queryReplaceEffectValMode[i],queryReplaceModes,GUI_QUERY_REPLACE_MAX); + ImGui::Combo("##IRMode",&queryReplaceInsMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_SET) { - if (ImGui::InputScalar("##ERValueH",ImGuiDataType_S32,&queryReplaceEffectVal[i],&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { - if (queryReplaceEffectVal[i]<0) queryReplaceEffectVal[i]=0; - if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255; + if (queryReplaceInsMode==GUI_QUERY_REPLACE_SET) { + if (ImGui::InputScalar("##IRValueH",ImGuiDataType_S32,&queryReplaceIns,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { + if (queryReplaceIns<0) queryReplaceIns=0; + if (queryReplaceIns>255) queryReplaceIns=255; } - } else if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) { - if (ImGui::InputInt("##ERValue",&queryReplaceEffectVal[i],1,12)) { - if (queryReplaceEffectVal[i]<-255) queryReplaceEffectVal[i]=-255; - if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255; + } else if (queryReplaceInsMode==GUI_QUERY_REPLACE_ADD || queryReplaceInsMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##IRValue",&queryReplaceIns,1,12)) { + if (queryReplaceIns<-255) queryReplaceIns=-255; + if (queryReplaceIns>255) queryReplaceIns=255; } } ImGui::EndDisabled(); - - ImGui::PopID(); - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::TableNextColumn(); - if (queryReplaceEffectCount<8) { - if (ImGui::Button("Add effect")) { - queryReplaceEffectCount++; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Checkbox("Volume",&queryReplaceVolDo); + ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceVolDo); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##VRMode",&queryReplaceVolMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (queryReplaceVolMode==GUI_QUERY_REPLACE_SET) { + if (ImGui::InputScalar("##VRValueH",ImGuiDataType_S32,&queryReplaceVol,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { + if (queryReplaceVol<0) queryReplaceVol=0; + if (queryReplaceVol>255) queryReplaceVol=255; + } + } else if (queryReplaceVolMode==GUI_QUERY_REPLACE_ADD || queryReplaceVolMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##VRValue",&queryReplaceVol,1,12)) { + if (queryReplaceVol<-255) queryReplaceVol=-255; + if (queryReplaceVol>255) queryReplaceVol=255; + } } - } - ImGui::TableNextColumn(); - if (queryReplaceEffectCount>0) { - if (ImGui::Button("Remove effect")) { - queryReplaceEffectCount--; - } - } + ImGui::EndDisabled(); - ImGui::EndTable(); + for (int i=0; i255) queryReplaceEffect[i]=255; + } + } else if (queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##ERValue",&queryReplaceEffect[i],1,12)) { + if (queryReplaceEffect[i]<-255) queryReplaceEffect[i]=-255; + if (queryReplaceEffect[i]>255) queryReplaceEffect[i]=255; + } + } + ImGui::EndDisabled(); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Checkbox("Value",&queryReplaceEffectValDo[i]); + ImGui::TableNextColumn(); + ImGui::BeginDisabled(!queryReplaceEffectValDo[i]); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::Combo("##ERMode",&queryReplaceEffectValMode[i],queryReplaceModes,GUI_QUERY_REPLACE_MAX); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_SET) { + if (ImGui::InputScalar("##ERValueH",ImGuiDataType_S32,&queryReplaceEffectVal[i],&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) { + if (queryReplaceEffectVal[i]<0) queryReplaceEffectVal[i]=0; + if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255; + } + } else if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) { + if (ImGui::InputInt("##ERValue",&queryReplaceEffectVal[i],1,12)) { + if (queryReplaceEffectVal[i]<-255) queryReplaceEffectVal[i]=-255; + if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255; + } + } + ImGui::EndDisabled(); + + + ImGui::PopID(); + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::TableNextColumn(); + if (queryReplaceEffectCount<8) { + if (ImGui::Button("Add effect")) { + queryReplaceEffectCount++; + } + } + ImGui::TableNextColumn(); + if (queryReplaceEffectCount>0) { + if (ImGui::Button("Remove effect")) { + queryReplaceEffectCount--; + } + } + + ImGui::EndTable(); + } + ImGui::Text("Effect replace mode:"); + if (ImGui::RadioButton("Clear effects",queryReplaceEffectPos==0)) { + queryReplaceEffectPos=0; + } + if (ImGui::RadioButton("Replace matches only",queryReplaceEffectPos==1)) { + queryReplaceEffectPos=1; + } + if (ImGui::RadioButton("Replace matches, then free spaces",queryReplaceEffectPos==2)) { + queryReplaceEffectPos=2; + } + if (ImGui::RadioButton("Insert in free spaces",queryReplaceEffectPos==3)) { + queryReplaceEffectPos=3; + } + if (ImGui::Button("Replace##QueryReplace")) { + // TODO + } + ImGui::EndTabItem(); } - ImGui::Text("Effect replace mode:"); - if (ImGui::RadioButton("Clear effects",queryReplaceEffectPos==0)) { - queryReplaceEffectPos=0; - } - if (ImGui::RadioButton("Replace matches only",queryReplaceEffectPos==1)) { - queryReplaceEffectPos=1; - } - if (ImGui::RadioButton("Replace matches, then free spaces",queryReplaceEffectPos==2)) { - queryReplaceEffectPos=2; - } - if (ImGui::RadioButton("Insert in free spaces",queryReplaceEffectPos==3)) { - queryReplaceEffectPos=3; - } - if (ImGui::Button("Replace##QueryReplace")) { - // TODO - } - ImGui::TreePop(); + ImGui::EndTabBar(); } } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_FIND; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index c1107d2e..b982987c 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4450,6 +4450,7 @@ FurnaceGUI::FurnaceGUI(): queryReplaceNoteDo(false), queryReplaceInsDo(false), queryReplaceVolDo(false), + queryViewingResults(false), wavePreviewOn(false), wavePreviewKey((SDL_Scancode)0), wavePreviewNote(0), diff --git a/src/gui/gui.h b/src/gui/gui.h index 260a7341..300fa8fc 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1208,6 +1208,7 @@ class FurnaceGUI { bool queryReplaceVolDo; bool queryReplaceEffectDo[8]; bool queryReplaceEffectValDo[8]; + bool queryViewingResults; struct ActiveNote { int chan; From 44341d8ccd6134b44a44f28fd7e4b177eaa65c37 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 11 Jun 2022 03:53:34 -0500 Subject: [PATCH 052/152] GUI: find and replace, part 10 find kind of works (only lax mode left to do) then i'll do replace --- src/gui/findReplace.cpp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 700078bb..77c1a7e3 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -112,25 +112,36 @@ void FurnaceGUI::doFind() { bool notMatched=false; switch (curQueryEffectPos) { case 0: // no - // TODO for (int m=0; mcurPat[k].effectCols; n++) { - if (!checkCondition(l.effectMode[m],l.effect[m],l.effectMax[m],p->data[j][4+m*2])) continue; - if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) continue; + if (!checkCondition(l.effectMode[m],l.effect[m],l.effectMax[m],p->data[j][4+n*2])) continue; + if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+n*2])) continue; + allGood=true; + break; + } + if (!allGood) { + notMatched=true; + break; } } break; case 1: // lax break; case 2: // strict - for (int m=0; mdata[j][4+m*2])) { - notMatched=true; - break; - } - if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) { - notMatched=true; - break; + int effectMax=l.effectCount; + if (effectMax>e->curPat[k].effectCols) { + notMatched=true; + } else { + for (int m=0; mdata[j][4+m*2])) { + notMatched=true; + break; + } + if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) { + notMatched=true; + break; + } } } break; From 3ebbb85f4c265c9106a8612761484fe619259fb2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 11 Jun 2022 22:36:49 -0500 Subject: [PATCH 053/152] add another demo song MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit requested by AURORA✭FIELDS --- demos/Funky_Bubbles_OPL3.fur | Bin 0 -> 6660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/Funky_Bubbles_OPL3.fur diff --git a/demos/Funky_Bubbles_OPL3.fur b/demos/Funky_Bubbles_OPL3.fur new file mode 100644 index 0000000000000000000000000000000000000000..5f2ffd24433d6661622af33ad8ab6daad526d037 GIT binary patch literal 6660 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 XSj>`qvZn83JNwIIoSw#wI{5z=(2Gnk literal 0 HcmV?d00001 From 19251e84f6033e859a3a514e4674510e8cd193e4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 11 Jun 2022 22:37:06 -0500 Subject: [PATCH 054/152] add yet another demo song by Laagy --- demos/going_up_a_step_at_time.fur | Bin 0 -> 7710 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/going_up_a_step_at_time.fur diff --git a/demos/going_up_a_step_at_time.fur b/demos/going_up_a_step_at_time.fur new file mode 100644 index 0000000000000000000000000000000000000000..7d52d155aa1735f1343056be174d1d9044509d30 GIT binary patch literal 7710 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 Date: Sat, 11 Jun 2022 22:42:30 -0500 Subject: [PATCH 055/152] GUI: find and replace, part 11 lax mode done now replace time... --- src/gui/findReplace.cpp | 36 ++++++++++++++++++++++++++++++++++-- src/gui/gui.h | 1 + 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 77c1a7e3..3f877242 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -126,8 +126,37 @@ void FurnaceGUI::doFind() { } } break; - case 1: // lax + case 1: { // lax + // locate first effect + int posOfFirst=-1; + for (int m=0; mcurPat[k].effectCols; m++) { + if (!checkCondition(l.effectMode[0],l.effect[0],l.effectMax[0],p->data[j][4+m*2])) continue; + if (!checkCondition(l.effectValMode[0],l.effectVal[0],l.effectValMax[0],p->data[j][5+m*2])) continue; + posOfFirst=m; + break; + } + if (posOfFirst<0) { + notMatched=true; + break; + } + // make sure we aren't too far to the right + if ((posOfFirst+l.effectCount)>e->curPat[k].effectCols) { + notMatched=true; + break; + } + // search from first effect location + for (int m=0; mdata[j][4+(m+posOfFirst)*2])) { + notMatched=true; + break; + } + if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+(m+posOfFirst)*2])) { + notMatched=true; + break; + } + } break; + } case 2: // strict int effectMax=l.effectCount; if (effectMax>e->curPat[k].effectCols) { @@ -160,6 +189,9 @@ void FurnaceGUI::doFind() { queryViewingResults=true; } +void FurnaceGUI::doReplace() { +} + #define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) #define SECOND_VISIBLE(x) (x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) @@ -754,7 +786,7 @@ void FurnaceGUI::drawFindReplace() { queryReplaceEffectPos=3; } if (ImGui::Button("Replace##QueryReplace")) { - // TODO + doReplace(); } ImGui::EndTabItem(); } diff --git a/src/gui/gui.h b/src/gui/gui.h index 300fa8fc..55ea989c 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1492,6 +1492,7 @@ class FurnaceGUI { void doUndo(); void doRedo(); void doFind(); + void doReplace(); void editOptions(bool topMenu); void noteInput(int num, int key, int vol=-1); void valueInput(int num, bool direct=false, int target=-1); From 74b524a912387a83cd985350c97163f2cae93146 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 12 Jun 2022 03:50:05 -0500 Subject: [PATCH 056/152] GUI: find and replace, part 12 replace is almost complete - some refinements left to do though --- TODO.md | 1 - src/gui/findReplace.cpp | 201 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 198 insertions(+), 4 deletions(-) diff --git a/TODO.md b/TODO.md index 5bd4e892..12a7e47e 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,6 @@ - rewrite the system name detection function anyway - add another FM editor layout - add ability to move selection by dragging -- find and replace - implement Defle slide bug when using E1xy/E2xy and repeating origin note (requires format change) # to-do for 0.6pre2 (as this requires new data structures) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 3f877242..9ab75f6f 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -31,13 +31,13 @@ int queryNote(int note, int octave) { } else if (note==102) { // envelope release only return 130; } else if (octave==0 && note==0) { - return -1; + return -61; } else if (note==0 && octave!=0) { - return -1; // bug note? + return -61; // bug note? } int seek=(note+(signed char)octave*12); if (seek<-60 || seek>=120) { - return -1; // out of range note + return -61; // out of range note } return seek; } @@ -190,6 +190,201 @@ void FurnaceGUI::doFind() { } void FurnaceGUI::doReplace() { + doFind(); + queryViewingResults=false; + + for (FurnaceGUIQueryResult& i: curQueryResults) { + DivPattern* p=e->song.subsong[i.subsong]->pat[i.x].getPattern(e->song.subsong[i.subsong]->orders.ord[i.x][i.order],true); + if (queryReplaceNoteDo) { + switch (queryReplaceNoteMode) { + case GUI_QUERY_REPLACE_SET: + if (queryReplaceNote==130) { // macro release + p->data[i.y][0]=102; + p->data[i.y][1]=0; + } else if (queryReplaceNote==129) { // note release + p->data[i.y][0]=101; + p->data[i.y][1]=0; + } else if (queryReplaceNote==128) { // note off + p->data[i.y][0]=100; + p->data[i.y][1]=0; + } else if (queryReplaceNote>=-60 && queryReplaceNote<120) { // note + p->data[i.y][0]=(queryReplaceNote+60)%12; + if (p->data[i.y][0]==0) p->data[i.y][0]=12; + p->data[i.y][1]=(unsigned char)((queryReplaceNote-1)/12); + } else { // invalid + p->data[i.y][0]=0; + p->data[i.y][1]=0; + } + break; + case GUI_QUERY_REPLACE_ADD: + if (p->data[i.y][0]<100) { + int note=queryNote(p->data[i.y][0],p->data[i.y][1]); + if (note>=-60 && note<120) { + note+=queryReplaceNote; + if (note<-60) note=-60; + if (note>119) note=119; + + p->data[i.y][0]=(note+60)%12; + if (p->data[i.y][0]==0) p->data[i.y][0]=12; + p->data[i.y][1]=(unsigned char)((note-1)/12); + } + } + break; + case GUI_QUERY_REPLACE_ADD_OVERFLOW: + if (p->data[i.y][0]<100) { + int note=queryNote(p->data[i.y][0],p->data[i.y][1]); + if (note>=-60 && note<120) { + note+=queryReplaceNote; + if (note<-60) { + while (note<-60) note+=180; + } else if (note>119) { + while (note>119) note-=180; + } + + p->data[i.y][0]=(note+60)%12; + if (p->data[i.y][0]==0) p->data[i.y][0]=12; + p->data[i.y][1]=(unsigned char)((note-1)/12); + } + } + break; + case GUI_QUERY_REPLACE_CLEAR: + p->data[i.y][0]=0; + p->data[i.y][1]=0; + break; + } + } + + if (queryReplaceInsDo) { + switch (queryReplaceInsMode) { + case GUI_QUERY_REPLACE_SET: + p->data[i.y][2]=queryReplaceIns; + break; + case GUI_QUERY_REPLACE_ADD: + if (p->data[i.y][2]>=0) { + p->data[i.y][2]+=queryReplaceIns; + if (p->data[i.y][2]<0) p->data[i.y][2]=0; + if (p->data[i.y][2]>255) p->data[i.y][2]=255; + } + break; + case GUI_QUERY_REPLACE_ADD_OVERFLOW: + if (p->data[i.y][2]>=0) p->data[i.y][2]=(p->data[i.y][2]+queryReplaceIns)&0xff; + break; + case GUI_QUERY_REPLACE_CLEAR: + p->data[i.y][2]=-1; + break; + } + } + + if (queryReplaceVolDo) { + switch (queryReplaceVolMode) { + case GUI_QUERY_REPLACE_SET: + p->data[i.y][3]=queryReplaceVol; + break; + case GUI_QUERY_REPLACE_ADD: + if (p->data[i.y][3]>=0) { + p->data[i.y][3]+=queryReplaceVol; + if (p->data[i.y][3]<0) p->data[i.y][3]=0; + if (p->data[i.y][3]>255) p->data[i.y][3]=255; + } + break; + case GUI_QUERY_REPLACE_ADD_OVERFLOW: + if (p->data[i.y][3]>=0) p->data[i.y][3]=(p->data[i.y][3]+queryReplaceVol)&0xff; + break; + case GUI_QUERY_REPLACE_CLEAR: + p->data[i.y][3]=-1; + break; + } + } + + signed char effectOrder[8]; + memset(effectOrder,-1,8); + + switch (queryReplaceEffectPos) { + case 0: // clear + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + effectOrder[j]=j; + } + break; + case 1: { // replace matches + int placementIndex=0; + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + if (p->data[i.y][4+j*2]!=-1 || p->data[i.y][5+j*2]!=-1) { + effectOrder[placementIndex++]=j; + } + } + break; + } + case 2: { // replace matches then free spaces + int placementIndex=0; + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + if (p->data[i.y][4+j*2]!=-1 || p->data[i.y][5+j*2]!=-1) { + effectOrder[placementIndex++]=j; + } + } + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + if (p->data[i.y][4+j*2]==-1 && p->data[i.y][5+j*2]==-1) { + effectOrder[placementIndex++]=j; + } + } + break; + } + case 3: { // insert in free spaces + int placementIndex=0; + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + if (p->data[i.y][4+j*2]==-1 && p->data[i.y][5+j*2]==-1) { + effectOrder[placementIndex++]=j; + } + } + break; + } + } + + for (int j=0; jdata[i.y][4+pos*2]=queryReplaceEffect[j]; + break; + case GUI_QUERY_REPLACE_ADD: + if (p->data[i.y][4+pos*2]>=0) { + p->data[i.y][4+pos*2]+=queryReplaceEffect[j]; + if (p->data[i.y][4+pos*2]<0) p->data[i.y][4+pos*2]=0; + if (p->data[i.y][4+pos*2]>255) p->data[i.y][4+pos*2]=255; + } + break; + case GUI_QUERY_REPLACE_ADD_OVERFLOW: + if (p->data[i.y][4+pos*2]>=0) p->data[i.y][4+pos*2]=(p->data[i.y][4+pos*2]+queryReplaceEffect[j])&0xff; + break; + case GUI_QUERY_REPLACE_CLEAR: + p->data[i.y][4+pos*2]=-1; + break; + } + } + + if (queryReplaceEffectValDo[j]) { + switch (queryReplaceEffectValMode[j]) { + case GUI_QUERY_REPLACE_SET: + p->data[i.y][5+pos*2]=queryReplaceEffectVal[j]; + break; + case GUI_QUERY_REPLACE_ADD: + if (p->data[i.y][5+pos*2]>=0) { + p->data[i.y][5+pos*2]+=queryReplaceEffectVal[j]; + if (p->data[i.y][5+pos*2]<0) p->data[i.y][5+pos*2]=0; + if (p->data[i.y][5+pos*2]>255) p->data[i.y][5+pos*2]=255; + } + break; + case GUI_QUERY_REPLACE_ADD_OVERFLOW: + if (p->data[i.y][5+pos*2]>=0) p->data[i.y][5+pos*2]=(p->data[i.y][5+pos*2]+queryReplaceEffectVal[j])&0xff; + break; + case GUI_QUERY_REPLACE_CLEAR: + p->data[i.y][5+pos*2]=-1; + break; + } + } + } + } } #define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) From f3f8804f47995956f8a1f69c869bece471032e69 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 12 Jun 2022 14:39:08 -0500 Subject: [PATCH 057/152] GUI: find and replace, part 13 one more part coming or maybe not --- src/gui/findReplace.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 9ab75f6f..d5548c0f 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -193,8 +193,18 @@ void FurnaceGUI::doReplace() { doFind(); queryViewingResults=false; + bool* touched[DIV_MAX_CHANS]; + memset(touched,0,DIV_MAX_CHANS*sizeof(bool*)); + for (FurnaceGUIQueryResult& i: curQueryResults) { - DivPattern* p=e->song.subsong[i.subsong]->pat[i.x].getPattern(e->song.subsong[i.subsong]->orders.ord[i.x][i.order],true); + int patIndex=e->song.subsong[i.subsong]->orders.ord[i.x][i.order]; + DivPattern* p=e->song.subsong[i.subsong]->pat[i.x].getPattern(patIndex,true); + if (touched[i.x]==NULL) { + touched[i.x]=new bool[256*256]; + memset(touched[i.x],0,256*256*sizeof(bool)); + } + if (touched[i.x][(patIndex<<8)|i.y]) continue; + touched[i.x][(patIndex<<8)|i.y]=true; if (queryReplaceNoteDo) { switch (queryReplaceNoteMode) { case GUI_QUERY_REPLACE_SET: @@ -385,6 +395,10 @@ void FurnaceGUI::doReplace() { } } } + + for (int i=0; i Date: Sun, 12 Jun 2022 23:22:45 -0500 Subject: [PATCH 058/152] OPL: fix 4-op channel muting --- src/engine/platform/opl.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index fbf91448..e6f730c2 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -677,6 +677,9 @@ void DivPlatformOPL::muteChannel(int ch, bool mute) { fm.channel[outChanMap[ch]].muted=mute; } int ops=(slots[3][ch]!=255 && chan[ch].state.ops==4 && oplType==3)?4:2; + if (ch&1 && ch<12) { + if (chan[ch-1].fourOp) return; + } chan[ch].fourOp=(ops==4); update4OpMask=true; for (int i=0; i Date: Mon, 13 Jun 2022 03:54:42 -0500 Subject: [PATCH 059/152] GUI: work on alternate FM layout --- TODO.md | 4 +- src/gui/insEdit.cpp | 555 ++++++++++++++++++++++++++++++++++++++++++- src/gui/settings.cpp | 11 +- 3 files changed, 567 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 12a7e47e..d667201e 100644 --- a/TODO.md +++ b/TODO.md @@ -1,11 +1,13 @@ # to-do for 0.6pre1 -- rewrite the system name detection function anyway - add another FM editor layout - add ability to move selection by dragging - implement Defle slide bug when using E1xy/E2xy and repeating origin note (requires format change) # to-do for 0.6pre2 (as this requires new data structures) +- rewrite the system name detection function anyway + - this involves the addition of a new "system" field in the song (which solves the problem) + - songs made in older versions will go through old system name detection for compatibility - Game Boy envelope macro/sequence - volume commands should work on Game Boy diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 7d7fa050..81edbfe1 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -1345,6 +1345,9 @@ void FurnaceGUI::drawMacros(std::vector& macros) { #define CENTER_VSLIDER \ ImGui::SetCursorPosX(ImGui::GetCursorPosX()+0.5f*ImGui::GetContentRegionAvail().x-10.0f*dpiScale); +#define CENTER_TEXT_20(text) \ + ImGui::SetCursorPosX(ImGui::GetCursorPosX()+0.5*(20.0f*dpiScale-ImGui::CalcTextSize(text).x)); + void FurnaceGUI::drawInsEdit() { if (nextWindow==GUI_WINDOW_INS_EDIT) { insEditOpen=true; @@ -2016,7 +2019,557 @@ void FurnaceGUI::drawInsEdit() { ImGui::EndTable(); } - } else { + } else if (settings.fmLayout>=4 && settings.fmLayout<=6) { // alternate + int columns=2; + switch (settings.fmLayout) { + case 4: // 2x2 + columns=2; + break; + case 5: // 1x4 + columns=1; + break; + case 6: // 4x1 + columns=opCount; + break; + } + char tempID[1024]; + if (ImGui::BeginTable("KGE93BSIEO3NOWBDJZBA",columns,ImGuiTableFlags_SizingStretchSame)) { + for (int i=0; ifm.op[(opCount==4 && ins->type!=DIV_INS_OPL_DRUMS)?opOrder[i]:i]; + if ((settings.fmLayout!=3 && ((i+1)&1)) || i==0 || settings.fmLayout==2) ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Separator(); + ImGui::PushID(fmt::sprintf("op%d",i).c_str()); + + // push colors + if (settings.separateFMColors) { + bool mod=true; + if (ins->type==DIV_INS_OPL_DRUMS) { + mod=false; + } else if (opCount==4) { + if (ins->type==DIV_INS_OPL) { + if (opIsOutputOPL[ins->fm.alg&3][i]) mod=false; + } else { + if (opIsOutput[ins->fm.alg&7][i]) mod=false; + } + } else { + if (i==1 || (ins->type==DIV_INS_OPL && (ins->fm.alg&1))) mod=false; + } + if (mod) { + pushAccentColors( + uiColors[GUI_COLOR_FM_PRIMARY_MOD], + uiColors[GUI_COLOR_FM_SECONDARY_MOD], + uiColors[GUI_COLOR_FM_BORDER_MOD], + uiColors[GUI_COLOR_FM_BORDER_SHADOW_MOD] + ); + } else { + pushAccentColors( + uiColors[GUI_COLOR_FM_PRIMARY_CAR], + uiColors[GUI_COLOR_FM_SECONDARY_CAR], + uiColors[GUI_COLOR_FM_BORDER_CAR], + uiColors[GUI_COLOR_FM_BORDER_SHADOW_CAR] + ); + } + } + + ImGui::Dummy(ImVec2(dpiScale,dpiScale)); + if (ins->type==DIV_INS_OPL_DRUMS) { + ImGui::Text("%s",oplDrumNames[i]); + } else if (ins->type==DIV_INS_OPL && ins->fm.opllPreset==16) { + if (i==1) { + ImGui::Text("Envelope 2 (kick only)"); + } else { + ImGui::Text("Envelope"); + } + } else { + ImGui::Text("OP%d",i+1); + } + + float sliderHeight=200.0f*dpiScale; + float waveWidth=140.0*dpiScale; + float waveHeight=sliderHeight-ImGui::GetFrameHeightWithSpacing()*5.5f; + + int maxTl=127; + if (ins->type==DIV_INS_OPLL) { + if (i==1) { + maxTl=15; + } else { + maxTl=63; + } + } + if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) { + maxTl=63; + } + int maxArDr=(ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ)?31:15; + + bool ssgOn=op.ssgEnv&8; + bool ksrOn=op.ksr; + bool vibOn=op.vib; + bool egtOn=op.egt; + bool susOn=op.sus; // don't you make fun of this one + unsigned char ssgEnv=op.ssgEnv&7; + + if (ImGui::BeginTable("opParams",ins->type==DIV_INS_OPLL?3:4,ImGuiTableFlags_BordersInnerV)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + if (ins->type!=DIV_INS_OPLL) { + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed); + } + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch); + ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + float textY=ImGui::GetCursorPosY(); + CENTER_TEXT_20(FM_SHORT_NAME(FM_AR)); + ImGui::TextUnformatted(FM_SHORT_NAME(FM_AR)); + if (ins->type!=DIV_INS_OPLL) { + ImGui::TableNextColumn(); + if (ins->type==DIV_INS_FM) { + ImGui::Text("SSG-EG"); + } else { + ImGui::Text("Waveform"); + } + } + ImGui::TableNextColumn(); + ImGui::Text("Envelope"); + ImGui::TableNextColumn(); + CENTER_TEXT(FM_SHORT_NAME(FM_TL)); + ImGui::Text("TL"); + + // A/D/S/R + ImGui::TableNextColumn(); + + op.ar&=maxArDr; + P(CWVSliderScalar("##AR",ImVec2(20.0f*dpiScale,sliderHeight),ImGuiDataType_U8,&op.ar,&maxArDr,&_ZERO)); + + ImGui::SameLine(); + op.dr&=maxArDr; + float textX_DR=ImGui::GetCursorPosX(); + P(CWVSliderScalar("##DR",ImVec2(20.0f*dpiScale,sliderHeight),ImGuiDataType_U8,&op.dr,&maxArDr,&_ZERO)); + + float textX_SL=0.0f; + if (settings.susPosition==0) { + ImGui::SameLine(); + op.sl&=15; + textX_SL=ImGui::GetCursorPosX(); + P(CWVSliderScalar("##SL",ImVec2(20.0f*dpiScale,sliderHeight),ImGuiDataType_U8,&op.sl,&_FIFTEEN,&_ZERO)); + } + + float textX_D2R=0.0f; + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { + ImGui::SameLine(); + op.d2r&=31; + textX_D2R=ImGui::GetCursorPosX(); + P(CWVSliderScalar("##D2R",ImVec2(20.0f*dpiScale,sliderHeight),ImGuiDataType_U8,&op.d2r,&_THIRTY_ONE,&_ZERO)); + } + + ImGui::SameLine(); + op.rr&=15; + float textX_RR=ImGui::GetCursorPosX(); + P(CWVSliderScalar("##RR",ImVec2(20.0f*dpiScale,sliderHeight),ImGuiDataType_U8,&op.rr,&_FIFTEEN,&_ZERO)); + + if (settings.susPosition==1) { + ImGui::SameLine(); + op.sl&=15; + textX_SL=ImGui::GetCursorPosX(); + P(CWVSliderScalar("##SL",ImVec2(20.0f*dpiScale,sliderHeight),ImGuiDataType_U8,&op.sl,&_FIFTEEN,&_ZERO)); + } + + ImVec2 prevCurPos=ImGui::GetCursorPos(); + + // labels + ImGui::SetCursorPos(ImVec2(textX_DR,textY)); + CENTER_TEXT_20(FM_SHORT_NAME(FM_DR)); + ImGui::TextUnformatted(FM_SHORT_NAME(FM_DR)); + + ImGui::SetCursorPos(ImVec2(textX_SL,textY)); + CENTER_TEXT_20(FM_SHORT_NAME(FM_SL)); + ImGui::TextUnformatted(FM_SHORT_NAME(FM_SL)); + + ImGui::SetCursorPos(ImVec2(textX_RR,textY)); + CENTER_TEXT_20(FM_SHORT_NAME(FM_RR)); + ImGui::TextUnformatted(FM_SHORT_NAME(FM_RR)); + + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { + ImGui::SetCursorPos(ImVec2(textX_D2R,textY)); + CENTER_TEXT_20(FM_SHORT_NAME(FM_D2R)); + ImGui::TextUnformatted(FM_SHORT_NAME(FM_D2R)); + } + + ImGui::SetCursorPos(prevCurPos); + + if (ins->type!=DIV_INS_OPLL) { + ImGui::TableNextColumn(); + switch (ins->type) { + case DIV_INS_FM: { + // SSG + ImGui::BeginDisabled(!ssgOn); + drawSSGEnv(op.ssgEnv&7,ImVec2(waveWidth,waveHeight)); + ImGui::EndDisabled(); + if (ImGui::Checkbox("##SSGOn",&ssgOn)) { PARAMETER + op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only for OPN family chips"); + } + + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderScalar("##SSG",ImGuiDataType_U8,&ssgEnv,&_ZERO,&_SEVEN,ssgEnvTypes[ssgEnv])) { PARAMETER + op.ssgEnv=(op.ssgEnv&8)|(ssgEnv&7); + } + + // params + ImGui::Separator(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); + P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + int detune=(op.dt&7)-3; + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT)); + if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER + op.dt=detune+3; + } rightClickable + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT2)); + P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE,tempID)); rightClickable + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only on YM2151 (OPM)"); + } + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_RS)); + P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE,tempID)); rightClickable + + break; + } + case DIV_INS_OPL: + // waveform + drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,(ins->type==DIV_INS_OPZ)?opzWaveforms[op.ws&7]:(settings.oplStandardWaveNames?oplWaveformsStandard[op.ws&7]:oplWaveforms[op.ws&7]))); rightClickable + if ((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) && ImGui::IsItemHovered()) { + ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)"); + } + + // params + ImGui::Separator(); + if (ImGui::BeginTable("FMParamsInner",2)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + bool amOn=op.am; + if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER + op.am=amOn; + } + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_KSR),&ksrOn)) { PARAMETER + op.ksr=ksrOn; + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_VIB),&vibOn)) { PARAMETER + op.vib=vibOn; + } + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_SUS),&susOn)) { PARAMETER + op.sus=susOn; + } + + ImGui::EndTable(); + } + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); + P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_KSL)); + P(CWSliderScalar("##KSL",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE,tempID)); rightClickable + + break; + case DIV_INS_OPZ: { + // waveform + drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,(ins->type==DIV_INS_OPZ)?opzWaveforms[op.ws&7]:(settings.oplStandardWaveNames?oplWaveformsStandard[op.ws&7]:oplWaveforms[op.ws&7]))); rightClickable + if ((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) && ImGui::IsItemHovered()) { + ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)"); + } + + // params + ImGui::Separator(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); + P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + int detune=(op.dt&7)-3; + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT)); + if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER + op.dt=detune+3; + } rightClickable + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT2)); + P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE,tempID)); rightClickable + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only on YM2151 (OPM)"); + } + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_RS)); + P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE,tempID)); rightClickable + break; + } + default: + break; + } + } + + ImGui::TableNextColumn(); + float envHeight=sliderHeight-ImGui::GetStyle().ItemSpacing.y*2.0f; + if (ins->type==DIV_INS_OPZ) { + envHeight-=ImGui::GetFrameHeightWithSpacing()*2.0f; + } + drawFMEnv(op.tl&maxTl,op.ar&maxArDr,op.dr&maxArDr,(ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPLL)?((op.rr&15)*2):op.d2r&31,op.rr&15,op.sl&15,op.sus,op.ssgEnv&8,ins->fm.alg,maxTl,maxArDr,ImVec2(ImGui::GetContentRegionAvail().x,envHeight),ins->type); + + if (ins->type==DIV_INS_OPZ) { + ImGui::Separator(); + if (ImGui::BeginTable("FMParamsInnerOPZ",2)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_FINE)); + P(CWSliderScalar("##FINE",ImGuiDataType_U8,&op.dvb,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + ImGui::TableNextColumn(); + bool amOn=op.am; + if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER + op.am=amOn; + } + ImGui::SameLine(); + if (ImGui::Checkbox("Fixed",&egtOn)) { PARAMETER + op.egt=egtOn; + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_EGSHIFT)); + P(CWSliderScalar("##EGShift",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE,tempID)); rightClickable + + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_REV)); + P(CWSliderScalar("##REV",ImGuiDataType_U8,&op.dam,&_ZERO,&_SEVEN,tempID)); rightClickable + + ImGui::TableNextColumn(); + + + ImGui::EndTable(); + } + } + + ImGui::TableNextColumn(); + op.tl&=maxTl; + P(CWVSliderScalar("##TL",ImVec2(20.0f*dpiScale,sliderHeight-(ins->type==DIV_INS_FM?(ImGui::GetFrameHeightWithSpacing()+ImGui::CalcTextSize(FM_SHORT_NAME(FM_AM)).y+ImGui::GetStyle().ItemSpacing.y):0.0f)),ImGuiDataType_U8,&op.tl,&maxTl,&_ZERO)); + + if (ins->type==DIV_INS_FM) { + CENTER_TEXT(FM_SHORT_NAME(FM_AM)); + ImGui::TextUnformatted(FM_SHORT_NAME(FM_AM)); + bool amOn=op.am; + if (ImGui::Checkbox("##AM",&amOn)) { PARAMETER + op.am=amOn; + } + } + + ImGui::EndTable(); + } + + /* + ImGui::SameLine(); + + bool amOn=op.am; + if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER + op.am=amOn; + } + + if (ins->type!=DIV_INS_OPL && ins->type!=DIV_INS_OPL_DRUMS && ins->type!=DIV_INS_OPZ) { + ImGui::SameLine(); + if (ImGui::Checkbox((ins->type==DIV_INS_OPLL)?FM_NAME(FM_EGS):"SSG On",&ssgOn)) { PARAMETER + op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3); + } + if (ins->type==DIV_INS_FM) { + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only for OPN family chips"); + } + } + } + + if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) { + ImGui::SameLine(); + if (ImGui::Checkbox(FM_NAME(FM_SUS),&susOn)) { PARAMETER + op.sus=susOn; + } + } + + //52.0 controls vert scaling; default 96 + drawFMEnv(op.tl&maxTl,op.ar&maxArDr,op.dr&maxArDr,(ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPLL)?((op.rr&15)*2):op.d2r&31,op.rr&15,op.sl&15,op.sus,op.ssgEnv&8,ins->fm.alg,maxTl,maxArDr,ImVec2(ImGui::GetContentRegionAvail().x,52.0*dpiScale),ins->type); + //P(CWSliderScalar(FM_NAME(FM_AR),ImGuiDataType_U8,&op.ar,&_ZERO,&_THIRTY_ONE)); rightClickable + if (ImGui::BeginTable("opParams",2,ImGuiTableFlags_SizingStretchProp)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.0); \ + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,0.0); \ + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + op.ar&=maxArDr; + P(CWSliderScalar("##AR",ImGuiDataType_U8,&op.ar,&maxArDr,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_AR)); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + op.dr&=maxArDr; + P(CWSliderScalar("##DR",ImGuiDataType_U8,&op.dr,&maxArDr,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_DR)); + + if (settings.susPosition==0) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##SL",ImGuiDataType_U8,&op.sl,&_FIFTEEN,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_SL)); + } + + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##D2R",ImGuiDataType_U8,&op.d2r,&_THIRTY_ONE,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_D2R)); + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##RR",ImGuiDataType_U8,&op.rr,&_FIFTEEN,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_RR)); + + if (settings.susPosition==1) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##SL",ImGuiDataType_U8,&op.sl,&_FIFTEEN,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_SL)); + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + op.tl&=maxTl; + P(CWSliderScalar("##TL",ImGuiDataType_U8,&op.tl,&maxTl,&_ZERO)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_TL)); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Separator(); + ImGui::TableNextColumn(); + ImGui::Separator(); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { + P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_RS)); + } else { + P(CWSliderScalar("##KSL",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE)); rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_KSL)); + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_MULT)); + + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { + int detune=(op.dt&7)-3; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderInt("##DT",&detune,-3,4)) { PARAMETER + op.dt=detune+3; + } rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_DT)); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE)); rightClickable + if (ImGui::IsItemHovered() && ins->type==DIV_INS_FM) { + ImGui::SetTooltip("Only on YM2151 (OPM)"); + } + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_DT2)); + + if (ins->type==DIV_INS_FM) { // OPN only + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderScalar("##SSG",ImGuiDataType_U8,&ssgEnv,&_ZERO,&_SEVEN,ssgEnvTypes[ssgEnv])) { PARAMETER + op.ssgEnv=(op.ssgEnv&8)|(ssgEnv&7); + } rightClickable + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_SSG)); + } + } + + if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPZ) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + + ImGui::TableNextColumn(); + ImGui::Text("%s",FM_NAME(FM_WS)); + } + + ImGui::EndTable(); + } + + if (ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) { + if (ImGui::Checkbox(FM_NAME(FM_VIB),&vibOn)) { PARAMETER + op.vib=vibOn; + } + ImGui::SameLine(); + if (ImGui::Checkbox(FM_NAME(FM_KSR),&ksrOn)) { PARAMETER + op.ksr=ksrOn; + } + } + */ + + if (settings.separateFMColors) { + popAccentColors(); + } + + ImGui::PopID(); + } + ImGui::EndTable(); + } + } else { // classic int columns=2; switch (settings.fmLayout) { case 1: // 2x2 diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index ea1d9274..da3b0f27 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1117,6 +1117,15 @@ void FurnaceGUI::drawSettings() { if (ImGui::RadioButton("Compact (4x1)##fml3",settings.fmLayout==3)) { settings.fmLayout=3; } + if (ImGui::RadioButton("Alternate (2x2)##fml4",settings.fmLayout==4)) { + settings.fmLayout=4; + } + if (ImGui::RadioButton("Alternate (1x4)##fml5",settings.fmLayout==5)) { + settings.fmLayout=5; + } + if (ImGui::RadioButton("Alternate (4x1)##fml5",settings.fmLayout==6)) { + settings.fmLayout=6; + } ImGui::Text("Position of Sustain in FM editor:"); if (ImGui::RadioButton("Between Decay and Sustain Rate##susp0",settings.susPosition==0)) { @@ -2077,7 +2086,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.roundedMenus,0,1); clampSetting(settings.loadJapanese,0,1); clampSetting(settings.loadChinese,0,1); - clampSetting(settings.fmLayout,0,3); + clampSetting(settings.fmLayout,0,6); clampSetting(settings.susPosition,0,1); clampSetting(settings.effectCursorDir,0,2); clampSetting(settings.cursorPastePos,0,1); From bd7710991b58e72bd0c40d17d8a64bb2371b9891 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 13 Jun 2022 03:57:31 -0500 Subject: [PATCH 060/152] GUI: a bit more to it --- src/gui/insEdit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 81edbfe1..681ae10d 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -2036,7 +2036,7 @@ void FurnaceGUI::drawInsEdit() { if (ImGui::BeginTable("KGE93BSIEO3NOWBDJZBA",columns,ImGuiTableFlags_SizingStretchSame)) { for (int i=0; ifm.op[(opCount==4 && ins->type!=DIV_INS_OPL_DRUMS)?opOrder[i]:i]; - if ((settings.fmLayout!=3 && ((i+1)&1)) || i==0 || settings.fmLayout==2) ImGui::TableNextRow(); + if ((settings.fmLayout!=6 && ((i+1)&1)) || i==0 || settings.fmLayout==5) ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::Separator(); ImGui::PushID(fmt::sprintf("op%d",i).c_str()); From 327a013186358c17162863ecfaf66fc571bf828f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 13 Jun 2022 23:22:17 -0500 Subject: [PATCH 061/152] GUI: finish alternate FM layout --- TODO.md | 2 +- src/gui/insEdit.cpp | 505 ++++++++++++++++++-------------------------- 2 files changed, 201 insertions(+), 306 deletions(-) diff --git a/TODO.md b/TODO.md index d667201e..b0fc02d3 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,5 @@ # to-do for 0.6pre1 -- add another FM editor layout - add ability to move selection by dragging - implement Defle slide bug when using E1xy/E2xy and repeating origin note (requires format change) @@ -11,3 +10,4 @@ - songs made in older versions will go through old system name detection for compatibility - Game Boy envelope macro/sequence - volume commands should work on Game Boy +- ability to customize `OFF`, `===` and `REL` diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 681ae10d..be09eb6d 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -2033,12 +2033,13 @@ void FurnaceGUI::drawInsEdit() { break; } char tempID[1024]; - if (ImGui::BeginTable("KGE93BSIEO3NOWBDJZBA",columns,ImGuiTableFlags_SizingStretchSame)) { + ImVec2 oldPadding=ImGui::GetStyle().CellPadding; + ImGui::PushStyleVar(ImGuiStyleVar_CellPadding,ImVec2(8.0f*dpiScale,4.0f*dpiScale)); + if (ImGui::BeginTable("KGE93BSIEO3NOWBDJZBA",columns,ImGuiTableFlags_SizingStretchSame|ImGuiTableFlags_BordersInner)) { for (int i=0; ifm.op[(opCount==4 && ins->type!=DIV_INS_OPL_DRUMS)?opOrder[i]:i]; if ((settings.fmLayout!=6 && ((i+1)&1)) || i==0 || settings.fmLayout==5) ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::Separator(); ImGui::PushID(fmt::sprintf("op%d",i).c_str()); // push colors @@ -2074,20 +2075,22 @@ void FurnaceGUI::drawInsEdit() { ImGui::Dummy(ImVec2(dpiScale,dpiScale)); if (ins->type==DIV_INS_OPL_DRUMS) { - ImGui::Text("%s",oplDrumNames[i]); + snprintf(tempID,1024,"%s",oplDrumNames[i]); } else if (ins->type==DIV_INS_OPL && ins->fm.opllPreset==16) { if (i==1) { - ImGui::Text("Envelope 2 (kick only)"); + snprintf(tempID,1024,"Envelope 2 (kick only)"); } else { - ImGui::Text("Envelope"); + snprintf(tempID,1024,"Envelope"); } } else { - ImGui::Text("OP%d",i+1); + snprintf(tempID,1024,"Operator %d",i+1); } + CENTER_TEXT(tempID); + ImGui::TextUnformatted(tempID); float sliderHeight=200.0f*dpiScale; float waveWidth=140.0*dpiScale; - float waveHeight=sliderHeight-ImGui::GetFrameHeightWithSpacing()*5.5f; + float waveHeight=sliderHeight-ImGui::GetFrameHeightWithSpacing()*(ins->type==DIV_INS_OPLL?4.5f:5.5f); int maxTl=127; if (ins->type==DIV_INS_OPLL) { @@ -2106,14 +2109,13 @@ void FurnaceGUI::drawInsEdit() { bool ksrOn=op.ksr; bool vibOn=op.vib; bool egtOn=op.egt; - bool susOn=op.sus; // don't you make fun of this one + bool susOn=op.sus; // yawn unsigned char ssgEnv=op.ssgEnv&7; - if (ImGui::BeginTable("opParams",ins->type==DIV_INS_OPLL?3:4,ImGuiTableFlags_BordersInnerV)) { + ImGui::PushStyleVar(ImGuiStyleVar_CellPadding,oldPadding); + if (ImGui::BeginTable("opParams",4,ImGuiTableFlags_BordersInnerV)) { ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); - if (ins->type!=DIV_INS_OPLL) { - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed); - } + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,waveWidth); ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch); ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed); @@ -2122,13 +2124,11 @@ void FurnaceGUI::drawInsEdit() { float textY=ImGui::GetCursorPosY(); CENTER_TEXT_20(FM_SHORT_NAME(FM_AR)); ImGui::TextUnformatted(FM_SHORT_NAME(FM_AR)); - if (ins->type!=DIV_INS_OPLL) { - ImGui::TableNextColumn(); - if (ins->type==DIV_INS_FM) { - ImGui::Text("SSG-EG"); - } else { - ImGui::Text("Waveform"); - } + ImGui::TableNextColumn(); + if (ins->type==DIV_INS_FM) { + ImGui::Text("SSG-EG"); + } else { + ImGui::Text("Waveform"); } ImGui::TableNextColumn(); ImGui::Text("Envelope"); @@ -2198,29 +2198,172 @@ void FurnaceGUI::drawInsEdit() { ImGui::SetCursorPos(prevCurPos); - if (ins->type!=DIV_INS_OPLL) { - ImGui::TableNextColumn(); - switch (ins->type) { - case DIV_INS_FM: { - // SSG - ImGui::BeginDisabled(!ssgOn); - drawSSGEnv(op.ssgEnv&7,ImVec2(waveWidth,waveHeight)); - ImGui::EndDisabled(); - if (ImGui::Checkbox("##SSGOn",&ssgOn)) { PARAMETER + ImGui::TableNextColumn(); + switch (ins->type) { + case DIV_INS_FM: { + // SSG + ImGui::BeginDisabled(!ssgOn); + drawSSGEnv(op.ssgEnv&7,ImVec2(waveWidth,waveHeight)); + ImGui::EndDisabled(); + if (ImGui::Checkbox("##SSGOn",&ssgOn)) { PARAMETER + op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only for OPN family chips"); + } + + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderScalar("##SSG",ImGuiDataType_U8,&ssgEnv,&_ZERO,&_SEVEN,ssgEnvTypes[ssgEnv])) { PARAMETER + op.ssgEnv=(op.ssgEnv&8)|(ssgEnv&7); + } + + // params + ImGui::Separator(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); + P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + int detune=(op.dt&7)-3; + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT)); + if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER + op.dt=detune+3; + } rightClickable + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT2)); + P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE,tempID)); rightClickable + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only on YM2151 (OPM)"); + } + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_RS)); + P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE,tempID)); rightClickable + + break; + } + case DIV_INS_OPLL: + // waveform + drawWaveform(i==0?(ins->fm.ams&1):(ins->fm.fms&1),ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); + + // params + ImGui::Separator(); + if (ImGui::BeginTable("FMParamsInner",2)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + bool amOn=op.am; + if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER + op.am=amOn; + } + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_KSR),&ksrOn)) { PARAMETER + op.ksr=ksrOn; + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_VIB),&vibOn)) { PARAMETER + op.vib=vibOn; + } + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_EGS),&ssgOn)) { PARAMETER op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3); } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Only for OPN family chips"); + + ImGui::EndTable(); + } + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); + P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_KSL)); + P(CWSliderScalar("##KSL",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE,tempID)); rightClickable + + break; + case DIV_INS_OPL: + // waveform + drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,(ins->type==DIV_INS_OPZ)?opzWaveforms[op.ws&7]:(settings.oplStandardWaveNames?oplWaveformsStandard[op.ws&7]:oplWaveforms[op.ws&7]))); rightClickable + if ((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) && ImGui::IsItemHovered()) { + ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)"); + } + + // params + ImGui::Separator(); + if (ImGui::BeginTable("FMParamsInner",2)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + bool amOn=op.am; + if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER + op.am=amOn; + } + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_KSR),&ksrOn)) { PARAMETER + op.ksr=ksrOn; } - ImGui::SameLine(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (CWSliderScalar("##SSG",ImGuiDataType_U8,&ssgEnv,&_ZERO,&_SEVEN,ssgEnvTypes[ssgEnv])) { PARAMETER - op.ssgEnv=(op.ssgEnv&8)|(ssgEnv&7); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_VIB),&vibOn)) { PARAMETER + op.vib=vibOn; + } + ImGui::TableNextColumn(); + if (ImGui::Checkbox(FM_NAME(FM_SUS),&susOn)) { PARAMETER + op.sus=susOn; } - // params - ImGui::Separator(); + ImGui::EndTable(); + } + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); + P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_KSL)); + P(CWSliderScalar("##KSL",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE,tempID)); rightClickable + + break; + case DIV_INS_OPZ: { + // waveform + drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + P(CWSliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,(ins->type==DIV_INS_OPZ)?opzWaveforms[op.ws&7]:(settings.oplStandardWaveNames?oplWaveformsStandard[op.ws&7]:oplWaveforms[op.ws&7]))); rightClickable + if ((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) && ImGui::IsItemHovered()) { + ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)"); + } + + // params + ImGui::Separator(); + if (egtOn) { + int block=op.dt; + int freqNum=(op.mult<<4)|(op.dvb&15); + ImGui::Text("Block"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImVec2 cursorAlign=ImGui::GetCursorPos(); + if (ImGui::InputInt("##Block",&block,1,1)) { + if (block<0) block=0; + if (block>7) block=7; + op.dt=block; + } + + ImGui::Text("Freq"); + ImGui::SameLine(); + ImGui::SetCursorPos(ImVec2(cursorAlign.x,ImGui::GetCursorPosY())); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##FreqNum",&freqNum,1,16)) { + if (freqNum<0) freqNum=0; + if (freqNum>255) freqNum=255; + op.mult=freqNum>>4; + op.dvb=freqNum&15; + } + } else { ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable @@ -2231,106 +2374,26 @@ void FurnaceGUI::drawInsEdit() { if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER op.dt=detune+3; } rightClickable - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT2)); - P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE,tempID)); rightClickable - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Only on YM2151 (OPM)"); - } - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_RS)); - P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE,tempID)); rightClickable - - break; } - case DIV_INS_OPL: - // waveform - drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,(ins->type==DIV_INS_OPZ)?opzWaveforms[op.ws&7]:(settings.oplStandardWaveNames?oplWaveformsStandard[op.ws&7]:oplWaveforms[op.ws&7]))); rightClickable - if ((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) && ImGui::IsItemHovered()) { - ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)"); - } - // params - ImGui::Separator(); - if (ImGui::BeginTable("FMParamsInner",2)) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - bool amOn=op.am; - if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER - op.am=amOn; - } - ImGui::TableNextColumn(); - if (ImGui::Checkbox(FM_NAME(FM_KSR),&ksrOn)) { PARAMETER - op.ksr=ksrOn; - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - if (ImGui::Checkbox(FM_NAME(FM_VIB),&vibOn)) { PARAMETER - op.vib=vibOn; - } - ImGui::TableNextColumn(); - if (ImGui::Checkbox(FM_NAME(FM_SUS),&susOn)) { PARAMETER - op.sus=susOn; - } - - ImGui::EndTable(); - } - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); - P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_KSL)); - P(CWSliderScalar("##KSL",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE,tempID)); rightClickable - - break; - case DIV_INS_OPZ: { - // waveform - drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,(ins->type==DIV_INS_OPZ)?opzWaveforms[op.ws&7]:(settings.oplStandardWaveNames?oplWaveformsStandard[op.ws&7]:oplWaveforms[op.ws&7]))); rightClickable - if ((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) && ImGui::IsItemHovered()) { - ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)"); - } - - // params - ImGui::Separator(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); - P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable - - int detune=(op.dt&7)-3; - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT)); - if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER - op.dt=detune+3; - } rightClickable - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT2)); - P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE,tempID)); rightClickable - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Only on YM2151 (OPM)"); - } - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_RS)); - P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE,tempID)); rightClickable - break; + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT2)); + P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE,tempID)); rightClickable + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Only on YM2151 (OPM)"); } - default: - break; + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_RS)); + P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE,tempID)); rightClickable + break; } + default: + break; } ImGui::TableNextColumn(); - float envHeight=sliderHeight-ImGui::GetStyle().ItemSpacing.y*2.0f; + float envHeight=sliderHeight;//-ImGui::GetStyle().ItemSpacing.y*2.0f; if (ins->type==DIV_INS_OPZ) { envHeight-=ImGui::GetFrameHeightWithSpacing()*2.0f; } @@ -2341,9 +2404,11 @@ void FurnaceGUI::drawInsEdit() { if (ImGui::BeginTable("FMParamsInnerOPZ",2)) { ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_FINE)); - P(CWSliderScalar("##FINE",ImGuiDataType_U8,&op.dvb,&_ZERO,&_FIFTEEN,tempID)); rightClickable + if (!egtOn) { + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_FINE)); + P(CWSliderScalar("##FINE",ImGuiDataType_U8,&op.dvb,&_ZERO,&_FIFTEEN,tempID)); rightClickable + } ImGui::TableNextColumn(); bool amOn=op.am; @@ -2375,7 +2440,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextColumn(); op.tl&=maxTl; - P(CWVSliderScalar("##TL",ImVec2(20.0f*dpiScale,sliderHeight-(ins->type==DIV_INS_FM?(ImGui::GetFrameHeightWithSpacing()+ImGui::CalcTextSize(FM_SHORT_NAME(FM_AM)).y+ImGui::GetStyle().ItemSpacing.y):0.0f)),ImGuiDataType_U8,&op.tl,&maxTl,&_ZERO)); + P(CWVSliderScalar("##TL",ImVec2(ImGui::GetFrameHeight(),sliderHeight-(ins->type==DIV_INS_FM?(ImGui::GetFrameHeightWithSpacing()+ImGui::CalcTextSize(FM_SHORT_NAME(FM_AM)).y+ImGui::GetStyle().ItemSpacing.y):0.0f)),ImGuiDataType_U8,&op.tl,&maxTl,&_ZERO)); if (ins->type==DIV_INS_FM) { CENTER_TEXT(FM_SHORT_NAME(FM_AM)); @@ -2388,178 +2453,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::EndTable(); } - - /* - ImGui::SameLine(); - - bool amOn=op.am; - if (ImGui::Checkbox(FM_NAME(FM_AM),&amOn)) { PARAMETER - op.am=amOn; - } - - if (ins->type!=DIV_INS_OPL && ins->type!=DIV_INS_OPL_DRUMS && ins->type!=DIV_INS_OPZ) { - ImGui::SameLine(); - if (ImGui::Checkbox((ins->type==DIV_INS_OPLL)?FM_NAME(FM_EGS):"SSG On",&ssgOn)) { PARAMETER - op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3); - } - if (ins->type==DIV_INS_FM) { - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Only for OPN family chips"); - } - } - } - - if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) { - ImGui::SameLine(); - if (ImGui::Checkbox(FM_NAME(FM_SUS),&susOn)) { PARAMETER - op.sus=susOn; - } - } - - //52.0 controls vert scaling; default 96 - drawFMEnv(op.tl&maxTl,op.ar&maxArDr,op.dr&maxArDr,(ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPLL)?((op.rr&15)*2):op.d2r&31,op.rr&15,op.sl&15,op.sus,op.ssgEnv&8,ins->fm.alg,maxTl,maxArDr,ImVec2(ImGui::GetContentRegionAvail().x,52.0*dpiScale),ins->type); - //P(CWSliderScalar(FM_NAME(FM_AR),ImGuiDataType_U8,&op.ar,&_ZERO,&_THIRTY_ONE)); rightClickable - if (ImGui::BeginTable("opParams",2,ImGuiTableFlags_SizingStretchProp)) { - ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.0); \ - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,0.0); \ - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - op.ar&=maxArDr; - P(CWSliderScalar("##AR",ImGuiDataType_U8,&op.ar,&maxArDr,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_AR)); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - op.dr&=maxArDr; - P(CWSliderScalar("##DR",ImGuiDataType_U8,&op.dr,&maxArDr,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_DR)); - - if (settings.susPosition==0) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##SL",ImGuiDataType_U8,&op.sl,&_FIFTEEN,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_SL)); - } - - if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##D2R",ImGuiDataType_U8,&op.d2r,&_THIRTY_ONE,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_D2R)); - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##RR",ImGuiDataType_U8,&op.rr,&_FIFTEEN,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_RR)); - - if (settings.susPosition==1) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##SL",ImGuiDataType_U8,&op.sl,&_FIFTEEN,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_SL)); - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - op.tl&=maxTl; - P(CWSliderScalar("##TL",ImGuiDataType_U8,&op.tl,&maxTl,&_ZERO)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_TL)); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Separator(); - ImGui::TableNextColumn(); - ImGui::Separator(); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { - P(CWSliderScalar("##RS",ImGuiDataType_U8,&op.rs,&_ZERO,&_THREE)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_RS)); - } else { - P(CWSliderScalar("##KSL",ImGuiDataType_U8,&op.ksl,&_ZERO,&_THREE)); rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_KSL)); - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_MULT)); - - if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { - int detune=(op.dt&7)-3; - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (CWSliderInt("##DT",&detune,-3,4)) { PARAMETER - op.dt=detune+3; - } rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_DT)); - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - P(CWSliderScalar("##DT2",ImGuiDataType_U8,&op.dt2,&_ZERO,&_THREE)); rightClickable - if (ImGui::IsItemHovered() && ins->type==DIV_INS_FM) { - ImGui::SetTooltip("Only on YM2151 (OPM)"); - } - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_DT2)); - - if (ins->type==DIV_INS_FM) { // OPN only - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (CWSliderScalar("##SSG",ImGuiDataType_U8,&ssgEnv,&_ZERO,&_SEVEN,ssgEnvTypes[ssgEnv])) { PARAMETER - op.ssgEnv=(op.ssgEnv&8)|(ssgEnv&7); - } rightClickable - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_SSG)); - } - } - - if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPZ) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - - ImGui::TableNextColumn(); - ImGui::Text("%s",FM_NAME(FM_WS)); - } - - ImGui::EndTable(); - } - - if (ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS) { - if (ImGui::Checkbox(FM_NAME(FM_VIB),&vibOn)) { PARAMETER - op.vib=vibOn; - } - ImGui::SameLine(); - if (ImGui::Checkbox(FM_NAME(FM_KSR),&ksrOn)) { PARAMETER - op.ksr=ksrOn; - } - } - */ + ImGui::PopStyleVar(); if (settings.separateFMColors) { popAccentColors(); @@ -2569,6 +2463,7 @@ void FurnaceGUI::drawInsEdit() { } ImGui::EndTable(); } + ImGui::PopStyleVar(); } else { // classic int columns=2; switch (settings.fmLayout) { From 500e73b2a8e3cd91b70673b34305e0c42f4359b8 Mon Sep 17 00:00:00 2001 From: LoKiToon <98922449+LoKiToon@users.noreply.github.com> Date: Tue, 14 Jun 2022 11:58:43 +0300 Subject: [PATCH 062/152] Add files via upload --- demos/FDS TEST.fur | Bin 1574 -> 1587 bytes demos/Fake Gameboy.fur | Bin 0 -> 1255 bytes demos/c64 ring test.fur | Bin 0 -> 961 bytes demos/game boy thing.fur | Bin 0 -> 1204 bytes demos/thick bass test.fur | Bin 0 -> 17608 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/Fake Gameboy.fur create mode 100644 demos/c64 ring test.fur create mode 100644 demos/game boy thing.fur create mode 100644 demos/thick bass test.fur diff --git a/demos/FDS TEST.fur b/demos/FDS TEST.fur index 54b6d3b40607fd0367a5de8f511989df758bb900..54bdd36cd1ff9a0592b9072fff0960ea4336ce18 100644 GIT binary patch literal 1587 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 YJxxZG{!Y`=WEZ8s)AUsNUy`BxAD+J{f&c&j diff --git a/demos/Fake Gameboy.fur b/demos/Fake Gameboy.fur new file mode 100644 index 0000000000000000000000000000000000000000..50d7e36d90ecb33bde6b355e27588de842d1de79 GIT binary patch literal 1255 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 literal 0 HcmV?d00001 diff --git a/demos/thick bass test.fur b/demos/thick bass test.fur new file mode 100644 index 0000000000000000000000000000000000000000..13268e48bccb66cf5215b095a12af357a1f7361f GIT binary patch literal 17608 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%0Ad+f=45MvJpCdz5>I_YD8gu=$~%eP@a8V)qG! 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 Date: Tue, 14 Jun 2022 04:41:31 -0500 Subject: [PATCH 063/152] GUI: slight visualizer tweaks --- src/engine/engine.h | 3 ++- src/engine/playback.cpp | 4 +++ src/gui/gui.h | 2 ++ src/gui/pattern.cpp | 55 ++++++++++++++++++++++++++++++++++++++--- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index dc16584d..1fa88a91 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -83,7 +83,7 @@ struct DivChannelState { int note, oldNote, lastIns, pitch, portaSpeed, portaNote; int volume, volSpeed, cut, rowDelay, volMax; int delayOrder, delayRow, retrigSpeed, retrigTick; - int vibratoDepth, vibratoRate, vibratoPos, vibratoDir, vibratoFine; + int vibratoDepth, vibratoRate, vibratoPos, vibratoPosGiant, vibratoDir, vibratoFine; int tremoloDepth, tremoloRate, tremoloPos; unsigned char arp, arpStage, arpTicks, panL, panR; bool doNote, legato, portaStop, keyOn, keyOff, nowYouCanStop, stopOnOff; @@ -112,6 +112,7 @@ struct DivChannelState { vibratoDepth(0), vibratoRate(0), vibratoPos(0), + vibratoPosGiant(0), vibratoDir(0), vibratoFine(15), tremoloDepth(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index ed70da94..f8cb79ac 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -988,6 +988,10 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { if (chan[i].vibratoDepth>0) { chan[i].vibratoPos+=chan[i].vibratoRate; if (chan[i].vibratoPos>=64) chan[i].vibratoPos-=64; + + chan[i].vibratoPosGiant+=chan[i].vibratoRate; + if (chan[i].vibratoPos>=512) chan[i].vibratoPos-=512; + switch (chan[i].vibratoDir) { case 1: // up dispatchCmd(DivCommand(DIV_CMD_PITCH,i,chan[i].pitch+(MAX(0,(chan[i].vibratoDepth*vibTable[chan[i].vibratoPos]*chan[i].vibratoFine)>>4)/15))); diff --git a/src/gui/gui.h b/src/gui/gui.h index 55ea989c..e5ad4a94 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1539,6 +1539,8 @@ class FurnaceGUI { void addScroll(int amount); void setFileName(String name); void runBackupThread(); + void pushPartBlend(); + void popPartBlend(); int processEvent(SDL_Event* ev); bool loop(); bool finish(); diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index fa00243c..1d220795 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -17,6 +17,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include +#include #include #define _USE_MATH_DEFINES #include "gui.h" @@ -31,6 +33,30 @@ inline float randRange(float min, float max) { return min+((float)rand()/(float)RAND_MAX)*(max-min); } +void _pushPartBlend(const ImDrawList* drawList, const ImDrawCmd* cmd) { + if (cmd!=NULL) { + if (cmd->UserCallbackData!=NULL) { + ((FurnaceGUI*)cmd->UserCallbackData)->pushPartBlend(); + } + } +} + +void _popPartBlend(const ImDrawList* drawList, const ImDrawCmd* cmd) { + if (cmd!=NULL) { + if (cmd->UserCallbackData!=NULL) { + ((FurnaceGUI*)cmd->UserCallbackData)->popPartBlend(); + } + } +} + +void FurnaceGUI::pushPartBlend() { + SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_ADD); +} + +void FurnaceGUI::popPartBlend() { + SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_BLEND); +} + // draw a pattern row inline void FurnaceGUI::patternRow(int i, bool isPlaying, float lineHeight, int chans, int ord, const DivPattern** patCache, bool inhibitSel) { static char id[32]; @@ -692,11 +718,14 @@ void FurnaceGUI::drawPattern() { ImU32* color=noteGrad; switch (i.cmd) { - case DIV_CMD_NOTE_ON: + case DIV_CMD_NOTE_ON: { + float strength=CLAMP(i.value,0,119); partIcon=ICON_FA_ASTERISK; - life=96.0f; + life=80.0f+((i.value==DIV_NOTE_NULL)?0.0f:(strength*0.3f)); lifeSpeed=3.0f; + num=6+(strength/16); break; + } case DIV_CMD_LEGATO: partIcon=ICON_FA_COG; color=insGrad; @@ -794,7 +823,7 @@ void FurnaceGUI::drawPattern() { float frameTime=ImGui::GetIO().DeltaTime*60.0f; - // note slides + // note slides and vibrato ImVec2 arrowPoints[7]; if (e->isPlaying()) for (int i=0; icurSubSong->chanShow[i]) continue; @@ -849,11 +878,30 @@ void FurnaceGUI::drawPattern() { } } } + if (ch->vibratoDepth>0) { + ImVec4 col=uiColors[GUI_COLOR_PATTERN_EFFECT_PITCH]; + col.w*=0.2; + float width=patChanX[i+1]-patChanX[i]; + + particles.push_back(Particle( + pitchGrad, + ICON_FA_GLASS, + off.x+patChanX[i]+(width*0.5+0.5*sin(M_PI*(float)ch->vibratoPosGiant/64.0f)*width)-scrollX, + off.y+(ImGui::GetWindowHeight()*0.5f)+randRange(0,patFont->FontSize), + randRange(-4.0f,4.0f), + 2.0f*(3.0f+(rand()%5)+ch->vibratoRate), + 0.4f, + 1.0f, + 128.0f, + 4.0f + )); + } } // particle simulation ImDrawList* fdl=ImGui::GetForegroundDrawList(); if (!particles.empty()) WAKE_UP; + fdl->AddCallback(_pushPartBlend,this); for (size_t i=0; iAddCallback(_popPartBlend,this); } ImGui::PopStyleColor(3); From cc06f36c92b8535c93a72e58bc3adc048a94b146 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 14 Jun 2022 14:08:28 -0500 Subject: [PATCH 064/152] GUI: fix dumb header insertion --- src/gui/pattern.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index 1d220795..b7940a9e 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -17,9 +17,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include -#include -#include #define _USE_MATH_DEFINES #include "gui.h" #include "../ta-log.h" From dc9f1112d15f45168a388de6bae475dab9060aa6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 14 Jun 2022 23:00:20 -0500 Subject: [PATCH 065/152] MSM6258: fix rate being twice #541 --- src/engine/platform/msm6258.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/msm6258.cpp b/src/engine/platform/msm6258.cpp index db1848cf..731bf8f2 100644 --- a/src/engine/platform/msm6258.cpp +++ b/src/engine/platform/msm6258.cpp @@ -380,7 +380,7 @@ void DivPlatformMSM6258::setFlags(unsigned int flags) { chipClock=4000000; break; } - rate=chipClock/128; + rate=chipClock/256; for (int i=0; i<1; i++) { oscBuf[i]->rate=rate; } From 64f534328924013a93bda360bc0682315546b023 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 15 Jun 2022 02:03:20 -0500 Subject: [PATCH 066/152] I give up trying to fix this file dialog for now --- extern/igfd/ImGuiFileDialog.cpp | 10 ++++++---- src/gui/gui.cpp | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/extern/igfd/ImGuiFileDialog.cpp b/extern/igfd/ImGuiFileDialog.cpp index f7a2be5b..776ad373 100644 --- a/extern/igfd/ImGuiFileDialog.cpp +++ b/extern/igfd/ImGuiFileDialog.cpp @@ -1287,8 +1287,6 @@ namespace IGFD std::sort(prFileList.begin(), prFileList.end(), [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool { - if (a==NULL || b==NULL) - return false; if (!a.use_count() || !b.use_count()) return false; @@ -1760,7 +1758,7 @@ namespace IGFD struct stat statInfos = {}; char timebuf[100]; int result = stat(fpn.c_str(), &statInfos); - if (!result) + if (result!=-1) { if (vInfos->fileType != 'd') { @@ -1781,7 +1779,11 @@ namespace IGFD { vInfos->fileModifDate = std::string(timebuf, len); } - } + } else { + vInfos->fileSize=0; + vInfos->formatedFileSize = prFormatFileSize(vInfos->fileSize); + vInfos->fileModifDate="???"; + } } } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index b982987c..fd904649 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4105,6 +4105,7 @@ bool FurnaceGUI::init() { #ifndef __APPLE__ if (settings.dpiScale<0.5f) { + // TODO: replace with a function to actually detect the display scaling factor as it's unreliable. SDL_GetDisplayDPI(SDL_GetWindowDisplayIndex(sdlWin),&dpiScaleF,NULL,NULL); dpiScale=round(dpiScaleF/96.0f); if (dpiScale<1) dpiScale=1; From 491109e765812e725995087d2b3e606f0f35a8c9 Mon Sep 17 00:00:00 2001 From: LoKiToon <98922449+LoKiToon@users.noreply.github.com> Date: Wed, 15 Jun 2022 23:38:18 +0300 Subject: [PATCH 067/152] Add files via upload --- demos/Fusion.fur | Bin 0 -> 1881 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/Fusion.fur diff --git a/demos/Fusion.fur b/demos/Fusion.fur new file mode 100644 index 0000000000000000000000000000000000000000..a69f26e815e1ada047d94f642a76a8c0e204c657 GIT binary patch literal 1881 zcmZ8ec{tPwA7_wZS|mq~oDE@wMJzJ8k}G9%6;?!M3a^gO+Pe~$0x^ZDK-v3zDTbWB4M;1~~|dK?oj(({hG+ z70g6e0Uoni0X!0f_{ig?!?)hS=M6AkPlCb$LC%gjdsDD8VjKh1@jc1H2!@09%?0pr zN7|wx#{1C74XwG}@y^s)9%_d`2TdEF>PztlXZq?lWTT@Qk1jATu8h2V99XPqCUvCY zucJmy5&1is zzMTak@|(UTEoN=N*LRnVIsjkeXBSQHVnq7y)uYrVnzwQrE=*4IJB-+d?Tj*PKQ}hw zBtndHgOStPE6=YklpEVcd5&qU2)DUXr~cG8JH1~)UHW;}d|(zu?5t#2U12FyNfJ@HqatHN;C7T`weY8dVm^cZRT$2YWr6~ zku}W4#AIP^W~Pv|DNN0ARLShPrW(faXnv&LqbX=wdm&fBz@C`1+w}VX+AiaARiKoq zl`JcAC=GZ%(io8LO@^zEX!HNL9jQBGu;hVf6<)b*CS!Tk=|gdXPf5fN`6X;`Upnby zrrlw5u52EatWhu{ef0`!3N4m*iuH7%-fkxZi*{nbaZfj84AHLLNT+!?&LMky= z30`a}^zebPNwLA99}W7ZCz}lsm>(adyv)&^C;KAA;sPGVx+DpGPJV?ItEb&`PS>4p z)71eZ#INAhU?;jvHz>W?P1SoDEK0}4F4aCjZJ<&7L*24YbKjndKo*Q!mGrBW!zeN| zZ_7!)h{6d=Lt71hhcAmozp*An0!s8)NQ=4+Are85w&p;8m0d+Hhu&ZRLecCfJX4*r zVeRdBwT z!fBe;&o#SaY9wh9h$V+_>ANe^%AhTF z?2C}>Od-S&%}_tA*|kxSxy00wNRsgqtC4#7oE` Date: Thu, 16 Jun 2022 01:26:19 -0500 Subject: [PATCH 068/152] GUI: prepare for replace undo --- src/gui/editing.cpp | 8 +++++++- src/gui/findReplace.cpp | 10 ++++++++++ src/gui/gui.h | 3 ++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index ea12eb59..f299b1af 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -66,6 +66,8 @@ void FurnaceGUI::prepareUndo(ActionType action) { e->curPat[i].getPattern(e->curOrders->ord[i][curOrder],false)->copyOn(oldPat[i]); } break; + case GUI_UNDO_REPLACE: // this is handled by doReplace() + break; } } @@ -86,7 +88,7 @@ void FurnaceGUI::makeUndo(ActionType action) { if (oldOrders.ord[i][j]!=e->curOrders->ord[i][j]) { s.ord.push_back(UndoOrderData(subSong,i,j,oldOrders.ord[i][j],e->curOrders->ord[i][j])); } - } + }SATGDIOPTASDIOKP;ASDTG } s.oldOrdersLen=oldOrdersLen; s.newOrdersLen=e->curSubSong->ordersLen; @@ -126,6 +128,8 @@ void FurnaceGUI::makeUndo(ActionType action) { doPush=true; } break; + case GUI_UNDO_REPLACE: // this is handled by doReplace() + break; } if (doPush) { MARK_MODIFIED; @@ -943,6 +947,7 @@ void FurnaceGUI::doUndo() { case GUI_UNDO_PATTERN_FLIP: case GUI_UNDO_PATTERN_COLLAPSE: case GUI_UNDO_PATTERN_EXPAND: + case GUI_UNDO_REPLACE: for (UndoPatternData& i: us.pat) { e->changeSongP(i.subSong); DivPattern* p=e->curPat[i.chan].getPattern(i.pat,true); @@ -991,6 +996,7 @@ void FurnaceGUI::doRedo() { case GUI_UNDO_PATTERN_FLIP: case GUI_UNDO_PATTERN_COLLAPSE: case GUI_UNDO_PATTERN_EXPAND: + case GUI_UNDO_REPLACE: for (UndoPatternData& i: us.pat) { e->changeSongP(i.subSong); DivPattern* p=e->curPat[i.chan].getPattern(i.pat,true); diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index d5548c0f..5dae95bc 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -189,6 +189,12 @@ void FurnaceGUI::doFind() { queryViewingResults=true; } +/* issues with the find and replace function: + - doesn't mark the module as modified + - can't undo + - replace notes to anything starting from C-0 to lower notes will have an octave higher, so set it to replace to C-0 it will becom C-1, b_1 will become B-0 and so on +*/ + void FurnaceGUI::doReplace() { doFind(); queryViewingResults=false; @@ -399,6 +405,10 @@ void FurnaceGUI::doReplace() { for (int i=0; i Date: Thu, 16 Jun 2022 02:09:57 -0500 Subject: [PATCH 069/152] fix build --- src/gui/editing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index f299b1af..8b30d251 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -88,7 +88,7 @@ void FurnaceGUI::makeUndo(ActionType action) { if (oldOrders.ord[i][j]!=e->curOrders->ord[i][j]) { s.ord.push_back(UndoOrderData(subSong,i,j,oldOrders.ord[i][j],e->curOrders->ord[i][j])); } - }SATGDIOPTASDIOKP;ASDTG + } } s.oldOrdersLen=oldOrdersLen; s.newOrdersLen=e->curSubSong->ordersLen; From c44ca95b92277578661f9d317b4ae80f4fc9bf07 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Fri, 17 Jun 2022 03:06:07 +0700 Subject: [PATCH 070/152] Make volume command handling consistent For WonderSwan and VIC-20 --- src/engine/platform/swan.cpp | 2 +- src/engine/platform/vic20.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/swan.cpp b/src/engine/platform/swan.cpp index 73dc7928..905fa82a 100644 --- a/src/engine/platform/swan.cpp +++ b/src/engine/platform/swan.cpp @@ -347,7 +347,7 @@ int DivPlatformSwan::dispatch(DivCommand c) { case DIV_CMD_VOLUME: if (chan[c.chan].vol!=c.value) { chan[c.chan].vol=c.value; - if (!chan[c.chan].std.vol.had) { + if (!chan[c.chan].std.vol.has) { calcAndWriteOutVol(c.chan,15); } } diff --git a/src/engine/platform/vic20.cpp b/src/engine/platform/vic20.cpp index a766ba44..8475b0e5 100644 --- a/src/engine/platform/vic20.cpp +++ b/src/engine/platform/vic20.cpp @@ -195,7 +195,7 @@ int DivPlatformVIC20::dispatch(DivCommand c) { case DIV_CMD_VOLUME: if (chan[c.chan].vol!=c.value) { chan[c.chan].vol=c.value; - if (!chan[c.chan].std.vol.had) { + if (!chan[c.chan].std.vol.has) { calcAndWriteOutVol(c.chan,15); } } From 7d78b393fb69619045c4d1cfb83999a31f29cde8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 16 Jun 2022 21:25:06 -0500 Subject: [PATCH 071/152] update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 06576ee5..566a3c3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .vscode/ build/ +clangbuild/ nosdl/ release/ t/ From ed6a110d4493cbad3efc8852d74bf4739b4c12ec Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 16 Jun 2022 21:25:21 -0500 Subject: [PATCH 072/152] initialize SF_INFO before loading sample --- src/engine/engine.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 76b2cd11..dfac034c 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2183,6 +2183,7 @@ int DivEngine::addSampleFromFile(const char* path) { return -1; #else SF_INFO si; + memset(&si,0,sizeof(SF_INFO)); SNDFILE* f=sf_open(path,SFM_READ,&si); if (f==NULL) { BUSY_END; From 327952f3f448591075516cc32844f9c52480845f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 16 Jun 2022 22:07:12 -0500 Subject: [PATCH 073/152] finally support loading floating-point samples --- src/engine/engine.cpp | 58 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index dfac034c..b7a96209 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2201,8 +2201,22 @@ int DivEngine::addSampleFromFile(const char* path) { BUSY_END; return -1; } - short* buf=new short[si.channels*si.frames]; - if (sf_readf_short(f,buf,si.frames)!=si.frames) { + void* buf=NULL; + sf_count_t sampleLen=sizeof(short); + if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_PCM_U8) { + logD("sample is 8-bit unsigned"); + buf=new unsigned char[si.channels*si.frames]; + sampleLen=sizeof(unsigned char); + } else if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_FLOAT) { + logD("sample is 32-bit float"); + buf=new float[si.channels*si.frames]; + sampleLen=sizeof(float); + } else { + logD("sample is 16-bit signed"); + buf=new short[si.channels*si.frames]; + sampleLen=sizeof(short); + } + if (sf_read_raw(f,buf,si.frames*si.channels*sampleLen)!=(si.frames*si.channels*sampleLen)) { logW("sample read size mismatch!"); } DivSample* sample=new DivSample; @@ -2216,19 +2230,41 @@ int DivEngine::addSampleFromFile(const char* path) { sample->depth=16; } sample->init(si.frames); - for (int i=0; idata8[index++]=averaged; } - averaged/=si.channels; - if (((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_PCM_U8)) { - sample->data8[index++]=averaged>>8; - } else { + delete[] (unsigned char*)buf; + } else if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_FLOAT) { + for (int i=0; i32767.0) averaged=32767.0; sample->data16[index++]=averaged; } + delete[] (float*)buf; + } else { + for (int i=0; idata16[index++]=averaged; + } + delete[] (short*)buf; } - delete[] buf; + sample->rate=si.samplerate; if (sample->rate<4000) sample->rate=4000; if (sample->rate>96000) sample->rate=96000; From cdbcf7fcd3789dbd77997a657d4ece2595cc3cdf Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 16 Jun 2022 22:10:57 -0500 Subject: [PATCH 074/152] fix loading 8-bit samples --- src/engine/engine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index b7a96209..ecd095de 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2234,7 +2234,7 @@ int DivEngine::addSampleFromFile(const char* path) { for (int i=0; idata8[index++]=averaged; From 4d44c577e734507a4e65b0e0898a6f9138fc8e15 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 16 Jun 2022 23:22:40 -0500 Subject: [PATCH 075/152] support saving 8-bit samples as-is --- src/engine/sample.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index 53441095..36886856 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -51,7 +51,14 @@ bool DivSample::save(const char* path) { si.channels=1; si.samplerate=rate; - si.format=SF_FORMAT_PCM_16|SF_FORMAT_WAV; + switch (depth) { + case 8: // 8-bit + si.format=SF_FORMAT_PCM_U8|SF_FORMAT_WAV; + break; + default: // 16-bit + si.format=SF_FORMAT_PCM_16|SF_FORMAT_WAV; + break; + } f=sf_open(path,SFM_WRITE,&si); @@ -77,7 +84,21 @@ bool DivSample::save(const char* path) { } sf_command(f, SFC_SET_INSTRUMENT, &inst, sizeof(inst)); - sf_writef_short(f,data16,samples); + switch (depth) { + case 8: { + // convert from signed to unsigned + unsigned char* buf=new unsigned char[length8]; + for (size_t i=0; i Date: Thu, 16 Jun 2022 23:39:38 -0500 Subject: [PATCH 076/152] harden sample movement --- src/engine/engine.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ecd095de..0812535c 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2067,6 +2067,8 @@ int DivEngine::addSample() { sample->name=fmt::sprintf("Sample %d",sampleCount); song.sample.push_back(sample); song.sampleLen=sampleCount+1; + sPreview.sample=-1; + sPreview.pos=0; saveLock.unlock(); renderSamples(); BUSY_END; @@ -2302,6 +2304,8 @@ int DivEngine::addSampleFromFile(const char* path) { void DivEngine::delSample(int index) { BUSY_BEGIN; + sPreview.sample=-1; + sPreview.pos=0; saveLock.lock(); if (index>=0 && index<(int)song.sample.size()) { delete song.sample[index]; @@ -2516,6 +2520,8 @@ bool DivEngine::moveWaveUp(int which) { bool DivEngine::moveSampleUp(int which) { if (which<1 || which>=(int)song.sample.size()) return false; BUSY_BEGIN; + sPreview.sample=-1; + sPreview.pos=0; DivSample* prev=song.sample[which]; saveLock.lock(); song.sample[which]=song.sample[which-1]; @@ -2553,6 +2559,8 @@ bool DivEngine::moveWaveDown(int which) { bool DivEngine::moveSampleDown(int which) { if (which<0 || which>=((int)song.sample.size())-1) return false; BUSY_BEGIN; + sPreview.sample=-1; + sPreview.pos=0; DivSample* prev=song.sample[which]; saveLock.lock(); song.sample[which]=song.sample[which+1]; From ad5072dad675199ec11d02c5158c310724c8e775 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 16 Jun 2022 23:55:17 -0500 Subject: [PATCH 077/152] more MIDI debugging messages --- src/audio/abstract.cpp | 2 ++ src/engine/engine.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/audio/abstract.cpp b/src/audio/abstract.cpp index e44fdf7e..942e3143 100644 --- a/src/audio/abstract.cpp +++ b/src/audio/abstract.cpp @@ -92,10 +92,12 @@ bool TAMidiOut::closeDevice() { } std::vector TAMidiIn::listDevices() { + logW("attempting to list devices of abstract TAMidiIn!"); return std::vector(); } std::vector TAMidiOut::listDevices() { + logW("attempting to list devices of abstract TAMidiOut!"); return std::vector(); } diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 0812535c..8ce31a60 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -3025,6 +3025,8 @@ bool DivEngine::initAudioBackend() { if (!output->midiIn->openDevice(inName)) { logW("could not open MIDI input device!"); } + } else { + logV("no MIDI input device selected."); } } if (output->midiOut) { @@ -3035,6 +3037,8 @@ bool DivEngine::initAudioBackend() { if (!output->midiOut->openDevice(outName)) { logW("could not open MIDI output device!"); } + } else { + logV("no MIDI output device selected."); } } From d5d381328bddc84262dbd61c2c83c4f3174a5c8f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 00:02:29 -0500 Subject: [PATCH 078/152] add modified version of Native File Dialog it will replace portable-file-dialogs on Windows, and perhaps in the rest of operating systems (maybe not Linux) as well. --- extern/nfd-modified/.gitignore | 181 +++++ extern/nfd-modified/LICENSE | 16 + extern/nfd-modified/MODIFIED.md | 7 + extern/nfd-modified/README.md | 182 +++++ extern/nfd-modified/docs/build.md | 39 + extern/nfd-modified/docs/contributing.md | 25 + extern/nfd-modified/src/common.h | 21 + extern/nfd-modified/src/include/nfd.h | 74 ++ extern/nfd-modified/src/nfd_cocoa.m | 286 +++++++ extern/nfd-modified/src/nfd_common.c | 142 ++++ extern/nfd-modified/src/nfd_common.h | 39 + extern/nfd-modified/src/nfd_gtk.c | 379 +++++++++ extern/nfd-modified/src/nfd_win.cpp | 762 ++++++++++++++++++ extern/nfd-modified/src/nfd_zenity.c | 307 +++++++ extern/nfd-modified/src/simple_exec.h | 218 +++++ extern/nfd-modified/test/test_opendialog.c | 29 + .../test/test_opendialogmultiple.c | 32 + extern/nfd-modified/test/test_pickfolder.c | 29 + extern/nfd-modified/test/test_savedialog.c | 28 + 19 files changed, 2796 insertions(+) create mode 100644 extern/nfd-modified/.gitignore create mode 100644 extern/nfd-modified/LICENSE create mode 100644 extern/nfd-modified/MODIFIED.md create mode 100644 extern/nfd-modified/README.md create mode 100644 extern/nfd-modified/docs/build.md create mode 100644 extern/nfd-modified/docs/contributing.md create mode 100644 extern/nfd-modified/src/common.h create mode 100644 extern/nfd-modified/src/include/nfd.h create mode 100644 extern/nfd-modified/src/nfd_cocoa.m create mode 100644 extern/nfd-modified/src/nfd_common.c create mode 100644 extern/nfd-modified/src/nfd_common.h create mode 100644 extern/nfd-modified/src/nfd_gtk.c create mode 100644 extern/nfd-modified/src/nfd_win.cpp create mode 100644 extern/nfd-modified/src/nfd_zenity.c create mode 100644 extern/nfd-modified/src/simple_exec.h create mode 100644 extern/nfd-modified/test/test_opendialog.c create mode 100644 extern/nfd-modified/test/test_opendialogmultiple.c create mode 100644 extern/nfd-modified/test/test_pickfolder.c create mode 100644 extern/nfd-modified/test/test_savedialog.c diff --git a/extern/nfd-modified/.gitignore b/extern/nfd-modified/.gitignore new file mode 100644 index 00000000..5f144cbe --- /dev/null +++ b/extern/nfd-modified/.gitignore @@ -0,0 +1,181 @@ +.sconsign.dblite +# Object files +*.o +*.ko +*.obj +*.elf +# Precompiled Headers +*.gch +*.pch +# Libraries +*.lib +*.a +*.la +*.lo +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates +# User-specific folders +*.sln.ide/ +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +# Roslyn cache directories +*.ide/ +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* +#NUNIT +*.VisualState.xml +TestResult.xml +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc +# Chutzpah Test files +_Chutzpah* +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile +# Visual Studio profiler +*.psess +*.vsp +*.vspx +# TFS 2012 Local Workspace +$tf/ +# Guidance Automation Toolkit +*.gpState +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user +# JustCode is a .NET coding addin-in +.JustCode +# TeamCity is a build add-in +_TeamCity* +# DotCover is a Code Coverage Tool +*.dotCover +# NCrunch +_NCrunch_* +.*crunch*.local.xml +# MightyMoose +*.mm.* +AutoTest.Net/ +# Web workbench (sass) +.sass-cache/ +# Installshield output folder +[Ee]xpress/ +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html +# Click-Once directory +publish/ +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# If using the old MSBuild-Integrated Package Restore, uncomment this: +#!**/packages/repositories.config +# Windows Azure Build Output +csx/ +*.build.csdef +# Windows Store app package directory +AppPackages/ +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +bower_components/ +# RIA/Silverlight projects +Generated_Code/ +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +# SQL Server files +*.mdf +*.ldf +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +# Microsoft Fakes +FakesAssemblies/ diff --git a/extern/nfd-modified/LICENSE b/extern/nfd-modified/LICENSE new file mode 100644 index 00000000..3ab103c5 --- /dev/null +++ b/extern/nfd-modified/LICENSE @@ -0,0 +1,16 @@ +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/extern/nfd-modified/MODIFIED.md b/extern/nfd-modified/MODIFIED.md new file mode 100644 index 00000000..bb542f8b --- /dev/null +++ b/extern/nfd-modified/MODIFIED.md @@ -0,0 +1,7 @@ +# MODIFIED + +this is a modified, altered, edited and revised version of the Native File Dialog library used to display native-feeling, original and operating-system specific file archive dialog picker selectors, which is done by the Native File Dialog library. + +it should not and shall NOT be mistaken for the original, authentic or actual version and revision of the library. + +this is a version tailored for Furnace. diff --git a/extern/nfd-modified/README.md b/extern/nfd-modified/README.md new file mode 100644 index 00000000..fd7a9783 --- /dev/null +++ b/extern/nfd-modified/README.md @@ -0,0 +1,182 @@ +# Native File Dialog Modified Version!!! # + +A tiny, neat C library that portably invokes native file open, folder select and save dialogs. Write dialog code once and have it pop up native dialogs on all supported platforms. Avoid linking large dependencies like wxWidgets and qt. + +This is a modified version of Native File Dialog, tailored for Furnace. + +Features: + + - Lean C API, static library -- no ObjC, no C++, no STL. + - Zlib licensed. + - Consistent UTF-8 support on all platforms. + - Simple universal file filter syntax. + - Paid support available. + - Multiple file selection support. + - 64-bit and 32-bit friendly. + - GCC, Clang, Xcode, Mingw and Visual Studio supported. + - No third party dependencies for building or linking. + - Support for Vista's modern `IFileDialog` on Windows. + - Support for non-deprecated Cocoa APIs on OS X. + - GTK3 dialog on Linux. + - Optional Zenity support on Linux to avoid linking GTK. + - Tested, works alongside [http://www.libsdl.org](SDL2) on all platforms, for the game developers out there. + +# Example Usage # + +```C +#include +#include +#include + +int main( void ) +{ + nfdchar_t *outPath = NULL; + nfdresult_t result = NFD_OpenDialog( NULL, NULL, &outPath ); + + if ( result == NFD_OKAY ) { + puts("Success!"); + puts(outPath); + free(outPath); + } + else if ( result == NFD_CANCEL ) { + puts("User pressed cancel."); + } + else { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} +``` + +See self-documenting API [NFD.h](src/include/nfd.h) for more options. + +# Screenshots # + +![Windows rendering a dialog](screens/open_win.png?raw=true) +![GTK3 on Linux rendering a dialog](screens/open_gtk3.png?raw=true) +![Cocoa on MacOS rendering a dialog](screens/open_cocoa.png?raw=true) + +## Changelog ## + + - **Major** version increments denote API or ABI departure. + - **Minor** version increments denote build or trivial departures. + - **Micro** version increments just recompile and drop-in. + +release | what's new | date +--------|-----------------------------|--------- +1.0.0 | initial | oct 2014 +1.1.0 | premake5; scons deprecated | aug 2016 +1.1.1 | mingw support, build fixes | aug 2016 +1.1.2 | test_pickfolder() added | aug 2016 +1.1.3 | zenity linux backend added | nov 2017 + | fix char type in decls | nov 2017 +1.1.4 | fix win32 memleaks | dec 2018 + | improve win32 errorhandling | dec 2018 + | macos fix focus bug | dec 2018 +1.1.5 | win32 fix com reinitialize | aug 2019 +1.1.6 | fix osx filter bug | aug 2019 + | remove deprecated scons | aug 2019 + | fix mingw compilation | aug 2019 + | -Wextra warning cleanup | aug 2019 + +## Building ## + +NFD uses [Premake5](https://premake.github.io/download.html) generated Makefiles and IDE project files. The generated project files are checked in under `build/` so you don't have to download and use Premake in most cases. + +If you need to run Premake5 directly, further [build documentation](docs/build.md) is available. + +Previously, NFD used SCons to build. As of 1.1.6, SCons support has been removed entirely. + +`nfd.a` will be built for release builds, and `nfd_d.a` will be built for debug builds. + +### Makefiles ### + +The makefile offers up to four options, with `release_x64` as the default. + + make config=release_x86 + make config=release_x64 + make config=debug_x86 + make config=debug_x64 + +### Compiling Your Programs ### + + 1. Add `src/include` to your include search path. + 2. Add `nfd.lib` or `nfd_d.lib` to the list of list of static libraries to link against (for release or debug, respectively). + 3. Add `build//` to the library search path. + +#### Linux GTK #### + +`apt-get libgtk-3-dev` installs the gtk dependency for library compilation. + +On Linux, you have the option of compiling and linking against GTK. If you use it, the recommended way to compile is to include the arguments of `pkg-config --cflags --libs gtk+-3.0`. + +#### Linux Zenity #### + +Alternatively, you can use the Zenity backend by running the Makefile in `build/gmake_linux_zenity`. Zenity runs the dialog in its own address space, but requires the user to have Zenity correctly installed and configured on their system. + +#### MacOS #### + +On Mac OS, add `AppKit` to the list of frameworks. + +#### Windows #### + +On Windows, ensure you are linking against `comctl32.lib`. + +## Usage ## + +See `NFD.h` for API calls. See `tests/*.c` for example code. + +After compiling, `build/bin` contains compiled test programs. The appropriate subdirectory under `build/lib` contains the built library. + +## File Filter Syntax ## + +There is a form of file filtering in every file dialog API, but no consistent means of supporting it. NFD provides support for filtering files by groups of extensions, providing its own descriptions (where applicable) for the extensions. + +A wildcard filter is always added to every dialog. + +### Separators ### + + - `;` Begin a new filter. + - `,` Add a separate type to the filter. + +#### Examples #### + +`txt` The default filter is for text files. There is a wildcard option in a dropdown. + +`png,jpg;psd` The default filter is for png and jpg files. A second filter is available for psd files. There is a wildcard option in a dropdown. + +`NULL` Wildcard only. + +## Iterating Over PathSets ## + +See [test_opendialogmultiple.c](test/test_opendialogmultiple.c). + +# Known Limitations # + +I accept quality code patches, or will resolve these and other matters through support. See [contributing](docs/contributing.md) for details. + + - No support for Windows XP's legacy dialogs such as `GetOpenFileName`. + - No support for file filter names -- ex: "Image Files" (*.png, *.jpg). Nameless filters are supported, however. + - GTK Zenity implementation's process exec error handling does not gracefully handle numerous error cases, choosing to abort rather than cleanup and return. + - GTK 3 spams one warning per dialog created. + +# Copyright and Credit # + +Copyright © 2014-2019 [Frogtoss Games](http://www.frogtoss.com), Inc. +File [LICENSE](LICENSE) covers all files in this repo. + +Native File Dialog by Michael Labbe + + +Tomasz Konojacki for [microutf8](http://puszcza.gnu.org.ua/software/microutf8/) + +[Denis Kolodin](https://github.com/DenisKolodin) for mingw support. + +[Tom Mason](https://github.com/wheybags) for Zenity support. + +## Support ## + +Directed support for this work is available from the original author under a paid agreement. + +[Contact Frogtoss Games](http://www.frogtoss.com/pages/contact.html). diff --git a/extern/nfd-modified/docs/build.md b/extern/nfd-modified/docs/build.md new file mode 100644 index 00000000..a1f73271 --- /dev/null +++ b/extern/nfd-modified/docs/build.md @@ -0,0 +1,39 @@ +# Building NFD # + +Most of the building instructions are included in [README.md](/README.md). This file just contains apocrypha. + +## Running Premake5 Directly ## + +*You shouldn't have to run Premake5 directly to build Native File Dialog. This is for package maintainers or people with exotic demands only!* + +1. [Clone premake-core](https://github.com/premake/premake-core) +2. [Follow instructions on how to build premake](https://github.com/premake/premake-core/wiki/Building-Premake) +3. `cd` to `build` +4. Type `premake5 `, where is the build you want to create. + +### Package Maintainer Only ### + +I support a custom Premake action: `premake5 dist`, which generates all of the checked in project types in subdirectories. It is useful to run this command if you are submitting a pull request to test all of the supported premake configurations. Do not check in the built projects; I will do so while accepting your pull request. + +## SCons build (deprecated) ## + +As of 1.1.6, the deprecated and unmaintained SCons support is removed. + +## Compiling with Mingw ## + +Use the Makefile in `build/gmake_windows` to build Native File Dialog with mingw. Mingw has many distributions and not all of them are reliable. Here is what worked for me, the primary author of Native File Dialog: + +1. Use mingw64, not mingw32. Downloaded from [sourceforge.net](https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download). +2. When prompted in the intsaller, install the basic compiler and g++. +3. Add the installed bin dir to command prompt path. +4. Run `set CC=g++` to enforce `g++` instead of the default, `cc` for compiling and linking. +5. In `build/gmake_windows`, run `mingw32-make config=release_x64 clean`. Running clean ensures no Visual Studio build products conflict which can cause link errors. +6. Now run `mingw32-make config=release_x64`. + +The author has not attempted to build or even install an x86 toolchain for mingw. + +If you report an issue, be sure to run make with `verbose=1` so commands are visible. + +## Adding NFD source directly to your project ## + +Lots of developers add NFD source directly to their projects instead of using the included build scripts. As of 1.1.6, this is an acknowledged approach to building. Of course, everyone has a slightly different toolchain with various warnings and linters enabled. If you run a linter or catch a warning, please consider submitting a pull request to help NFD build cleanly for everyone. diff --git a/extern/nfd-modified/docs/contributing.md b/extern/nfd-modified/docs/contributing.md new file mode 100644 index 00000000..f6c3b54c --- /dev/null +++ b/extern/nfd-modified/docs/contributing.md @@ -0,0 +1,25 @@ +# Pull Requests # + +I have had to turn away a number of pull requests due to avoidable circumstances. Please read this file before submitting a pull request. Also look at existing, rejected pull requests which state the reason for rejection. + +Here are the rules: + +- **Submit pull requests to the devel branch**. The library must be tested on every compiler and OS, so there is no way I am going to just put your change in the master before it has been sync'd and tested on a number of machines. Master branch is depended upon by hundreds of projects. + +- **Test your changes on all platforms and compilers that you can.** Also, state which platforms you have tested your code on. 32-bit or 64-bit. Clang or GCC. Visual Studio or Mingw. I have to test all these to accept pull requests, so I prioritize changes that respect my time. + +- **Submit Premake build changes only**. As of 1.1, SCons is deprecated. Also, do not submit altered generated projects. I will re-run Premake to re-generate them to ensure that I can still generate the project prior to admitting your pull request. + +- **Do not alter existing behavior to support your desired behavior**. For instance, rewriting file open dialogs to behave differently, while trading off functionality for compatibility, will get you rejected. Consider creating an additional code path. Instead of altering `nfd_win.cpp` to support Windows XP, create `nfd_win_legacy.cpp`, which exists alongside the newer file dialog. + +- **Do not submit anything I can't verify or maintain**. If you add support for a compiler, include from-scratch install instructions that you have tested yourself. Accepting a pull request means I am now the maintainer of your code, so I must understand what it does and how to test it. + +- **Do not change the externally facing API**. NFD needs to maintain ABI compatibility. + +## Submitting Cloud Autobuild systems ## + +I have received a few pull requests for Travis and AppVeyor-based autobuilding which I have not accepted. NativeFileDialog is officially covered by my private BuildBot network which supports all three target OSes, both CPU architectures and four compilers. I take the view that having a redundant, lesser autobuild system does not improve coverage: it gives a false positive when partial building succeeds. Please do not invest time into cloud-based building with the hope of a pull request being accepted. + +## Contact Me ## + +Despite all of the "do nots" above, I am happy to recieve new pull requests! If you have any questions about style, or what I would need to accept your specific request, please contact me ahead of submitting the pull request by opening an issue on Github with your question. I will do my best to answer you. diff --git a/extern/nfd-modified/src/common.h b/extern/nfd-modified/src/common.h new file mode 100644 index 00000000..7745d323 --- /dev/null +++ b/extern/nfd-modified/src/common.h @@ -0,0 +1,21 @@ +/* + Native File Dialog + + Internal, common across platforms + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_COMMON_H +#define _NFD_COMMON_H + +#define NFD_MAX_STRLEN 256 +#define _NFD_UNUSED(x) ((void)x) + +void *NFDi_Malloc( size_t bytes ); +void NFDi_Free( void *ptr ); +void NFDi_SetError( const char *msg ); +void NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); + +#endif diff --git a/extern/nfd-modified/src/include/nfd.h b/extern/nfd-modified/src/include/nfd.h new file mode 100644 index 00000000..74c92743 --- /dev/null +++ b/extern/nfd-modified/src/include/nfd.h @@ -0,0 +1,74 @@ +/* + Native File Dialog + + User API + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_H +#define _NFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* denotes UTF-8 char */ +typedef char nfdchar_t; + +/* opaque data structure -- see NFD_PathSet_* */ +typedef struct { + nfdchar_t *buf; + size_t *indices; /* byte offsets into buf */ + size_t count; /* number of indices into buf */ +}nfdpathset_t; + +typedef enum { + NFD_ERROR, /* programmatic error */ + NFD_OKAY, /* user pressed okay, or successful return */ + NFD_CANCEL /* user pressed cancel */ +}nfdresult_t; + + +/* nfd_.c */ + +/* single file open dialog */ +nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ); + +/* multiple file open dialog */ +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ); + +/* save dialog */ +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ); + + +/* select folder dialog */ +nfdresult_t NFD_PickFolder( const nfdchar_t *defaultPath, + nfdchar_t **outPath); + +/* nfd_common.c */ + +/* get last error -- set when nfdresult_t returns NFD_ERROR */ +const char *NFD_GetError( void ); +/* get the number of entries stored in pathSet */ +size_t NFD_PathSet_GetCount( const nfdpathset_t *pathSet ); +/* Get the UTF-8 path at offset index */ +nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathSet, size_t index ); +/* Free the pathSet */ +void NFD_PathSet_Free( nfdpathset_t *pathSet ); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extern/nfd-modified/src/nfd_cocoa.m b/extern/nfd-modified/src/nfd_cocoa.m new file mode 100644 index 00000000..776152d4 --- /dev/null +++ b/extern/nfd-modified/src/nfd_cocoa.m @@ -0,0 +1,286 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +#include +#include "nfd.h" +#include "nfd_common.h" + +static NSArray *BuildAllowedFileTypes( const char *filterList ) +{ + // Commas and semicolons are the same thing on this platform + + NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; + + char typebuf[NFD_MAX_STRLEN] = {0}; + + size_t filterListLen = strlen(filterList); + char *p_typebuf = typebuf; + for ( size_t i = 0; i < filterListLen+1; ++i ) + { + if ( filterList[i] == ',' || filterList[i] == ';' || filterList[i] == '\0' ) + { + if (filterList[i] != '\0') + ++p_typebuf; + *p_typebuf = '\0'; + + NSString *thisType = [NSString stringWithUTF8String: typebuf]; + [buildFilterList addObject:thisType]; + p_typebuf = typebuf; + *p_typebuf = '\0'; + } + else + { + *p_typebuf = filterList[i]; + ++p_typebuf; + + } + } + + NSArray *returnArray = [NSArray arrayWithArray:buildFilterList]; + + [buildFilterList release]; + return returnArray; +} + +static void AddFilterListToDialog( NSSavePanel *dialog, const char *filterList ) +{ + if ( !filterList || strlen(filterList) == 0 ) + return; + + NSArray *allowedFileTypes = BuildAllowedFileTypes( filterList ); + if ( [allowedFileTypes count] != 0 ) + { + [dialog setAllowedFileTypes:allowedFileTypes]; + } +} + +static void SetDefaultPath( NSSavePanel *dialog, const nfdchar_t *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return; + + NSString *defaultPathString = [NSString stringWithUTF8String: defaultPath]; + NSURL *url = [NSURL fileURLWithPath:defaultPathString isDirectory:YES]; + [dialog setDirectoryURL:url]; +} + + +/* fixme: pathset should be pathSet */ +static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) +{ + assert(pathset); + assert([urls count]); + + pathset->count = (size_t)[urls count]; + pathset->indices = NFDi_Malloc( sizeof(size_t)*pathset->count ); + if ( !pathset->indices ) + { + return NFD_ERROR; + } + + // count the total space needed for buf + size_t bufsize = 0; + for ( NSURL *url in urls ) + { + NSString *path = [url path]; + bufsize += [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + } + + pathset->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); + if ( !pathset->buf ) + { + return NFD_ERROR; + } + + // fill buf + nfdchar_t *p_buf = pathset->buf; + size_t count = 0; + for ( NSURL *url in urls ) + { + NSString *path = [url path]; + const nfdchar_t *utf8Path = [path UTF8String]; + size_t byteLen = [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + memcpy( p_buf, utf8Path, byteLen ); + + ptrdiff_t index = p_buf - pathset->buf; + assert( index >= 0 ); + pathset->indices[count] = (size_t)index; + + p_buf += byteLen; + ++count; + } + + return NFD_OKAY; +} + +/* public */ + + +nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:NO]; + + // Build the filter list + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + // byte count, not char count + size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); + + *outPath = NFDi_Malloc( len+1 ); + if ( !*outPath ) + { + [pool release]; + [keyWindow makeKeyAndOrderFront:nil]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, len+1 ); /* copy null term */ + nfdResult = NFD_OKAY; + } + [pool release]; + + [keyWindow makeKeyAndOrderFront:nil]; + return nfdResult; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; + + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:YES]; + + // Build the fiter list. + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSArray *urls = [dialog URLs]; + + if ( [urls count] == 0 ) + { + [pool release]; + [keyWindow makeKeyAndOrderFront:nil]; + return NFD_CANCEL; + } + + if ( AllocPathSet( urls, outPaths ) == NFD_ERROR ) + { + [pool release]; + [keyWindow makeKeyAndOrderFront:nil]; + return NFD_ERROR; + } + + nfdResult = NFD_OKAY; + } + [pool release]; + + [keyWindow makeKeyAndOrderFront:nil]; + return nfdResult; +} + + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; + + NSSavePanel *dialog = [NSSavePanel savePanel]; + [dialog setExtensionHidden:NO]; + + // Build the filter list. + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + size_t byteLen = [url.path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + + *outPath = NFDi_Malloc( byteLen ); + if ( !*outPath ) + { + [pool release]; + [keyWindow makeKeyAndOrderFront:nil]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, byteLen ); + nfdResult = NFD_OKAY; + } + + [pool release]; + [keyWindow makeKeyAndOrderFront:nil]; + return nfdResult; +} + +nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, + nfdchar_t **outPath) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:NO]; + [dialog setCanChooseDirectories:YES]; + [dialog setCanCreateDirectories:YES]; + [dialog setCanChooseFiles:NO]; + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + // byte count, not char count + size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); + + *outPath = NFDi_Malloc( len+1 ); + if ( !*outPath ) + { + [pool release]; + [keyWindow makeKeyAndOrderFront:nil]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, len+1 ); /* copy null term */ + nfdResult = NFD_OKAY; + } + [pool release]; + + [keyWindow makeKeyAndOrderFront:nil]; + return nfdResult; +} diff --git a/extern/nfd-modified/src/nfd_common.c b/extern/nfd-modified/src/nfd_common.c new file mode 100644 index 00000000..55517f5d --- /dev/null +++ b/extern/nfd-modified/src/nfd_common.c @@ -0,0 +1,142 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +#include +#include +#include +#include "nfd_common.h" + +static char g_errorstr[NFD_MAX_STRLEN] = {0}; + +/* public routines */ + +const char *NFD_GetError( void ) +{ + return g_errorstr; +} + +size_t NFD_PathSet_GetCount( const nfdpathset_t *pathset ) +{ + assert(pathset); + return pathset->count; +} + +nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathset, size_t num ) +{ + assert(pathset); + assert(num < pathset->count); + + return pathset->buf + pathset->indices[num]; +} + +void NFD_PathSet_Free( nfdpathset_t *pathset ) +{ + assert(pathset); + NFDi_Free( pathset->indices ); + NFDi_Free( pathset->buf ); +} + +/* internal routines */ + +void *NFDi_Malloc( size_t bytes ) +{ + void *ptr = malloc(bytes); + if ( !ptr ) + NFDi_SetError("NFDi_Malloc failed."); + + return ptr; +} + +void NFDi_Free( void *ptr ) +{ + assert(ptr); + free(ptr); +} + +void NFDi_SetError( const char *msg ) +{ + int bTruncate = NFDi_SafeStrncpy( g_errorstr, msg, NFD_MAX_STRLEN ); + assert( !bTruncate ); _NFD_UNUSED(bTruncate); +} + + +int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ) +{ + size_t n = maxCopy; + char *d = dst; + + assert( src ); + assert( dst ); + + while ( n > 0 && *src != '\0' ) + { + *d++ = *src++; + --n; + } + + /* Truncation case - + terminate string and return true */ + if ( n == 0 ) + { + dst[maxCopy-1] = '\0'; + return 1; + } + + /* No truncation. Append a single NULL and return. */ + *d = '\0'; + return 0; +} + + +/* adapted from microutf8 */ +int32_t NFDi_UTF8_Strlen( const nfdchar_t *str ) +{ + /* This function doesn't properly check validity of UTF-8 character + sequence, it is supposed to use only with valid UTF-8 strings. */ + + int32_t character_count = 0; + int32_t i = 0; /* Counter used to iterate over string. */ + nfdchar_t maybe_bom[4]; + + /* If there is UTF-8 BOM ignore it. */ + if (strlen(str) > 2) + { + strncpy(maybe_bom, str, 3); + maybe_bom[3] = 0; + if (strcmp(maybe_bom, (nfdchar_t*)NFD_UTF8_BOM) == 0) + i += 3; + } + + while(str[i]) + { + if (str[i] >> 7 == 0) + { + /* If bit pattern begins with 0 we have ascii character. */ + ++character_count; + } + else if (str[i] >> 6 == 3) + { + /* If bit pattern begins with 11 it is beginning of UTF-8 byte sequence. */ + ++character_count; + } + else if (str[i] >> 6 == 2) + ; /* If bit pattern begins with 10 it is middle of utf-8 byte sequence. */ + else + { + /* In any other case this is not valid UTF-8. */ + return -1; + } + ++i; + } + + return character_count; +} + +int NFDi_IsFilterSegmentChar( char ch ) +{ + return (ch==','||ch==';'||ch=='\0'); +} + diff --git a/extern/nfd-modified/src/nfd_common.h b/extern/nfd-modified/src/nfd_common.h new file mode 100644 index 00000000..1a9ab162 --- /dev/null +++ b/extern/nfd-modified/src/nfd_common.h @@ -0,0 +1,39 @@ +/* + Native File Dialog + + Internal, common across platforms + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_COMMON_H +#define _NFD_COMMON_H + +#include "nfd.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define NFD_MAX_STRLEN 256 +#define _NFD_UNUSED(x) ((void)x) + +#define NFD_UTF8_BOM "\xEF\xBB\xBF" + + +void *NFDi_Malloc( size_t bytes ); +void NFDi_Free( void *ptr ); +void NFDi_SetError( const char *msg ); +int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); +int32_t NFDi_UTF8_Strlen( const nfdchar_t *str ); +int NFDi_IsFilterSegmentChar( char ch ); + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/extern/nfd-modified/src/nfd_gtk.c b/extern/nfd-modified/src/nfd_gtk.c new file mode 100644 index 00000000..7a9958ed --- /dev/null +++ b/extern/nfd-modified/src/nfd_gtk.c @@ -0,0 +1,379 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs +*/ + +#include +#include +#include +#include +#include "nfd.h" +#include "nfd_common.h" + + +const char INIT_FAIL_MSG[] = "gtk_init_check failed to initilaize GTK+"; + + +static void AddTypeToFilterName( const char *typebuf, char *filterName, size_t bufsize ) +{ + const char SEP[] = ", "; + + size_t len = strlen(filterName); + if ( len != 0 ) + { + strncat( filterName, SEP, bufsize - len - 1 ); + len += strlen(SEP); + } + + strncat( filterName, typebuf, bufsize - len - 1 ); +} + +static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList ) +{ + GtkFileFilter *filter; + char typebuf[NFD_MAX_STRLEN] = {0}; + const char *p_filterList = filterList; + char *p_typebuf = typebuf; + char filterName[NFD_MAX_STRLEN] = {0}; + + if ( !filterList || strlen(filterList) == 0 ) + return; + + filter = gtk_file_filter_new(); + while ( 1 ) + { + + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + char typebufWildcard[NFD_MAX_STRLEN]; + /* add another type to the filter */ + assert( strlen(typebuf) > 0 ); + assert( strlen(typebuf) < NFD_MAX_STRLEN-1 ); + + snprintf( typebufWildcard, NFD_MAX_STRLEN, "*.%s", typebuf ); + AddTypeToFilterName( typebuf, filterName, NFD_MAX_STRLEN ); + + gtk_file_filter_add_pattern( filter, typebufWildcard ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char) * NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to the dialog */ + + gtk_file_filter_set_name( filter, filterName ); + gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter ); + + filterName[0] = '\0'; + + if ( *p_filterList == '\0' ) + break; + + filter = gtk_file_filter_new(); + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList ) ) + { + *p_typebuf = *p_filterList; + p_typebuf++; + } + + p_filterList++; + } + + /* always append a wildcard option to the end*/ + + filter = gtk_file_filter_new(); + gtk_file_filter_set_name( filter, "*.*" ); + gtk_file_filter_add_pattern( filter, "*" ); + gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter ); +} + +static void SetDefaultPath( GtkWidget *dialog, const char *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return; + + /* GTK+ manual recommends not specifically setting the default path. + We do it anyway in order to be consistent across platforms. + + If consistency with the native OS is preferred, this is the line + to comment out. -ml */ + gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), defaultPath ); +} + +static nfdresult_t AllocPathSet( GSList *fileList, nfdpathset_t *pathSet ) +{ + size_t bufSize = 0; + GSList *node; + nfdchar_t *p_buf; + size_t count = 0; + + assert(fileList); + assert(pathSet); + + pathSet->count = (size_t)g_slist_length( fileList ); + assert( pathSet->count > 0 ); + + pathSet->indices = NFDi_Malloc( sizeof(size_t)*pathSet->count ); + if ( !pathSet->indices ) + { + return NFD_ERROR; + } + + /* count the total space needed for buf */ + for ( node = fileList; node; node = node->next ) + { + assert(node->data); + bufSize += strlen( (const gchar*)node->data ) + 1; + } + + pathSet->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufSize ); + + /* fill buf */ + p_buf = pathSet->buf; + for ( node = fileList; node; node = node->next ) + { + nfdchar_t *path = (nfdchar_t*)(node->data); + size_t byteLen = strlen(path)+1; + ptrdiff_t index; + + memcpy( p_buf, path, byteLen ); + g_free(node->data); + + index = p_buf - pathSet->buf; + assert( index >= 0 ); + pathSet->indices[count] = (size_t)index; + + p_buf += byteLen; + ++count; + } + + g_slist_free( fileList ); + + return NFD_OKAY; +} + +static void WaitForCleanup(void) +{ + while (gtk_events_pending()) + gtk_main_iteration(); +} + +/* public */ + +nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Open File", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free( filename ); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Open Files", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER(dialog), TRUE ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + GSList *fileList = gtk_file_chooser_get_filenames( GTK_FILE_CHOOSER(dialog) ); + if ( AllocPathSet( fileList, outPaths ) == NFD_ERROR ) + { + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Save File", + NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Save", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free(filename); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + +nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, + nfdchar_t **outPath) +{ + GtkWidget *dialog; + nfdresult_t result; + + if (!gtk_init_check(NULL, NULL)) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Select folder", + NULL, + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Select", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE ); + + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free(filename); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp new file mode 100644 index 00000000..949da2b5 --- /dev/null +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -0,0 +1,762 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + + +#ifdef __MINGW32__ +// Explicitly setting NTDDI version, this is necessary for the MinGW compiler +#define NTDDI_VERSION NTDDI_VISTA +#define _WIN32_WINNT _WIN32_WINNT_VISTA +#endif + +#define _CRTDBG_MAP_ALLOC +#include +#include + +/* only locally define UNICODE in this compilation unit */ +#ifndef UNICODE +#define UNICODE +#endif + +#include +#include +#include +#include +#include +#include "nfd_common.h" + + +#define COM_INITFLAGS ::COINIT_APARTMENTTHREADED | ::COINIT_DISABLE_OLE1DDE + +static BOOL COMIsInitialized(HRESULT coResult) +{ + if (coResult == RPC_E_CHANGED_MODE) + { + // If COM was previously initialized with different init flags, + // NFD still needs to operate. Eat this warning. + return TRUE; + } + + return SUCCEEDED(coResult); +} + +static HRESULT COMInit(void) +{ + return ::CoInitializeEx(NULL, COM_INITFLAGS); +} + +static void COMUninit(HRESULT coResult) +{ + // do not uninitialize if RPC_E_CHANGED_MODE occurred -- this + // case does not refcount COM. + if (SUCCEEDED(coResult)) + ::CoUninitialize(); +} + +// allocs the space in outPath -- call free() +static void CopyWCharToNFDChar( const wchar_t *inStr, nfdchar_t **outStr ) +{ + int inStrCharacterCount = static_cast(wcslen(inStr)); + int bytesNeeded = WideCharToMultiByte( CP_UTF8, 0, + inStr, inStrCharacterCount, + NULL, 0, NULL, NULL ); + assert( bytesNeeded ); + bytesNeeded += 1; + + *outStr = (nfdchar_t*)NFDi_Malloc( bytesNeeded ); + if ( !*outStr ) + return; + + int bytesWritten = WideCharToMultiByte( CP_UTF8, 0, + inStr, -1, + *outStr, bytesNeeded, + NULL, NULL ); + assert( bytesWritten ); _NFD_UNUSED( bytesWritten ); +} + +/* includes NULL terminator byte in return */ +static size_t GetUTF8ByteCountForWChar( const wchar_t *str ) +{ + size_t bytesNeeded = WideCharToMultiByte( CP_UTF8, 0, + str, -1, + NULL, 0, NULL, NULL ); + assert( bytesNeeded ); + return bytesNeeded+1; +} + +// write to outPtr -- no free() necessary. +static int CopyWCharToExistingNFDCharBuffer( const wchar_t *inStr, nfdchar_t *outPtr ) +{ + int bytesNeeded = static_cast(GetUTF8ByteCountForWChar( inStr )); + + /* invocation copies null term */ + int bytesWritten = WideCharToMultiByte( CP_UTF8, 0, + inStr, -1, + outPtr, bytesNeeded, + NULL, 0 ); + assert( bytesWritten ); + + return bytesWritten; + +} + + +// allocs the space in outStr -- call free() +static void CopyNFDCharToWChar( const nfdchar_t *inStr, wchar_t **outStr ) +{ + int inStrByteCount = static_cast(strlen(inStr)); + int charsNeeded = MultiByteToWideChar(CP_UTF8, 0, + inStr, inStrByteCount, + NULL, 0 ); + assert( charsNeeded ); + assert( !*outStr ); + charsNeeded += 1; // terminator + + *outStr = (wchar_t*)NFDi_Malloc( charsNeeded * sizeof(wchar_t) ); + if ( !*outStr ) + return; + + int ret = MultiByteToWideChar(CP_UTF8, 0, + inStr, inStrByteCount, + *outStr, charsNeeded); + (*outStr)[charsNeeded-1] = '\0'; + +#ifdef _DEBUG + int inStrCharacterCount = static_cast(NFDi_UTF8_Strlen(inStr)); + assert( ret == inStrCharacterCount ); +#else + _NFD_UNUSED(ret); +#endif +} + + +/* ext is in format "jpg", no wildcards or separators */ +static int AppendExtensionToSpecBuf( const char *ext, char *specBuf, size_t specBufLen ) +{ + const char SEP[] = ";"; + assert( specBufLen > strlen(ext)+3 ); + + if ( strlen(specBuf) > 0 ) + { + strncat( specBuf, SEP, specBufLen - strlen(specBuf) - 1 ); + specBufLen += strlen(SEP); + } + + char extWildcard[NFD_MAX_STRLEN]; + int bytesWritten = sprintf_s( extWildcard, NFD_MAX_STRLEN, "*.%s", ext ); + assert( bytesWritten == (int)(strlen(ext)+2) ); + _NFD_UNUSED(bytesWritten); + + strncat( specBuf, extWildcard, specBufLen - strlen(specBuf) - 1 ); + + return NFD_OKAY; +} + +static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const char *filterList ) +{ + const wchar_t WILDCARD[] = L"*.*"; + + if ( !filterList || strlen(filterList) == 0 ) + return NFD_OKAY; + + // Count rows to alloc + UINT filterCount = 1; /* guaranteed to have one filter on a correct, non-empty parse */ + const char *p_filterList; + for ( p_filterList = filterList; *p_filterList; ++p_filterList ) + { + if ( *p_filterList == ';' ) + ++filterCount; + } + + assert(filterCount); + if ( !filterCount ) + { + NFDi_SetError("Error parsing filters."); + return NFD_ERROR; + } + + /* filterCount plus 1 because we hardcode the *.* wildcard after the while loop */ + COMDLG_FILTERSPEC *specList = (COMDLG_FILTERSPEC*)NFDi_Malloc( sizeof(COMDLG_FILTERSPEC) * ((size_t)filterCount + 1) ); + if ( !specList ) + { + return NFD_ERROR; + } + for (UINT i = 0; i < filterCount+1; ++i ) + { + specList[i].pszName = NULL; + specList[i].pszSpec = NULL; + } + + size_t specIdx = 0; + p_filterList = filterList; + char typebuf[NFD_MAX_STRLEN] = {0}; /* one per comma or semicolon */ + char *p_typebuf = typebuf; + + char specbuf[NFD_MAX_STRLEN] = {0}; /* one per semicolon */ + + while ( 1 ) + { + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + /* append a type to the specbuf (pending filter) */ + AppendExtensionToSpecBuf( typebuf, specbuf, NFD_MAX_STRLEN ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char)*NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to specList */ + + CopyNFDCharToWChar( specbuf, (wchar_t**)&specList[specIdx].pszName ); + CopyNFDCharToWChar( specbuf, (wchar_t**)&specList[specIdx].pszSpec ); + + memset( specbuf, 0, sizeof(char)*NFD_MAX_STRLEN ); + ++specIdx; + if ( specIdx == filterCount ) + break; + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList )) + { + *p_typebuf = *p_filterList; + ++p_typebuf; + } + + ++p_filterList; + } + + /* Add wildcard */ + specList[specIdx].pszSpec = WILDCARD; + specList[specIdx].pszName = WILDCARD; + + fileOpenDialog->SetFileTypes( filterCount+1, specList ); + + /* free speclist */ + for ( size_t i = 0; i < filterCount; ++i ) + { + NFDi_Free( (void*)specList[i].pszSpec ); + } + NFDi_Free( specList ); + + return NFD_OKAY; +} + +static nfdresult_t AllocPathSet( IShellItemArray *shellItems, nfdpathset_t *pathSet ) +{ + const char ERRORMSG[] = "Error allocating pathset."; + + assert(shellItems); + assert(pathSet); + + // How many items in shellItems? + DWORD numShellItems; + HRESULT result = shellItems->GetCount(&numShellItems); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + pathSet->count = static_cast(numShellItems); + assert( pathSet->count > 0 ); + + pathSet->indices = (size_t*)NFDi_Malloc( sizeof(size_t)*pathSet->count ); + if ( !pathSet->indices ) + { + return NFD_ERROR; + } + + /* count the total bytes needed for buf */ + size_t bufSize = 0; + for ( DWORD i = 0; i < numShellItems; ++i ) + { + ::IShellItem *shellItem; + result = shellItems->GetItemAt(i, &shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + // Confirm SFGAO_FILESYSTEM is true for this shellitem, or ignore it. + SFGAOF attribs; + result = shellItem->GetAttributes( SFGAO_FILESYSTEM, &attribs ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + if ( !(attribs & SFGAO_FILESYSTEM) ) + continue; + + LPWSTR name; + shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name); + + // Calculate length of name with UTF-8 encoding + bufSize += GetUTF8ByteCountForWChar( name ); + + CoTaskMemFree(name); + } + + assert(bufSize); + + pathSet->buf = (nfdchar_t*)NFDi_Malloc( sizeof(nfdchar_t) * bufSize ); + memset( pathSet->buf, 0, sizeof(nfdchar_t) * bufSize ); + + /* fill buf */ + nfdchar_t *p_buf = pathSet->buf; + for (DWORD i = 0; i < numShellItems; ++i ) + { + ::IShellItem *shellItem; + result = shellItems->GetItemAt(i, &shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + // Confirm SFGAO_FILESYSTEM is true for this shellitem, or ignore it. + SFGAOF attribs; + result = shellItem->GetAttributes( SFGAO_FILESYSTEM, &attribs ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + if ( !(attribs & SFGAO_FILESYSTEM) ) + continue; + + LPWSTR name; + shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name); + + int bytesWritten = CopyWCharToExistingNFDCharBuffer(name, p_buf); + CoTaskMemFree(name); + + ptrdiff_t index = p_buf - pathSet->buf; + assert( index >= 0 ); + pathSet->indices[i] = static_cast(index); + + p_buf += bytesWritten; + } + + return NFD_OKAY; +} + + +static nfdresult_t SetDefaultPath( IFileDialog *dialog, const char *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return NFD_OKAY; + + wchar_t *defaultPathW = {0}; + CopyNFDCharToWChar( defaultPath, &defaultPathW ); + + IShellItem *folder; + HRESULT result = SHCreateItemFromParsingName( defaultPathW, NULL, IID_PPV_ARGS(&folder) ); + + // Valid non results. + if ( result == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || result == HRESULT_FROM_WIN32(ERROR_INVALID_DRIVE) ) + { + NFDi_Free( defaultPathW ); + return NFD_OKAY; + } + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Error creating ShellItem"); + NFDi_Free( defaultPathW ); + return NFD_ERROR; + } + + // Could also call SetDefaultFolder(), but this guarantees defaultPath -- more consistency across API. + dialog->SetFolder( folder ); + + NFDi_Free( defaultPathW ); + folder->Release(); + + return NFD_OKAY; +} + +/* public */ + + +nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + + HRESULT coResult = COMInit(); + if (!COMIsInitialized(coResult)) + { + NFDi_SetError("Could not initialize COM."); + return nfdResult; + } + + // Create dialog + ::IFileOpenDialog *fileOpenDialog(NULL); + HRESULT result = ::CoCreateInstance(::CLSID_FileOpenDialog, NULL, + CLSCTX_ALL, ::IID_IFileOpenDialog, + reinterpret_cast(&fileOpenDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileOpenDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) + { + goto end; + } + + // Show the dialog. + result = fileOpenDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the file name + ::IShellItem *shellItem(NULL); + result = fileOpenDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell item from dialog."); + goto end; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get file path for selected."); + shellItem->Release(); + goto end; + } + + CopyWCharToNFDChar( filePath, outPath ); + CoTaskMemFree(filePath); + if ( !*outPath ) + { + /* error is malloc-based, error message would be redundant */ + shellItem->Release(); + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + +end: + if (fileOpenDialog) + fileOpenDialog->Release(); + + COMUninit(coResult); + + return nfdResult; +} + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + + HRESULT coResult = COMInit(); + if (!COMIsInitialized(coResult)) + { + NFDi_SetError("Could not initialize COM."); + return nfdResult; + } + + // Create dialog + ::IFileOpenDialog *fileOpenDialog(NULL); + HRESULT result = ::CoCreateInstance(::CLSID_FileOpenDialog, NULL, + CLSCTX_ALL, ::IID_IFileOpenDialog, + reinterpret_cast(&fileOpenDialog) ); + + if ( !SUCCEEDED(result) ) + { + fileOpenDialog = NULL; + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileOpenDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) + { + goto end; + } + + // Set a flag for multiple options + DWORD dwFlags; + result = fileOpenDialog->GetOptions(&dwFlags); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get options."); + goto end; + } + result = fileOpenDialog->SetOptions(dwFlags | FOS_ALLOWMULTISELECT); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not set options."); + goto end; + } + + // Show the dialog. + result = fileOpenDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + IShellItemArray *shellItems; + result = fileOpenDialog->GetResults( &shellItems ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell items."); + goto end; + } + + if ( AllocPathSet( shellItems, outPaths ) == NFD_ERROR ) + { + shellItems->Release(); + goto end; + } + + shellItems->Release(); + nfdResult = NFD_OKAY; + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + +end: + if ( fileOpenDialog ) + fileOpenDialog->Release(); + + COMUninit(coResult); + + return nfdResult; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + HRESULT coResult = COMInit(); + if (!COMIsInitialized(coResult)) + { + NFDi_SetError("Could not initialize COM."); + return nfdResult; + } + + // Create dialog + ::IFileSaveDialog *fileSaveDialog(NULL); + HRESULT result = ::CoCreateInstance(::CLSID_FileSaveDialog, NULL, + CLSCTX_ALL, ::IID_IFileSaveDialog, + reinterpret_cast(&fileSaveDialog) ); + + if ( !SUCCEEDED(result) ) + { + fileSaveDialog = NULL; + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileSaveDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileSaveDialog, defaultPath ) ) + { + goto end; + } + + // Show the dialog. + result = fileSaveDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the file name + ::IShellItem *shellItem; + result = fileSaveDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell item from dialog."); + goto end; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + shellItem->Release(); + NFDi_SetError("Could not get file path for selected."); + goto end; + } + + CopyWCharToNFDChar( filePath, outPath ); + CoTaskMemFree(filePath); + if ( !*outPath ) + { + /* error is malloc-based, error message would be redundant */ + shellItem->Release(); + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + +end: + if ( fileSaveDialog ) + fileSaveDialog->Release(); + + COMUninit(coResult); + + return nfdResult; +} + + + +nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, + nfdchar_t **outPath) +{ + nfdresult_t nfdResult = NFD_ERROR; + DWORD dwOptions = 0; + + HRESULT coResult = COMInit(); + if (!COMIsInitialized(coResult)) + { + NFDi_SetError("CoInitializeEx failed."); + return nfdResult; + } + + // Create dialog + ::IFileOpenDialog *fileDialog(NULL); + HRESULT result = CoCreateInstance(CLSID_FileOpenDialog, + NULL, + CLSCTX_ALL, + IID_PPV_ARGS(&fileDialog)); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("CoCreateInstance for CLSID_FileOpenDialog failed."); + goto end; + } + + // Set the default path + if (SetDefaultPath(fileDialog, defaultPath) != NFD_OKAY) + { + NFDi_SetError("SetDefaultPath failed."); + goto end; + } + + // Get the dialogs options + if (!SUCCEEDED(fileDialog->GetOptions(&dwOptions))) + { + NFDi_SetError("GetOptions for IFileDialog failed."); + goto end; + } + + // Add in FOS_PICKFOLDERS which hides files and only allows selection of folders + if (!SUCCEEDED(fileDialog->SetOptions(dwOptions | FOS_PICKFOLDERS))) + { + NFDi_SetError("SetOptions for IFileDialog failed."); + goto end; + } + + // Show the dialog to the user + result = fileDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the folder name + ::IShellItem *shellItem(NULL); + + result = fileDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get file path for selected."); + shellItem->Release(); + goto end; + } + + wchar_t *path = NULL; + result = shellItem->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &path); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("GetDisplayName for IShellItem failed."); + shellItem->Release(); + goto end; + } + + CopyWCharToNFDChar(path, outPath); + CoTaskMemFree(path); + if ( !*outPath ) + { + shellItem->Release(); + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("Show for IFileDialog failed."); + nfdResult = NFD_ERROR; + } + + end: + + if (fileDialog) + fileDialog->Release(); + + COMUninit(coResult); + + return nfdResult; +} diff --git a/extern/nfd-modified/src/nfd_zenity.c b/extern/nfd-modified/src/nfd_zenity.c new file mode 100644 index 00000000..5f931337 --- /dev/null +++ b/extern/nfd-modified/src/nfd_zenity.c @@ -0,0 +1,307 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs +*/ + +#include +#include +#include +#include "nfd.h" +#include "nfd_common.h" + +#define SIMPLE_EXEC_IMPLEMENTATION +#include "simple_exec.h" + + +const char NO_ZENITY_MSG[] = "zenity not installed"; + + +static void AddTypeToFilterName( const char *typebuf, char *filterName, size_t bufsize ) +{ + size_t len = strlen(filterName); + if( len > 0 ) + strncat( filterName, " *.", bufsize - len - 1 ); + else + strncat( filterName, "--file-filter=*.", bufsize - len - 1 ); + + len = strlen(filterName); + strncat( filterName, typebuf, bufsize - len - 1 ); +} + +static void AddFiltersToCommandArgs(char** commandArgs, int commandArgsLen, const char *filterList ) +{ + char typebuf[NFD_MAX_STRLEN] = {0}; + const char *p_filterList = filterList; + char *p_typebuf = typebuf; + char filterName[NFD_MAX_STRLEN] = {0}; + int i; + + if ( !filterList || strlen(filterList) == 0 ) + return; + + while ( 1 ) + { + + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + char typebufWildcard[NFD_MAX_STRLEN]; + /* add another type to the filter */ + assert( strlen(typebuf) > 0 ); + assert( strlen(typebuf) < NFD_MAX_STRLEN-1 ); + + snprintf( typebufWildcard, NFD_MAX_STRLEN, "*.%s", typebuf ); + + AddTypeToFilterName( typebuf, filterName, NFD_MAX_STRLEN ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char) * NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to the dialog */ + + for(i = 0; commandArgs[i] != NULL && i < commandArgsLen; i++); + + commandArgs[i] = strdup(filterName); + + filterName[0] = '\0'; + + if ( *p_filterList == '\0' ) + break; + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList ) ) + { + *p_typebuf = *p_filterList; + p_typebuf++; + } + + p_filterList++; + } + + /* always append a wildcard option to the end*/ + + for(i = 0; commandArgs[i] != NULL && i < commandArgsLen; i++); + + commandArgs[i] = strdup("--file-filter=*.*"); +} + +static nfdresult_t ZenityCommon(char** command, int commandLen, const char* defaultPath, const char* filterList, char** stdOut) +{ + if(defaultPath != NULL) + { + char* prefix = "--filename="; + int len = strlen(prefix) + strlen(defaultPath) + 1; + + char* tmp = (char*) calloc(len, 1); + strcat(tmp, prefix); + strcat(tmp, defaultPath); + + int i; + for(i = 0; command[i] != NULL && i < commandLen; i++); + + command[i] = tmp; + } + + AddFiltersToCommandArgs(command, commandLen, filterList); + + int byteCount = 0; + int exitCode = 0; + int processInvokeError = runCommandArray(stdOut, &byteCount, &exitCode, 0, command); + + for(int i = 0; command[i] != NULL && i < commandLen; i++) + free(command[i]); + + nfdresult_t result = NFD_OKAY; + + if(processInvokeError == COMMAND_NOT_FOUND) + { + NFDi_SetError(NO_ZENITY_MSG); + result = NFD_ERROR; + } + else + { + if(exitCode == 1) + result = NFD_CANCEL; + } + + return result; +} + + +static nfdresult_t AllocPathSet(char* zenityList, nfdpathset_t *pathSet ) +{ + assert(zenityList); + assert(pathSet); + + size_t len = strlen(zenityList) + 1; + pathSet->buf = NFDi_Malloc(len); + + int numEntries = 1; + + for(size_t i = 0; i < len; i++) + { + char ch = zenityList[i]; + + if(ch == '|') + { + numEntries++; + ch = '\0'; + } + + pathSet->buf[i] = ch; + } + + pathSet->count = numEntries; + assert( pathSet->count > 0 ); + + pathSet->indices = NFDi_Malloc( sizeof(size_t)*pathSet->count ); + + int entry = 0; + pathSet->indices[0] = 0; + for(size_t i = 0; i < len; i++) + { + char ch = zenityList[i]; + + if(ch == '|') + { + entry++; + pathSet->indices[entry] = i + 1; + } + } + + return NFD_OKAY; +} + +/* public */ + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + int commandLen = 100; + char* command[commandLen]; + memset(command, 0, commandLen * sizeof(char*)); + + command[0] = strdup("zenity"); + command[1] = strdup("--file-selection"); + command[2] = strdup("--title=Open File"); + + char* stdOut = NULL; + nfdresult_t result = ZenityCommon(command, commandLen, defaultPath, filterList, &stdOut); + + if(stdOut != NULL) + { + size_t len = strlen(stdOut); + *outPath = NFDi_Malloc(len); + memcpy(*outPath, stdOut, len); + (*outPath)[len-1] = '\0'; // trim out the final \n with a null terminator + free(stdOut); + } + else + { + *outPath = NULL; + } + + return result; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + int commandLen = 100; + char* command[commandLen]; + memset(command, 0, commandLen * sizeof(char*)); + + command[0] = strdup("zenity"); + command[1] = strdup("--file-selection"); + command[2] = strdup("--title=Open Files"); + command[3] = strdup("--multiple"); + + char* stdOut = NULL; + nfdresult_t result = ZenityCommon(command, commandLen, defaultPath, filterList, &stdOut); + + if(stdOut != NULL) + { + size_t len = strlen(stdOut); + stdOut[len-1] = '\0'; // remove trailing newline + + if ( AllocPathSet( stdOut, outPaths ) == NFD_ERROR ) + result = NFD_ERROR; + + free(stdOut); + } + else + { + result = NFD_ERROR; + } + + return result; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + int commandLen = 100; + char* command[commandLen]; + memset(command, 0, commandLen * sizeof(char*)); + + command[0] = strdup("zenity"); + command[1] = strdup("--file-selection"); + command[2] = strdup("--title=Save File"); + command[3] = strdup("--save"); + + char* stdOut = NULL; + nfdresult_t result = ZenityCommon(command, commandLen, defaultPath, filterList, &stdOut); + + if(stdOut != NULL) + { + size_t len = strlen(stdOut); + *outPath = NFDi_Malloc(len); + memcpy(*outPath, stdOut, len); + (*outPath)[len-1] = '\0'; // trim out the final \n with a null terminator + free(stdOut); + } + else + { + *outPath = NULL; + } + + return result; +} + +nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, + nfdchar_t **outPath) +{ + int commandLen = 100; + char* command[commandLen]; + memset(command, 0, commandLen * sizeof(char*)); + + command[0] = strdup("zenity"); + command[1] = strdup("--file-selection"); + command[2] = strdup("--directory"); + command[3] = strdup("--title=Select folder"); + + char* stdOut = NULL; + nfdresult_t result = ZenityCommon(command, commandLen, defaultPath, "", &stdOut); + + if(stdOut != NULL) + { + size_t len = strlen(stdOut); + *outPath = NFDi_Malloc(len); + memcpy(*outPath, stdOut, len); + (*outPath)[len-1] = '\0'; // trim out the final \n with a null terminator + free(stdOut); + } + else + { + *outPath = NULL; + } + + return result; +} diff --git a/extern/nfd-modified/src/simple_exec.h b/extern/nfd-modified/src/simple_exec.h new file mode 100644 index 00000000..6308dfe0 --- /dev/null +++ b/extern/nfd-modified/src/simple_exec.h @@ -0,0 +1,218 @@ +// copied from: https://github.com/wheybags/simple_exec/blob/5a74c507c4ce1b2bb166177ead4cca7cfa23cb35/simple_exec.h + +// simple_exec.h, single header library to run external programs + retrieve their status code and output (unix only for now) +// +// do this: +// #define SIMPLE_EXEC_IMPLEMENTATION +// before you include this file in *one* C or C++ file to create the implementation. +// i.e. it should look like this: +// #define SIMPLE_EXEC_IMPLEMENTATION +// #include "simple_exec.h" + +#ifndef SIMPLE_EXEC_H +#define SIMPLE_EXEC_H + +int runCommand(char** stdOut, int* stdOutByteCount, int* returnCode, int includeStdErr, char* command, ...); +int runCommandArray(char** stdOut, int* stdOutByteCount, int* returnCode, int includeStdErr, char* const* allArgs); + +#endif // SIMPLE_EXEC_H + +#ifdef SIMPLE_EXEC_IMPLEMENTATION + +#include +#include +#include +#include +#include +#include +#include +#include + +#define release_assert(exp) { if (!(exp)) { abort(); } } + +enum PIPE_FILE_DESCRIPTORS +{ + READ_FD = 0, + WRITE_FD = 1 +}; + +enum RUN_COMMAND_ERROR +{ + COMMAND_RAN_OK = 0, + COMMAND_NOT_FOUND = 1 +}; + +int runCommandArray(char** stdOut, int* stdOutByteCount, int* returnCode, int includeStdErr, char* const* allArgs) +{ + // adapted from: https://stackoverflow.com/a/479103 + + int bufferSize = 256; + char buffer[bufferSize + 1]; + + int dataReadFromChildDefaultSize = bufferSize * 5; + int dataReadFromChildSize = dataReadFromChildDefaultSize; + int dataReadFromChildUsed = 0; + char* dataReadFromChild = (char*)malloc(dataReadFromChildSize); + + + int parentToChild[2]; + release_assert(pipe(parentToChild) == 0); + + int childToParent[2]; + release_assert(pipe(childToParent) == 0); + + int errPipe[2]; + release_assert(pipe(errPipe) == 0); + + pid_t pid; + switch( pid = fork() ) + { + case -1: + { + release_assert(0 && "Fork failed"); + break; + } + + case 0: // child + { + release_assert(dup2(parentToChild[READ_FD ], STDIN_FILENO ) != -1); + release_assert(dup2(childToParent[WRITE_FD], STDOUT_FILENO) != -1); + + if(includeStdErr) + { + release_assert(dup2(childToParent[WRITE_FD], STDERR_FILENO) != -1); + } + else + { + int devNull = open("/dev/null", O_WRONLY); + release_assert(dup2(devNull, STDERR_FILENO) != -1); + } + + // unused + release_assert(close(parentToChild[WRITE_FD]) == 0); + release_assert(close(childToParent[READ_FD ]) == 0); + release_assert(close(errPipe[READ_FD]) == 0); + + const char* command = allArgs[0]; + execvp(command, allArgs); + + char err = 1; + ssize_t result = write(errPipe[WRITE_FD], &err, 1); + release_assert(result != -1); + + close(errPipe[WRITE_FD]); + close(parentToChild[READ_FD]); + close(childToParent[WRITE_FD]); + + exit(0); + } + + + default: // parent + { + // unused + release_assert(close(parentToChild[READ_FD]) == 0); + release_assert(close(childToParent[WRITE_FD]) == 0); + release_assert(close(errPipe[WRITE_FD]) == 0); + + while(1) + { + ssize_t bytesRead = 0; + switch(bytesRead = read(childToParent[READ_FD], buffer, bufferSize)) + { + case 0: // End-of-File, or non-blocking read. + { + int status = 0; + release_assert(waitpid(pid, &status, 0) == pid); + + // done with these now + release_assert(close(parentToChild[WRITE_FD]) == 0); + release_assert(close(childToParent[READ_FD]) == 0); + + char errChar = 0; + ssize_t result = read(errPipe[READ_FD], &errChar, 1); + release_assert(result != -1); + close(errPipe[READ_FD]); + + if(errChar) + { + free(dataReadFromChild); + return COMMAND_NOT_FOUND; + } + + // free any un-needed memory with realloc + add a null terminator for convenience + dataReadFromChild = (char*)realloc(dataReadFromChild, dataReadFromChildUsed + 1); + dataReadFromChild[dataReadFromChildUsed] = '\0'; + + if(stdOut != NULL) + *stdOut = dataReadFromChild; + else + free(dataReadFromChild); + + if(stdOutByteCount != NULL) + *stdOutByteCount = dataReadFromChildUsed; + if(returnCode != NULL) + *returnCode = WEXITSTATUS(status); + + return COMMAND_RAN_OK; + } + case -1: + { + release_assert(0 && "read() failed"); + break; + } + + default: + { + if(dataReadFromChildUsed + bytesRead + 1 >= dataReadFromChildSize) + { + dataReadFromChildSize += dataReadFromChildDefaultSize; + dataReadFromChild = (char*)realloc(dataReadFromChild, dataReadFromChildSize); + } + + memcpy(dataReadFromChild + dataReadFromChildUsed, buffer, bytesRead); + dataReadFromChildUsed += bytesRead; + break; + } + } + } + } + } +} + +int runCommand(char** stdOut, int* stdOutByteCount, int* returnCode, int includeStdErr, char* command, ...) +{ + va_list vl; + va_start(vl, command); + + char* currArg = NULL; + + int allArgsInitialSize = 16; + int allArgsSize = allArgsInitialSize; + char** allArgs = (char**)malloc(sizeof(char*) * allArgsSize); + allArgs[0] = command; + + int i = 1; + do + { + currArg = va_arg(vl, char*); + allArgs[i] = currArg; + + i++; + + if(i >= allArgsSize) + { + allArgsSize += allArgsInitialSize; + allArgs = (char**)realloc(allArgs, sizeof(char*) * allArgsSize); + } + + } while(currArg != NULL); + + va_end(vl); + + int retval = runCommandArray(stdOut, stdOutByteCount, returnCode, includeStdErr, allArgs); + free(allArgs); + return retval; +} + +#endif //SIMPLE_EXEC_IMPLEMENTATION diff --git a/extern/nfd-modified/test/test_opendialog.c b/extern/nfd-modified/test/test_opendialog.c new file mode 100644 index 00000000..54bf3742 --- /dev/null +++ b/extern/nfd-modified/test/test_opendialog.c @@ -0,0 +1,29 @@ +#include "nfd.h" + +#include +#include + + +/* this test should compile on all supported platforms */ + +int main( void ) +{ + nfdchar_t *outPath = NULL; + nfdresult_t result = NFD_OpenDialog( "png,jpg;pdf", NULL, &outPath ); + if ( result == NFD_OKAY ) + { + puts("Success!"); + puts(outPath); + free(outPath); + } + else if ( result == NFD_CANCEL ) + { + puts("User pressed cancel."); + } + else + { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} diff --git a/extern/nfd-modified/test/test_opendialogmultiple.c b/extern/nfd-modified/test/test_opendialogmultiple.c new file mode 100644 index 00000000..45db6b65 --- /dev/null +++ b/extern/nfd-modified/test/test_opendialogmultiple.c @@ -0,0 +1,32 @@ +#include "nfd.h" + +#include +#include + +/* this test should compile on all supported platforms */ + +int main( void ) +{ + nfdpathset_t pathSet; + nfdresult_t result = NFD_OpenDialogMultiple( "png,jpg;pdf", NULL, &pathSet ); + if ( result == NFD_OKAY ) + { + size_t i; + for ( i = 0; i < NFD_PathSet_GetCount(&pathSet); ++i ) + { + nfdchar_t *path = NFD_PathSet_GetPath(&pathSet, i); + printf("Path %i: %s\n", (int)i, path ); + } + NFD_PathSet_Free(&pathSet); + } + else if ( result == NFD_CANCEL ) + { + puts("User pressed cancel."); + } + else + { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} diff --git a/extern/nfd-modified/test/test_pickfolder.c b/extern/nfd-modified/test/test_pickfolder.c new file mode 100644 index 00000000..708fee85 --- /dev/null +++ b/extern/nfd-modified/test/test_pickfolder.c @@ -0,0 +1,29 @@ +#include "nfd.h" + +#include +#include + + +/* this test should compile on all supported platforms */ + +int main( void ) +{ + nfdchar_t *outPath = NULL; + nfdresult_t result = NFD_PickFolder( NULL, &outPath ); + if ( result == NFD_OKAY ) + { + puts("Success!"); + puts(outPath); + free(outPath); + } + else if ( result == NFD_CANCEL ) + { + puts("User pressed cancel."); + } + else + { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} diff --git a/extern/nfd-modified/test/test_savedialog.c b/extern/nfd-modified/test/test_savedialog.c new file mode 100644 index 00000000..7ec37f08 --- /dev/null +++ b/extern/nfd-modified/test/test_savedialog.c @@ -0,0 +1,28 @@ +#include "nfd.h" + +#include +#include + +/* this test should compile on all supported platforms */ + +int main( void ) +{ + nfdchar_t *savePath = NULL; + nfdresult_t result = NFD_SaveDialog( "png,jpg;pdf", NULL, &savePath ); + if ( result == NFD_OKAY ) + { + puts("Success!"); + puts(savePath); + free(savePath); + } + else if ( result == NFD_CANCEL ) + { + puts("User pressed cancel."); + } + else + { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} From 25af023dc6c1ce63907766824a82871c6754748b Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 17 Jun 2022 14:30:18 +0900 Subject: [PATCH 079/152] Various corrections and fixes Fix SN PSG pitch corrections Revive YM2612 from dead Add Game Gear stereo function finally Add OPN/A prescaler config --- src/engine/platform/ay.cpp | 7 +++ src/engine/platform/ay.h | 1 + src/engine/platform/fmshared_OPM.h | 20 ++++---- src/engine/platform/fmshared_OPN.h | 28 +++++------ src/engine/platform/genesis.h | 7 --- src/engine/platform/sms.cpp | 67 +++++++++------------------ src/engine/platform/sms.h | 3 +- src/engine/platform/sound/sn76496.cpp | 2 +- src/engine/platform/ym2203.cpp | 35 +++++++++++++- src/engine/platform/ym2203.h | 4 +- src/engine/platform/ym2608.cpp | 38 +++++++++++++-- src/engine/platform/ym2608.h | 6 +-- src/engine/song.h | 4 +- src/gui/presets.cpp | 16 ++++++- src/gui/sysConf.cpp | 8 +--- 15 files changed, 147 insertions(+), 99 deletions(-) diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index 83de1fa1..52ac6e57 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -593,6 +593,13 @@ void DivPlatformAY8910::poke(std::vector& wlist) { for (DivRegWrite& i: wlist) immWrite(i.addr,i.val); } +void DivPlatformAY8910::setExtClockDiv(unsigned int eclk, unsigned char ediv) { + if (extMode) { + extClock=eclk; + extDiv=ediv; + } +} + void DivPlatformAY8910::setFlags(unsigned int flags) { if (extMode) { chipClock=extClock; diff --git a/src/engine/platform/ay.h b/src/engine/platform/ay.h index a1f35d1b..f67a2ad9 100644 --- a/src/engine/platform/ay.h +++ b/src/engine/platform/ay.h @@ -91,6 +91,7 @@ class DivPlatformAY8910: public DivDispatch { friend void putDispatchChan(void*,int,int); public: + void setExtClockDiv(unsigned int eclk=COLOR_NTSC, unsigned char ediv=8); void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); diff --git a/src/engine/platform/fmshared_OPM.h b/src/engine/platform/fmshared_OPM.h index 97844656..9b838c19 100644 --- a/src/engine/platform/fmshared_OPM.h +++ b/src/engine/platform/fmshared_OPM.h @@ -26,16 +26,16 @@ class DivPlatformOPM: public DivPlatformFMBase { protected: - const unsigned char ADDR_MULT_DT=0x40; - const unsigned char ADDR_TL=0x60; - const unsigned char ADDR_RS_AR=0x80; - const unsigned char ADDR_AM_DR=0xa0; - const unsigned char ADDR_DT2_D2R=0xc0; - const unsigned char ADDR_SL_RR=0xe0; - const unsigned char ADDR_NOTE=0x28; - const unsigned char ADDR_KF=0x30; - const unsigned char ADDR_FMS_AMS=0x38; - const unsigned char ADDR_LR_FB_ALG=0x20; + const unsigned short ADDR_MULT_DT=0x40; + const unsigned short ADDR_TL=0x60; + const unsigned short ADDR_RS_AR=0x80; + const unsigned short ADDR_AM_DR=0xa0; + const unsigned short ADDR_DT2_D2R=0xc0; + const unsigned short ADDR_SL_RR=0xe0; + const unsigned short ADDR_NOTE=0x28; + const unsigned short ADDR_KF=0x30; + const unsigned short ADDR_FMS_AMS=0x38; + const unsigned short ADDR_LR_FB_ALG=0x20; const unsigned short opOffs[4]={ 0x00, 0x08, 0x10, 0x18 diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index 74e13219..0aaad16d 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -85,27 +85,27 @@ class DivPlatformOPN: public DivPlatformFMBase { protected: - const unsigned char ADDR_MULT_DT=0x30; - const unsigned char ADDR_TL=0x40; - const unsigned char ADDR_RS_AR=0x50; - const unsigned char ADDR_AM_DR=0x60; - const unsigned char ADDR_DT2_D2R=0x70; - const unsigned char ADDR_SL_RR=0x80; - const unsigned char ADDR_SSG=0x90; - const unsigned char ADDR_FREQ=0xa0; - const unsigned char ADDR_FREQH=0xa4; - const unsigned char ADDR_FB_ALG=0xb0; - const unsigned char ADDR_LRAF=0xb4; + const unsigned short ADDR_MULT_DT=0x30; + const unsigned short ADDR_TL=0x40; + const unsigned short ADDR_RS_AR=0x50; + const unsigned short ADDR_AM_DR=0x60; + const unsigned short ADDR_DT2_D2R=0x70; + const unsigned short ADDR_SL_RR=0x80; + const unsigned short ADDR_SSG=0x90; + const unsigned short ADDR_FREQ=0xa0; + const unsigned short ADDR_FREQH=0xa4; + const unsigned short ADDR_FB_ALG=0xb0; + const unsigned short ADDR_LRAF=0xb4; const unsigned short opOffs[4]={ 0x00, 0x04, 0x08, 0x0c }; double fmFreqBase; - double fmDivBase; - unsigned char ayDiv; + unsigned int fmDivBase; + unsigned int ayDiv; - DivPlatformOPN(double f=9440540.0, double d=72, unsigned char a=32): + DivPlatformOPN(double f=9440540.0, unsigned int d=72, unsigned int a=32): DivPlatformFMBase(), fmFreqBase(f), fmDivBase(d), diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index 7d2004f3..c46a992d 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -99,13 +99,6 @@ class DivPlatformGenesis: public DivPlatformOPN { Channel chan[10]; DivDispatchOscBuffer* oscBuf[10]; bool isMuted[10]; - struct QueuedWrite { - unsigned short addr; - unsigned char val; - bool addrOrVal; - QueuedWrite(unsigned short a, unsigned char v): addr(a), val(v), addrOrVal(false) {} - }; - std::deque writes; ym3438_t fm; ymfm::ym2612* fm_ymfm; diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 35bb9c40..71e9b0bc 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -35,7 +35,7 @@ const char* regCheatSheetGG[]={ }; const char** DivPlatformSMS::getRegisterSheet() { - return isStereo()?regCheatSheetGG:regCheatSheetSN; + return stereo?regCheatSheetGG:regCheatSheetSN; } const char* DivPlatformSMS::getEffectName(unsigned char effect) { @@ -74,7 +74,7 @@ void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_ o=YMPSG_GetOutput(&sn_nuked); if (o<-32768) o=-32768; if (o>32767) o=32767; - bufL[h]=o; + bufL[h]=bufR[h]=o; for (int i=0; i<4; i++) { if (isMuted[i]) { oscBuf[i]->data[oscBuf[i]->needle++]=0; @@ -86,13 +86,6 @@ void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_ } void DivPlatformSMS::acquire_mame(short* bufL, short* bufR, size_t start, size_t len) { - if (snBufLenwrite(w.val); writes.pop(); } - for (size_t h=0; hsound_stream_update(outs,1); for (int i=0; i<4; i++) { @@ -115,17 +108,6 @@ void DivPlatformSMS::acquire_mame(short* bufL, short* bufR, size_t start, size_t } } } - if (stereo) { - for (size_t i=0; i>1)&1)<>1)&1)<<(i+4)); rWrite(1,lastPan); } } @@ -204,7 +186,7 @@ void DivPlatformSMS::tick(bool sysTick) { } for (int i=0; i<3; i++) { if (chan[i].freqChanged) { - chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,true,0,chan[i].pitch2,chipClock,64); + chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,true,0,chan[i].pitch2,chipClock,toneDivider); if (chan[i].freq>1023) chan[i].freq=1023; if (chan[i].freq<8) chan[i].freq=1; //if (chan[i].actualNote>0x5d) chan[i].freq=0x01; @@ -263,7 +245,7 @@ void DivPlatformSMS::tick(bool sysTick) { } int DivPlatformSMS::dispatch(DivCommand c) { - int CHIP_DIVIDER=64; + int CHIP_DIVIDER=toneDivider; if (c.chan==3) CHIP_DIVIDER=noiseDivider; switch (c.cmd) { case DIV_CMD_NOTE_ON: @@ -340,11 +322,12 @@ int DivPlatformSMS::dispatch(DivCommand c) { updateSNMode=true; break; case DIV_CMD_PANNING: { - if (isStereo()) { + if (stereo) { + if (c.chan>3) c.chan=3; lastPan&=~(0x11<0) pan|=0x01; - if (c.value2>0) pan|=0x10; + if (c.value>0) pan|=0x10; + if (c.value2>0) pan|=0x01; if (pan==0) pan=0x11; lastPan|=pan<reset(); ay->getRegisterWrites().clear(); ay->flushWrites(); @@ -1013,7 +1017,8 @@ void DivPlatformYM2203::setSkipRegisterWrites(bool value) { } void DivPlatformYM2203::setFlags(unsigned int flags) { - switch (flags&0x3f) { + // Clock flags + switch (flags&0x1f) { default: case 0x00: chipClock=COLOR_NTSC; @@ -1034,10 +1039,36 @@ void DivPlatformYM2203::setFlags(unsigned int flags) { chipClock=3000000.0/2.0; break; } + // Prescaler flags + switch ((flags>>5)&0x3) { + default: + case 0x00: // /6 + prescale=0x2d; + fmFreqBase=4720270.0, + fmDivBase=36, + ayDiv=16; + break; + case 0x01: // /3 + prescale=0x2e; + fmFreqBase=4720270.0/2.0, + fmDivBase=18, + ayDiv=8; + break; + case 0x02: // /2 + prescale=0x2f; + fmFreqBase=4720270.0/3.0, + fmDivBase=12, + ayDiv=4; + break; + } rate=fm->sample_rate(chipClock); for (int i=0; i<6; i++) { oscBuf[i]->rate=rate; } + immWrite(0x2d,0xff); + immWrite(prescale,0xff); + ay->setExtClockDiv(chipClock,ayDiv); + ay->setFlags(16); } int DivPlatformYM2203::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { @@ -1050,11 +1081,11 @@ int DivPlatformYM2203::init(DivEngine* p, int channels, int sugRate, unsigned in } fm=new ymfm::ym2203(iface); fm->set_fidelity(ymfm::OPN_FIDELITY_MIN); - setFlags(flags); // YM2149, 2MHz ay=new DivPlatformAY8910(true,chipClock,ayDiv); ay->init(p,3,sugRate,16); ay->toggleRegisterDump(true); + setFlags(flags); reset(); return 6; diff --git a/src/engine/platform/ym2203.h b/src/engine/platform/ym2203.h index 6d7bc420..d406e2f2 100644 --- a/src/engine/platform/ym2203.h +++ b/src/engine/platform/ym2203.h @@ -90,6 +90,7 @@ class DivPlatformYM2203: public DivPlatformOPN { unsigned char sampleBank; bool extMode; + unsigned char prescale; friend void putDispatchChan(void*,int,int); @@ -118,7 +119,8 @@ class DivPlatformYM2203: public DivPlatformOPN { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2203(): - DivPlatformOPN(4720270.0, 36, 16) {} + DivPlatformOPN(4720270.0, 36, 16), + prescale(0x2d) {} ~DivPlatformYM2203(); }; #endif diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 46b8b0ad..733f0481 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1325,6 +1325,10 @@ void DivPlatformYM2608::reset() { // enable 6 channel mode immWrite(0x29,0x80); + // set prescaler + immWrite(0x2d,0xff); + immWrite(prescale,0xff); + ay->reset(); ay->getRegisterWrites().clear(); ay->flushWrites(); @@ -1395,7 +1399,8 @@ void DivPlatformYM2608::renderSamples() { } void DivPlatformYM2608::setFlags(unsigned int flags) { - switch (flags&0x3f) { + // Clock flags + switch (flags&0x1f) { default: case 0x00: chipClock=8000000.0; @@ -1404,10 +1409,36 @@ void DivPlatformYM2608::setFlags(unsigned int flags) { chipClock=38400*13*16; // 31948800/4 break; } + // Prescaler flags + switch ((flags>>5)&0x3) { + default: + case 0x00: // /6 + prescale=0x2d; + fmFreqBase=9440540.0, + fmDivBase=72, + ayDiv=32; + break; + case 0x01: // /3 + prescale=0x2e; + fmFreqBase=9440540.0/2.0, + fmDivBase=36, + ayDiv=16; + break; + case 0x02: // /2 + prescale=0x2f; + fmFreqBase=9440540.0/3.0, + fmDivBase=24, + ayDiv=8; + break; + } rate=fm->sample_rate(chipClock); for (int i=0; i<16; i++) { oscBuf[i]->rate=rate; } + immWrite(0x2d,0xff); + immWrite(prescale,0xff); + ay->setExtClockDiv(chipClock,ayDiv); + ay->setFlags(16); } int DivPlatformYM2608::init(DivEngine* p, int channels, int sugRate, unsigned int flags) { @@ -1423,11 +1454,12 @@ int DivPlatformYM2608::init(DivEngine* p, int channels, int sugRate, unsigned in oscBuf[i]=new DivDispatchOscBuffer; } fm=new ymfm::ym2608(iface); - setFlags(flags); + fm->set_fidelity(ymfm::OPN_FIDELITY_MIN); // YM2149, 2MHz - ay=new DivPlatformAY8910(true,chipClock,32); + ay=new DivPlatformAY8910(true,chipClock,ayDiv); ay->init(p,3,sugRate,16); ay->toggleRegisterDump(true); + setFlags(flags); reset(); return 16; } diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index c1f43f4d..ac38a8c0 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -101,8 +101,7 @@ class DivPlatformYM2608: public DivPlatformOPN { unsigned char writeRSSOff, writeRSSOn; bool extMode; - double fmFreqBase; - unsigned char ayDiv; + unsigned char prescale; double NOTE_OPNB(int ch, int note); double NOTE_ADPCMB(int note); @@ -137,7 +136,8 @@ class DivPlatformYM2608: public DivPlatformOPN { int init(DivEngine* parent, int channels, int sugRate, unsigned int flags); void quit(); DivPlatformYM2608(): - DivPlatformOPN(9440540.0, 72, 32) {} + DivPlatformOPN(9440540.0, 72, 32), + prescale(0x2d) {} ~DivPlatformYM2608(); }; #endif diff --git a/src/engine/song.h b/src/engine/song.h index 6bbb00cf..df622d86 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -357,7 +357,7 @@ struct DivSong { // - 3: 3MHz // - 4: 3.9936MHz (PC-88, PC-98) // - 5: 1.5MHz - // - bit 5-6: output rate (TODO) + // - bit 5-6: output rate // - 0: FM: clock / 72, SSG: clock / 16 // - 1: FM: clock / 36, SSG: clock / 8 // - 2: FM: clock / 24, SSG: clock / 4 @@ -365,7 +365,7 @@ struct DivSong { // - bit 0-4: clock rate // - 0: 8MHz // - 1: 7.987MHz (PC-88, PC-98) - // - bit 5-6: output rate (TODO) + // - bit 5-6: output rate // - 0: FM: clock / 144, SSG: clock / 32 // - 1: FM: clock / 72, SSG: clock / 16 // - 2: FM: clock / 48, SSG: clock / 8 diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index d0e63c11..5056de74 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -56,13 +56,13 @@ void FurnaceGUI::initSystemPresets() { )); cat.systems.push_back(FurnaceGUISysDef( "Yamaha YM2608 (OPNA)", { - DIV_SYSTEM_PC98, 64, 0, 3, + DIV_SYSTEM_PC98, 64, 0, 0, 0 } )); cat.systems.push_back(FurnaceGUISysDef( "Yamaha YM2608 (extended channel 3)", { - DIV_SYSTEM_PC98_EXT, 64, 0, 3, + DIV_SYSTEM_PC98_EXT, 64, 0, 0, 0 } )); @@ -258,6 +258,18 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "TI SN94624", { + DIV_SYSTEM_SMS, 64, 0, 0x80, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "TI SN76494", { + DIV_SYSTEM_SMS, 64, 0, 0x84, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "AY-3-8910", { DIV_SYSTEM_AY8910, 64, 0, 0, diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 02d06db3..21fef35d 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -397,8 +397,7 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool if (ImGui::RadioButton("1.5MHz",(flags&31)==5)) { copyOfFlags=(flags&(~31))|5; } - /* - ImGui::Text("Output rate: (DOES NOT WORK YET!)"); + ImGui::Text("Output rate:"); if (ImGui::RadioButton("FM: clock / 72, SSG: clock / 16",(flags&96)==0)) { copyOfFlags=(flags&(~96))|0; } @@ -408,7 +407,6 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool if (ImGui::RadioButton("FM: clock / 24, SSG: clock / 4",(flags&96)==64)) { copyOfFlags=(flags&(~96))|64; } - */ break; } case DIV_SYSTEM_PC98: @@ -420,8 +418,7 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool if (ImGui::RadioButton("7.987MHz (PC-88/PC-98)",(flags&31)==1)) { copyOfFlags=(flags&(~31))|1; } - /* - ImGui::Text("Output rate: (DOES NOT WORK YET!)"); + ImGui::Text("Output rate:"); if (ImGui::RadioButton("FM: clock / 144, SSG: clock / 32",(flags&96)==0)) { copyOfFlags=(flags&(~96))|0; } @@ -431,7 +428,6 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool if (ImGui::RadioButton("FM: clock / 48, SSG: clock / 8",(flags&96)==64)) { copyOfFlags=(flags&(~96))|64; } - */ break; } case DIV_SYSTEM_RF5C68: { From 66f3f0e67810fff5a7abfccecd98828f5820f239 Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 17 Jun 2022 14:34:00 +0900 Subject: [PATCH 080/152] Input clock is too high for these chips --- src/gui/presets.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 5056de74..53ef7d42 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -260,13 +260,13 @@ void FurnaceGUI::initSystemPresets() { )); cat.systems.push_back(FurnaceGUISysDef( "TI SN94624", { - DIV_SYSTEM_SMS, 64, 0, 0x80, + DIV_SYSTEM_SMS, 64, 0, 0x182, 0 } )); cat.systems.push_back(FurnaceGUISysDef( "TI SN76494", { - DIV_SYSTEM_SMS, 64, 0, 0x84, + DIV_SYSTEM_SMS, 64, 0, 0x186, 0 } )); From d8513e0856174a980c021ca91dcf91eeba83a092 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 01:28:22 -0500 Subject: [PATCH 081/152] GUI: use Native File Dialog on Windows/macOS latter is untested --- CMakeLists.txt | 14 +++++++ src/gui/fileDialog.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++ src/gui/fileDialog.h | 16 ++++++++ 3 files changed, 114 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d8491b45..25c3c904 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -520,8 +520,17 @@ src/gui/volMeter.cpp src/gui/gui.cpp ) +if (WIN32 OR APPLE) + list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_common.c) +endif() + +if (WIN32) + list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_win.cpp) +endif() + if (APPLE) list(APPEND GUI_SOURCES src/gui/macstuff.m) + list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_cocoa.m) endif() if (NOT WIN32 AND NOT APPLE) @@ -549,6 +558,11 @@ if (BUILD_GUI) extern/IconFontCppHeaders extern/igfd ) + if (WIN32 OR APPLE) + list(APPEND DEPENDENCIES_INCLUDE_DIRS + extern/nfd-modified/src/include + ) + endif() list(APPEND DEPENDENCIES_DEFINES HAVE_GUI) message(STATUS "Building GUI") else() diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index e50298c1..c88a0427 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -2,7 +2,62 @@ #include "ImGuiFileDialog.h" #include "../ta-log.h" +#ifdef USE_NFD +#include +#else #include "../../extern/pfd-fixed/portable-file-dialogs.h" +#endif + +#ifdef USE_NFD +struct NFDState { + bool isSave; + String header; + std::vector filter; + String path; + FileDialogSelectCallback clickCallback; + NFDState(bool save, String h, std::vector filt, String pa, FileDialogSelectCallback cc): + isSave(save), + header(h), + filter(filt), + path(pa), + clickCallback(cc) { + } +}; + +// TODO: filter +void _nfdThread(const NFDState state, std::atomic* ok, String* result) { + nfdchar_t* out=NULL; + nfdresult_t ret=NFD_CANCEL; + + if (state.isSave) { + ret=NFD_SaveDialog(NULL,state.path.c_str(),&out); + } else { + ret=NFD_OpenDialog(NULL,state.path.c_str(),&out); + } + + switch (ret) { + case NFD_OKAY: + if (out!=NULL) { + (*result)=out; + } else { + (*result)=""; + } + break; + case NFD_CANCEL: + (*result)=""; + break; + case NFD_ERROR: + (*result)=""; + logE("NFD error! %s\n",NFD_GetError()); + break; + default: + logE("NFD unknown return code %d!\n",ret); + (*result)=""; + break; + } + (*ok)=true; +} +#endif bool FurnaceGUIFileDialog::openLoad(String header, std::vector filter, const char* noSysFilter, String path, double dpiScale, FileDialogSelectCallback clickCallback) { if (opened) return false; @@ -10,7 +65,12 @@ bool FurnaceGUIFileDialog::openLoad(String header, std::vector filter, c curPath=path; logD("opening load file dialog with curPath %s",curPath.c_str()); if (sysDialog) { +#ifdef USE_NFD + dialogOK=false; + dialogO=new std::thread(_nfdThread,NFDState(false,header,filter,path,clickCallback),&dialogOK,&nfdResult); +#else dialogO=new pfd::open_file(header,path,filter); +#endif } else { ImGuiFileDialog::Instance()->DpiScale=dpiScale; ImGuiFileDialog::Instance()->OpenModal("FileDialog",header,noSysFilter,path,1,nullptr,0,clickCallback); @@ -25,7 +85,12 @@ bool FurnaceGUIFileDialog::openSave(String header, std::vector filter, c curPath=path; logD("opening save file dialog with curPath %s",curPath.c_str()); if (sysDialog) { +#ifdef USE_NFD + dialogOK=false; + dialogS=new std::thread(_nfdThread,NFDState(true,header,filter,path,NULL),&dialogOK,&nfdResult); +#else dialogS=new pfd::save_file(header,path,filter); +#endif } else { ImGuiFileDialog::Instance()->DpiScale=dpiScale; ImGuiFileDialog::Instance()->OpenModal("FileDialog",header,noSysFilter,path,1,nullptr,ImGuiFileDialogFlags_ConfirmOverwrite); @@ -46,15 +111,24 @@ void FurnaceGUIFileDialog::close() { if (sysDialog) { if (saving) { if (dialogS!=NULL) { +#ifdef USE_NFD + dialogS->join(); +#endif delete dialogS; dialogS=NULL; } } else { if (dialogO!=NULL) { +#ifdef USE_NFD + dialogO->join(); +#endif delete dialogO; dialogO=NULL; } } +#ifdef USE_NFD + dialogOK=false; +#endif } else { ImGuiFileDialog::Instance()->Close(); } @@ -63,6 +137,15 @@ void FurnaceGUIFileDialog::close() { bool FurnaceGUIFileDialog::render(const ImVec2& min, const ImVec2& max) { if (sysDialog) { +#ifdef USE_NFD + if (dialogOK) { + fileName=nfdResult; + logD("returning %s",fileName.c_str()); + dialogOK=false; + return true; + } + return false; +#else if (saving) { if (dialogS!=NULL) { if (dialogS->ready(0)) { @@ -90,6 +173,7 @@ bool FurnaceGUIFileDialog::render(const ImVec2& min, const ImVec2& max) { } } return false; +#endif } else { return ImGuiFileDialog::Instance()->Display("FileDialog",ImGuiWindowFlags_NoCollapse|ImGuiWindowFlags_NoMove,min,max); } diff --git a/src/gui/fileDialog.h b/src/gui/fileDialog.h index 5eb67d85..6131f56b 100644 --- a/src/gui/fileDialog.h +++ b/src/gui/fileDialog.h @@ -3,10 +3,19 @@ #include #include +#if defined(_WIN32) || defined(__APPLE__) +#define USE_NFD +#endif + +#ifdef USE_NFD +#include +#include +#else namespace pfd { class open_file; class save_file; } +#endif typedef std::function FileDialogSelectCallback; @@ -16,8 +25,15 @@ class FurnaceGUIFileDialog { bool saving; String curPath; String fileName; +#ifdef USE_NFD + std::thread* dialogO; + std::thread* dialogS; + std::atomic dialogOK; + String nfdResult; +#else pfd::open_file* dialogO; pfd::save_file* dialogS; +#endif public: bool openLoad(String header, std::vector filter, const char* noSysFilter, String path, double dpiScale, FileDialogSelectCallback clickCallback=NULL); bool openSave(String header, std::vector filter, const char* noSysFilter, String path, double dpiScale); From 02d4712e9c7e2844d99d681eef6dbf1a82b2ea70 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 02:21:07 -0500 Subject: [PATCH 082/152] implement undo in find and replace --- src/gui/findReplace.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 5dae95bc..c0d59c49 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -190,7 +190,6 @@ void FurnaceGUI::doFind() { } /* issues with the find and replace function: - - doesn't mark the module as modified - can't undo - replace notes to anything starting from C-0 to lower notes will have an octave higher, so set it to replace to C-0 it will becom C-1, b_1 will become B-0 and so on */ @@ -202,6 +201,12 @@ void FurnaceGUI::doReplace() { bool* touched[DIV_MAX_CHANS]; memset(touched,0,DIV_MAX_CHANS*sizeof(bool*)); + UndoStep us; + us.type=GUI_UNDO_REPLACE; + + short prevVal[32]; + memset(prevVal,0,32*sizeof(short)); + for (FurnaceGUIQueryResult& i: curQueryResults) { int patIndex=e->song.subsong[i.subsong]->orders.ord[i.x][i.order]; DivPattern* p=e->song.subsong[i.subsong]->pat[i.x].getPattern(patIndex,true); @@ -211,6 +216,9 @@ void FurnaceGUI::doReplace() { } if (touched[i.x][(patIndex<<8)|i.y]) continue; touched[i.x][(patIndex<<8)|i.y]=true; + + memcpy(prevVal,p->data[i.y],32*sizeof(short)); + if (queryReplaceNoteDo) { switch (queryReplaceNoteMode) { case GUI_QUERY_REPLACE_SET: @@ -400,6 +408,13 @@ void FurnaceGUI::doReplace() { } } } + + // issue undo step + for (int j=0; j<32; j++) { + if (p->data[i.y][j]!=prevVal[j]) { + us.pat.push_back(UndoPatternData(i.subsong,i.x,patIndex,i.y,j,prevVal[j],p->data[i.y][j])); + } + } } for (int i=0; isettings.maxUndoSteps) undoHist.pop_front(); + } } #define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT) From a8ae8f6e5465143b981f396f9fa2c884bb46ded0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 02:40:34 -0500 Subject: [PATCH 083/152] address the final find and replace issue --- src/gui/findReplace.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index c0d59c49..10fd1253 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -43,6 +43,7 @@ int queryNote(int note, int octave) { } bool checkCondition(int mode, int arg, int argMax, int val, bool noteMode=false) { + const int emptyVal=noteMode?-61:-1; switch (mode) { case GUI_QUERY_IGNORE: return true; @@ -51,19 +52,19 @@ bool checkCondition(int mode, int arg, int argMax, int val, bool noteMode=false) return (val==arg); break; case GUI_QUERY_MATCH_NOT: - return (val!=-1 && val!=arg); + return (val!=emptyVal && val!=arg); break; case GUI_QUERY_RANGE: return (val>=arg && val<=argMax); break; case GUI_QUERY_RANGE_NOT: - return (val!=-1 && (valargMax) && (!noteMode || val<120)); + return (val!=emptyVal && (valargMax) && (!noteMode || val<120)); break; case GUI_QUERY_ANY: - return (val!=-1); + return (val!=emptyVal); break; case GUI_QUERY_NONE: - return (val==-1); + return (val==emptyVal); break; } return false; @@ -249,8 +250,11 @@ void FurnaceGUI::doReplace() { if (note>119) note=119; p->data[i.y][0]=(note+60)%12; - if (p->data[i.y][0]==0) p->data[i.y][0]=12; - p->data[i.y][1]=(unsigned char)((note-1)/12); + p->data[i.y][1]=(unsigned char)(((note+60)/12)-5); + if (p->data[i.y][0]==0) { + p->data[i.y][0]=12; + p->data[i.y][1]=(unsigned char)(p->data[i.y][1]-1); + } } } break; @@ -266,8 +270,11 @@ void FurnaceGUI::doReplace() { } p->data[i.y][0]=(note+60)%12; - if (p->data[i.y][0]==0) p->data[i.y][0]=12; - p->data[i.y][1]=(unsigned char)((note-1)/12); + p->data[i.y][1]=(unsigned char)(((note+60)/12)-5); + if (p->data[i.y][0]==0) { + p->data[i.y][0]=12; + p->data[i.y][1]=(unsigned char)(p->data[i.y][1]-1); + } } } break; From 56b56ebdde69df343e9a4e0bc7644cf4e385077a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 02:41:40 -0500 Subject: [PATCH 084/152] GUI: fix cursor moving on undo replace --- src/gui/editing.cpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index 8b30d251..ef63ab26 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -953,13 +953,15 @@ void FurnaceGUI::doUndo() { DivPattern* p=e->curPat[i.chan].getPattern(i.pat,true); p->data[i.row][i.col]=i.oldVal; } - if (!e->isPlaying() || !followPattern) { - cursor=us.cursor; - selStart=us.selStart; - selEnd=us.selEnd; - curNibble=us.nibble; - updateScroll(cursor.y); - setOrder(us.order); + if (us.type!=GUI_UNDO_REPLACE) { + if (!e->isPlaying() || !followPattern) { + cursor=us.cursor; + selStart=us.selStart; + selEnd=us.selEnd; + curNibble=us.nibble; + updateScroll(cursor.y); + setOrder(us.order); + } } break; } @@ -1002,13 +1004,15 @@ void FurnaceGUI::doRedo() { DivPattern* p=e->curPat[i.chan].getPattern(i.pat,true); p->data[i.row][i.col]=i.newVal; } - if (!e->isPlaying()) { - cursor=us.cursor; - selStart=us.selStart; - selEnd=us.selEnd; - curNibble=us.nibble; - updateScroll(cursor.y); - setOrder(us.order); + if (us.type!=GUI_UNDO_REPLACE) { + if (!e->isPlaying() || !followPattern) { + cursor=us.cursor; + selStart=us.selStart; + selEnd=us.selEnd; + curNibble=us.nibble; + updateScroll(cursor.y); + setOrder(us.order); + } } break; From d911c8eeabde83b593aeb43f2175de9f6f90e1b4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 02:42:55 -0500 Subject: [PATCH 085/152] GUI: remove pointless comment in find/replace --- src/gui/findReplace.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 10fd1253..f16ccd7a 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -190,11 +190,6 @@ void FurnaceGUI::doFind() { queryViewingResults=true; } -/* issues with the find and replace function: - - can't undo - - replace notes to anything starting from C-0 to lower notes will have an octave higher, so set it to replace to C-0 it will becom C-1, b_1 will become B-0 and so on -*/ - void FurnaceGUI::doReplace() { doFind(); queryViewingResults=false; From 5025c489775867731947fbafb700e39121f7b16e Mon Sep 17 00:00:00 2001 From: Bassian <67491162+Bassian@users.noreply.github.com> Date: Fri, 17 Jun 2022 04:46:10 -0500 Subject: [PATCH 086/152] Add files via upload --- ..._thing_the_Metallix_fear_is_you_Forte....fur | Bin 0 -> 59895 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/The_only_thing_the_Metallix_fear_is_you_Forte....fur diff --git a/demos/The_only_thing_the_Metallix_fear_is_you_Forte....fur b/demos/The_only_thing_the_Metallix_fear_is_you_Forte....fur new file mode 100644 index 0000000000000000000000000000000000000000..123381d8dc27c50307fcc76664ca1fc82d92b8dd GIT binary patch literal 59895 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 literal 0 HcmV?d00001 From 753458f8983ae83e6a32c8bfe2a572ca0043fdfc Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 04:51:39 -0500 Subject: [PATCH 087/152] LOL --- src/engine/platform/nes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 50e548ea..67ad2852 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -65,7 +65,7 @@ const char** DivPlatformNES::getRegisterSheet() { const char* DivPlatformNES::getEffectName(unsigned char effect) { switch (effect) { case 0x11: - return "Write to delta modulation counter (0 to 7F)"; + return "11xx: Write to delta modulation counter (0 to 7F)"; break; case 0x12: return "12xx: Set duty cycle/noise mode (pulse: 0 to 3; noise: 0 or 1)"; From ab7c2acd564bec9fb4aa4d6e890de96bfa95f03a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jun 2022 04:51:45 -0500 Subject: [PATCH 088/152] GUI: try --- src/gui/sampleEdit.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 19fd7596..7264baed 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -765,16 +765,16 @@ void FurnaceGUI::drawSampleEdit() { float highP=sampleFilterH*100.0f; float resP=sampleFilterRes*100.0f; ImGui::Text("Cutoff:"); - if (ImGui::SliderFloat("From",&sampleFilterCutStart,0.0f,sample->rate*0.5,"%.0fHz")) { + if (CWSliderFloat("From",&sampleFilterCutStart,0.0f,sample->rate*0.5,"%.0fHz")) { if (sampleFilterCutStart<0.0) sampleFilterCutStart=0.0; if (sampleFilterCutStart>sample->rate*0.5) sampleFilterCutStart=sample->rate*0.5; } - if (ImGui::SliderFloat("To",&sampleFilterCutEnd,0.0f,sample->rate*0.5,"%.0fHz")) { + if (CWSliderFloat("To",&sampleFilterCutEnd,0.0f,sample->rate*0.5,"%.0fHz")) { if (sampleFilterCutEnd<0.0) sampleFilterCutEnd=0.0; if (sampleFilterCutEnd>sample->rate*0.5) sampleFilterCutEnd=sample->rate*0.5; } ImGui::Separator(); - if (ImGui::SliderFloat("Resonance",&resP,0.0f,99.0f,"%.1f%%")) { + if (CWSliderFloat("Resonance",&resP,0.0f,99.0f,"%.1f%%")) { sampleFilterRes=resP/100.0f; if (sampleFilterRes<0.0f) sampleFilterRes=0.0f; if (sampleFilterRes>0.99f) sampleFilterRes=0.99f; @@ -793,17 +793,17 @@ void FurnaceGUI::drawSampleEdit() { sampleFilterPower=3; } ImGui::Separator(); - if (ImGui::SliderFloat("Low-pass",&lowP,0.0f,100.0f,"%.1f%%")) { + if (CWSliderFloat("Low-pass",&lowP,0.0f,100.0f,"%.1f%%")) { sampleFilterL=lowP/100.0f; if (sampleFilterL<0.0f) sampleFilterL=0.0f; if (sampleFilterL>1.0f) sampleFilterL=1.0f; } - if (ImGui::SliderFloat("Band-pass",&bandP,0.0f,100.0f,"%.1f%%")) { + if (CWSliderFloat("Band-pass",&bandP,0.0f,100.0f,"%.1f%%")) { sampleFilterB=bandP/100.0f; if (sampleFilterB<0.0f) sampleFilterB=0.0f; if (sampleFilterB>1.0f) sampleFilterB=1.0f; } - if (ImGui::SliderFloat("High-pass",&highP,0.0f,100.0f,"%.1f%%")) { + if (CWSliderFloat("High-pass",&highP,0.0f,100.0f,"%.1f%%")) { sampleFilterH=highP/100.0f; if (sampleFilterH<0.0f) sampleFilterH=0.0f; if (sampleFilterH>1.0f) sampleFilterH=1.0f; From 6dc81c7af1f1f5d9c596c334e0d8e08e64f7f36f Mon Sep 17 00:00:00 2001 From: cam900 Date: Sat, 18 Jun 2022 10:38:48 +0900 Subject: [PATCH 089/152] Pitch correction (again), Fix compatibility issue --- src/engine/platform/sms.cpp | 24 +++++++++++++++--------- src/engine/platform/sms.h | 4 ++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 71e9b0bc..3dc7afc4 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -120,7 +120,7 @@ void DivPlatformSMS::acquire(short* bufL, short* bufR, size_t start, size_t len) void DivPlatformSMS::tick(bool sysTick) { for (int i=0; i<4; i++) { - int CHIP_DIVIDER=toneDivider; + double CHIP_DIVIDER=toneDivider; if (i==3) CHIP_DIVIDER=noiseDivider; chan[i].std.next(); if (chan[i].std.vol.had) { @@ -245,7 +245,7 @@ void DivPlatformSMS::tick(bool sysTick) { } int DivPlatformSMS::dispatch(DivCommand c) { - int CHIP_DIVIDER=toneDivider; + double CHIP_DIVIDER=toneDivider; if (c.chan==3) CHIP_DIVIDER=noiseDivider; switch (c.cmd) { case DIV_CMD_NOTE_ON: @@ -465,8 +465,8 @@ void DivPlatformSMS::setFlags(unsigned int flags) { } resetPhase=!(flags&16); divider=16; - toneDivider=64; - noiseDivider=64; + toneDivider=64.0; + noiseDivider=64.0; if (sn!=NULL) delete sn; switch (flags&0xcc) { default: // Sega @@ -479,11 +479,13 @@ void DivPlatformSMS::setFlags(unsigned int flags) { sn=new sn76489_device(); isRealSN=true; stereo=false; + noiseDivider=60.0; // 64 for match to tone frequency on non-Sega PSG but compatibility break; case 0x08: // TI+Atari - sn=new sn76496_base_device(0x4000, 0x0f35, 0x01, 0x02, true, false, 8, false, true); + sn=new sn76496_base_device(0x4000, 0x0f35, 0x01, 0x02, true, false, 1/*8*/, false, true); isRealSN=true; stereo=false; + noiseDivider=60.0; break; case 0x0c: // Game Gear (not fully emulated yet!) sn=new gamegear_device(); @@ -494,37 +496,41 @@ void DivPlatformSMS::setFlags(unsigned int flags) { sn=new sn76489a_device(); isRealSN=false; // TODO stereo=false; + noiseDivider=60.0; break; case 0x44: // TI SN76496 sn=new sn76496_device(); isRealSN=false; // TODO stereo=false; + noiseDivider=60.0; break; case 0x48: // NCR 8496 sn=new ncr8496_device(); isRealSN=false; stereo=false; + noiseDivider=60.0; break; case 0x4c: // Tandy PSSJ 3-voice sound sn=new pssj3_device(); isRealSN=false; stereo=false; + noiseDivider=60.0; break; case 0x80: // TI SN94624 sn=new sn94624_device(); isRealSN=true; stereo=false; divider=2; - toneDivider=8; - noiseDivider=8; + toneDivider=8.0; + noiseDivider=7.5; break; case 0x84: // TI SN76494 sn=new sn76494_device(); isRealSN=false; // TODO stereo=false; divider=2; - toneDivider=8; - noiseDivider=8; + toneDivider=8.0; + noiseDivider=7.5; break; } rate=chipClock/divider; diff --git a/src/engine/platform/sms.h b/src/engine/platform/sms.h index 589bb9b8..35bb44ba 100644 --- a/src/engine/platform/sms.h +++ b/src/engine/platform/sms.h @@ -62,8 +62,8 @@ class DivPlatformSMS: public DivDispatch { unsigned char oldValue; unsigned char snNoiseMode; int divider=16; - int toneDivider=64; - int noiseDivider=64; + double toneDivider=64.0; + double noiseDivider=64.0; bool updateSNMode; bool resetPhase; bool isRealSN; From 9cad9077738657572588a6815c2b1d69d165d7fb Mon Sep 17 00:00:00 2001 From: cam900 Date: Sat, 18 Jun 2022 11:07:36 +0900 Subject: [PATCH 090/152] Fix potential register related issue --- src/engine/platform/sms.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 3dc7afc4..0556d2e4 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -52,7 +52,9 @@ void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_ for (size_t h=start; hstereo_w(w.val); - else + else if (w.addr==0) { sn->write(w.val); + } writes.pop(); } for (size_t h=start; h Date: Sat, 18 Jun 2022 11:42:14 +0900 Subject: [PATCH 091/152] More presets Dynax/Nakanihon 3rd generation hardware: Naming reference is MAME source (https://github.com/mamedev/mame/blob/master/src/mame/drivers/ddenlovr.cpp), It's sound system combined with AY PSG(optional), OPLL, MSM6295 and mostly used in their mahjong, hanafuda, and something else. Dynax/Nakanihon Real Break: This sound system is used in Billard Academy Real Break (MAME source: https://github.com/mamedev/mame/blob/master/src/mame/drivers/realbrk.cpp), MSM6295 is replaced to YMZ280B but entire music is still drived in OPLL. --- src/gui/presets.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 53ef7d42..46335227 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1859,7 +1859,7 @@ void FurnaceGUI::initSystemPresets() { DIV_SYSTEM_AY8910, 64, 0, 13, 0 } - )); + )); cat.systems.push_back(FurnaceGUISysDef( "Namco (3-channel WSG)", { // Pac-Man, Galaga, Xevious, etc DIV_SYSTEM_NAMCO, 64, 0, 0, @@ -1957,6 +1957,21 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Dynax/Nakanihon 3rd generation hardware", { + DIV_SYSTEM_AY8910, 64, 0, 0, // AY or YM, optional - 1.79MHz or 3.58MHz; various per game + DIV_SYSTEM_OPLL, 64, 0, 0, + DIV_SYSTEM_MSM6295, 64, 0, 6, // 1.023MHz mostly + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Dynax/Nakanihon Real Break", { + DIV_SYSTEM_OPLL, 64, 0, 0, + DIV_SYSTEM_YMZ280B, 64, 0, 0, + 0 + } + )); sysCategories.push_back(cat); cat=FurnaceGUISysCategory("DefleMask-compatible","these configurations are compatible with DefleMask.\nselect this if you need to save as .dmf or work with that program."); From 0e163baffcbb45450e3f5f79aea6e33b3b70ddfa Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 18 Jun 2022 02:00:10 -0500 Subject: [PATCH 092/152] GUI: update credits --- src/gui/about.cpp | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 76fc80ad..1b257af1 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -48,6 +48,7 @@ const char* aboutLine[]={ "-- graphics/UI design --", "tildearrow", "BlastBrothers", + "Mahbod Karamoozian", "Raijin", "", "-- documentation --", @@ -59,18 +60,38 @@ const char* aboutLine[]={ "", "-- demo songs --", "0x5066", + "Abstract 64", "ActualNK358", + "akumanatt", + "AmigaX", + "AURORA*FIELDS", + "BlueElectric05", "breakthetargets", "CaptainMalware", + "DeMOSic", + "DevEd", + "Dippy", + "Forte", + "Fragmare", + "freq-mod", + "iyatemu", "kleeder", + "jaezu", + "Laggy", + "LunaMoth", "Mahbod Karamoozian", + "Miker", "nicco1690", "NikonTeen", "SuperJet Spade", "TheDuccinator", + "theloredev", "TheRealHedgehogSonic", "tildearrow", "Ultraprogramer", + "Weeppiko", + "WitchyValeria", + "ZoomTen (Zumi)", "", "-- additional feedback/fixes --", "fd", @@ -85,7 +106,9 @@ const char* aboutLine[]={ "and Mark Adler", "libsndfile by Erik de Castro Lopo", "Portable File Dialogs by Sam Hocevar", + "Native File Dialog by Frogtoss Games", "RtMidi by Gary P. Scavone", + "backward-cpp by Google", "adpcm by superctr", "Nuked-OPL3/OPLL/OPM/OPN2 by Nuke.YKT", "ymfm by Aaron Giles", @@ -93,21 +116,31 @@ const char* aboutLine[]={ "MAME AY-3-8910 by Couriersud", "with AY8930 fixes by Eulous, cam900 and Grauw", "MAME SAA1099 by Juergen Buchmueller and Manuel Abadia", + "MAME Namco WSG by Nicola Salmoria and Aaron Giles", + "MAME RF5C68 core by Olivier Galibert and Aaron Giles", + "MAME MSM6258 core by Barry Rodewald", + "MAME YMZ280B core by Aaron Giles", "SAASound by Dave Hooper and Simon Owen", "SameBoy by Lior Halphon", "Mednafen PCE and WonderSwan audio cores", "puNES (NES, MMC5 and FDS) by FHorse", + "NSFPlay (NES and FDS) by Brad Smith and Brezza", "reSID by Dag Lem", "Stella by Stella Team", - "QSound emulator by Ian Karlsson and Valley Bell", + "QSound emulator by superctr and Valley Bell", "VICE VIC-20 sound core by Rami Rasanen and viznut", "VERA sound core by Frank van den Hoef", "K005289 emulator by cam900", "Namco 163 emulator by cam900", "Seta X1-010 emulator by cam900", "Konami VRC6 emulator by cam900", + "Konami SCC emulator by cam900", + "MSM6295 emulator by cam900", "", - "greetings to all members of Deflers of Noice!", + "greetings to:", + "Fractal Sound team", + "NEOART Costa Rica", + "all members of Deflers of Noice!", "", "copyright © 2021-2022 tildearrow", "(and contributors).", From af8c6313dfbf942b39cbdba57673ce49f5e0b6c9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 18 Jun 2022 02:01:44 -0500 Subject: [PATCH 093/152] update demo song authors --- demos/AY-3-8910_Jam.fur | Bin 1230 -> 1274 bytes demos/UNATCOPCM.fur | Bin 205937 -> 205943 bytes demos/ecolove.fur | Bin 57851 -> 57812 bytes demos/su_memory.fur | Bin 20139 -> 20220 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/AY-3-8910_Jam.fur b/demos/AY-3-8910_Jam.fur index b249c5bfde36c68fc322ab07c8cc702aa4dfe7b7..dad4f190ef7439917a0b0aff3174700a11e1efd4 100644 GIT binary patch literal 1274 zcmVap$*15JgU5wFLM(%O;zE9 zA*72|5)$=N7nLFA&z15AjIxpx_R^(%0Fwk47RLeU&afy+rA?hw{fSq-+cu1Yzs5G3 zNS5i#w5{#Zbu3Nsou4K@y(g_pR+82S#qs^D)XiF(c}RsXrNJ3mc+dQVE9 zSV>CyeYw{qrB!SlI-=WrU#4wsm#$-Jitqe1`RNbQ?OeO}6@5L<@4#iZXcwKnczsO1 zZ?F#i*;G9t*ZGKE^JPM)yh>a`bgI*Ma+5&oV;BEU^_YpXmp_6lJs>(s2(=n<46$0> zr<1b={V~-;OZv~=_{)S)Plk>mR;vq3E+|g7C81d+)(N2(BI9g8qQ-EHpthdVIeUlS zgzp*o&@cB*@p~%Xo#N>oDsz=6GE>c%99CkGOPQH-p1ave$o9|X8-Fa zf!4<}dhi!lvmwB>LdzQbP!{NsesZ}82WT!Ux5zUeOh%h9{DXF!M+fBC<9i=z9Qd>OB%XIHrgi8ucd>J0S#(01#*n+Q(fS#-C=)_`hbUnf kA~C#!bM_onIeaC8tv9>SIQvE8+w#a4bB|2_15wZEx&`u+YXATM literal 1230 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

$`*X+gux|NcR2ccVn9${QQR;}v73rJc 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 Vum_Qr(aQ8E) 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�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 R0DaNt-{KH~6r&JN_CG!NIpF{R literal 205937 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 z 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

h;rKa6drI_Jh^ zTaW*ey|55PY*D@U4f=j%xswfy+Kkqe7iGMzx&ESAsWg1?G8=X!YQP9U&@c&`Og!yU4Qo$H3Rff$OY~~z;+38*v7}4+7SaP)%sBEr{@!v0`l0b@8sV=rwZwyaKxfKO)FU^Xls`*D0;Mh0P;!%uW}U(Kok?D^ALX zhliO5Ua^D33iIuR_b=vv5A^UWs} zol6(ivYZ&U-E?7bYSw6fj~DFYS7Y4`Y59?!rZ{bj{1c%GrfludRg+0=JO`^+q$(u&#)moFrdq+kgp5{xV9o@8%osw%}e(h0}Qg;}kDp;YP5qtDEa zgrkefcGi@kfX|vFLk&NEQ6sb#PgH3M2>dJ3FGcw$QBfa#*$ zn%VBPLK@7EESqQ(>r|I9)P+FgU6IGCMiaofY`B4axp_Qhc-o=Z7w~>C@x3&XHr>IK zEG{j2@DpYc8$rSt>MMb>dwPgBIxSjNk|U*v$g~$Uy^-p@2(KHsI&MhEq+}Un?LnD} zgT-Hxk~D!&oL|5wUM1k4KBOYL6(=?*GJmDS)Q5|=@YGc&K!-=zwusiU|2<@2fsr-P z;5j)pTJ&J-;gceMehAt?RJn@qA-T~LMG>lkqu8fGw7?Dy{D{fPfJVD>-)xM1JQroe zL{v{4U3yp=d8mSLq`9_>5*ozVcMKg86%BI}r;G&{>O!SU)xVOPR1fYt1^!hJQB9GW zc16eklDjG84%#QNEmYSbp~{u-h8{6wu}PjmDMyN={6L=-z?^X-5o>16dF(p`hwr0| z)l83zeX^|O2k8dPfe#wIi)w;eNR;T|e|iE9L%0>$2OzZjy76wTc#y$v%0A3&c2#j^hH}r^VMuJ4X=PH#Pf@K!f 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

Cxjg17YaHB!$PNrT?lUrcZJ^y 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 ZdPnh+rGu9^S< delta 51163 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 IA9%i+zzGblP5=M^ diff --git a/demos/neon_night_riders_TFMX.fur b/demos/neon_night_riders_TFMX.fur new file mode 100644 index 0000000000000000000000000000000000000000..a15f448922687b0c04126fa55d40ddbd4930aee1 GIT binary patch literal 160437 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

-OcJe!kv4X-v@A0I5J$zg#ARSFrWyV-Ihx(6Fg2 zIwi6;ap(H2j&WNkmIMk$=Zb-4@MuIlgD;hdg(4A$MJLmFQngkk63g=|np!qCm%2W9 z`>iXf!Xk$Gmyf<2p>BNs`P~X4t6=^1ovpX z+M>#ee{Sn~pprbPbLW>JPtgyoj+ls1He0d}drX z*f;JZvdG?vTQ@o^jGX#vIg^NIi;Ej-$|S^eDup9t;vVDD;)*LvW)M?hm(35H9ZzJ4 zRNA64twJJ}L$qwHD-ltEo>P&yxmd#TcYgADcQorB`S{G~^H-fTvh~`x-}a^(jva2H zx~3MXii#>h!aUS7Z>LB(H2=)t@N$&JBP`v$a(l*0=4(_UdX_F!=4piVWB_$VM7_ZH z4HjRT!r^nM#59g2FQ_U}Nf>NJVOe>;go!6{rFj}TA0jK&Kk@15Z|p@?l(A3#`@-*D zGAq#W?T44`qJjdJXR%vHkheA!3Q|U$KFpPfNgnSkIO`z;}mq`$`DBNs+wC%>4w1` zt5`Wox zvvcw!8Ha9h)fGvlLLR3loTaiL82X&PIF2RY(orS?-N6b4Jk(jspyI(X27w?l*i0IM z#1d#5TU*L=sPVP2g@AzL9=h@Ky*WFR799QY+iTM%91Ul`^V^jXN18~8o0fI9w6eTh z%S<@j)ST+pQUN|3p(qMVL@DcV|Jc0MWiu`=n!IUZHW6?+y@W@ocF=mJ6_g(VUx zax}RLAuSya$Kk-UXy_`B!Dch5bdFG|R`N53DJxsSh)(?e%OCgWLkazzAHM&+bJk?h zk6ruy#<(krC#U?@Rab(QmzN`AaV3RKZJX+I*bD|wEacHrfYn?+pVwtK8&S&;a+$$E zAP|aY2{aD6bCt-Dl(m$HZf?138Znd35~(x_2~VW4MRJ9NM`!V*xdjDz;UF-bypFiCiU3OUJ2LHU)H(`!tGcmWt>Z7Vlsw$K`4o_WD-B_6`W^-f! zJz>)le&EEBNYHK7udW$QW~K{E5!L6?gTCwajZ;^PRtryPRr{2%;fBnZf#|DdUo0D^mv_Civ`KK zI0KOsnS;u==uB)-1rkozz}KN%0UBG$<+8CW77~F-$fB7UXz(G0M554Xq)f&@=`p0=J8Zi|OM-n(ZJ`)f7U3Qxl zyQcAbTy{)V#D|1ITrP**YBrdx4kQ_iE|c+OI=Z5hp!X&{=mj$ugvLG#rj$atd@B8R41`5_I;3Vt5A9DaHf8XI zqmc|nsFDg;3?`kJOh9Z&_)JLf6)CD4omiqLjT$$S846ejk41>sj3z5e%LZZ)=Gi=v zLZiu1ViQ>eEK<_%Seu;~o19y-dLmgWU#e8eg-kLblT4+v>4?j`rnfmgPK(82_l437 zkxVXT!os3FDH_^{LqHstiiDFmSWToHra(OdVyOU}DuY2ud-X`Oe8ChVh}4B;W#uJW zF*D^btgILvZkKtsujBUpp|RNooyir!F_3i>^sV3sYVMZ1dEgj7)HBp+@CQ7;}M@}rnkF) zVs?7)`j7v-bZgS&bOTq}JvCW|joX>#Nuq&vlv$V6;98Tk+v zB?1H?#&#kD$t)A40WO^zDL?JzSzi`g20rG#LZj{2MqXCR!Ri`Cjf ztxC!yW??-j@LZu-Do1iU+y{9!iBciqB=sYAZVgQ7OslhlcP?MP)jvBwb@#`wKmO+S zVjxLj(wSUEL4j7rq)<4@g36Zaq8u)ZCz7jV0%|&yrV2G$m5`KhLu~Me!@%v$;FukL zcv&Q01UN~E#_b3s@MDpz5MKa6Jri<3G=Xmj0kt4f*ixm8M@*n`@+qVVk;S8QGfJUy zr8xzK0HWcAQ3gc7LDG5lwVBb8kcw1ED9mkWFp`q)1Y?LOABT(n( z$(YfVvAefA`et+n-PpZ9fBp4Z|IDh@X3OP-@GsjRLjE6h`g zSrmLS1OYdJBf*DB?bwP1XB$6P}7!DJ>QpoSLqvl?u@?=4y zmXKo#K5%*zDg(R!P-=4X^YhT)j2w+x$|Xd7E_X1IA+p5^b&f(v%|tv7FgZLS8;^t& zLuM@l≫4aAoh0*>xoU+7UI9(Kke~rXS`8o^ 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

8oPtwaPQWwi4{DL+(V5#D@e}p)XmwMif`pxQ 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%0Dk$t<&$LQT6%0t}G#;&~ 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 M4Zc9H`O1j?AI$LVc>n+a literal 0 HcmV?d00001 From b66cc81fc6f73dd5ce803e6039a647257704f5a6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 22:33:25 -0500 Subject: [PATCH 135/152] fix loading 24-bit samples --- src/engine/engine.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 12ee7a06..149a5b9f 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2221,8 +2221,14 @@ int DivEngine::addSampleFromFile(const char* path) { buf=new short[si.channels*si.frames]; sampleLen=sizeof(short); } - if (sf_read_raw(f,buf,si.frames*si.channels*sampleLen)!=(si.frames*si.channels*sampleLen)) { - logW("sample read size mismatch!"); + if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_PCM_U8 || (si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_FLOAT) { + if (sf_read_raw(f,buf,si.frames*si.channels*sampleLen)!=(si.frames*si.channels*sampleLen)) { + logW("sample read size mismatch!"); + } + } else { + if (sf_read_short(f,(short*)buf,si.frames*si.channels)!=(si.frames*si.channels)) { + logW("sample read size mismatch!"); + } } DivSample* sample=new DivSample; int sampleCount=(int)song.sample.size(); From a717c67f3d17960008cbe9e42418b91369e2cea3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 22:53:21 -0500 Subject: [PATCH 136/152] change IDs of null/dummy audio backends for eventual alternate audio backend support --- src/engine/engine.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index 1fa88a91..a7699546 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -60,8 +60,9 @@ enum DivStatusView { enum DivAudioEngines { DIV_AUDIO_JACK=0, DIV_AUDIO_SDL=1, - DIV_AUDIO_NULL=2, - DIV_AUDIO_DUMMY=3 + + DIV_AUDIO_NULL=126, + DIV_AUDIO_DUMMY=127 }; enum DivAudioExportModes { From 951db12e6a28de3987cd731892b71d6689119dbd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 22:59:06 -0500 Subject: [PATCH 137/152] Namco WSG: fix C15/C30 high notes --- src/engine/platform/namcowsg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/namcowsg.cpp b/src/engine/platform/namcowsg.cpp index 43136d91..6bcf43d2 100644 --- a/src/engine/platform/namcowsg.cpp +++ b/src/engine/platform/namcowsg.cpp @@ -322,7 +322,7 @@ void DivPlatformNamcoWSG::tick(bool sysTick) { } rWrite((i<<3)+0x04,chan[i].freq&0xff); rWrite((i<<3)+0x05,(chan[i].freq>>8)&0xff); - rWrite((i<<3)+0x06,((chan[i].freq>>15)&15)|(i<<4)); + rWrite((i<<3)+0x06,((chan[i].freq>>16)&15)|(i<<4)); } break; case 30: @@ -336,7 +336,7 @@ void DivPlatformNamcoWSG::tick(bool sysTick) { } rWrite((i<<3)+0x103,chan[i].freq&0xff); rWrite((i<<3)+0x102,(chan[i].freq>>8)&0xff); - rWrite((i<<3)+0x101,((chan[i].freq>>15)&15)|(i<<4)); + rWrite((i<<3)+0x101,((chan[i].freq>>16)&15)|(i<<4)); } break; } From ecb6635c507c5d1139640ae8c9959af9f7495817 Mon Sep 17 00:00:00 2001 From: Postbox2 <53163105+host12prog@users.noreply.github.com> Date: Fri, 24 Jun 2022 13:51:05 +0700 Subject: [PATCH 138/152] Fix typo --- papers/format.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papers/format.md b/papers/format.md index 013f2c5d..84239b3b 100644 --- a/papers/format.md +++ b/papers/format.md @@ -248,7 +248,7 @@ size | description 4f | A-4 tuning 1 | limit slides (>=36) or reserved 1 | linear pitch (>=36) or reserved - | - 0: non-linaer + | - 0: non-linear | - 1: only pitch change (04xy/E5xx) linear | - 2: full linear (>=94) 1 | loop modality (>=36) or reserved From deffd99503324c7fe308936e017fce9fefba7fd1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 03:11:16 -0500 Subject: [PATCH 139/152] pass filter to NFD - DOES NOT BUILD I am so lazy to adapt the macOS part --- extern/nfd-modified/src/include/nfd.h | 8 ++- extern/nfd-modified/src/nfd_cocoa.mm | 10 +-- extern/nfd-modified/src/nfd_win.cpp | 89 ++++++--------------------- src/gui/fileDialog.cpp | 4 +- 4 files changed, 31 insertions(+), 80 deletions(-) diff --git a/extern/nfd-modified/src/include/nfd.h b/extern/nfd-modified/src/include/nfd.h index 4e4ddcf7..7f630167 100644 --- a/extern/nfd-modified/src/include/nfd.h +++ b/extern/nfd-modified/src/include/nfd.h @@ -12,6 +12,8 @@ #include #include +#include +#include /* denotes UTF-8 char */ typedef char nfdchar_t; @@ -35,19 +37,19 @@ typedef enum { /* nfd_.c */ /* single file open dialog */ -nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, +nfdresult_t NFD_OpenDialog( const std::vector& filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath, nfdselcallback_t selCallback = NULL ); /* multiple file open dialog */ -nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, +nfdresult_t NFD_OpenDialogMultiple( const std::vector& filterList, const nfdchar_t *defaultPath, nfdpathset_t *outPaths, nfdselcallback_t selCallback = NULL ); /* save dialog */ -nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, +nfdresult_t NFD_SaveDialog( const std::vector& filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath, nfdselcallback_t selCallback = NULL ); diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index 8eac6f79..2f08a3a2 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -14,7 +14,7 @@ // // might as well make Objective-Ruswift++... -static NSArray *BuildAllowedFileTypes( const char *filterList ) +static NSArray *BuildAllowedFileTypes( const std::vector& filterList ) { // Commas and semicolons are the same thing on this platform @@ -56,7 +56,7 @@ static NSArray *BuildAllowedFileTypes( const char *filterList ) return returnArray; } -static void AddFilterListToDialog( NSSavePanel *dialog, const char *filterList ) +static void AddFilterListToDialog( NSSavePanel *dialog, const std::vector& filterList ) { if ( !filterList || strlen(filterList) == 0 ) return; @@ -130,7 +130,7 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) /* public */ -nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, +nfdresult_t NFD_OpenDialog( const std::vector& filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath, nfdselcallback_t selCallback ) @@ -173,7 +173,7 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, } -nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, +nfdresult_t NFD_OpenDialogMultiple( const std::vector& filterList, const nfdchar_t *defaultPath, nfdpathset_t *outPaths, nfdselcallback_t selCallback ) @@ -218,7 +218,7 @@ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, } -nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, +nfdresult_t NFD_SaveDialog( const std::vector& filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath, nfdselcallback_t selCallback ) diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp index ea18d72b..2e7f4000 100644 --- a/extern/nfd-modified/src/nfd_win.cpp +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -197,44 +197,19 @@ static void CopyNFDCharToWChar( const nfdchar_t *inStr, wchar_t **outStr ) #endif } - -/* ext is in format "jpg", no wildcards or separators */ -static int AppendExtensionToSpecBuf( const char *ext, char *specBuf, size_t specBufLen ) -{ - const char SEP[] = ";"; - assert( specBufLen > strlen(ext)+3 ); - - if ( strlen(specBuf) > 0 ) - { - strncat( specBuf, SEP, specBufLen - strlen(specBuf) - 1 ); - specBufLen += strlen(SEP); - } - - char extWildcard[NFD_MAX_STRLEN]; - int bytesWritten = sprintf_s( extWildcard, NFD_MAX_STRLEN, "*.%s", ext ); - assert( bytesWritten == (int)(strlen(ext)+2) ); - _NFD_UNUSED(bytesWritten); - - strncat( specBuf, extWildcard, specBufLen - strlen(specBuf) - 1 ); - - return NFD_OKAY; -} - -static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const char *filterList ) +static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const std::vector& filterList ) { const wchar_t WILDCARD[] = L"*.*"; - if ( !filterList || strlen(filterList) == 0 ) + if (filterList.empty()) return NFD_OKAY; + // list size has to be an even number (name/filter) + if (filterList.size()&1) + return NFD_ERROR; + // Count rows to alloc - UINT filterCount = 1; /* guaranteed to have one filter on a correct, non-empty parse */ - const char *p_filterList; - for ( p_filterList = filterList; *p_filterList; ++p_filterList ) - { - if ( *p_filterList == ';' ) - ++filterCount; - } + UINT filterCount = filterList.size()>>1; /* guaranteed to have one filter on a correct, non-empty parse */ assert(filterCount); if ( !filterCount ) @@ -256,43 +231,17 @@ static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const char } size_t specIdx = 0; - p_filterList = filterList; - char typebuf[NFD_MAX_STRLEN] = {0}; /* one per comma or semicolon */ - char *p_typebuf = typebuf; - char specbuf[NFD_MAX_STRLEN] = {0}; /* one per semicolon */ + for (size_t i=0; i& filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath, nfdselcallback_t selCallback ) @@ -558,7 +507,7 @@ end: return nfdResult; } -nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, +nfdresult_t NFD_OpenDialogMultiple( const std::vector& filterList, const nfdchar_t *defaultPath, nfdpathset_t *outPaths, nfdselcallback_t selCallback ) @@ -653,7 +602,7 @@ end: return nfdResult; } -nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, +nfdresult_t NFD_SaveDialog( const std::vector& filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath, nfdselcallback_t selCallback ) diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index 64f9e989..f9d4ac4d 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -30,9 +30,9 @@ void _nfdThread(const NFDState state, std::atomic* ok, String* result) { nfdresult_t ret=NFD_CANCEL; if (state.isSave) { - ret=NFD_SaveDialog(NULL,state.path.c_str(),&out,state.clickCallback); + ret=NFD_SaveDialog(state.filter,state.path.c_str(),&out,state.clickCallback); } else { - ret=NFD_OpenDialog(NULL,state.path.c_str(),&out,state.clickCallback); + ret=NFD_OpenDialog(state.filter,state.path.c_str(),&out,state.clickCallback); } switch (ret) { From 522fecc635db4d28626cae008819ce42f767fb28 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 03:17:40 -0500 Subject: [PATCH 140/152] GUI: gradient whoops --- src/gui/gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 3de09f8e..bc309bc4 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4082,6 +4082,7 @@ bool FurnaceGUI::init() { chanOscColor.w=e->getConfFloat("chanOscColorA",1.0f); chanOscUseGrad=e->getConfBool("chanOscUseGrad",false); chanOscGrad.fromString(e->getConfString("chanOscGrad","")); + chanOscGrad.render(); syncSettings(); From e39a923b23cd1d71c7aca18a671639b8af383e09 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 03:26:00 -0500 Subject: [PATCH 141/152] C64: fix per-channel osc for 6581 --- src/engine/platform/c64.cpp | 7 ++++--- src/engine/platform/sound/c64/sid.cc | 7 +++++++ src/engine/platform/sound/c64/sid.h | 1 + src/engine/platform/sound/c64/voice.h | 7 +++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 3372c820..a55b5390 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -109,14 +109,15 @@ const char* DivPlatformC64::getEffectName(unsigned char effect) { } void DivPlatformC64::acquire(short* bufL, short* bufR, size_t start, size_t len) { + int dcOff=sid.get_dc(0); for (size_t i=start; i=8) { writeOscBuf=0; - oscBuf[0]->data[oscBuf[0]->needle++]=sid.last_chan_out[0]>>5; - oscBuf[1]->data[oscBuf[1]->needle++]=sid.last_chan_out[1]>>5; - oscBuf[2]->data[oscBuf[2]->needle++]=sid.last_chan_out[2]>>5; + oscBuf[0]->data[oscBuf[0]->needle++]=(sid.last_chan_out[0]-dcOff)>>5; + oscBuf[1]->data[oscBuf[1]->needle++]=(sid.last_chan_out[1]-dcOff)>>5; + oscBuf[2]->data[oscBuf[2]->needle++]=(sid.last_chan_out[2]-dcOff)>>5; } } } diff --git a/src/engine/platform/sound/c64/sid.cc b/src/engine/platform/sound/c64/sid.cc index d6ebbb44..aaed90a5 100644 --- a/src/engine/platform/sound/c64/sid.cc +++ b/src/engine/platform/sound/c64/sid.cc @@ -60,6 +60,13 @@ SID::~SID() delete[] fir; } +// ---------------------------------------------------------------------------- +// Get DC offset of channel. +// ---------------------------------------------------------------------------- +sound_sample SID::get_dc(int ch) { + return voice[ch].getDC(); +} + // ---------------------------------------------------------------------------- // Mute/unmute channel. // ---------------------------------------------------------------------------- diff --git a/src/engine/platform/sound/c64/sid.h b/src/engine/platform/sound/c64/sid.h index f6b39271..e8b0d5c6 100644 --- a/src/engine/platform/sound/c64/sid.h +++ b/src/engine/platform/sound/c64/sid.h @@ -34,6 +34,7 @@ public: sound_sample last_chan_out[3]; + sound_sample get_dc(int ch); void set_is_muted(int ch, bool val); void set_chip_model(chip_model model); void enable_filter(bool enable); diff --git a/src/engine/platform/sound/c64/voice.h b/src/engine/platform/sound/c64/voice.h index d248f32a..85b4fede 100644 --- a/src/engine/platform/sound/c64/voice.h +++ b/src/engine/platform/sound/c64/voice.h @@ -38,6 +38,7 @@ public: // Amplitude modulated waveform output. // Range [-2048*255, 2047*255]. RESID_INLINE sound_sample output(); + RESID_INLINE sound_sample getDC(); protected: WaveformGenerator wave; @@ -72,6 +73,12 @@ sound_sample Voice::output() return (wave.output() - wave_zero)*envelope.output() + voice_DC; } +RESID_INLINE +sound_sample Voice::getDC() +{ + return voice_DC; +} + #endif // RESID_INLINING || defined(__VOICE_CC__) #endif // not __VOICE_H__ From 3366099dbe7c7c6a7db853a8e1ee5cf6b66fbbc0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 13:17:43 -0500 Subject: [PATCH 142/152] can you call C++ methods from Smalltalk --- extern/nfd-modified/src/nfd_cocoa.mm | 46 ++++++++++++---------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index 2f08a3a2..5b5ee4cc 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -22,32 +22,26 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis // NSMutableArray *buildFilterList = NSMutableArray::alloc()->init(); NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; - char typebuf[NFD_MAX_STRLEN] = {0}; - - size_t filterListLen = strlen(filterList); - char *p_typebuf = typebuf; - for ( size_t i = 0; i < filterListLen+1; ++i ) - { - if ( filterList[i] == ',' || filterList[i] == ';' || filterList[i] == '\0' ) - { - if (filterList[i] != '\0') - ++p_typebuf; - *p_typebuf = '\0'; - - // or this: NSString::stringWithUTF8String(typebuf); - // buildFilterList->addObject(thisType); - // really? did you have to make this mess?! - NSString *thisType = [NSString stringWithUTF8String: typebuf]; - [buildFilterList addObject:thisType]; - p_typebuf = typebuf; - *p_typebuf = '\0'; - } - else - { - *p_typebuf = filterList[i]; - ++p_typebuf; - + String typebuf; + for (std::string& i: filterList) { + typebuf=""; + for (char& j: i) { + if (j==' ' || j==',' || j ==';') { + // or this: NSString::stringWithUTF8String(typebuf); + // buildFilterList->addObject(thisType); + // really? did you have to make this mess?! + NSString *thisType = [NSString stringWithUTF8String: [typebuf c_str]]; + [buildFilterList addObject:thisType]; + typebuf=""; + } else if (j!='.' && j!='*') { + typebuf+=j; } + } + if (!typebuf.empty()) { + // I don't think this will work, but come on... + NSString *thisType = [NSString stringWithUTF8String: [typebuf c_str]]; + [buildFilterList addObject:thisType]; + } } NSArray *returnArray = [NSArray arrayWithArray:buildFilterList]; @@ -58,7 +52,7 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis static void AddFilterListToDialog( NSSavePanel *dialog, const std::vector& filterList ) { - if ( !filterList || strlen(filterList) == 0 ) + if ( filterList.size()&1 ) return; NSArray *allowedFileTypes = BuildAllowedFileTypes( filterList ); From 1ffca9bea22c4c57ea066b363dd2de6e5f07c169 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 13:28:11 -0500 Subject: [PATCH 143/152] can you do the inverse --- extern/nfd-modified/src/nfd_cocoa.mm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index 5b5ee4cc..cb57e565 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -22,7 +22,7 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis // NSMutableArray *buildFilterList = NSMutableArray::alloc()->init(); NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; - String typebuf; + std::string typebuf; for (std::string& i: filterList) { typebuf=""; for (char& j: i) { @@ -30,7 +30,7 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis // or this: NSString::stringWithUTF8String(typebuf); // buildFilterList->addObject(thisType); // really? did you have to make this mess?! - NSString *thisType = [NSString stringWithUTF8String: [typebuf c_str]]; + NSString *thisType = NSString::stringWithUTF8String(typebuf.c_str()); [buildFilterList addObject:thisType]; typebuf=""; } else if (j!='.' && j!='*') { @@ -39,7 +39,7 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis } if (!typebuf.empty()) { // I don't think this will work, but come on... - NSString *thisType = [NSString stringWithUTF8String: [typebuf c_str]]; + NSString *thisType = NSString::stringWithUTF8String(typebuf.c_str()); [buildFilterList addObject:thisType]; } } From 01d2971b402189dc834399aa75ed59acc0eaa81b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 13:29:01 -0500 Subject: [PATCH 144/152] oh wait --- extern/nfd-modified/src/nfd_cocoa.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index cb57e565..929bad8d 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -23,9 +23,9 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; std::string typebuf; - for (std::string& i: filterList) { + for (const std::string& i: filterList) { typebuf=""; - for (char& j: i) { + for (const char& j: i) { if (j==' ' || j==',' || j ==';') { // or this: NSString::stringWithUTF8String(typebuf); // buildFilterList->addObject(thisType); From 0c480a3ea724ec07f4989c25fc990a51dfcb1961 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 13:39:50 -0500 Subject: [PATCH 145/152] go to hell and your stupid mess of C++ with Smalltalk language --- extern/nfd-modified/src/nfd_cocoa.mm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index 929bad8d..4e0f9e0b 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -30,7 +30,8 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis // or this: NSString::stringWithUTF8String(typebuf); // buildFilterList->addObject(thisType); // really? did you have to make this mess?! - NSString *thisType = NSString::stringWithUTF8String(typebuf.c_str()); + const char* typebufC=typebuf.c_str(); + NSString *thisType = [NSString stringWithUTF8String:typebufC]; [buildFilterList addObject:thisType]; typebuf=""; } else if (j!='.' && j!='*') { @@ -39,7 +40,8 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis } if (!typebuf.empty()) { // I don't think this will work, but come on... - NSString *thisType = NSString::stringWithUTF8String(typebuf.c_str()); + const char* typebufC=typebuf.c_str(); + NSString *thisType = [NSString stringWithUTF8String:typebufC]; [buildFilterList addObject:thisType]; } } From fa29c6c00a298e85eb1defe53bf9dc10d83e3173 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 14:23:57 -0500 Subject: [PATCH 146/152] GUI: update credits --- src/gui/about.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 1b257af1..27e5f611 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -83,6 +83,7 @@ const char* aboutLine[]={ "Miker", "nicco1690", "NikonTeen", + "SnugglyValeria", "SuperJet Spade", "TheDuccinator", "theloredev", @@ -90,7 +91,6 @@ const char* aboutLine[]={ "tildearrow", "Ultraprogramer", "Weeppiko", - "WitchyValeria", "ZoomTen (Zumi)", "", "-- additional feedback/fixes --", From 3811d694dbad88a44583d1f5718a4feda98e0eaa Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 15:27:11 -0500 Subject: [PATCH 147/152] submit initial batch of contest instruments --- instruments/FM/FM_4OP_-_Tenor_Sax.fui | Bin 0 -> 1670 bytes instruments/FM/GEN_weird.fui | Bin 0 -> 1666 bytes instruments/FM/OPNx_BottleBlow.fui | Bin 0 -> 1675 bytes instruments/FM/Octave_Square.fui | Bin 0 -> 1674 bytes instruments/FM/Octave_Square2.fui | Bin 0 -> 1676 bytes instruments/FM/Reverby_Live_Chords.fui | Bin 0 -> 1718 bytes instruments/FM/Square.fui | Bin 0 -> 1667 bytes instruments/FM/bass/4-OP_Vowel_Bass.fui | Bin 0 -> 1743 bytes instruments/FM/bass/4_OP_Funky_Bass.fui | Bin 0 -> 1672 bytes instruments/FM/bass/Bass.fui | Bin 0 -> 1632 bytes instruments/FM/bass/FM_CriminalBass.fui | Bin 0 -> 1673 bytes instruments/FM/bass/Heavy_synth_bass.fui | Bin 0 -> 1677 bytes instruments/FM/bass/House_Bass.fui | Bin 0 -> 1019 bytes instruments/FM/bass/OPNx_FingerBass.fui | Bin 0 -> 1676 bytes instruments/FM/bass/OPNx_PickBass.fui | Bin 0 -> 1674 bytes instruments/FM/bass/OPZ-Fake_Famicom_Tri.fui | Bin 0 -> 1673 bytes instruments/FM/bass/PickMD.fui | Bin 0 -> 1668 bytes instruments/FM/bass/bass1.fui | Bin 0 -> 1665 bytes instruments/FM/bass/bass2.fui | Bin 0 -> 1667 bytes instruments/FM/bass/bass3.fui | Bin 0 -> 1667 bytes instruments/FM/bass/bass4.fui | Bin 0 -> 1667 bytes instruments/FM/bass/bass5.fui | Bin 0 -> 1667 bytes instruments/FM/bass/bass6.fui | Bin 0 -> 1667 bytes instruments/FM/bass/opm_nestri.fui | Bin 0 -> 1683 bytes instruments/FM/bass/tarylbass1.fui | Bin 0 -> 1665 bytes instruments/FM/drums/Drum.fui | Bin 0 -> 1632 bytes instruments/FM/drums/fmbigkick.fui | Bin 0 -> 1640 bytes instruments/FM/drums/fmclap.fui | Bin 0 -> 1649 bytes instruments/FM/drums/fmclap2.fui | Bin 0 -> 1655 bytes instruments/FM/drums/fmhat.fui | Bin 0 -> 1640 bytes instruments/FM/drums/fmopenhat.fui | Bin 0 -> 1640 bytes .../FM/drums/idk_something_percussion.fui | Bin 0 -> 1693 bytes instruments/FM/drums/powersnare.fui | Bin 0 -> 1625 bytes instruments/FM/drums/snareclap_G-2.fui | Bin 0 -> 1455 bytes instruments/FM/growl.fui | Bin 0 -> 1666 bytes instruments/FM/guitar/OPNx_ElectricGuitar.fui | Bin 0 -> 1680 bytes instruments/FM/guitar/YM2151_DistGuitar.fui | Bin 0 -> 1673 bytes instruments/FM/horn/GEN_Tuba.fui | Bin 0 -> 1673 bytes instruments/FM/horn/OPNx_SynthBrass.fui | Bin 0 -> 1676 bytes instruments/FM/keys/ElisOrgan.fui | Bin 0 -> 1638 bytes instruments/FM/keys/OPNx_Piano.fui | Bin 0 -> 1671 bytes instruments/FM/keys/PianoMD.fui | Bin 0 -> 1667 bytes instruments/FM/keys/YM2151_E-PIANO.fui | Bin 0 -> 1446 bytes instruments/FM/keys/fmpiano.fui | Bin 0 -> 1673 bytes instruments/FM/percussion/BellMD.fui | Bin 0 -> 1665 bytes instruments/FM/percussion/ChurchBell.fui | Bin 0 -> 1639 bytes instruments/FM/percussion/Marimba.fui | Bin 0 -> 1673 bytes instruments/FM/percussion/MusicBox.fui | Bin 0 -> 1673 bytes instruments/FM/percussion/OPN_-_Music_Box.fui | Bin 0 -> 1670 bytes instruments/FM/percussion/Rainbow_Bell.fui | Bin 0 -> 1621 bytes instruments/FM/percussion/octave_8_bell.fui | Bin 0 -> 1677 bytes instruments/FM/powerchord.fui | Bin 0 -> 1673 bytes instruments/FM/strings/OPNx_5thsPad.fui | Bin 0 -> 1673 bytes instruments/FM/strings/OPNx_String.fui | Bin 0 -> 1672 bytes instruments/FM/strings/Violin.fui | Bin 0 -> 1667 bytes instruments/FM/strings/ViolinMD.fui | Bin 0 -> 1666 bytes instruments/OPL/OPL1_Ride_Closed.fui | Bin 0 -> 1672 bytes instruments/OPL/OPL3-FakeFalcomGuitar.fui | Bin 0 -> 1684 bytes instruments/OPL/OPL3-MajorSquare.fui | Bin 0 -> 1679 bytes instruments/OPL/OPL3.zip | Bin 0 -> 4131 bytes instruments/OPL/OPL3_-_C64_like_sqr_snare.fui | Bin 0 -> 1704 bytes instruments/OPL/OPL3_-_PWM_Lead.fui | Bin 0 -> 1734 bytes instruments/OPL/OPL3_C64_Kick_or_Snare_Start.fui | Bin 0 -> 1690 bytes instruments/OPL/OPL3_C64_Snare_Carry.fui | Bin 0 -> 1683 bytes instruments/OPL/OPL3_Slap_Bass.fui | Bin 0 -> 1673 bytes instruments/OPL/OPL_horn.fui | Bin 0 -> 1665 bytes instruments/OPL/opl3_4op_bass_1.fui | Bin 0 -> 1667 bytes instruments/OPL/opl3_4op_bass_2.fui | Bin 0 -> 1667 bytes instruments/OPL/opl3_4op_bass_3.fui | Bin 0 -> 1667 bytes instruments/OPL/opl3_4op_drum_kick.fui | Bin 0 -> 1822 bytes instruments/OPL/opl3_4op_drum_power_snare.fui | Bin 0 -> 1681 bytes instruments/OPL/opl3_4op_drum_snare.fui | Bin 0 -> 1823 bytes instruments/OPL/opl3_4op_drum_tom.fui | Bin 0 -> 1821 bytes instruments/OPL/opl3_4op_growl_synth.fui | Bin 0 -> 1672 bytes instruments/OPL/opl3_4op_lead_guitar.fui | Bin 0 -> 1672 bytes instruments/OPL/opl3_4op_piano_bell.fui | Bin 0 -> 1671 bytes instruments/OPL/opl3_4op_rhythm_guitar_1.fui | Bin 0 -> 1676 bytes instruments/OPL/opl3_4op_rhythm_guitar_2.fui | Bin 0 -> 1676 bytes instruments/OPL/opl3_4op_strings.fui | Bin 0 -> 1668 bytes instruments/other/C64_Snare.fui | Bin 0 -> 1706 bytes instruments/other/Castanets.fui | Bin 0 -> 1671 bytes instruments/other/Closed_Hi-hat.fui | Bin 0 -> 1671 bytes ...osejapaneseguitarsidkhowtheyarecalledyeah.fui | Bin 0 -> 1752 bytes .../FDS-overfuckingholyshitdriven-guitar.fui | Bin 0 -> 1969 bytes instruments/other/FDS-slapassbass.fui | Bin 0 -> 1677 bytes instruments/other/GBkick.fui | Bin 0 -> 1759 bytes instruments/other/GBsnare.fui | Bin 0 -> 1760 bytes instruments/other/Gunshot.fui | Bin 0 -> 1671 bytes instruments/other/NES_0-2-5_arp_lead.fui | Bin 0 -> 1807 bytes instruments/other/NES_0-3-5_arp_lead.fui | Bin 0 -> 1807 bytes instruments/other/Open_Hi-hat.fui | Bin 0 -> 1671 bytes instruments/other/SMS_0-2-5_arp_lead.fui | Bin 0 -> 1803 bytes instruments/other/SMS_0-3-5_arp_lead.fui | Bin 0 -> 1803 bytes instruments/other/Side_Stick.fui | Bin 0 -> 1671 bytes instruments/other/Supersaw.fui | Bin 0 -> 1669 bytes instruments/other/VERA_0-2-5_arp_lead.fui | Bin 0 -> 1699 bytes instruments/other/VERA_0-3-5_arp_lead.fui | Bin 0 -> 1699 bytes instruments/other/VERA_Noise_Kick.fui | Bin 0 -> 1685 bytes instruments/other/VERA_Noise_Snare.fui | Bin 0 -> 1698 bytes instruments/other/VIC20_kick.fui | Bin 0 -> 1705 bytes 100 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 instruments/FM/FM_4OP_-_Tenor_Sax.fui create mode 100644 instruments/FM/GEN_weird.fui create mode 100644 instruments/FM/OPNx_BottleBlow.fui create mode 100644 instruments/FM/Octave_Square.fui create mode 100644 instruments/FM/Octave_Square2.fui create mode 100644 instruments/FM/Reverby_Live_Chords.fui create mode 100644 instruments/FM/Square.fui create mode 100644 instruments/FM/bass/4-OP_Vowel_Bass.fui create mode 100644 instruments/FM/bass/4_OP_Funky_Bass.fui create mode 100644 instruments/FM/bass/Bass.fui create mode 100644 instruments/FM/bass/FM_CriminalBass.fui create mode 100644 instruments/FM/bass/Heavy_synth_bass.fui create mode 100644 instruments/FM/bass/House_Bass.fui create mode 100644 instruments/FM/bass/OPNx_FingerBass.fui create mode 100644 instruments/FM/bass/OPNx_PickBass.fui create mode 100644 instruments/FM/bass/OPZ-Fake_Famicom_Tri.fui create mode 100644 instruments/FM/bass/PickMD.fui create mode 100644 instruments/FM/bass/bass1.fui create mode 100644 instruments/FM/bass/bass2.fui create mode 100644 instruments/FM/bass/bass3.fui create mode 100644 instruments/FM/bass/bass4.fui create mode 100644 instruments/FM/bass/bass5.fui create mode 100644 instruments/FM/bass/bass6.fui create mode 100644 instruments/FM/bass/opm_nestri.fui create mode 100644 instruments/FM/bass/tarylbass1.fui create mode 100644 instruments/FM/drums/Drum.fui create mode 100644 instruments/FM/drums/fmbigkick.fui create mode 100644 instruments/FM/drums/fmclap.fui create mode 100644 instruments/FM/drums/fmclap2.fui create mode 100644 instruments/FM/drums/fmhat.fui create mode 100644 instruments/FM/drums/fmopenhat.fui create mode 100644 instruments/FM/drums/idk_something_percussion.fui create mode 100644 instruments/FM/drums/powersnare.fui create mode 100644 instruments/FM/drums/snareclap_G-2.fui create mode 100644 instruments/FM/growl.fui create mode 100644 instruments/FM/guitar/OPNx_ElectricGuitar.fui create mode 100644 instruments/FM/guitar/YM2151_DistGuitar.fui create mode 100644 instruments/FM/horn/GEN_Tuba.fui create mode 100644 instruments/FM/horn/OPNx_SynthBrass.fui create mode 100644 instruments/FM/keys/ElisOrgan.fui create mode 100644 instruments/FM/keys/OPNx_Piano.fui create mode 100644 instruments/FM/keys/PianoMD.fui create mode 100644 instruments/FM/keys/YM2151_E-PIANO.fui create mode 100644 instruments/FM/keys/fmpiano.fui create mode 100644 instruments/FM/percussion/BellMD.fui create mode 100644 instruments/FM/percussion/ChurchBell.fui create mode 100644 instruments/FM/percussion/Marimba.fui create mode 100644 instruments/FM/percussion/MusicBox.fui create mode 100644 instruments/FM/percussion/OPN_-_Music_Box.fui create mode 100644 instruments/FM/percussion/Rainbow_Bell.fui create mode 100644 instruments/FM/percussion/octave_8_bell.fui create mode 100644 instruments/FM/powerchord.fui create mode 100644 instruments/FM/strings/OPNx_5thsPad.fui create mode 100644 instruments/FM/strings/OPNx_String.fui create mode 100644 instruments/FM/strings/Violin.fui create mode 100644 instruments/FM/strings/ViolinMD.fui create mode 100644 instruments/OPL/OPL1_Ride_Closed.fui create mode 100644 instruments/OPL/OPL3-FakeFalcomGuitar.fui create mode 100644 instruments/OPL/OPL3-MajorSquare.fui create mode 100644 instruments/OPL/OPL3.zip create mode 100644 instruments/OPL/OPL3_-_C64_like_sqr_snare.fui create mode 100644 instruments/OPL/OPL3_-_PWM_Lead.fui create mode 100644 instruments/OPL/OPL3_C64_Kick_or_Snare_Start.fui create mode 100644 instruments/OPL/OPL3_C64_Snare_Carry.fui create mode 100644 instruments/OPL/OPL3_Slap_Bass.fui create mode 100644 instruments/OPL/OPL_horn.fui create mode 100644 instruments/OPL/opl3_4op_bass_1.fui create mode 100644 instruments/OPL/opl3_4op_bass_2.fui create mode 100644 instruments/OPL/opl3_4op_bass_3.fui create mode 100644 instruments/OPL/opl3_4op_drum_kick.fui create mode 100644 instruments/OPL/opl3_4op_drum_power_snare.fui create mode 100644 instruments/OPL/opl3_4op_drum_snare.fui create mode 100644 instruments/OPL/opl3_4op_drum_tom.fui create mode 100644 instruments/OPL/opl3_4op_growl_synth.fui create mode 100644 instruments/OPL/opl3_4op_lead_guitar.fui create mode 100644 instruments/OPL/opl3_4op_piano_bell.fui create mode 100644 instruments/OPL/opl3_4op_rhythm_guitar_1.fui create mode 100644 instruments/OPL/opl3_4op_rhythm_guitar_2.fui create mode 100644 instruments/OPL/opl3_4op_strings.fui create mode 100644 instruments/other/C64_Snare.fui create mode 100644 instruments/other/Castanets.fui create mode 100644 instruments/other/Closed_Hi-hat.fui create mode 100644 instruments/other/FDS-oneofthosejapaneseguitarsidkhowtheyarecalledyeah.fui create mode 100644 instruments/other/FDS-overfuckingholyshitdriven-guitar.fui create mode 100644 instruments/other/FDS-slapassbass.fui create mode 100644 instruments/other/GBkick.fui create mode 100644 instruments/other/GBsnare.fui create mode 100644 instruments/other/Gunshot.fui create mode 100644 instruments/other/NES_0-2-5_arp_lead.fui create mode 100644 instruments/other/NES_0-3-5_arp_lead.fui create mode 100644 instruments/other/Open_Hi-hat.fui create mode 100644 instruments/other/SMS_0-2-5_arp_lead.fui create mode 100644 instruments/other/SMS_0-3-5_arp_lead.fui create mode 100644 instruments/other/Side_Stick.fui create mode 100644 instruments/other/Supersaw.fui create mode 100644 instruments/other/VERA_0-2-5_arp_lead.fui create mode 100644 instruments/other/VERA_0-3-5_arp_lead.fui create mode 100644 instruments/other/VERA_Noise_Kick.fui create mode 100644 instruments/other/VERA_Noise_Snare.fui create mode 100644 instruments/other/VIC20_kick.fui diff --git a/instruments/FM/FM_4OP_-_Tenor_Sax.fui b/instruments/FM/FM_4OP_-_Tenor_Sax.fui new file mode 100644 index 0000000000000000000000000000000000000000..be9f5eeb5dd52bcea0ddf70efe09d3056b58afd9 GIT binary patch literal 1670 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpLQ?bcixh$rD;SvA85o#A z!a@uT{QNQu49xN%9wv}yVC3fp$}wX~fki|?`bF^RXW-`qs>ESFKLe8k&|wS=98e6T zkN^%xA*n!O{wDyCl){_YeRaOV?Br literal 0 HcmV?d00001 diff --git a/instruments/FM/GEN_weird.fui b/instruments/FM/GEN_weird.fui new file mode 100644 index 0000000000000000000000000000000000000000..1e5bc1cdf24ae2c1d657991fe22fd2d56d186d2e GIT binary patch literal 1666 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHp%2P9oQW%(77#Ns9LYy4j z%={`0%&Z^|7Qn~C#KVHD!!{kTp uK@9;|xB$yw)&SN6j0_-Y1_hi&BwRhJF{Jb029d?UTM+T{GcbTKE&u=~KrT4| literal 0 HcmV?d00001 diff --git a/instruments/FM/OPNx_BottleBlow.fui b/instruments/FM/OPNx_BottleBlow.fui new file mode 100644 index 0000000000000000000000000000000000000000..d4923ccf2cae825bab7f5ef9347393cbda0faaf4 GIT binary patch literal 1675 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpg1v&{o$^aca#Edg^2-@m z*cljDKyreDOq@(o3=GUbHQ0c>C=(}xE=V3bkmqCMWZ=QApO*_L&yQ0-KLe8k*k%r( z@gR%}^l9|?A$`+2zYF;gI_2&Mi< xH4Qg!)E?9jK!lV6YXIv3Mh1{Hg95G+6rmi|7}9wNlgMG=Er|GmMK}oK0su5)HVi@rB3l0IXlNlHp{F6%(%Tg7B3riD=QW;p- z85o#AQu6XF3=C2X3_w0sATQ6s2r?6=JU0^yKL=K=U_p6q7JTyj3``C{$1yN~jKDNT z9w}GYDM^$SLFkbh8NYA@-1GBO$ZVBccl literal 0 HcmV?d00001 diff --git a/instruments/FM/Octave_Square2.fui b/instruments/FM/Octave_Square2.fui new file mode 100644 index 0000000000000000000000000000000000000000..f6fcea32de7386ea8a106b4014dbf48865ccb1ed GIT binary patch literal 1676 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHp{F6%(%Tg7B3riD=QWcCC zSlAgDm_U;9@*E5dQVa}0K2{(v&jL0Tr#v?c3qLPbtzbcUZYCCfpcOa(KLe8k(0L3D zASIZ}>`5xz>pn0xWnB3&p*>-TUmt;H$Bb=A+JfA zq@g6*mwA?4QgzMlMZS&_0E$E-KAg_X69~i{Qr^<6P}>dQ0uy$HzURml;PJtN&=q1% z@tyveaOKi+u`z{#2xL{s8Y3~;QFDOb2q^=h!7EB_cj8H4CuC5~&gHQRj|6k{Q0(vfh@{Zm^R7(rW ish4u=wX*kA!%ljYIFz}2EnCYPMxDhlwNy%gr3){%e)HVi@rB3l0IXlNlHpf(uI%i&7a_*clj@Kw|Rp zEDQ`%3=BX%Rv^#9$jDvKz`%-C7O0<_iG?4B97tH6laZ4js2>O5XJB#wx{85;1B!tZ z5|Bq?6J-7;0I(T=t_9>2asj$og!mA9$g`1<+34~k!7g+^4|hJHbV{lJ37HR*AGHTH s1YqF;EQDDDSPw8VfTS4|m=WSQSg6L3&ck6Wk-~TjB7R^Q55l+r0Q%Z5fB*mh literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/4-OP_Vowel_Bass.fui b/instruments/FM/bass/4-OP_Vowel_Bass.fui new file mode 100644 index 0000000000000000000000000000000000000000..b45a50b12c0f5cd4bf1d844c1429b63c3520d833 GIT binary patch literal 1743 zcmeHIO-sW-5PkV-($9rn6*@QTAs)mZARdGsv;oC?NEaW!~G_Y}oMfIZxw6(mE~5{3J{O5RV3n>zmsuPGI3ITt;-4y~szph>L>ea|MmYk2|t zoI3!5kHL>m;Og#pGeD)(E~%EXFWOqBdF`{Gqe;8X>%6E#vu!QYoF%!b-|g#wMOD7_ z@@p?4CX?}aG#U;EgML2RsCPinLh1LdpGGf{J+oc4mA4$kQaHc e*5+V>oNZnc?aF+ArjhNK{_=)HVi@rB3l0IXlNlHp+)DGZD;1Iwi;EQ)7+AoF zfkB>wi;YQ?ftigFrUjLj=VD}I5@%pyW_YeR zaOY#DKvWS*{f}xIZr-Rps3Cv|DFxO5)&q literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/Bass.fui b/instruments/FM/bass/Bass.fui new file mode 100644 index 0000000000000000000000000000000000000000..147b43e76a3a8c633a3381b73fc68d457dd04757 GIT binary patch literal 1632 zcmdOOD=o@POioqE%quP_($fuLU|>)HVi@rB3kC@>gfK8NI3*SrGcd6+FtUI|#5fuF z8I&0q*gzaCK$4S*pFs)HVi@rB3l0IXlNlHpJV8oIb5rw56bu*`*clj@ zKr&)NJiLt342;ZdARZ===V#z#=3!s}VQfHBn2Co=5vZRVn=Au^JSPJuKNABJGj?fy z1||of+ZY%)pcqIY0eK`gLFRt~0Gk2mT0l-A7oeL(h!3%cJR1p_jV?bD>_YeRaOV?B zr)HVi@rB3l0IXlNp2=JW>t|!+ z)HVi@rB3l0IXO&J&&Jn~D6Qx%*Ni;Ec;*cljD zK;mM2jQmUr42*0b4i+HK#=y@l!@$JMfkhH1BqhMe&mjVo=f^G&*3X4gKR*ML1JGp* u3?SoiSOJtF3j8Mkuo;4`1>_WR0lHa)_z-)@vyqV5=<*}ME_6Q+cRm2%bL%+( literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/OPNx_FingerBass.fui b/instruments/FM/bass/OPNx_FingerBass.fui new file mode 100644 index 0000000000000000000000000000000000000000..a9f71261984b703623d66cd34b5bb6df56af2904 GIT binary patch literal 1676 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHp`~&6^5{ru& znAsT^SU{5U!mOZ;QAg7QE(9I&mhuA}&jfBibmmdjsq5FBb^9iL>O8rmBe3<;GJ*Xi7 q3m0H%%o@OYfRO)HVi@rB3l0IXlNlHpg1v&{12U7dof3rNx>s>;Q}m+Sp!%PFfxFo85D4ofC$xKb*M&>#zQiS3?|-!h#y#ngD@@t0I)HVi@rB3l0IXlNp2=JV8oIb5rw56bu-c*%=s^ zKr-?ST>Sis3=GU54hS$pC>RNr_aGo|i%*_`pC4!w4)ggLm>j@XasVv^VN@WG%Eiz7 zPXJ)kjjjdF_t>=H6hk+Q5FcU?c{UO<8(n@R*oE%r;m*gI5TO#3`k#>bF!@n?P(uI~ sF2JIgHGuU1BLhg9K>=O@BIMCnsK$`aLo<#t<8 literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/PickMD.fui b/instruments/FM/bass/PickMD.fui new file mode 100644 index 0000000000000000000000000000000000000000..094c805a103baf70d49d1f4d59dc2cd4624901c3 GIT binary patch literal 1668 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpf-Cc!5{ru&7}yyYm_UMZ ze5`C7Vhl`d93UPhkYizB47}9w-j3rVSZ$ZS*&%gk}xBvjb4KEu2 literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/bass1.fui b/instruments/FM/bass/bass1.fui new file mode 100644 index 0000000000000000000000000000000000000000..e4b6c127c1957b0c7e9ce76dc32481d921f65dc5 GIT binary patch literal 1665 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpoDz$RflMYK1Oj)HVi@rB3l0IXlNlHpoDz$R6^s}dSeO`?Kw|P7 z%*_1CKt70r1&FaQGIFajFfe100}1hRGqLb%Gcd5>kQe7<;^YU~#EM;>pMl8%=qd&V z4k!jvNI)KmO_2GY0KjGdx)zXA$OY(T5#mGaACuBZM we$*b+5P*dXun=YqU_HRd0Fq`)HVi@rB3l0IXlNlHpoDz$R6^wx#CLja?c~%x? zelZ3HRuBgZkmq4!VU;ByuZ%?_R7jqSiGv?(6IM0+3``C{S1~YfKrxU)0`f>~g3SK} z05${AwSb&LEc{UO<8(n@R*oE%r;m#+NPAT<2A@gDKqxPVN04!X9g)nOX k>j6dvkTin=GeR5(3)L9Xc{q$EQW$SR#Lv&b0K&Kc06nEH6aWAK literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/bass4.fui b/instruments/FM/bass/bass4.fui new file mode 100644 index 0000000000000000000000000000000000000000..ff36a2dc070221579ce1ade33d26d4146ec48041 GIT binary patch literal 1667 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpoDz$R6-*cySeO`?Kw|P7 z%*_1CKt70r1xT|nGIFajFfe100|`lUGqLb%Gcd5>lILXN)HVi@rB3l0IXlNlHpoDz$R6-*fzSeO`?Kw|P7 z%uM`pKt70r1xT|nGIImvnX$-$grvEdnE6#07}#*hb272<18ri(F3-=v)HVi@rB3l0IXlNlHpoDz$R6^s}d*qIoZKw@$n z%*_0%3=AwF4i+HI!pO+2#K6FeMGhn+!_CCPug<{0hC^P8lZlfbXcH@Td42{a2cWAM z7&xF9NFf1vBsM|je*yrT0q9ylP9Ybdn?;BZv4=bx37L&9KN9Rh_w#V)6H2F)`k#>b yF!@n?P(uI~F2F*VHGuU1BLhg9K>=3@icpSf4Cy?CN#wBb7DW8~3=ANQ3jhEDRxUIE literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/opm_nestri.fui b/instruments/FM/bass/opm_nestri.fui new file mode 100644 index 0000000000000000000000000000000000000000..2b0ac741413adf308774a85b26ce90dc82fdcc3a GIT binary patch literal 1683 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHp%2JCef$9>IlS_*dOHvi` zQh{1B85r0Z7??n6#^A{|T87 xlOMGQH3VSc0xXnS16U6*GJvER6qpg>I9RC0kj}$lERn)^3nG4CAr8X0002yyH532< literal 0 HcmV?d00001 diff --git a/instruments/FM/bass/tarylbass1.fui b/instruments/FM/bass/tarylbass1.fui new file mode 100644 index 0000000000000000000000000000000000000000..f3b5921310daddb730c3a5ec69667a0ef0e097cf GIT binary patch literal 1665 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpoDz$RflMYK1Oj66IM0+3``C{H!(19KrxU)0`f>~g3SK} z05${AwSb&LEc{UO<8(n@R*oE%r;m#+NPAT<2A@gDKqxPVN04!X9MKEgs k>j6dvkTin=GeR5(3)L9Xc{q$EQW$SR#Lv&b0K&Kc0CsRK&j0`b literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/Drum.fui b/instruments/FM/drums/Drum.fui new file mode 100644 index 0000000000000000000000000000000000000000..fdc6b4fdd8dd879eda3e2b0d247cf68214e34b51 GIT binary patch literal 1632 zcmdOOD=o@POioqE%quP_($fuLU|>)HVi@rB3kC@>gfK8NxD=J)HVi@rB3l0IXBN!MNJV8oIb5rw56pR^ISs56Z zKr-?o{QQg@3=Hh@ARZ===VIdE2MV)eN`Xb>xfnV5h4IL90_E#*%JVZYIRM?pzyNdt z7y~IJfWuKpDv+4}2>>Lea3;DIkW8>8h~r?P8bdk{hp|Ko<12^&nmsWd literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/fmclap.fui b/instruments/FM/drums/fmclap.fui new file mode 100644 index 0000000000000000000000000000000000000000..be58200163ede9fe8b54491277deb7c9c7df5281 GIT binary patch literal 1649 zcmdOOD=o@POioqE%quP_($kG#U|>)HVi@rB3l0IXBN!MN(sGk?5(^j@*clj@Kw|PB zLXa6mVg>RH91Q%@K&4=Xm`dbD z-Q9%v$o{G?sVAg-xXBYrsFeDbkohqAQF~BB02VI5GMP1i^#CKdd}2_*mFf}7QH>#; MhcJm87QV6w02EFy-v9sr literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/fmclap2.fui b/instruments/FM/drums/fmclap2.fui new file mode 100644 index 0000000000000000000000000000000000000000..5b399793d87124c4257bdfc836f4506483e87b5c GIT binary patch literal 1655 zcmdOOD=o@POioqE%quP_($kG#U|>)HVi@rB3l0IXBN!MNJV8oIb5rw56igVH*%=s^ zKr-?SO#J*DObo0b4i+HKz`)Nh#!Nt-5sOZUkUT#S;FM+HXJB#wx{ZN>1B!tZ5&+tc z0L%y`R@Q$40HmoNh)bX}h>r}=wd3{_vM%gwbh8NYA*PULBO$ZV<%zKiS6HK)MTk#~ zUD!jAfq{_O=<>*R#iiw-OAmKGu3&_TQ|f=1IfUp@dr(6F5nc+c0jviY!ReYo0ap$~ RC`UDhbRNPaa#;AvA^;NmGcy1H literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/fmhat.fui b/instruments/FM/drums/fmhat.fui new file mode 100644 index 0000000000000000000000000000000000000000..f26b7fe46b16032608136b728c8ea572334e4296 GIT binary patch literal 1640 zcmdOOD=o@POioqE%quP_($kG#U|>)HVi@rB3l0IXBN!MNJV8oIb5rw56igTx*clj@ zKr-?S4E+2I%nYm`4i*5Gmmnao%7{fLL`YtkA80;Kz|X+s0CXDz0|yiXDI@^2op|t{ z0KjGvx)$6X!KNEk4Bae3e28xHY$Rkhy8KA63*FDdosXLOFnN^vAJataBBS=8h5#az g6j%dT4=^%-q!|>L5#l&lsK$`a!(l9u!uSdz0B=PwlmGw# literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/fmopenhat.fui b/instruments/FM/drums/fmopenhat.fui new file mode 100644 index 0000000000000000000000000000000000000000..a5198fc0304c333efb39005bbd339b8eb50f14e5 GIT binary patch literal 1640 zcmdOOD=o@POioqE%quP_($kG#U|>)HVi@rB3l0IXBN!MNJV8oIb5rw56igTx*clj@ zKr-?S4E+2I%nYm`4i*5Gmmnao%7{fLL`YtMpPvoHdU`OH literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/idk_something_percussion.fui b/instruments/FM/drums/idk_something_percussion.fui new file mode 100644 index 0000000000000000000000000000000000000000..13380460a9c6b2c104a9bb4b58a5a4383d1a067e GIT binary patch literal 1693 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpg7b4zOENO^(iPJ3ixdh{ zi;_!=i!<}{6iSOz85md?7??mR<;7W<`Ar!ZSV0^tKwgxIky{s!yfh;VKNfv3AqhT4 zPJXaWFcB1*pMl8%=vD>>4k!jvNI)Kmjll$ILk9oR07wp52*ke$6adl409g%)4Kf$q zY-IKL*yv^v;zP_L&o)A4qsxy3yU_hS-1+#@B1n!>{}VDFCO>KqY6!r>1z0?@2CyDr k1V;pe0y9D!2Mg60(s?+HB~lo4U|>)HVi@rB3l0IX{TUb;JV8oIb5rw56igTxSQr?X zKr-?S4E+2+CM$@81wiDPam(|9^fO}72@#U#1IgnAK&u_Vx;cPKK$rsXp8&vSG`bet z9zo~^1|3#_ZWbXv#1LX^#I%l(+351a*e+lILc*{I9RC0kj}$lERn+S!UzD}Rx#cH literal 0 HcmV?d00001 diff --git a/instruments/FM/drums/snareclap_G-2.fui b/instruments/FM/drums/snareclap_G-2.fui new file mode 100644 index 0000000000000000000000000000000000000000..8455de32469e402fd64a7e1a7ec6ff66ee3df9c5 GIT binary patch literal 1455 zcmdOOD=o@POioqE%quP_($n=|U|>)HVi@rB3l0IXJs21nit`eSQj>EM3mBN$85o#A z!tx9Z{QLsU46Hx~HXzRhlotak#U&5Y4>TI5JRd7io`HcKyMBHKCI^si1`a3&QuqKf z9?Abe0P+)v#s*+oe*-0XU>qbGT@NE8$YJCGbh8NYA-0fbA0e~R)HVi@rB3l0IXlNlHp+>7$da~PO_JP>AJ=3r&! zuV-Lj1#z$d78XWkZUNl#91M&s{9;%%LWQ_kf%0IRu&Uu_U~&LDih+Rxih&dokVj$@ zWd0`ruo-}^1>_WR0lHa)_z-)@vyqV5=<*}ME_6Q+cRrzXN~!+|nGcg6wFfl>VBrER ngINPu4=^%-q!|>L5#l&lsK$`a!(l9u!gvcJetrf95XJ=nv(PRi literal 0 HcmV?d00001 diff --git a/instruments/FM/guitar/OPNx_ElectricGuitar.fui b/instruments/FM/guitar/OPNx_ElectricGuitar.fui new file mode 100644 index 0000000000000000000000000000000000000000..8916da6757f06fee1c5b8bc873724ae19962ca31 GIT binary patch literal 1680 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHp`~&3=GWjARZ==X9Ftb1(V2R8cz)HVi@rB3l0IX;}{qjJV8oIb5rw56bu*`SQr?X zKr#{>49pBN3=FIw4i+HA!pO)Vgbihs^V_@Kb zVjzVC)HVi@rB3l0IX6B!s8JV8oIb5rw56bu=d*clj@ zKr(z>jQso(3{1=*4i>;G4wP5JEzc*x&d;xbTV9wAsGkR?JU;`I1JG>@3>;7lq>z9- z5}P3NKLLQv0CX)Nr;rQK%_78y*h8L;gv>^l9|?A$`+2zY38hm?{ZGhznEa?cs38Cg p7hqA$8o+vhkpU#lpn$7{MJPu#hIAgnByw1I3nG4g1_ltu1pw(VF#rGn literal 0 HcmV?d00001 diff --git a/instruments/FM/horn/OPNx_SynthBrass.fui b/instruments/FM/horn/OPNx_SynthBrass.fui new file mode 100644 index 0000000000000000000000000000000000000000..900660133b69f263427234b49991b21e2aad10a8 GIT binary patch literal 1676 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpg1v&{gDdk&GMtJMi;ImI z*jO1DSU{3O%#5sT{0t1tAPyEF&%(&cC5T6!k&%^~1CKmVKMQX2`5BlTfX-uJ02%?t zKne-SBe4lG{}TY%3_#ZcatgTs-7G?Uh&|-lNXTq-`H^53x}S$TpHMob)c=IchslrH ugBk*`Z~>OatO2YC7#Tp)3<|hPScGy^V@T&AOd^Mcw;)HVi@rB3kC@>gfK8NxaMRQEBF_sC+0D*vobKS zfW+lFIanEl7#P?<94tVdlZlOiAD=u6D}yK&jZh(ZPDVBcF`V-J3``C{moYGKKrxU) z0`f>~g3SK}05${AwSb&LEc{UO<8(n@R*oE%r;m#+NPAT<2A@gDKqxPVN l04!X91u<&?>j6dvkTin=GeR5(3)L9Xc{q$EQW#%B1ON**FJk}z literal 0 HcmV?d00001 diff --git a/instruments/FM/keys/OPNx_Piano.fui b/instruments/FM/keys/OPNx_Piano.fui new file mode 100644 index 0000000000000000000000000000000000000000..1db80df880bc40ca8468f6af59e035c44b3e49e1 GIT binary patch literal 1671 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpg1v&{12Ply@=X~SSr{0A zh=D<#gPEOQk%55?#K8jOxtQ4bS+7}@z*8JKYB=VxGY z0J@BUfdh(x6cUg}ViRQkCjhV+fUX7P6mkK&S%mlyd&skqklE<+Bf&0oKM!|4p>#^A z{|T87lOMGQH3VSc0xXDG16U6*GJvER6mXP)2-RS9s78^-Lo$jCCf)HVi@rB3l0IXlNlHp90M{F^YR&(SQr?XKw|Q& zjEs!R49sj`9!LZg$g?stGO95!Gvkn#WaVIFG-6=FB`?O#$O^U#yMBHKCI_Ia7#KL9 z7)T)jc_cPL=6?bJn*r!rKu#eSpqoXA53z?l8wr_>E)HVi@rB3l0IX?HL#u`~!UBT_Vim13Vr5{25qS z7#M(vfkBd!kAqd3fq{(;#KQ!#+>Gpu!VC;d?3i*O5qW+_9ySgJCT33T@-pm;9^D{6x03FA`zyZZTid^uY0KjH0x)zXA$OY(T5#mGaACuBZMe$*b+5P*dXuq)HVi@rB3l0IXlNlHpJV8oIb5rw56bu+xSQr?X zKr-^&jGWxEKn9ox5jC>p{Dhv$Fyr|+Zo;(X97mqLl0~;Gm1eKQOV&vqN2I^-< z6^HWp8JHY^Zew8JfMOtp1muy}1eyN{0Bi=JYXLchT!3yCAwI+&@@ynzHoE*sunXPK z!<|nkol@$5LgvHdN9{ok0a&;Ii(=LQ)&q;)h~F#}i~s!^ozkj)~Ujkh4; L=VxF5VO#(J2nR6* literal 0 HcmV?d00001 diff --git a/instruments/FM/percussion/BellMD.fui b/instruments/FM/percussion/BellMD.fui new file mode 100644 index 0000000000000000000000000000000000000000..8d94d85effb824738c23abdec955e2cd357036b2 GIT binary patch literal 1665 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpoKkag7+BaC7??mJ@(i2| z400eAb|BBd1(pY@#|q@RnAjMx%0LA9xOl^l9|?A$`+2zYk<%VFHl_Z@W+pbVQF~BB01-wC mtO2YC7#Tp)3<}H$aU3jEV@T)WFqTMRyaf?IKLY~@;{pIDc`a@L literal 0 HcmV?d00001 diff --git a/instruments/FM/percussion/ChurchBell.fui b/instruments/FM/percussion/ChurchBell.fui new file mode 100644 index 0000000000000000000000000000000000000000..85a187b18c42ec67324c4d55c703addd877a85f1 GIT binary patch literal 1639 zcmdOOD=o@POioqE%quP_($fuLU|>)HVi@rB3kC@>gfK8NIA@d=C1)r&rRL-?urM$% z0x<)lJO?)mzXFiO3dEQIF3-k>DG3shXJcXJ=KwOW>j%rT1LfJU%kwiZIRKr;zyLA= zgi(P!Di=TRKLLPEH@X&(Q^*DAW)b2;>>)HVi@rB3l0IXlNlHpJV8oIb5rw56bu+x*%=s_ zKr-?o{LH*^3=FIw4i+HK!pO)Zh(}(EgN0uLi$VHD!!{kTp uK@9;|xB!b{)&SN6j0_-Y1_fq>I1U!7F{JZw7)zuu-hzmqpMe2{aRC5)r7-OP literal 0 HcmV?d00001 diff --git a/instruments/FM/percussion/MusicBox.fui b/instruments/FM/percussion/MusicBox.fui new file mode 100644 index 0000000000000000000000000000000000000000..53512b99aeed64580854edd4dd2db1dba361a28a GIT binary patch literal 1673 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpJV8oIb5rw56bu+x*clj@ zKr-_DtZe*Z3=FIw4i+FU%*etWh(}(Kk(Hkhi$VHD!!{kTp uK@9;|xB!b{)&SN6j0_-Y1_fq>I1U!7F{JZw7)zuu-hzmqpMe2{aRC6vaWNwR literal 0 HcmV?d00001 diff --git a/instruments/FM/percussion/OPN_-_Music_Box.fui b/instruments/FM/percussion/OPN_-_Music_Box.fui new file mode 100644 index 0000000000000000000000000000000000000000..7bcda34fba8bb8cee4af783032261396a9fba98c GIT binary patch literal 1670 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpd`pWnlNFruD;OAA7#Ns9 z!tx9(93b_~0$d<21^~;O0Offwq`(653>-{ALl~HOIj|~_=VjsG2gzX9&(FZ*0CX4w z14uWf2|$C12mc8GY$l;=0Xc)HVi@rB3l0IX0~mN2f)X?HlJd(HoKkag7#LU> z7??mZ{H$CIEHVrXtRN01VB}|E=HUm5vodgiWf{@b$a68W@C%^{B5~z889DjEHX#Wj znEVV(4h$eOL8e1&05Zq}{|NwWrlM;>_Z~JqxWv%SBE*N7L!OO<%tn_V33j3TdARd& xr9+rFrT&MRLx>)=2Q>r`;ibSDzE;b!9q2LbRG_4i4=wxL;!^LFarPp literal 0 HcmV?d00001 diff --git a/instruments/FM/percussion/octave_8_bell.fui b/instruments/FM/percussion/octave_8_bell.fui new file mode 100644 index 0000000000000000000000000000000000000000..4dc80b630ba1dac1610355caabe215add0b12839 GIT binary patch literal 1677 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHpqWzOg63bE*EVLDzQgd=* zfx=8c2n6!1EX@333=FIw4i+HK!^FZWi%*`Bg;g1gMyQZH7b6Eh*e0xM_!*cSfbL^p z;DBNvg#_f0*aVsX2>@&cplbm+gw9`bA?WH!3|NU#gt&%>QhD4kO3e?sQN x60r1NkXOQbN~f{34=fdPbZ0RRMTF?0X` literal 0 HcmV?d00001 diff --git a/instruments/FM/powerchord.fui b/instruments/FM/powerchord.fui new file mode 100644 index 0000000000000000000000000000000000000000..40e8ba34c672739d2c271ee63fa5941ac513d968 GIT binary patch literal 1673 zcmdOOD=o@POioqE%quP_($kG)U|>)HVi@rB3l0IXV;LA3JV8oIb5rw56bu+x*%=s^ zKr-^I%>4X<3=FLDARZ==XJO#y2MXhqX8`I4X~U(Tfr+1=6{kEu1Cs;LZ43+?PzO8rmBe3<;G vJ*Xi73m0Hf%o@OYfRO)HVi@rB3l0IXlNlHp`~&t z7+63uteh;Y%wixGcEHNX29{^TF3lj%2Gq}kLlP(~&j!>Fl*gf;pMl8%=r#rh4k!jv zNI)KmO_2GY0KjGdx)zXA$OY(T5#mGaACuBZMe$*b+ t5P*dXuqb8?U_HRd0Fq`)HVi@rB3l0IXlNlHpg1v&{gG-7s^U{qOSlAgD zSU?iOoQ&*@G7Jo?U>-;W6^L*%volIFFfihf7vKi!=foz>=6Xfb{?)14x=dff*r=gN14g={y|95-E(gAmZm|U;trU003*QFZKWc literal 0 HcmV?d00001 diff --git a/instruments/FM/strings/Violin.fui b/instruments/FM/strings/Violin.fui new file mode 100644 index 0000000000000000000000000000000000000000..2a560518c37fa868d9fa822d75a4455e755fb8f2 GIT binary patch literal 1667 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlHp!ZP!7GV>UiSr{0YKw|O? z?9BXH3=FIw4i+HKz{t)mk58VNonIA;MyL=k10yFt*e0xM_!*cSfUaU-;DBNvg#>^W z6A%6q0N6}I*8*}1xd7cPLVSolCZdhdZB8I;GVAgv^J@kJ^J80)HVi@rB3l0IXlNlHpoKtgh@)?-e85o#ALXupJ ztc+?5jLaYo79hjR#Kxq_z{rM04kRSW&C0)HVi@rB3l0IXlNtCJf-+N56`XVOi&Ik=7}yyY zm_QQz3@qIIybKJiAPyG5&&JQq0hENwGomZu=VD~x7eW_B@cB6zIr+ghA;gea{0vME z3?M@}pcqIY0eK`gLFRt~0Gk2mS}^>FO%o0=bh8NYA;yqrBO$ZVqLT zE=;Na;RX?4jM{@50*K&JU=3hBz{miSW>8>8h~r?P8bdk{hp|Ko<1L8z`GHjh5aR*> DT68b- literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3-FakeFalcomGuitar.fui b/instruments/OPL/OPL3-FakeFalcomGuitar.fui new file mode 100644 index 0000000000000000000000000000000000000000..f18286ee4ce03f371e9b08597b51791bc488cf31 GIT binary patch literal 1684 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJQnE^%d?VuB60=j?5_6LC zbKOfbOA?D17}yvXSb%C6IhdK*nIsq(Si!m(8G%Az7L4FzWn^QNgvo;>QRUg07}*(t z`k?@50IEDU&bF!@n?P(uI~E({C`tO2YC7#Tp)3<}H$aU3jE WV@T)WFqTMRyaf?IunY%bTmS&bF*JSv literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3-MajorSquare.fui b/instruments/OPL/OPL3-MajorSquare.fui new file mode 100644 index 0000000000000000000000000000000000000000..e5beed0fc93dfc4d683978487a80e3fa9de662ce GIT binary patch literal 1679 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJQnE^%d?Vt06SMM*f(uI% zi&7bwfl@3Wd43jFc77nu3gR#@Ffy<~7%-BbnT3@H$iXSk#LmnIHVLc)Q$GtE*nFsY z=<@swOb$Rx85lUA7)T)jc_cPL=6?bJn*r!rKu#eSpqoXA53z?l8wr_>E0~! literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3.zip b/instruments/OPL/OPL3.zip new file mode 100644 index 0000000000000000000000000000000000000000..68150232d699ff9dd6d60a4a905d27b58467f52b GIT binary patch literal 4131 zcmb7|eN?KUtmHNHMJ=#otN1X#X4rgt|5l}R!5^m%4kAhe|Kpj!*+tfFe9Pi>FG2v zW}g-~OWPaQniV%vVd;!fU|$)3G#Lj*P5LyEcqER$Op}(-%ARG7tB0NkKs^s+C@;hv z;qUOdx%Ptfi-%)A%$Y;)G7SOlGMJ6RthDea;Cz>w- z&3E^|Sl*>ZYl0ioG|A(kq ztJUjkVX7t8(%EU`4Tt`=emIw%D_M3|n$An@XEw@{4H;B7L+FRB@>`frbus2^#wbwC zHa5pfA6rcsNI`E$DaK(#tLJ*YaAc2sb@LEq3a?bOmFaszoF6|nU82}q;a5UZ_5uiY`ylB$VH z$ap;Oujj_X7^3BotKZ&vo16T@LJQ5pMJRKutyp4l;{LggK8xGU(oM&+90M%d{XV() z31HX*Sip}^ic(#nl9f)5LMqOc8jP1Q#_+E-lx2gG+(9*mExGhAhr`Kbi=gFk0n;1! zLT0pExytLB7jVh&LBTuA|m6cD9aHi~>qq(73n$u`9v+7O8!*;C4 z<{2)h97XRP2F5~tSWqCKyMKoxWFPTGPC z&kykhk1g~6=w7?sXRr;MjcwETm-2R#p0xgxSEY%+?0S;IkH+`nJ^)uPb$!95MuIjmA}k^)V2z@h7EZU+f|)vbL`xZIfq3c6F!EDJQZ2+i(N?wg%G4dA6Tn0T zmoPn5*$-ft;LP4!ST-fE%dc-f<-i-B!66@_^qUz2Ff)F6-1Gy9VFw5+1D6sN1`9e0 z#;1JB<5LG%wqN*NNGD)823S1)kX==%M3ssvKs1#a@?cgCODj>TVx<_sXU)>s1Bwj#RFIqie!A{g|xgEWDaLOil3P4_ANTWUj za32Fm&(d92CQ}yjQk9h-O>&f2M-NLH&p2|#&1Vr{eV$G<+;uwS)SG60l$o(m(^Atg zW4+NoE$?`pesBJMIHKN(4iC$_7xme(Vdxz_`M^z8+jRclzO22Q#KMY8q4vY{nw5c- zqmiKyaCo2pl-!Qac|^2(Gw-%fysz2-oIE6;k@pWL%`jj(Zlhh zObUPY9Hgg>nKpN2mXBs^KB@cnv%Bg73B4~TVbO#^$p)}aZ0)b``1<&ety7n&ih0S( z$tFLR)bxSjR}L`X4&IfdF>vbUI;9rb}1sGV30(8d_bpVppUv zI8&;6_97^S5(Om-i_=y2v#MtyGR+;?>N8KB+($a&%6MJs9N z6T`?8?BR(l{y{--SKYg>vt?-C)_f0z{a-c{VB69>h@1p$;~xLMqP$cwxlqe$GPN|A zuDwcs8|7$Gp@IHHtEts%^&rv4#CB=}lZQEMPOj+Qy|380qkGw#N$NG}YpTPK-g;4~ zCCggb@5Pg+Ig((3j+;(%UD`PlUYeTm_=I7@SO&YbN@6H^-mzlOqqWEkWCiB)PW>va z`VU)K%dsP}r%yxKZ+R*Olak02KX?GN7oT>m=fFRP;FUxn|D_Is+O;>p*Eb_SUQHCH zz3O(DAX?+)METV#-%NTf&EkbbQPC@0NuD4$;;$eIW8N!5C=*39{2fG@$9snx+<{L( zcqLKD@G7rR$CVyW#OsLmxmRZZp8Cdi$BT&;s8^gvpJ1KhuOM1a-YZgk{&!j7)kOa9 zRr99d)o+p$nXFg)Z;$qM%f1=p4kz07xr@>Q~*E>X6R8Ry@&|*SO MpbvlHc?SUf7hPw{MgRZ+ literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3_-_C64_like_sqr_snare.fui b/instruments/OPL/OPL3_-_C64_like_sqr_snare.fui new file mode 100644 index 0000000000000000000000000000000000000000..19d85f5a9ab5c3c841a90cd9afae4fcd380aa7d0 GIT binary patch literal 1704 zcmds2%?^Sv4DOI0G3pXu0L~hG1w5H}F(&u|hH&u00rmZSGi?z_9Rrrg$tF#|cHQ?e z7+bV|6!|61!fSrJ7uzTWfDpa5!!bD%PGJd2ekn2l55S_5goTtC9ZEDNUC}!p%!Dmh znu%2@@P#i+C2fxcYX<^{rj=u07BE~wTP?8sHDDyOMvu@p6~^#oDutj)8pGGuSl2Ug zt_gP6ImdO4BDSDfTaartq6*+VCb&yWq1C1){JiHw(q5OATq$xM6U?<}Tic$D0b&rs zvc0(p!$0*XFSC{Yy4DtuMcqC6fTq{E@#MicLs Q=@{+(2y|1Fw?)U~HyI))tN;K2 literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3_-_PWM_Lead.fui b/instruments/OPL/OPL3_-_PWM_Lead.fui new file mode 100644 index 0000000000000000000000000000000000000000..b4bdf2f2ac847490fb2674f59a323fc93baf1d88 GIT binary patch literal 1734 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJ0>XV2d{Prr7#P?Y7??n! z{0xlz{IU!TtRM~p10zHf!U2)|3{3p|JV^3v2swy6BR`S|BLjYUxIs`oK;s>NmNGDK zKrxU)0`f>~g3SK}05${AwSb&L2sq+UfNmCy4>A+RMy4Ug5Mv{zg~;X*!yXBCF|n|5 zaB=hS@(T)yh>D4cOGrpcfq=A(jI6AjoIDW7fq<-xjFgn5gt(Zfh_H~L06!lOHzx-> zD-+g8A|`N$sv68>g(^a+zfeuX%^S4`H3SeLrNA1%dVmp}Fc}n>5#l&lsK$`a!(l9u P!gxzEeqb#D!ngnc4bd;< literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3_C64_Kick_or_Snare_Start.fui b/instruments/OPL/OPL3_C64_Kick_or_Snare_Start.fui new file mode 100644 index 0000000000000000000000000000000000000000..f3f77153972e315af4a94775fc498c4f03ff9a01 GIT binary patch literal 1690 zcmeHH%MJlC6g?frn=X8SyJUfl53rJm1j+b;Ml3`!ksAN!&uG0St(pcq+~jt8?&&$V zZ6@uG_A(aB6|Li4B70o{fK=XMJdGB5F3>=GFq?O1A;p#^>*a>}6vaZWC`yD(fFh9B zORE9n$N`}S0K0tBv0e*GWd*N1P)IpFt5lS}d9N{>=Vg|EFugAaM=(4$EvcGLGg>Ch zMn_M$)V3sJt1h`wv%P%yB7U!<&)epIp_hH;Z^y>Z=K!Cc-(l%2{ri|VkX{mn^YFl+ YX^?tkJz?6sjy(1rI`bjo9MJhJPWV1F%m4rY literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3_C64_Snare_Carry.fui b/instruments/OPL/OPL3_C64_Snare_Carry.fui new file mode 100644 index 0000000000000000000000000000000000000000..e0c755a3f37af65038af84028fa5e607210dcbb9 GIT binary patch literal 1683 zcmdOOD=o@POioqE%quP_($h_3U|>)HVi@rB3l0IX6B+mzG)(*hG!;UM5(^Z9^Ad|v z6`T``iYgfx*cljDKx#M`*jN~t7#LVV90mqP2!$Xy*x6ZFx#98%2`Gz;iw$TL9AN0@ zXJ=%C%VIM48JHZvmT~~)Ko}LsqjK@{{u2P$bfas*a6dLpIK)HVi@rB3l0IX;~DrEJV8oIb5rw56b!)fEFhAf znVp$Qo`HcCEQCq$voJ6-isF%HW@cuT#ncBA;b&oFV_=5y7#QI!2!o%2$pI|L0px=) zDgZi+c<`S9z-AJ<7IgPv(}PP4-7G?Uh&klhNXTq-`H^53x}S$TA6GhriBsx-m^p;# wQF~BB01;jatO2YC7#Tp)3<`)s5TO8-g=!4xJXF(2<>4)e`1yfV1rXx`0DciLMF0Q* literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL_horn.fui b/instruments/OPL/OPL_horn.fui new file mode 100644 index 0000000000000000000000000000000000000000..38313a62a3f634b1d7a06eb309cc647d6ef79ce4 GIT binary patch literal 1665 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJGV+V^7#P?Y7??mJ989e2 zydn$?tRM~pBN&01P=bS*pPd)ThR7q!K-ltJj4b>@nBp)Ic}_-7ey~k25fqxAfyn`6 zD+31<11TgRkHjX({7(R2GXPx+$SLFkbh8NYA@-1GBO$ZV12Y3inn8gXA&!HEY7FT-9L5qUjJF`-=VxF5VO#(JIlnFN literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_bass_1.fui b/instruments/OPL/opl3_4op_bass_1.fui new file mode 100644 index 0000000000000000000000000000000000000000..bdc01cdf136ea357aa5ff808e6e43c8edef35433 GIT binary patch literal 1667 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJk`jxH6$}{|SQ!{tKw|tX zY-}ttU_OY;2qKUHKMMmJvj`q}HdZzkUAPWR{Y;D;{A@Vo`5BlTz?O0Vm4GlRkVoa> z=lv%Du<1tEg5iE_nsA7rn?;BZF@`)F37L&9KN9Rh_w#V)<4A^ZVM_fEH;4dZ)E?9j rKm?ZpYXIv3Mh1{Hg90-`90v>47}9w-j3rVSZ$ZS*53DMH7#9Elqwp>H literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_bass_2.fui b/instruments/OPL/opl3_4op_bass_2.fui new file mode 100644 index 0000000000000000000000000000000000000000..555cf369bf1441f0bcb231a5ee85733e2f723728 GIT binary patch literal 1667 zcmeHIyAFad6g?MOWU`C9O`LJ?3!F?`jEVjL5(gIs(Esz#v<ZZy~(BLog!!7E30j7X@4N?fZC)HVi@rB3l0IXlNtCJk`jxH6^t1e*cljDKw|uC z%q+|@3=FIw4g&)t0~3S+B^miy7+4rZaLP0Ab1<;50p(%p8DT6a&Ckfd#?J;9WJHta zXJB#wTFSt{0mVQH3CJU{2{Qi^0N4yb*MjCeY+7)Np_@gB4>5>58wr_>EPzg%?Psn_j{HQ&sApi>(U?I#JzE;b!9q2LbRG_4i4?|L5b^T^ Js|p~-1pxLzE!+SA literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_drum_kick.fui b/instruments/OPL/opl3_4op_drum_kick.fui new file mode 100644 index 0000000000000000000000000000000000000000..ed89055b4ba1de25b215e689f79bef52b3f9841a GIT binary patch literal 1822 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJQi@7*6|ysvvl$rJ85meV z!u+f(3>-k36~w^;__>+bc!AiI2m|#^78|$Fd)VS0ASZ+3jhEB literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_drum_power_snare.fui b/instruments/OPL/opl3_4op_drum_power_snare.fui new file mode 100644 index 0000000000000000000000000000000000000000..b351cf3451db2c9be390504e51f70dce92e7a3b1 GIT binary patch literal 1681 zcmeHHOAdlC5PjvNxUomD7r-;PGI3)}^a2D~xDZW|cs*~XGa%t3*oX-W<4el)@uqJw z4UE4`bsU6|I>gCE&;1a9qE%qE-tKrGVv4;^kLrB7Mp`9tpd-Kr99E@mk1dKW69@q& z6-ZA=K|I&-symkBmH7grlJHKtn8>Ws^L<^Huoh$rut&v*7-N=)^2w=PxD#08*aki; zTMjpK=@NRQ>1E=1p?(ET-c5brTGZ6=eKmXjb#D4lzwO`TU+Dij^&2Seg+{Wwac?3U ZN>DU)4XE3E&J6Yj`RxxYX?XJL!ULCPE(!nu literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_drum_snare.fui b/instruments/OPL/opl3_4op_drum_snare.fui new file mode 100644 index 0000000000000000000000000000000000000000..7b3dac7171f316ef0c22c8ae54a502e257aa8580 GIT binary patch literal 1823 zcmd^=KM%n`7{=e0`qP9PEKF{(NSF*ZCW%EPd;uwgL5Je|`8XmXA|fJ!=ZeO)4xyVj z`K9;1cklDuUD~wNm^yaP8t|b#o;c-_MMNCjquJ_o#n_@W^_}U6kL{i_Ac_-3MV&>W z?!XYqlVGMEOQNovkLhMS@ucxqVx*}jVNZJ9T_GfbGWo~eERxh?!8bm?39-EP1y%G^ zKp7N40dSB58IT4haPJe(6ZUZg2e1b_umu~i1}m@x3or+0kpd+tw3jz1wFVMN=!4`c z@SWiY^3sxj@RAPv2T9-s^c8-+0-u~R4aevGcMy(`@)+Jkcs|@{8#9fBAn}N2pgQXB V##d#PzPAD8;AJOc_=f;hTmUf3V{rfg literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_drum_tom.fui b/instruments/OPL/opl3_4op_drum_tom.fui new file mode 100644 index 0000000000000000000000000000000000000000..437facdc12e435e87b2f75f208926ba99b9c1dc4 GIT binary patch literal 1821 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJQi@7*6-x4R8JO4^7+64} z{Hz=dTtJ!?#K8jiIhok_`H|#-8j%4%8xt278?p#0o1cLZRRER8&%opWR>1)j2Vqno zkIa<-a(Iyi(AfV80FZKfGOz_uj|mX#0kIYks{*kC5K98FFc9+rF(?SZ;R&Sw0p0Nj zh<^d`4b16U6*GJp(ZP+*2z bfXl0tTMRK7m-%o9;AG&{396bv7#9El$dF>v literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_growl_synth.fui b/instruments/OPL/opl3_4op_growl_synth.fui new file mode 100644 index 0000000000000000000000000000000000000000..c91745b260f1595589571383be8241d68ceccdaf GIT binary patch literal 1672 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJ(u?xTa}CFAPxfqBM>43Mt-0Y1|cMQWLY4ag_((;Uj{D7$jAg|gBd`3*!a2N zVvMN91I=b~09(lcR06`NKpvHgpZA{tz@{5r3!3w=X~8LmZWbXv#31r)BxE+a{7A41 z-Ot0Fk24`cB`EbjA@gDKqxPVN04!X9B{6FN>j6dvkTin=GeR5(3)L9Xc{q$EQW$SR M#1EoZtWX^kdF& zSLRt1Cp^vWMZO7R09>pF`@`uh^%zUslIX&(Wm-fz-~lrkU_M<0E+8%mQVVq_%)#6d z$tq4&tWuam18=Q-gcuAA#6!@DE43~M-BwL~ValarrJLi{Q$S`&IfS8VGtYedp&Fad z2>QH1Avew(F(!T$V%hKl6M85j literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_piano_bell.fui b/instruments/OPL/opl3_4op_piano_bell.fui new file mode 100644 index 0000000000000000000000000000000000000000..5157820a9d538584939a8c448504108f02500acd GIT binary patch literal 1671 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJ3NjP(@)eR&b8;A%*ccdC zK;pcN%&h#93=GU54g(`2m_j1>nfO@w6!6G1GP3dmO@ioWLN|bspP7Y~p9dz-fNnlN z1Cs+-kOOEZ2%`ddR4#tre*yrTZgef^?!%@Bml(QPg!mA1$g`1<+34~k!7g+^4|hJU zbO;lt)c-JZ2+^bVpoRbf6G;)lTM+T{GcbTK GE&u=p127Z- literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_rhythm_guitar_1.fui b/instruments/OPL/opl3_4op_rhythm_guitar_1.fui new file mode 100644 index 0000000000000000000000000000000000000000..38f02327bdd1f8d0b77079f841487bd4b7543729 GIT binary patch literal 1676 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJiZUuoGIABtOEXInixdnQ z7}yyYSU{5e>`ZLTKo%>A!@$4@gvfxApN)Zyi3drZ8Ce>rpP7M;87L10jHudy@{EjZ z{9G_;G}D373``DSK@Ol25Jm;^s9gNK{{#Rw-RN4-osUfqE-`eo2=O82kY^(yv(e>8 zf?eo-9`1Zx=@2GPssCZ-5TZxzK@9;!cqy<3upVG!07)|_pcR}5Rd5!nF{Jb029d?U OTM+T{1Iub4#svUiNikLc literal 0 HcmV?d00001 diff --git a/instruments/OPL/opl3_4op_rhythm_guitar_2.fui b/instruments/OPL/opl3_4op_rhythm_guitar_2.fui new file mode 100644 index 0000000000000000000000000000000000000000..97c2328877c81b3aeb3c0eef75e72d12f03060fd GIT binary patch literal 1676 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJiZUuoGIABtOEXInixi9) z7}yyYSU{5e>`ZLTKo%>A!@$4@gvfxApN)}?i3g`V13xnZ8#7QI3K&tf1I=e-WaH<8 zNu!w#lxARZ01I*em4GlRkVoa>=lv%Du<1tEg6@25dT@!Mn?;BZF^4=G37L&9KN9Rh z_w#V)<4T7xaZ3FUGlvj8Y7c4%Ai_(5HGuU1BLhg9L4g?|j)R424Cy=^#u6!vw;)HVi@rB3l0IXlNtCJfC@76(u*0GSQr?9h=GBh zfr)`ZjDdj}#9?4yWQ5Q#k`Yy&2~C=Tft`(sjgbqtexN)HLLS|Cko67>AVWEz7)T)j zc_cPL=6?bJn*r!rF#Ly26Am$Svk37a#*k+tA+yotM}l4Geje_89LW$aOsW6j1`%M4 w+JhPbh~RQyTfo-9%m9*RP=J=O2w4mksxhSVFbpI~0B=FW&kw9BfEX750C|Bf)HVi@rB3l0IXlNp#9oXt!Wg7XrKQW+Rn7#Ns9 z!txxf%=}sm46Gmy79h{U$jEJgN1lt3g$yk7#SHrkSu`B zUHHTxmXK!|K6A0jjRd=}`Fl8v5lW<#`kj#ZF!@n?P(uI~F2J&yHGuU1Be>9FPyiKQ Z_yMXhr1S8bPDmDSLB!9`zyQLy001|jEUW+k literal 0 HcmV?d00001 diff --git a/instruments/other/Castanets.fui b/instruments/other/Castanets.fui new file mode 100644 index 0000000000000000000000000000000000000000..a81f93e14d409235b0c9cf070442b0edb8576b41 GIT binary patch literal 1671 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNp#9f-_T66@p7Lld~BZSQr?X zK;rTotjzpc3=FIw4i+HK!pO*NfJdH-k%eCfi$L(Mr?|R6hk+Q5FcVJc{UO<8(n@R*oE%r;m#+N zEGhLrA@gDKqxPVN04!X91u<&?>j6dvkTin=q(nnVVzN+;A)SY5A}Jzx3nG4CsSLun F008guFvb7? literal 0 HcmV?d00001 diff --git a/instruments/other/Closed_Hi-hat.fui b/instruments/other/Closed_Hi-hat.fui new file mode 100644 index 0000000000000000000000000000000000000000..20cc2fced2e71528b3afa477878a1054b5ceddea GIT binary patch literal 1671 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNp#9f-_T66@p7Lld~BZSQr?X zK;rTotjzpc3=FIw4i+HK!pO*NfJdH-k%eCfi$M{0xi?47-_uqCnSyNg|2=1OPT;(6s=qCL5reMTifvh&&q!nT;+#66`|v^Kj=A zN~o0jpOE=5`B8gNLjV>oz=D`Hfb{?)14x=d0aBtNBr#d2#*og#G?5e$yaf?IKLY~@ G;{pH%`7p`= literal 0 HcmV?d00001 diff --git a/instruments/other/FDS-oneofthosejapaneseguitarsidkhowtheyarecalledyeah.fui b/instruments/other/FDS-oneofthosejapaneseguitarsidkhowtheyarecalledyeah.fui new file mode 100644 index 0000000000000000000000000000000000000000..3dc7798a1313666d31723269997c3e410aded147 GIT binary patch literal 1752 zcmeH{-Acni5QWdS2{isKiii|7do5Ia1h0hNNI_p9gxJQ5jU?#{`6RxXp3wx8khrwo zsRurGes*UvOW4`%I=4}rnA8?!el?2$7*cC~cmE)E42{etCVMpHDk~E66g@{ap|M=2 zWt20T+GPQFz(@{+6Mw8P0biURg`QHo*WcuKl&6n+4pyNsP=WsF)VoJxbOXiIq=HLB zVZ+8j)9JC_9Fil3oRc#$C8y+s921%1kZ7_`_DE2{rKN5w8DU#>Yq|W-KHGJ4)$Zp1 zLa*-3zukBJr$3$FRlm;v_i5iieJ^~a{DuFjAZeKKSA4)~m)YDKDC-EzcL~ZaFy_W9QAx&XTvV>GfyRY>*D!ID2`Wp7&BBa$t#@+xrKJQ?fLgrO)H+(LD_(6QY=? zC6%OYB6~(;L?}pN=ADZl>f0RKJ!RuOm2|jc^OMvbORZ~Sl-hG*@sM~iU3o&b?1Hii z1z!!29;Z+a@p%ee@&xf;d5pbv?4qXe2>FtSh&3J{?{gno9F{8-;%akU`U1H!#lv@wD`Z@ug%nQn{%oTEIe}N&U|qG mfRl?B`I@LY=J!e)8&&ZcqWI0oGs}kQ?NXb8oV5jO%JdCrc1fH7 literal 0 HcmV?d00001 diff --git a/instruments/other/FDS-slapassbass.fui b/instruments/other/FDS-slapassbass.fui new file mode 100644 index 0000000000000000000000000000000000000000..058a83265c2c4ac9eb6cd1e4e2824c155aeb29d9 GIT binary patch literal 1677 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCKigOYR5{ru!l7IvQ0}BHK z6G%p$gO!KVJ zffN#uM`EKeL0Ztke(U~$YEzYpI2#i@6 R8Fa&ODCXy9U;trU000niEw%sv literal 0 HcmV?d00001 diff --git a/instruments/other/GBkick.fui b/instruments/other/GBkick.fui new file mode 100644 index 0000000000000000000000000000000000000000..d669277a561674f5e2631e4724858f39b8e1d189 GIT binary patch literal 1759 zcmdOOD=o@POioqE%quP_($h^~U|>)HVi@rB3l0IX6Bw8nvNMyj6*LNR5-SxFOB9@S zO*9!8SQvm3Kp@Y-%FM6Dz`zRPU;*+hjEvj{c;vYlS@?ypXoL#Mb24)BgKfg9hM$4S zfq@Yy#R0`Y3JJ&~vB69>APG{A4g4nnV0!)l)%}3tFF+cEv6%@JMgfeB*i^wx#ZRLc zL<9$78hQ2+VLXbGkzf~!herShe`;i4pfm^wnGcg6wFfl>VBrERtXTtC4={owf#NyVICv2*klHpgAIf11Qj)HVi@rB3l0IX6Bw8nit`eSQWZ1`auO>Q5=#`E zbxkxG7+4s9GC&~D!OG09#lXM{;$Q*tER2lY26*JT7+Ls*uxNw|$#XJt@`G){s)nC| z$$^0pD8&KAKne-SBeB6uHXsR7jt%@L0Fd?k0ICIHm>4!Q(T!td#HI>n0)86ZEJA#U zY2?{Q$ZT}^kzg0PpNBgie`;i4pw$0_%!kR3+JhPbuy6sE)~o@n2N=N-!Jxp*zz&rG t6>!)9%ovb7j7swWIK_I9b`7L8p3S6I{En-7(f^o000MIHfsO? literal 0 HcmV?d00001 diff --git a/instruments/other/Gunshot.fui b/instruments/other/Gunshot.fui new file mode 100644 index 0000000000000000000000000000000000000000..09cb8fb8b96b77fac44d29c3c0427bc773623d12 GIT binary patch literal 1671 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNp#9f-_T66@p7Lld~BZSQr?X zK;rTotjzpc3=FIw4i+HK!pO*NfJdH-k%eCfi$M{0xi?3@3pY2;{*ek;H!j0Gl!BS|HY9Q%P71-7G?Uh>7IcNXTq-`H^53x}S$T zpHPaV)c=IchslrHgBk*`Z~+#?tO2YC7#Tp)3<}H$aU3jEV@T)WFqTMRyaf?IKLY~@ G;{pI}wJ_WO literal 0 HcmV?d00001 diff --git a/instruments/other/NES_0-2-5_arp_lead.fui b/instruments/other/NES_0-2-5_arp_lead.fui new file mode 100644 index 0000000000000000000000000000000000000000..493a167d1fe94bdba6b14b199d86f70099699be2 GIT binary patch literal 1807 zcmeHIO>4t243(Rt%||yw&n@wJ;86y>?=;wD6t+JQ+8hcajI{fI`)8Y8WtJ-@)l{!-uRm8#k|^;%b3qL^reSeYh~ zydg^9cu>Yd6w5$77qOgq9yD8JCNkM&@}7}2x+lS*)R31Wlt(r#*ol}p?!(+{e)a%i z+yojRx1b|R2gl5bp}kJVzGcp~Wx+N$HN4{0@|tZ+$u@wz$l>dRdtD*=DuhxPuGWzM zt@gWoL)vcq9CEoe|93z9H4^=`{vmxEzvMaXfb9$a5R!HBA-Weq3S%#fQ<4t243(Rt%||yw&n@wJ;87U8?=;wD6t+JQ+8hcajI{fI`)8Y8WtJ-@)l{!-uRm8#k|^;%b3qL^reSeYh~ zydg^9cu>Yd6w5$77qOgq9yD8JCNkM&@}7}2x+lS*)R31Wlt(r#*ol}p?!(+{e)a%i z+yojRx1b|R2gl5bp}kJVzGcp~Wx+N$HN4{0@|tZ+$u@v|$l>dRdtD*=DuhxPuGWzM zt@gWoL)vcq9CEoe|93z9H4^=`{vmxEzvMaXfb9$a5R!HBA-Weq3S%gYQ<)HVi@rB3l0IXlNp#9f-_T66@p7Lld~BZSQr?X zK;rTotjzpc3=FIw4i+HK!pO*NfJdH-k%eCfi$M{0xi?40o7;qCnSyNg|2=1OPT;(6s=qCL5reMTifvh&&q!nT;+#66`|v^Kj=A zN~o0jpOE=5`B8gNLjV>oz=D`Hfb{?)14x=d0aBtNBr#d2#*og#G?5e$yaf?IKLY~@ G;{pKRWH9gm literal 0 HcmV?d00001 diff --git a/instruments/other/SMS_0-2-5_arp_lead.fui b/instruments/other/SMS_0-2-5_arp_lead.fui new file mode 100644 index 0000000000000000000000000000000000000000..c21c2d234af101f48d9be3e650582bbf9bd26a7e GIT binary patch literal 1803 zcmeHI%L>9U5Zu^S+xiH2R+_U=5y87B!HWp`14TUuQl#qt`DePT3DyuBtT%OG$ZV$B zNtTktlT(%^tBu&Ehhx@{R{$UoDyFl=k~qx|;$b`zNwyceO|k}X0V?@OM`yq`Uc%do9U5Zu^S+xiH2R+_U=5yZPE!HWp`14TUuQl#qt`DePT3DyuBtT%OG$ZV$B zNtTktlT(%^tBu&Ehhx@{R{$UoDyFl=k~qx|;$b`zNwyceO|k}X0V?@OM`yq`Uc%do)HVi@rB3l0IXlNp#9f-_T66@p7Lld~BZSQr?X zK;rTotjzpc3=FIw4i+HK!pO*NfJdH-k%eCfi$)HVi@rB3l0IXlNsb0f=dfhi;5G=85md?7??n! z@*J$p{8|hQtRM~+AkV_c$Zdc}o{N!%UkHmvsE|A-BPT!DCah}s8JHXx7=cn8Pz literal 0 HcmV?d00001 diff --git a/instruments/other/VERA_0-2-5_arp_lead.fui b/instruments/other/VERA_0-2-5_arp_lead.fui new file mode 100644 index 0000000000000000000000000000000000000000..9f52221b51dd93f15a92e9816ea45b2e9364554e GIT binary patch literal 1699 zcmeHH!3x4K3{AHcoE{3Eysc-UIt0&p61<3@KQQJFf()7ZfBu;^bK;hD9pX)WkhL#K zUzSp$7MCoI;zaJ#(>WWd7yzWUCzh+t7WXj>AXF1Il~Hz-ha}nocmNK@f)01Z5P%~w zAn+LLg_d}id7^JPShxb8`691m%n{(sf$31EFujxzl=gX=s~wn*Msd?XAFd`~Y=$2V z{3C36jKlzXo-t!d!^ygfYPIo)f~mv0Hubb=)A%pcqCI~*r*DGtPy45OP5fV{dIPU} el6=jtEFV-LairN%m3g1p)!U-hK_mnKS`+SUWGwgq literal 0 HcmV?d00001 diff --git a/instruments/other/VERA_0-3-5_arp_lead.fui b/instruments/other/VERA_0-3-5_arp_lead.fui new file mode 100644 index 0000000000000000000000000000000000000000..5f5c61947cd0450e7b2004ad7414adb249e0e3e2 GIT binary patch literal 1699 zcmeHHy$ZrG5WchxSRDdRZp|!23*xMk;39&)K&c%BDN^WWd7yzWUCzh+t7Vj|(AXF1Il~Hz-ha}nocmNK@f)01Z5P%~w zAn+LLg_d}id7^J9EL?%le35rD<_K`+z;vinm_AAfO7}d?)ecNYqqu3H4^I;?Hp7nw z>fp#@BnHrW#*8fum30@@YU2+D(}ZS@!a@n7ggXa06h{|U-JouBG8@qeG{3%uS* e@-@G*d{KeKRb)q1=6z;YZ;M(Nkq`iAO}GPiK`i)HVi@rB3l0IXlNlr!yfc%t85md?7??mJ@*J$p z{8|hQtRM~+AkV_c$Zdc}o{N!%UkHmvsE|A-BPT!DCah}s8JHXx7=cn8Pzoz+#y-fb{?)xR7E{z*hVql!92O W#*ofKHH}mr-hzmqpMe2{aRC4T9V=7- literal 0 HcmV?d00001 diff --git a/instruments/other/VERA_Noise_Snare.fui b/instruments/other/VERA_Noise_Snare.fui new file mode 100644 index 0000000000000000000000000000000000000000..015d9a89e3010ef6f6d3b8793e567541810e7ecd GIT binary patch literal 1698 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNlr!g7XrKQW+Rn7#Ns9Lh>A} z%=}sm46Gmy79h{U$jEJgN1lt3g{Ae4+J1_5RDChtf>HEeIU+*vh9I1%q$oU6oLbEa~OdDE=eK--7G?U zi1FlEN62h+`H^53x}S$TpHT9o)c=IchslrHgBk*`Z~>OltO2YC7{LV=g95hV2cZ literal 0 HcmV?d00001 diff --git a/instruments/other/VIC20_kick.fui b/instruments/other/VIC20_kick.fui new file mode 100644 index 0000000000000000000000000000000000000000..bc49b4626d64caff19160180220985cad8780224 GIT binary patch literal 1705 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNq=evNMyj85md?7??mJ@*J$p z{8|hQtRM~+AkV_c$Zdc}o{N!%UkHmvsE|A-BPT!DCah}s8JHXx7=cn8Pzr$U0yUfC0!XE+7WEk`IVMa_9ivETEGaLCz)zpqoXA z53z$h+X$JBE Date: Sat, 25 Jun 2022 08:08:45 +0700 Subject: [PATCH 148/152] Add new demo song --- demos/traumatic.fur | Bin 0 -> 4732 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/traumatic.fur diff --git a/demos/traumatic.fur b/demos/traumatic.fur new file mode 100644 index 0000000000000000000000000000000000000000..7600b42c30a1e0e6429b4a697fc41932f9f4bdb6 GIT binary patch literal 4732 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 Fe*kNNSrGsL literal 0 HcmV?d00001 From d032f473285447d47a07d0542d91d03370648d97 Mon Sep 17 00:00:00 2001 From: Postbox2 <53163105+host12prog@users.noreply.github.com> Date: Sat, 25 Jun 2022 08:12:22 +0700 Subject: [PATCH 149/152] Delete traumatic.fur --- demos/traumatic.fur | Bin 4732 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 demos/traumatic.fur diff --git a/demos/traumatic.fur b/demos/traumatic.fur deleted file mode 100644 index 7600b42c30a1e0e6429b4a697fc41932f9f4bdb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4732 zcmZ8j2{e>{_qW81Y@;blh)LG0sTdP#C~IS;TU)DCgdT`!XqF)?v;{G zKgF)gqGx|h3FhfX>&#Y9P*iRRByM#!Zx_p%RVbSc7Ymymmbly=m{hsa(CqWAxu6NK zTUnB>fmtG*3o%k}VADScda}kSyW%8Bde7R*Y`~yV&tx}#Hl%ytgx?k>Bu~MD%*o(^ zWLET2Z+%z8j9I!GBKefbCP%cJJ3o+%3A3sZ0*GV4EG96-30Y8sji(L;LNqbFB#(E@ ze)H@M9o&pXM>4H-NWj=SXGrnPiP{zW5N3M7K?4K#Gj0-W2Cz4q!=M=~MB3G4^_!Js zAka={QBSl+8oH&`zxHRWN7sd5i?yZmHv$R;dwjmMK zq;HPA=2mx0U8`7}i>vI81$b?020|x@Wp=cE-fO6A7Gz^*sE4gn+rt$(KXe#N%alvo zX1c7OV+Bi+9ItFsTd2>3Y%QjN#oE1`RBc@~Up(}ha?Eb*+Zna1VE)91;BypgK;g5~ z6-&HWNJZuNxA!dJ!4nFy_vb7&R%Gv^hkEm5ZL2X|eHM9{)%8^YUw#bx7@-1QINtPG zleaAI;dwqUBsc{V8od*1b{yFJfjZn>WnJ^Tb@Kv_HE`E(&5eRn%?}_@0-pL5U%MPo zJ$x>^`|(8iSw8I}%viY&-=<|riS_o^Q-|{=Qf}V;C3Wv9?gyGtgfS`#>Zh*tPOhdA z>}4n1WwwWviLfxa7T#1iS=@(}d76)omWldZYLRqkVUlUmQKV7g`I&x})8}sS!F>FE zAA)aQ-eS#s(br-mm9eHiRi$9Vp6~FMMRh@F4wP&1am;hMLYt3$0Q2$HU*oxb7FmJ^ z&kAh{`py&*g2@mVrEy{ zHMg)Vz<;`4Iz?`*J-Pnz)DHiZ5SF(WmYnk{B$i6;b!^hBL=H;4vwN0K{(3WQy(RVp zssHCyrmA}JM)d|bnHgA|-R$4GF7~E0C#N0-c-8-ctM5)#`VE1&7iY0$vH)-lz$9gB z8ZUD9&@{?pt8-bP-wuNcc;H+3`YXQ}_9Q=IyD+erV>8E-WiNaKUuNZWUB@^klCPof zt-SoL`OWJ(HP*WRd`m9NHx*Hi>GvyoH)}V@ZQ8XjN(=%#zQz?jlkQRpnA_q&VV?-s zI}^9o;GdvJWqf2QJXzG+hYdeJdCOv&IUp(gV)SI62fR9*CtoAV&b$-}cHphy`m&amI^9G_jjm9O zmqR1!EuywPO?O2b)NIA3H%VP_}iu1XIj*H`K{G-%F?i) zZN}eBhSg=gy;dGf?resKzrT{D#qwHNeekpA6KTxDh-~0YyT1oT1K;ew6gkhA(DXqd9RxMY| zlU>h2dj-!u1A&9~(l^`RUkJacFZi23r#%?TZ>H^md|zXY!=C!B5j=-zW7+xvb5_oP zY(Fw_c2|;rS#fT5SDc^4Gd_GKhqNo5;BI@x1JxYZ_8YkltqZPy9nbS|_D4}dk6%OJyIq<`O~wqGNb@4n++Z!snKLLNp(X?AMI_Xd zt$qwBG>~bv&$cP9sL7Nd|W}({rQEKQ(B=;=H^|X)Um^^`TVUo0i1CyrBGO9 zh(>7O>4-KQ=~S#+E7HWT7z?Ou=!YJd9?9HAEt()72V1xV-*qv9I@1jPxMd#?9he@{ zUs%vvtE-9HtompAMDj1R6WE1q_%sM3)O%~#dBt@iZ0hJbp;7)eZPvHv_qT!&gZA)fTODfN2 z4ak;9a?(?&3d-3CP2Gu-N2|nPny_obuav1FAjGzE5TJiaE{sL z*^T9GD12~qN>AkctC;AT?9*H;eB)y+t(0B1Su^|~x5Mi1f@9T@U#02Y{%Z-3d;jJOg9VUJQ z`>ziFFw_UF2bkG%HVk~LNn3IJsTMJBOZ-e_^~y+Cf#d9V16n4Cy%yQWI73R2GFtAr zn<)(pU*dzELEMZ+abrOvpx!_t!VSUKEUc2`*Dj;;fldmq5q}ig@{l5Mh64U~W+IDY%T4*C$ErAhO{>Za(m7noKrVwHEzX z;`TEjt!`k}Z*;S~rOk%CP!Dn*YnuMOvng!pq$z0zTZyqTuuC7IVL=B^tR97-T5%9l z_{cabcgy{BG3^aoiI>yigXdx*XNiJAO#@@ZWqQl3rv?TtJ>>QXz8usdTd026;hXjV znBC&LC`5#2eRmd)>WDuj?*V%+{8~)jSu(=R`H!P7di(GdDD&99!B7dy@9Rzyk`TV@ zhg)CagdlDgrHJW!tdf6u5xcm}FX8U*BY%-qX}Z2??G&~a1n?{BbYfbRkmBz3A)eR6 zp9SQf8JCFZ3ci+1?ngZ8PV~i`lSIOfxzaHydJiN=@0;QtUxU022fYM-O^=lj$9gX; zuErnS)dv>Xd=YpDnma*P;W>rz!>|1IHC@IW0zngYw43n(ppH zF4A@lci6IN$?+l(^u4aIm!RfrtQ4_=9nB!MVIwN{k8u>`+FIjK)znStpx>f6{Fbgf zaoqLG_+)kd{kdzU5N(x3JDmy~blYzRjQ97~(g~q`R=O-Lb(vHR!?B?y!r3o{i z$H(=!u0pT~$d`s2hFrdt>Jk9h9Z7a*7ye$$=L8AIbfML?u}A1qSb`a--2jp#{;!8# zJ8aV^%2px+E^}MpvUJ|L*xok8L+6%7JG#W;-sduegZ^>FmbWNE$21_`CkxE&p=7{@ z!=}$_d*Y!yU_!D}>N?iM#U#f4B^`vd zjmR04R-EH7NELWK3?exc)MWA?%v^$bp}nU6H)Fw8l!n8$ufwcfBj+PFY|F(SE8CRw=F_TIL%uvxx$RzUqW2q5x z#(a$OPRtD$SJjLY=8Wr#=O{NNpqojx>ck%1uCUS<{el)y3&<)7g$()JAs_-Hwtsm? zDG!Y0Q1VoiwVy*JbaGsye(GO>=sEJnwtQP&7&z{`& zC#%lKs8jK3{Xyw}EJ}-yrN=QidT(-!L3Df7CW*bH6bI^_+{Qxa4;HknR%Dge)DhsL z)+OM)`sZmH99V{SH=*#fOJJo={zZKqkK)_O8<+vjWgx}lWal_ie6P1xcq=%Gl){gR zjr_*I6GqM6b7XzD8GPkA?PCnRIZGDctUxF>^4wj#AWp-W0BpO`EVpXx55_NFZ;tB5Do~x z?K05h;g8DRG0o1syze(@Ab8Q$=*JcLPAFD%N`WKL9@s|WSdbq+OW(;zmZ${Ga0KXq z+k!lpZ=-MXtmgE3Tj$HnQ^q*&=vxFtZ3e64H~fLOR-}fgHni=-_44>K_`k~wuGE~u zPknsYeZQvHYq3mPQ3t5-f}l{I9OJrhpRUEBV?8-BLH`@Q=OA0ih(R6Vt4rnaf#Qc) zMV|JaTbW{5s+aV^Qk}`It7wA5JCFpNf4s*Fn;#myH7P~EcUaNy9bia|tHYjVQZ>KN Fe*kNNSrGsL From 0c84824cc6dceb1947d22be68ef4b01bb1eb142f Mon Sep 17 00:00:00 2001 From: Postbox2 <53163105+host12prog@users.noreply.github.com> Date: Sat, 25 Jun 2022 08:12:39 +0700 Subject: [PATCH 150/152] Add new demo song --- demos/atmosphere.fur | Bin 0 -> 4732 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/atmosphere.fur diff --git a/demos/atmosphere.fur b/demos/atmosphere.fur new file mode 100644 index 0000000000000000000000000000000000000000..7600b42c30a1e0e6429b4a697fc41932f9f4bdb6 GIT binary patch literal 4732 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 Fe*kNNSrGsL literal 0 HcmV?d00001 From 50e4428fb3c8d2390a3398e997cca1c1b92370ff Mon Sep 17 00:00:00 2001 From: Postbox2 <53163105+host12prog@users.noreply.github.com> Date: Sat, 25 Jun 2022 08:24:38 +0700 Subject: [PATCH 151/152] Fix grammar a bit --- papers/doc/5-wave/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papers/doc/5-wave/README.md b/papers/doc/5-wave/README.md index 0668c0bf..dacc88ea 100644 --- a/papers/doc/5-wave/README.md +++ b/papers/doc/5-wave/README.md @@ -2,4 +2,4 @@ Wavetable synthizers, in context of Furnace, are sound sources that operate on extremely short n-bit PCM streams. By extremely short, no more than 256 bytes. This amount of space is nowhere near enough to store an actual sampled sound, it allows certain amount of freedom to define a waveform shape. As of Furnace 0.5.8, wavetable editor affects PC Engine, WonderSwan and channel 3 of Game Boy. -Furnace's wavetable editor is rather simple, you can draw the waveform using mouse or by pasting an MML bit stream in the input field. Maximum wave width (length) is 256 bytes, and maximum wave height (depth) is 256. NOTE: Game Boy, PCE, WonderSwan and Bubble System can handle max 32 byte waveforms, X1-010 can handle max 128 byte waveforms as of now, with 16-level height for GB, X1-010 Envelope, WS, Bubble System and N163, and 32-level height for PCE. If larger wave will be defined for these systems, it will be squashed to fit within the constraints of the system. +Furnace's wavetable editor is rather simple, you can draw the waveform using mouse or by pasting an MML bit stream in the input field. Maximum wave width (length) is 256 bytes, and maximum wave height (depth) is 256. NOTE: Game Boy, PCE, WonderSwan and Bubble System can handle max 32 byte waveforms, X1-010 can handle max 128 byte waveforms as of now, with 16-level height for GB, X1-010 Envelope, WS, Bubble System and N163, and 32-level height for PCE. If a larger wave is defined for these systems, it will be squashed to fit within the constraints of the system. From ef5361160636303f15d26784bd766b4c6cbdf766 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Jun 2022 20:28:26 -0500 Subject: [PATCH 152/152] ..... --- instruments/OPL/4op Bass.fui | Bin 0 -> 1669 bytes instruments/OPL/Chorus Organ.fui | Bin 0 -> 1673 bytes instruments/OPL/Closed Hi-hat.fui | Bin 0 -> 1667 bytes instruments/OPL/Crystal.fui | Bin 0 -> 1668 bytes instruments/OPL/DX7 Electric Piano.fui | Bin 0 -> 1679 bytes instruments/OPL/Distortion Guitar.fui | Bin 0 -> 1678 bytes instruments/OPL/Guitar 2.fui | Bin 0 -> 1669 bytes instruments/OPL/Guitar.fui | Bin 0 -> 1667 bytes instruments/OPL/OPL3.zip | Bin 4131 -> 0 bytes instruments/OPL/Open Hi-hat.fui | Bin 0 -> 1672 bytes instruments/OPL/Overdriven Guitar.fui | Bin 0 -> 1693 bytes instruments/OPL/Snare Drum 2.fui | Bin 0 -> 1677 bytes instruments/OPL/Snare Drum.fui | Bin 0 -> 1675 bytes instruments/OPL/Synth Brass.fui | Bin 0 -> 1672 bytes instruments/OPL/Synth Guitar.fui | Bin 0 -> 1673 bytes instruments/OPL/Violin.fui | Bin 0 -> 1667 bytes 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 instruments/OPL/4op Bass.fui create mode 100644 instruments/OPL/Chorus Organ.fui create mode 100644 instruments/OPL/Closed Hi-hat.fui create mode 100644 instruments/OPL/Crystal.fui create mode 100644 instruments/OPL/DX7 Electric Piano.fui create mode 100644 instruments/OPL/Distortion Guitar.fui create mode 100644 instruments/OPL/Guitar 2.fui create mode 100644 instruments/OPL/Guitar.fui delete mode 100644 instruments/OPL/OPL3.zip create mode 100644 instruments/OPL/Open Hi-hat.fui create mode 100644 instruments/OPL/Overdriven Guitar.fui create mode 100644 instruments/OPL/Snare Drum 2.fui create mode 100644 instruments/OPL/Snare Drum.fui create mode 100644 instruments/OPL/Synth Brass.fui create mode 100644 instruments/OPL/Synth Guitar.fui create mode 100644 instruments/OPL/Violin.fui diff --git a/instruments/OPL/4op Bass.fui b/instruments/OPL/4op Bass.fui new file mode 100644 index 0000000000000000000000000000000000000000..0432505d2792d9f1147e5e833908fecd036aaae8 GIT binary patch literal 1669 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJO!5m9oDz$R!E!7hlAn!- zfmxJ+ffX#o#K;Jy5d=Rc0|S!?Or8N4VN@WG%Eiz7PXJ)kjjjd7ao9BA5kohN5FcU`c{UO<8(n@R*oE%r;m*gC6v0xI z`k#>bF!@n?P(uI~F2G`#HGuU1BLhg9K>?)@M5sYxp&COv56LJpn0N~!etuw80mQff E01~P$sQ>@~ literal 0 HcmV?d00001 diff --git a/instruments/OPL/Chorus Organ.fui b/instruments/OPL/Chorus Organ.fui new file mode 100644 index 0000000000000000000000000000000000000000..14a418d00b9fa1a199c33773994f5724d1dad04a GIT binary patch literal 1673 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJoHO!^N{bczi_#PG7?@ZX z7=Va@ffYokLum#EMn)!(00OWwu(Gn4AmkyskmOkySy(yYd`1RFI2+7hWdO<}%tVuA z;AdcR0Bhj@ss>?HAdkw$&-+gRVAGAR1>Jqv^xzUhH;WJ-Vh(vW5;7ZIek9n1?&smo z$CVCY;*|OyW)2~G)E?9jK!le9YXIv3Mh1{Hg90-`90v>47}9w-j3rVSZ$ZS*&%gk} GxBvirRWL*V literal 0 HcmV?d00001 diff --git a/instruments/OPL/Closed Hi-hat.fui b/instruments/OPL/Closed Hi-hat.fui new file mode 100644 index 0000000000000000000000000000000000000000..262678961ee11969df44ddff24b31472a1e33d53 GIT binary patch literal 1667 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJJTi4N5=$5uSQ!|YKw|uC zoJ)HVi@rB3l0IXlNtCJoQo=pOA>P!n1Os2kRT@; zD=RxM0|P6F!@$VM2o?o%zyv!p6AP0tOdcT)WAQVvu<&cbct8`F5Nr^OpP7l3A4!Z6 zO`3tpfdM4O0mVQH3CJU{2{Qi^0N4yb*MjCeY+7)Np_@gB4>5>58wr_>EPzg%?Psn_j{HQ&sApi>(U@6QRz)HVi@rB3l0IXlNtCJTq4XBTys*BONug+6#_C7 z^YR&(m>C#YK=S;IjI8|93=FIw4g(XIL?-x|xLDaVVe-f_5H>$EBRfB)Hn>6p^85@; z4h)Py)f`X^q>z9-5}P3NKLLQv0CX)Nr;rQK%_78y*h8L;gv>^l9|?A$`+2zY38hm? z{ZGhznEa?cs38Cg7hr+R8o+vhkpU#lpa3j!2>?`MNaqnSo`5vof{33VSXBTqE&u?i C5i%$M literal 0 HcmV?d00001 diff --git a/instruments/OPL/Distortion Guitar.fui b/instruments/OPL/Distortion Guitar.fui new file mode 100644 index 0000000000000000000000000000000000000000..8bbe234a82f58add3bee2f72926810d07c4d3413 GIT binary patch literal 1678 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJTr!JG@{39`^YawkOEXIn zix?Q#7#Ns9(j1Ho?ED-I46Gmy5HLb0ILXfdln3%4@=OejK#j;io{N!%UkF(Ql`YT7 z$jJ}32~`}*<7Z%U0NV+40s{!60(n#}e%^lq0Gn=fE$H6IrU#c8x>yL$xBvj=r82Gn literal 0 HcmV?d00001 diff --git a/instruments/OPL/Guitar 2.fui b/instruments/OPL/Guitar 2.fui new file mode 100644 index 0000000000000000000000000000000000000000..78b590cca701d0e538a6b3f50a7312c56552016f GIT binary patch literal 1669 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJ+)Fb{5{nd!z;a9=lAncx ziCK+-ffXzSBp4ZCEHKT-#K_LYj9Xrwi;;z22t^ADN1l_BlOJpoiZG1B&%ors0J4z- zih&dokVj$@Wd0`ruo-}^1=aJ|bl?_4H;WJ-ViI{a5;7ZIek9n1?&smo$DI-(GL-tC zkohqAQF~BB02VI5Vwg36^#CISNSZ+bScnn;sK$`aBVarMX}kpyKR>Xl0AgGK0JfVh A!~g&Q literal 0 HcmV?d00001 diff --git a/instruments/OPL/Guitar.fui b/instruments/OPL/Guitar.fui new file mode 100644 index 0000000000000000000000000000000000000000..09e0c4231696c3eb2bf3a04634cf2d824c860062 GIT binary patch literal 1667 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJ+)Fb{5{noZ*clj@Kw|tH z%B<^*47}9w-j3rVSZ$ZS*53DMH H7#9ElB%>~f literal 0 HcmV?d00001 diff --git a/instruments/OPL/OPL3.zip b/instruments/OPL/OPL3.zip deleted file mode 100644 index 68150232d699ff9dd6d60a4a905d27b58467f52b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4131 zcmb7|eN?KUtmHNHMJ=#otN1X#X4rgt|5l}R!5^m%4kAhe|Kpj!*+tfFe9Pi>FG2v zW}g-~OWPaQniV%vVd;!fU|$)3G#Lj*P5LyEcqER$Op}(-%ARG7tB0NkKs^s+C@;hv z;qUOdx%Ptfi-%)A%$Y;)G7SOlGMJ6RthDea;Cz>w- z&3E^|Sl*>ZYl0ioG|A(kq ztJUjkVX7t8(%EU`4Tt`=emIw%D_M3|n$An@XEw@{4H;B7L+FRB@>`frbus2^#wbwC zHa5pfA6rcsNI`E$DaK(#tLJ*YaAc2sb@LEq3a?bOmFaszoF6|nU82}q;a5UZ_5uiY`ylB$VH z$ap;Oujj_X7^3BotKZ&vo16T@LJQ5pMJRKutyp4l;{LggK8xGU(oM&+90M%d{XV() z31HX*Sip}^ic(#nl9f)5LMqOc8jP1Q#_+E-lx2gG+(9*mExGhAhr`Kbi=gFk0n;1! zLT0pExytLB7jVh&LBTuA|m6cD9aHi~>qq(73n$u`9v+7O8!*;C4 z<{2)h97XRP2F5~tSWqCKyMKoxWFPTGPC z&kykhk1g~6=w7?sXRr;MjcwETm-2R#p0xgxSEY%+?0S;IkH+`nJ^)uPb$!95MuIjmA}k^)V2z@h7EZU+f|)vbL`xZIfq3c6F!EDJQZ2+i(N?wg%G4dA6Tn0T zmoPn5*$-ft;LP4!ST-fE%dc-f<-i-B!66@_^qUz2Ff)F6-1Gy9VFw5+1D6sN1`9e0 z#;1JB<5LG%wqN*NNGD)823S1)kX==%M3ssvKs1#a@?cgCODj>TVx<_sXU)>s1Bwj#RFIqie!A{g|xgEWDaLOil3P4_ANTWUj za32Fm&(d92CQ}yjQk9h-O>&f2M-NLH&p2|#&1Vr{eV$G<+;uwS)SG60l$o(m(^Atg zW4+NoE$?`pesBJMIHKN(4iC$_7xme(Vdxz_`M^z8+jRclzO22Q#KMY8q4vY{nw5c- zqmiKyaCo2pl-!Qac|^2(Gw-%fysz2-oIE6;k@pWL%`jj(Zlhh zObUPY9Hgg>nKpN2mXBs^KB@cnv%Bg73B4~TVbO#^$p)}aZ0)b``1<&ety7n&ih0S( z$tFLR)bxSjR}L`X4&IfdF>vbUI;9rb}1sGV30(8d_bpVppUv zI8&;6_97^S5(Om-i_=y2v#MtyGR+;?>N8KB+($a&%6MJs9N z6T`?8?BR(l{y{--SKYg>vt?-C)_f0z{a-c{VB69>h@1p$;~xLMqP$cwxlqe$GPN|A zuDwcs8|7$Gp@IHHtEts%^&rv4#CB=}lZQEMPOj+Qy|380qkGw#N$NG}YpTPK-g;4~ zCCggb@5Pg+Ig((3j+;(%UD`PlUYeTm_=I7@SO&YbN@6H^-mzlOqqWEkWCiB)PW>va z`VU)K%dsP}r%yxKZ+R*Olak02KX?GN7oT>m=fFRP;FUxn|D_Is+O;>p*Eb_SUQHCH zz3O(DAX?+)METV#-%NTf&EkbbQPC@0NuD4$;;$eIW8N!5C=*39{2fG@$9snx+<{L( zcqLKD@G7rR$CVyW#OsLmxmRZZp8Cdi$BT&;s8^gvpJ1KhuOM1a-YZgk{&!j7)kOa9 zRr99d)o+p$nXFg)Z;$qM%f1=p4kz07xr@>Q~*E>X6R8Ry@&|*SO MpbvlHc?SUf7hPw{MgRZ+ diff --git a/instruments/OPL/Open Hi-hat.fui b/instruments/OPL/Open Hi-hat.fui new file mode 100644 index 0000000000000000000000000000000000000000..22b18f8d60fe36c6618503b3da6e7a8a574dff75 GIT binary patch literal 1672 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJ{0ma^6g)C@GZIS}7+4t? zm_QQzY@A>k$j1tJxY?OmfHDYqMih1OT#PLILMTEg9C=PgPJXZrD8eufKLe8k1IR=U zC)HVi@rB3l0IXlNtCJ{L4~{Qi?LmQu7qtOEXIn zixf}+0|P4q0~1I!J0l}I69>PynbN2!L9cQI*JZF|zOrfhDmL z@|=vE{9v1~O7k-?IWT}s1UdnXffN#uM`9CX{wDyi8Gx<@)pOW%;1)wSix3}T5_vWf zG8)HVi@rB3l0IXlNtCJg7XrKQWac^N^=#A7#P?Y z7??mZ{2ctOAR0`dFhCrjJP#)uh=$8EFoL*nAkW3f!Y>5pVld=689DjEHepDC1o#=4 z9Ka@W068Fx3gl6_3}}|4%KirekO+vz20#wyLDd50p{r#?^&u7=xP{QoBE*N7M4p9& z%tn_V33j3TdARd&r$mShrT!;mK1_bp9@G$kg$uAaW({CHzz8ms7!;Th;y75S#*og# TVJwltcnczaeqebG#JB(e$W1H{ literal 0 HcmV?d00001 diff --git a/instruments/OPL/Snare Drum.fui b/instruments/OPL/Snare Drum.fui new file mode 100644 index 0000000000000000000000000000000000000000..470a78dfcce082de4df275a738d7e0ce2b183548 GIT binary patch literal 1675 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJg7XrKQWac^N^=>Q*cljD zK;rx$D8#_P3gUnO6NG}1{Ort({6G#|o((1gq4~L3P(@f7Q55jAa00DD0$^L=e0~Nd z2L_N14k!jvNI)Km4Q8Smjw<^f2tXnr8XLf+7hNqQE`_MpVdbHlMTieEgggrgnT;+# z66`|v^Kj>5O@v5-l=>gZD7?&3dr(6F5m*YW0jviY!G#io0y9D!2Mg60(s?+HB~ln~ NLBtQN2S6AX004R+D~JF9 literal 0 HcmV?d00001 diff --git a/instruments/OPL/Synth Brass.fui b/instruments/OPL/Synth Brass.fui new file mode 100644 index 0000000000000000000000000000000000000000..0bb75117806979d2d51dac522d87cdb580b225e7 GIT binary patch literal 1672 zcmdOOD=o@POioqE%quP_($h_5U|>)HVi@rB3l0IXlNtCJf-Cb%G8CMO5{ru&m{=GX zfQW&Cot1%|Pk@1e6~tj+U}Ru|FkmDPfKAOn5|CI_$(ND;C^h$49iMI8B`0KjGnx)xN|Vbg(I4Bae3e27Wp*+|H2bor5B z7rLK^J0EvSgve0pe?sQN)HVi@rB3l0IXlNtCJf-Cb%G8EiPGfNVS7#LU> z7??mZe4GqS%*+f7tRN0Zh=~!*f)Tt-Ow4>h4pg3zfelq&o{N!%UkIiela}XX5^68wr_>E(U{TB(z)HVi@rB3l0IXlNtCJ!ZP!7GV>T1SQ!|YKw|8S z%&biEU_Ow?#K^!15=8(uMn*P}LZEsOU}R*0FkqxS7b6S55R8XO%X2bv@`G){lmm+J zGcY-Tt>gf5Ko}JO9Y#F(PXJ&u30(`C@3CpYDTZzqAwI+)@@ynzHoE*sunXPK!<~;a zAwnf6^*47}9w-j3rVSZ$ZS*4=k&J H7#9El`v)#q literal 0 HcmV?d00001

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 diff --git a/demos/ecolove.fur b/demos/ecolove.fur index 9f287ec6111aa5ab1cc09ec19b6382ab8818163c..4fe641c9e29228d90502eae208785ca0f0105550 100644 GIT binary patch literal 57812 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 A0ssI2 literal 57851 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 NbXMy3|3B-z$LQA7Jc$4R delta 19020 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 From ea082b255c914e1ac1127f404c2b58baea2f16bb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 18 Jun 2022 03:52:03 -0500 Subject: [PATCH 094/152] GUI: prepare for drag selection to move --- src/gui/cursor.cpp | 59 ++++++++++++++++++++++++++++++++++++++------ src/gui/editing.cpp | 26 +++++++++++++++++++ src/gui/gui.cpp | 5 ++++ src/gui/gui.h | 10 +++++--- src/gui/settings.cpp | 9 +++++++ 5 files changed, 98 insertions(+), 11 deletions(-) diff --git a/src/gui/cursor.cpp b/src/gui/cursor.cpp index e47dfd62..4b75a26a 100644 --- a/src/gui/cursor.cpp +++ b/src/gui/cursor.cpp @@ -42,6 +42,22 @@ void FurnaceGUI::startSelection(int xCoarse, int xFine, int y, bool fullRow) { return; } } + + if (settings.dragMovesSelection && !fullRow) { + if (xCoarse>=selStart.xCoarse && (xFine>=selStart.xFine || xCoarse>selStart.xCoarse) && y>=selStart.y && + xCoarse<=selEnd.xCoarse && (xFine<=selEnd.xFine || xCoarsecurPat[selEnd.xCoarse].effectCols*2; - selEnd.y=y; + if (dragging) { + dragDestinationX=xCoarse; + dragDestinationY=y; + cursorDrag.xCoarse=xCoarse; + cursorDrag.xFine=xFine; + cursorDrag.y=y; + + selStart.xCoarse=dragStart.xCoarse+(dragDestinationX-dragSourceX); + selStart.xFine=dragStart.xFine; + selStart.y=dragStart.y+(dragDestinationY-dragSourceY); + selEnd.xCoarse=dragEnd.xCoarse+(dragDestinationX-dragSourceX); + selEnd.xFine=dragEnd.xFine; + selEnd.y=dragEnd.y+(dragDestinationY-dragSourceY); } else { - selEnd.xCoarse=xCoarse; - selEnd.xFine=xFine; - selEnd.y=y; + if (selectingFull) { + DETERMINE_LAST; + selEnd.xCoarse=lastChannel-1; + selEnd.xFine=2+e->curPat[selEnd.xCoarse].effectCols*2; + selEnd.y=y; + } else { + selEnd.xCoarse=xCoarse; + selEnd.xFine=xFine; + selEnd.y=y; + } } } @@ -103,6 +134,18 @@ void FurnaceGUI::finishSelection() { selecting=false; selectingFull=false; + if (dragging) { + if (dragSourceX==dragDestinationX && dragSourceY==dragDestinationY) { + cursor=cursorDrag; + selStart=cursorDrag; + selEnd=cursorDrag; + } else { // perform drag + doDrag(); + } + + dragging=false; + } + // boundary check int chanCount=e->getTotalChannelCount(); diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index ef63ab26..2f2757c2 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -918,6 +918,32 @@ void FurnaceGUI::doExpand(int multiplier) { makeUndo(GUI_UNDO_PATTERN_EXPAND); } +// 1. COPY +// 2. CLEAR +// 3. PASTE +void FurnaceGUI::doDrag() { + int iCoarse=selStart.xCoarse; + int iFine=selStart.xFine; + for (; iCoarse<=selEnd.xCoarse; iCoarse++) { + if (!e->curSubSong->chanShow[iCoarse]) continue; + DivPattern* pat=e->curPat[iCoarse].getPattern(e->curOrders->ord[iCoarse][curOrder],true); + for (; iFine<3+e->curPat[iCoarse].effectCols*2 && (iCoarsedata[j][iFine]=0; + if (selStart.y==selEnd.y) pat->data[j][2]=-1; + } + pat->data[j][iFine+1]=(iFine<1)?0:-1; + + if (selStart.y==selEnd.y && iFine>2 && iFine&1 && settings.effectDeletionAltersValue) { + pat->data[j][iFine+2]=-1; + } + } + } + iFine=0; + } +} + void FurnaceGUI::doUndo() { if (undoHist.empty()) return; UndoStep& us=undoHist.back(); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index fd904649..5717f391 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4372,6 +4372,10 @@ FurnaceGUI::FurnaceGUI(): latchTarget(0), wheelX(0), wheelY(0), + dragSourceX(0), + dragSourceY(0), + dragDestinationX(0), + dragDestinationY(0), exportFadeOut(5.0), editControlsOpen(true), ordersOpen(true), @@ -4403,6 +4407,7 @@ FurnaceGUI::FurnaceGUI(): findOpen(false), selecting(false), selectingFull(false), + dragging(false), curNibble(false), orderNibble(false), followOrders(true), diff --git a/src/gui/gui.h b/src/gui/gui.h index 9381bab0..b9a550ed 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1024,6 +1024,7 @@ class FurnaceGUI { int effectValCellSpacing; int doubleClickColumn; int blankIns; + int dragMovesSelection; unsigned int maxUndoSteps; String mainFontPath; String patFontPath; @@ -1124,6 +1125,7 @@ class FurnaceGUI { effectValCellSpacing(0), doubleClickColumn(1), blankIns(0), + dragMovesSelection(1), maxUndoSteps(100), mainFontPath(""), patFontPath(""), @@ -1138,7 +1140,7 @@ class FurnaceGUI { int curIns, curWave, curSample, curOctave, curOrder, prevIns, oldRow, oldOrder, oldOrder1, editStep, exportLoops, soloChan, soloTimeout, orderEditMode, orderCursor; int loopOrder, loopRow, loopEnd, isClipping, extraChannelButtons, patNameTarget, newSongCategory, latchTarget; - int wheelX, wheelY; + int wheelX, wheelY, dragSourceX, dragSourceY, dragDestinationX, dragDestinationY; double exportFadeOut; @@ -1148,8 +1150,8 @@ class FurnaceGUI { bool pianoOpen, notesOpen, channelsOpen, regViewOpen, logOpen, effectListOpen, chanOscOpen; bool subSongsOpen, findOpen; - SelectionPoint selStart, selEnd, cursor; - bool selecting, selectingFull, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI; + SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd; + bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI; bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, lockLayout, editOptsVisible, latchNibble, nonLatchNibble; FurnaceGUIWindows curWindow, nextWindow, curWindowLast; float peak[2]; @@ -1465,6 +1467,7 @@ class FurnaceGUI { void startSelection(int xCoarse, int xFine, int y, bool fullRow=false); void updateSelection(int xCoarse, int xFine, int y, bool fullRow=false); void finishSelection(); + void finishDrag(); void moveCursor(int x, int y, bool select); void moveCursorPrevChannel(bool overflow); @@ -1494,6 +1497,7 @@ class FurnaceGUI { void doRedo(); void doFind(); void doReplace(); + void doDrag(); void editOptions(bool topMenu); void noteInput(int num, int key, int vol=-1); void valueInput(int num, bool direct=false, int target=-1); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index da3b0f27..cae24ec0 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -411,6 +411,11 @@ void FurnaceGUI::drawSettings() { if (ImGui::Checkbox("Double click selects entire column",&doubleClickColumnB)) { settings.doubleClickColumn=doubleClickColumnB; } + + bool dragMovesSelectionB=settings.dragMovesSelection; + if (ImGui::Checkbox("Allow dragging selection",&dragMovesSelectionB)) { + settings.dragMovesSelection=dragMovesSelectionB; + } bool allowEditDockingB=settings.allowEditDocking; if (ImGui::Checkbox("Allow docking editors",&allowEditDockingB)) { @@ -2037,6 +2042,8 @@ void FurnaceGUI::syncSettings() { settings.effectValCellSpacing=e->getConfInt("effectValCellSpacing",0); settings.doubleClickColumn=e->getConfInt("doubleClickColumn",1); settings.blankIns=e->getConfInt("blankIns",0); + // SET TO 1 AFTER YOU ARE DONE + settings.dragMovesSelection=e->getConfInt("dragMovesSelection",0); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); @@ -2121,6 +2128,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.effectValCellSpacing,0,32); clampSetting(settings.doubleClickColumn,0,1); clampSetting(settings.blankIns,0,1); + clampSetting(settings.dragMovesSelection,0,1); settings.initialSys=e->decodeSysDesc(e->getConfString("initialSys","")); if (settings.initialSys.size()<4) { @@ -2254,6 +2262,7 @@ void FurnaceGUI::commitSettings() { e->setConf("effectValCellSpacing",settings.effectValCellSpacing); e->setConf("doubleClickColumn",settings.doubleClickColumn); e->setConf("blankIns",settings.blankIns); + e->setConf("dragMovesSelection",settings.dragMovesSelection); // colors for (int i=0; i Date: Sat, 18 Jun 2022 23:18:34 -0500 Subject: [PATCH 095/152] GUI: add ability to move selection by dragging --- TODO.md | 1 - src/gui/editing.cpp | 84 ++++++++++++++++++++++++++++++++++---------- src/gui/gui.h | 1 + src/gui/settings.cpp | 3 +- 4 files changed, 68 insertions(+), 21 deletions(-) diff --git a/TODO.md b/TODO.md index b0fc02d3..cca5ffdb 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,5 @@ # to-do for 0.6pre1 -- add ability to move selection by dragging - implement Defle slide bug when using E1xy/E2xy and repeating origin note (requires format change) # to-do for 0.6pre2 (as this requires new data structures) diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index 2f2757c2..9bd82795 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -62,6 +62,7 @@ void FurnaceGUI::prepareUndo(ActionType action) { case GUI_UNDO_PATTERN_FLIP: case GUI_UNDO_PATTERN_COLLAPSE: case GUI_UNDO_PATTERN_EXPAND: + case GUI_UNDO_PATTERN_DRAG: for (int i=0; igetTotalChannelCount(); i++) { e->curPat[i].getPattern(e->curOrders->ord[i][curOrder],false)->copyOn(oldPat[i]); } @@ -114,6 +115,7 @@ void FurnaceGUI::makeUndo(ActionType action) { case GUI_UNDO_PATTERN_FLIP: case GUI_UNDO_PATTERN_COLLAPSE: case GUI_UNDO_PATTERN_EXPAND: + case GUI_UNDO_PATTERN_DRAG: for (int i=0; igetTotalChannelCount(); i++) { DivPattern* p=e->curPat[i].getPattern(e->curOrders->ord[i][curOrder],false); for (int j=0; jcurSubSong->patLen; j++) { @@ -918,30 +920,74 @@ void FurnaceGUI::doExpand(int multiplier) { makeUndo(GUI_UNDO_PATTERN_EXPAND); } -// 1. COPY -// 2. CLEAR -// 3. PASTE void FurnaceGUI::doDrag() { - int iCoarse=selStart.xCoarse; - int iFine=selStart.xFine; - for (; iCoarse<=selEnd.xCoarse; iCoarse++) { - if (!e->curSubSong->chanShow[iCoarse]) continue; - DivPattern* pat=e->curPat[iCoarse].getPattern(e->curOrders->ord[iCoarse][curOrder],true); - for (; iFine<3+e->curPat[iCoarse].effectCols*2 && (iCoarsedata[j][iFine]=0; - if (selStart.y==selEnd.y) pat->data[j][2]=-1; - } - pat->data[j][iFine+1]=(iFine<1)?0:-1; + DivPattern* patBuffer=NULL; + int len=dragEnd.xCoarse-dragStart.xCoarse+1; - if (selStart.y==selEnd.y && iFine>2 && iFine&1 && settings.effectDeletionAltersValue) { - pat->data[j][iFine+2]=-1; + DETERMINE_FIRST_LAST; + + if (len<1) return; + + patBuffer=new DivPattern[len]; + prepareUndo(GUI_UNDO_PATTERN_DRAG); + + // copy and clear + { + int iCoarse=dragStart.xCoarse; + int iFine=dragStart.xFine; + int iCoarseP=0; + for (; iCoarse<=dragEnd.xCoarse; iCoarse++) { + if (!e->curSubSong->chanShow[iCoarse]) continue; + DivPattern* pat=e->curPat[iCoarse].getPattern(e->curOrders->ord[iCoarse][curOrder],true); + for (; iFine<3+e->curPat[iCoarse].effectCols*2 && (iCoarsedata[j][iFine]; + pat->data[j][iFine]=0; + if (dragStart.y==dragEnd.y) pat->data[j][2]=-1; + } + patBuffer[iCoarseP].data[row][iFine+1]=pat->data[j][iFine+1]; + pat->data[j][iFine+1]=(iFine<1)?0:-1; + + if (dragStart.y==dragEnd.y && iFine>2 && iFine&1 && settings.effectDeletionAltersValue) { + pat->data[j][iFine+2]=-1; + } + row++; } } + iFine=0; + iCoarseP++; } - iFine=0; } + + // replace + { + int iCoarse=selStart.xCoarse; + int iFine=selStart.xFine; + int iCoarseP=0; + for (; iCoarse<=selEnd.xCoarse && iCoarsePlastChannel) continue; + if (!e->curSubSong->chanShow[iCoarse]) continue; + DivPattern* pat=e->curPat[iCoarse].getPattern(e->curOrders->ord[iCoarse][curOrder],true); + for (; iFine<3+e->curPat[iCoarse].effectCols*2 && (iCoarse=e->curSubSong->patLen) continue; + if (iFine==0) { + pat->data[j][iFine]=patBuffer[iCoarseP].data[row][iFine]; + } + pat->data[j][iFine+1]=patBuffer[iCoarseP].data[row][iFine+1]; + } + } + iFine=0; + iCoarseP++; + } + } + + delete[] patBuffer; + makeUndo(GUI_UNDO_PATTERN_DRAG); } void FurnaceGUI::doUndo() { @@ -973,6 +1019,7 @@ void FurnaceGUI::doUndo() { case GUI_UNDO_PATTERN_FLIP: case GUI_UNDO_PATTERN_COLLAPSE: case GUI_UNDO_PATTERN_EXPAND: + case GUI_UNDO_PATTERN_DRAG: case GUI_UNDO_REPLACE: for (UndoPatternData& i: us.pat) { e->changeSongP(i.subSong); @@ -1024,6 +1071,7 @@ void FurnaceGUI::doRedo() { case GUI_UNDO_PATTERN_FLIP: case GUI_UNDO_PATTERN_COLLAPSE: case GUI_UNDO_PATTERN_EXPAND: + case GUI_UNDO_PATTERN_DRAG: case GUI_UNDO_REPLACE: for (UndoPatternData& i: us.pat) { e->changeSongP(i.subSong); diff --git a/src/gui/gui.h b/src/gui/gui.h index b9a550ed..ac15d5a8 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -567,6 +567,7 @@ enum ActionType { GUI_UNDO_PATTERN_FLIP, GUI_UNDO_PATTERN_COLLAPSE, GUI_UNDO_PATTERN_EXPAND, + GUI_UNDO_PATTERN_DRAG, GUI_UNDO_REPLACE }; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index cae24ec0..a6f45e20 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -2042,8 +2042,7 @@ void FurnaceGUI::syncSettings() { settings.effectValCellSpacing=e->getConfInt("effectValCellSpacing",0); settings.doubleClickColumn=e->getConfInt("doubleClickColumn",1); settings.blankIns=e->getConfInt("blankIns",0); - // SET TO 1 AFTER YOU ARE DONE - settings.dragMovesSelection=e->getConfInt("dragMovesSelection",0); + settings.dragMovesSelection=e->getConfInt("dragMovesSelection",1); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); From 03e31c441e990142702f7fafdb612d435e2b8cf2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 00:11:18 -0500 Subject: [PATCH 096/152] prepare for ins preview in system file picker --- CMakeLists.txt | 4 +- extern/nfd-modified/src/include/nfd.h | 9 ---- .../src/{nfd_cocoa.m => nfd_cocoa.mm} | 6 +++ .../src/{nfd_common.c => nfd_common.cpp} | 0 extern/nfd-modified/src/nfd_common.h | 8 --- .../src/{nfd_gtk.c => nfd_gtk.cpp} | 0 extern/nfd-modified/src/nfd_win.cpp | 1 + .../src/{nfd_zenity.c => nfd_zenity.cpp} | 0 papers/newIns.md | 49 +++++++++++++++++++ 9 files changed, 58 insertions(+), 19 deletions(-) rename extern/nfd-modified/src/{nfd_cocoa.m => nfd_cocoa.mm} (97%) rename extern/nfd-modified/src/{nfd_common.c => nfd_common.cpp} (100%) rename extern/nfd-modified/src/{nfd_gtk.c => nfd_gtk.cpp} (100%) rename extern/nfd-modified/src/{nfd_zenity.c => nfd_zenity.cpp} (100%) create mode 100644 papers/newIns.md diff --git a/CMakeLists.txt b/CMakeLists.txt index 25c3c904..c7c076a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -521,7 +521,7 @@ src/gui/gui.cpp ) if (WIN32 OR APPLE) - list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_common.c) + list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_common.cpp) endif() if (WIN32) @@ -530,7 +530,7 @@ endif() if (APPLE) list(APPEND GUI_SOURCES src/gui/macstuff.m) - list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_cocoa.m) + list(APPEND GUI_SOURCES extern/nfd-modified/src/nfd_cocoa.mm) endif() if (NOT WIN32 AND NOT APPLE) diff --git a/extern/nfd-modified/src/include/nfd.h b/extern/nfd-modified/src/include/nfd.h index 74c92743..c88e4c85 100644 --- a/extern/nfd-modified/src/include/nfd.h +++ b/extern/nfd-modified/src/include/nfd.h @@ -10,10 +10,6 @@ #ifndef _NFD_H #define _NFD_H -#ifdef __cplusplus -extern "C" { -#endif - #include /* denotes UTF-8 char */ @@ -66,9 +62,4 @@ nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathSet, size_t index ); /* Free the pathSet */ void NFD_PathSet_Free( nfdpathset_t *pathSet ); - -#ifdef __cplusplus -} -#endif - #endif diff --git a/extern/nfd-modified/src/nfd_cocoa.m b/extern/nfd-modified/src/nfd_cocoa.mm similarity index 97% rename from extern/nfd-modified/src/nfd_cocoa.m rename to extern/nfd-modified/src/nfd_cocoa.mm index 776152d4..45beab90 100644 --- a/extern/nfd-modified/src/nfd_cocoa.m +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -8,6 +8,12 @@ #include "nfd.h" #include "nfd_common.h" +// this language is a mess! +// who thought it was a good idea to combine Objective-C and C++ together +// when you could just have used C++ and call it a day!!! +// +// might as well make Objective-Ruswift++... + static NSArray *BuildAllowedFileTypes( const char *filterList ) { // Commas and semicolons are the same thing on this platform diff --git a/extern/nfd-modified/src/nfd_common.c b/extern/nfd-modified/src/nfd_common.cpp similarity index 100% rename from extern/nfd-modified/src/nfd_common.c rename to extern/nfd-modified/src/nfd_common.cpp diff --git a/extern/nfd-modified/src/nfd_common.h b/extern/nfd-modified/src/nfd_common.h index 1a9ab162..a1dd74b5 100644 --- a/extern/nfd-modified/src/nfd_common.h +++ b/extern/nfd-modified/src/nfd_common.h @@ -14,10 +14,6 @@ #include -#ifdef __cplusplus -extern "C" { -#endif - #define NFD_MAX_STRLEN 256 #define _NFD_UNUSED(x) ((void)x) @@ -30,10 +26,6 @@ void NFDi_SetError( const char *msg ); int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); int32_t NFDi_UTF8_Strlen( const nfdchar_t *str ); int NFDi_IsFilterSegmentChar( char ch ); - -#ifdef __cplusplus -} -#endif #endif diff --git a/extern/nfd-modified/src/nfd_gtk.c b/extern/nfd-modified/src/nfd_gtk.cpp similarity index 100% rename from extern/nfd-modified/src/nfd_gtk.c rename to extern/nfd-modified/src/nfd_gtk.cpp diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp index 949da2b5..9ef6446b 100644 --- a/extern/nfd-modified/src/nfd_win.cpp +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -423,6 +423,7 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, } // Show the dialog. + // TODO: pass the Furnace window here result = fileOpenDialog->Show(NULL); if ( SUCCEEDED(result) ) { diff --git a/extern/nfd-modified/src/nfd_zenity.c b/extern/nfd-modified/src/nfd_zenity.cpp similarity index 100% rename from extern/nfd-modified/src/nfd_zenity.c rename to extern/nfd-modified/src/nfd_zenity.cpp diff --git a/papers/newIns.md b/papers/newIns.md new file mode 100644 index 00000000..fcc5f966 --- /dev/null +++ b/papers/newIns.md @@ -0,0 +1,49 @@ +# possible new Furnace instrument format + +the main issue with Furnace instrument files is that they are too big, even if the instrument is nothing more than the FM setup... + +the aim of this new format is to greatly reduce the size of a resulting instrument. + +``` +size | description +-----|------------------------------------ + 6 | "FURINS" format magic + 2 | format version + 1 | instrument type + ??? | feature bits + 4 | instrument length (if wave/sample bits are on) +``` + +the "feature bits" field is a variable length bitfield. bit 7 in a byte indicates "read one more byte". + +the feature bits are: + +- 0: has wavetables +- 1: has samples +- 2: has name +- 3: FM data +- 4: FM data size (1: 2-op, 0: 4-op) +- 5: FM data includes OPL/OPZ data + - if off, only read an op until ssgEnv. + - if on, read everything else. +- 6: Game Boy data +- 7: (continue in next byte) +- 8: C64 data +- 9: Amiga data +- 10: standard data (macros) +- 11: operator macros +- 12: release points +- 13: op release points +- 14: extended op macros +- 15: (continue in next byte) +- 16: OPL drums mode data +- 17: Amiga sample map data +- 18: Namco 163 data +- 19: extra macros +- 20: FDS data +- 21: OPZ data +- 22: wavetable synth data +- 23: (continue in next byte) +- 24: additional macro modes +- 25: extra C64 data +- 26: MultiPCM data From 52328df8c3a9464b5a041fbb8f56606202de0385 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 01:36:36 -0500 Subject: [PATCH 097/152] GUI: system file picker ins preview! (Windows) --- extern/nfd-modified/src/include/nfd.h | 12 +++- extern/nfd-modified/src/nfd_cocoa.mm | 9 ++- extern/nfd-modified/src/nfd_win.cpp | 97 +++++++++++++++++++++++++-- src/gui/fileDialog.cpp | 4 +- 4 files changed, 108 insertions(+), 14 deletions(-) diff --git a/extern/nfd-modified/src/include/nfd.h b/extern/nfd-modified/src/include/nfd.h index c88e4c85..4e4ddcf7 100644 --- a/extern/nfd-modified/src/include/nfd.h +++ b/extern/nfd-modified/src/include/nfd.h @@ -11,10 +11,13 @@ #define _NFD_H #include +#include /* denotes UTF-8 char */ typedef char nfdchar_t; +typedef std::function nfdselcallback_t; + /* opaque data structure -- see NFD_PathSet_* */ typedef struct { nfdchar_t *buf; @@ -34,17 +37,20 @@ typedef enum { /* single file open dialog */ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdchar_t **outPath ); + nfdchar_t **outPath, + nfdselcallback_t selCallback = NULL ); /* multiple file open dialog */ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdpathset_t *outPaths ); + nfdpathset_t *outPaths, + nfdselcallback_t selCallback = NULL ); /* save dialog */ nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdchar_t **outPath ); + nfdchar_t **outPath, + nfdselcallback_t selCallback = NULL ); /* select folder dialog */ diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index 45beab90..ff952260 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -127,7 +127,8 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdchar_t **outPath ) + nfdchar_t **outPath, + nfdselcallback_t selCallback ) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; @@ -169,7 +170,8 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdpathset_t *outPaths ) + nfdpathset_t *outPaths, + nfdselcallback_t selCallback ) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; @@ -213,7 +215,8 @@ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdchar_t **outPath ) + nfdchar_t **outPath, + nfdselcallback_t selCallback ) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp index 9ef6446b..ea18d72b 100644 --- a/extern/nfd-modified/src/nfd_win.cpp +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -27,6 +27,72 @@ #include #include "nfd_common.h" +// hack I know +#include "../../../src/utfutils.h" + +class NFDWinEvents: public IFileDialogEvents { + nfdselcallback_t selCallback; + size_t refCount; + + virtual ~NFDWinEvents() { + } + public: + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv) { + printf("QueryInterface called DAMN IT\n"); + *ppv=NULL; + return E_NOTIMPL; + } + + IFACEMETHODIMP_(ULONG) AddRef() { + printf("AddRef() called\n"); + return InterlockedIncrement(&refCount); + } + + IFACEMETHODIMP_(ULONG) Release() { + printf("Release() called\n"); + LONG ret=InterlockedDecrement(&refCount); + if (ret==0) { + printf("Destroying the final object.\n"); + delete this; + } + return ret; + } + + IFACEMETHODIMP OnFileOk(IFileDialog*) { return E_NOTIMPL; } + IFACEMETHODIMP OnFolderChange(IFileDialog*) { return E_NOTIMPL; } + IFACEMETHODIMP OnFolderChanging(IFileDialog*, IShellItem*) { return E_NOTIMPL; } + IFACEMETHODIMP OnOverwrite(IFileDialog*, IShellItem*, FDE_OVERWRITE_RESPONSE*) { return E_NOTIMPL; } + IFACEMETHODIMP OnShareViolation(IFileDialog*, IShellItem*, FDE_SHAREVIOLATION_RESPONSE*) { return E_NOTIMPL; } + IFACEMETHODIMP OnTypeChange(IFileDialog*) { return E_NOTIMPL; } + + IFACEMETHODIMP OnSelectionChange(IFileDialog* dialog) { + // Get the file name + ::IShellItem *shellItem(NULL); + HRESULT result = dialog->GetCurrentSelection(&shellItem); + if ( !SUCCEEDED(result) ) + { + printf("failure!\n"); + return S_OK; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + printf("GDN failure!\n"); + shellItem->Release(); + return S_OK; + } + std::string utf8FilePath=utf16To8(filePath); + if (selCallback!=NULL) selCallback(utf8FilePath.c_str()); + printf("I got you for a value of %s\n",utf8FilePath.c_str()); + shellItem->Release(); + return S_OK; + } + NFDWinEvents(nfdselcallback_t callback): + selCallback(callback), + refCount(1) { + } +}; #define COM_INITFLAGS ::COINIT_APARTMENTTHREADED | ::COINIT_DISABLE_OLE1DDE @@ -386,10 +452,13 @@ static nfdresult_t SetDefaultPath( IFileDialog *dialog, const char *defaultPath nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdchar_t **outPath ) + nfdchar_t **outPath, + nfdselcallback_t selCallback ) { nfdresult_t nfdResult = NFD_ERROR; - + NFDWinEvents* winEvents; + bool hasEvents=true; + DWORD eventID=0; HRESULT coResult = COMInit(); if (!COMIsInitialized(coResult)) @@ -420,7 +489,17 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) { goto end; - } + } + + // Pass the callback + winEvents=new NFDWinEvents(selCallback); + if ( !SUCCEEDED(fileOpenDialog->Advise(winEvents,&eventID)) ) { + // error... ignore + hasEvents=false; + winEvents->Release(); + } else { + winEvents->Release(); + } // Show the dialog. // TODO: pass the Furnace window here @@ -467,8 +546,12 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, } end: - if (fileOpenDialog) + if (fileOpenDialog) { + if (hasEvents) { + fileOpenDialog->Unadvise(eventID); + } fileOpenDialog->Release(); + } COMUninit(coResult); @@ -477,7 +560,8 @@ end: nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdpathset_t *outPaths ) + nfdpathset_t *outPaths, + nfdselcallback_t selCallback ) { nfdresult_t nfdResult = NFD_ERROR; @@ -571,7 +655,8 @@ end: nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, - nfdchar_t **outPath ) + nfdchar_t **outPath, + nfdselcallback_t selCallback ) { nfdresult_t nfdResult = NFD_ERROR; diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index c88a0427..5be3bdb1 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -30,9 +30,9 @@ void _nfdThread(const NFDState state, std::atomic* ok, String* result) { nfdresult_t ret=NFD_CANCEL; if (state.isSave) { - ret=NFD_SaveDialog(NULL,state.path.c_str(),&out); + ret=NFD_SaveDialog(NULL,state.path.c_str(),&out,state.clickCallback); } else { - ret=NFD_OpenDialog(NULL,state.path.c_str(),&out); + ret=NFD_OpenDialog(NULL,state.path.c_str(),&out,state.clickCallback); } switch (ret) { From 9b71dae4d92652371438ff503d816bd11f195a9a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 01:39:07 -0500 Subject: [PATCH 098/152] fix macOS build (hopefully) --- extern/nfd-modified/src/nfd_cocoa.mm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index ff952260..ac5fa36c 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -81,7 +81,7 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) assert([urls count]); pathset->count = (size_t)[urls count]; - pathset->indices = NFDi_Malloc( sizeof(size_t)*pathset->count ); + pathset->indices = (size_t*)NFDi_Malloc( sizeof(size_t)*pathset->count ); if ( !pathset->indices ) { return NFD_ERROR; @@ -95,7 +95,7 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) bufsize += [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; } - pathset->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); + pathset->buf = (nfdchar_t*)NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); if ( !pathset->buf ) { return NFD_ERROR; @@ -151,7 +151,7 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, // byte count, not char count size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); - *outPath = NFDi_Malloc( len+1 ); + *outPath = (nfdchar_t*)NFDi_Malloc( len+1 ); if ( !*outPath ) { [pool release]; @@ -238,7 +238,7 @@ nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, size_t byteLen = [url.path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; - *outPath = NFDi_Malloc( byteLen ); + *outPath = (nfdchar_t*)NFDi_Malloc( byteLen ); if ( !*outPath ) { [pool release]; @@ -278,7 +278,7 @@ nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, // byte count, not char count size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); - *outPath = NFDi_Malloc( len+1 ); + *outPath = (nfdchar_t*)NFDi_Malloc( len+1 ); if ( !*outPath ) { [pool release]; From 2313e4fcc358fcf087dbb0279e6c97b9d033aa15 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 14:03:36 -0500 Subject: [PATCH 099/152] GUI: temporarily remove freqs in sample map --- src/gui/insEdit.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 8199767c..df62a87e 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -3006,7 +3006,8 @@ void FurnaceGUI::drawInsEdit() { ImGui::BeginDisabled(ins->amiga.useWave); P(ImGui::Checkbox("Use sample map (does not work yet!)",&ins->amiga.useNoteMap)); if (ins->amiga.useNoteMap) { - if (ImGui::BeginTable("NoteMap",3,ImGuiTableFlags_ScrollY|ImGuiTableFlags_Borders|ImGuiTableFlags_SizingStretchSame)) { + // TODO: frequency map? + if (ImGui::BeginTable("NoteMap",2,ImGuiTableFlags_ScrollY|ImGuiTableFlags_Borders|ImGuiTableFlags_SizingStretchSame)) { ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch); ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch); @@ -3017,8 +3018,8 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextColumn(); ImGui::TableNextColumn(); ImGui::Text("Sample"); - ImGui::TableNextColumn(); - ImGui::Text("Frequency"); + /*ImGui::TableNextColumn(); + ImGui::Text("Frequency");*/ for (int i=0; i<120; i++) { ImGui::TableNextRow(); ImGui::PushID(fmt::sprintf("NM_%d",i).c_str()); @@ -3046,12 +3047,12 @@ void FurnaceGUI::drawInsEdit() { } ImGui::EndCombo(); } - ImGui::TableNextColumn(); + /*ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::InputInt("##SF",&ins->amiga.noteFreq[i],50,500)) { PARAMETER if (ins->amiga.noteFreq[i]<0) ins->amiga.noteFreq[i]=0; if (ins->amiga.noteFreq[i]>262144) ins->amiga.noteFreq[i]=262144; - } + }*/ ImGui::PopID(); } ImGui::EndTable(); From d47c50edaf4182e3cbee1c2d0516d254f9ea2cdb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 18:23:44 -0500 Subject: [PATCH 100/152] GUI: fix drag to move --- src/gui/cursor.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/gui/cursor.cpp b/src/gui/cursor.cpp index 4b75a26a..ee681c77 100644 --- a/src/gui/cursor.cpp +++ b/src/gui/cursor.cpp @@ -91,6 +91,19 @@ void FurnaceGUI::updateSelection(int xCoarse, int xFine, int y, bool fullRow) { cursorDrag.xFine=xFine; cursorDrag.y=y; + int len=dragEnd.xCoarse-dragStart.xCoarse+1; + if (len<0) len=0; + + DETERMINE_FIRST_LAST; + + if (dragStart.xCoarse+(dragDestinationX-dragSourceX)lastChannel) { + + } + selStart.xCoarse=dragStart.xCoarse+(dragDestinationX-dragSourceX); selStart.xFine=dragStart.xFine; selStart.y=dragStart.y+(dragDestinationY-dragSourceY); From 35bc757adfe693c0d8c356fe675bce91203905cc Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 18:51:51 -0500 Subject: [PATCH 101/152] GUI: fix macOS system file picker crash --- extern/nfd-modified/src/nfd_cocoa.mm | 5 +++++ src/gui/fileDialog.cpp | 8 ++++++++ src/gui/fileDialog.h | 5 +++++ src/gui/gui.cpp | 2 ++ 4 files changed, 20 insertions(+) diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index ac5fa36c..8eac6f79 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -18,6 +18,8 @@ static NSArray *BuildAllowedFileTypes( const char *filterList ) { // Commas and semicolons are the same thing on this platform + // like what about THIS INSTEAD! + // NSMutableArray *buildFilterList = NSMutableArray::alloc()->init(); NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; char typebuf[NFD_MAX_STRLEN] = {0}; @@ -32,6 +34,9 @@ static NSArray *BuildAllowedFileTypes( const char *filterList ) ++p_typebuf; *p_typebuf = '\0'; + // or this: NSString::stringWithUTF8String(typebuf); + // buildFilterList->addObject(thisType); + // really? did you have to make this mess?! NSString *thisType = [NSString stringWithUTF8String: typebuf]; [buildFilterList addObject:thisType]; p_typebuf = typebuf; diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index 5be3bdb1..64f9e989 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -67,7 +67,11 @@ bool FurnaceGUIFileDialog::openLoad(String header, std::vector filter, c if (sysDialog) { #ifdef USE_NFD dialogOK=false; +#ifdef NFD_NON_THREADED + _nfdThread(NFDState(false,header,filter,path,clickCallback),&dialogOK,&nfdResult); +#else dialogO=new std::thread(_nfdThread,NFDState(false,header,filter,path,clickCallback),&dialogOK,&nfdResult); +#endif #else dialogO=new pfd::open_file(header,path,filter); #endif @@ -87,7 +91,11 @@ bool FurnaceGUIFileDialog::openSave(String header, std::vector filter, c if (sysDialog) { #ifdef USE_NFD dialogOK=false; +#ifdef NFD_NON_THREADED + _nfdThread(NFDState(true,header,filter,path,NULL),&dialogOK,&nfdResult); +#else dialogS=new std::thread(_nfdThread,NFDState(true,header,filter,path,NULL),&dialogOK,&nfdResult); +#endif #else dialogS=new pfd::save_file(header,path,filter); #endif diff --git a/src/gui/fileDialog.h b/src/gui/fileDialog.h index 6131f56b..6724eb95 100644 --- a/src/gui/fileDialog.h +++ b/src/gui/fileDialog.h @@ -10,6 +10,11 @@ #ifdef USE_NFD #include #include + +#ifdef __APPLE__ +#define NFD_NON_THREADED +#endif + #else namespace pfd { class open_file; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 5717f391..dc45acf4 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3138,6 +3138,7 @@ bool FurnaceGUI::loop() { #endif } +#ifndef NFD_NON_THREADED if (fileDialog->isOpen() && settings.sysFileDialog) { ImGui::OpenPopup("System File Dialog Pending"); } @@ -3150,6 +3151,7 @@ bool FurnaceGUI::loop() { dl->AddRectFilled(ImVec2(0.0f,0.0f),ImVec2(scrW*dpiScale,scrH*dpiScale),ImGui::ColorConvertFloat4ToU32(uiColors[GUI_COLOR_MODAL_BACKDROP])); ImGui::EndPopup(); } +#endif if (fileDialog->render(ImVec2(600.0f*dpiScale,400.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale))) { bool openOpen=false; From d66ff353bae0109162b0fe5af0ec50c1cf855d95 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 19 Jun 2022 19:07:38 -0500 Subject: [PATCH 102/152] GUI: more fixes to drag to move --- src/gui/cursor.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/cursor.cpp b/src/gui/cursor.cpp index ee681c77..19526268 100644 --- a/src/gui/cursor.cpp +++ b/src/gui/cursor.cpp @@ -100,8 +100,16 @@ void FurnaceGUI::updateSelection(int xCoarse, int xFine, int y, bool fullRow) { dragDestinationX=dragSourceX-dragStart.xCoarse; } - if (dragEnd.xCoarse+(dragDestinationX-dragSourceX)>lastChannel) { - + if (dragEnd.xCoarse+(dragDestinationX-dragSourceX)>=lastChannel) { + dragDestinationX=lastChannel-(dragEnd.xCoarse-dragSourceX)-1; + } + + if (dragStart.y+(dragDestinationY-dragSourceY)<0) { + dragDestinationY=dragSourceY-dragStart.y; + } + + if (dragEnd.y+(dragDestinationY-dragSourceY)>=e->curSubSong->patLen) { + dragDestinationY=e->curSubSong->patLen-(dragEnd.y-dragSourceY)-1; } selStart.xCoarse=dragStart.xCoarse+(dragDestinationX-dragSourceX); From 337e2183cd38794d300d91e27b1fd09ac4927448 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 04:55:28 -0500 Subject: [PATCH 103/152] fix build on GCC < 8 --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7c076a2..3d064ac0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -584,7 +584,11 @@ endif() if (NOT MSVC) set(WARNING_FLAGS -Wall -Wextra -Wno-unused-parameter) if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - list(APPEND WARNING_FLAGS -Wno-cast-function-type) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0.0) + # nothing + else() + list(APPEND WARNING_FLAGS -Wno-cast-function-type) + endif() endif() if (WARNINGS_ARE_ERRORS) list(APPEND WARNING_FLAGS -Werror) From 6772159d5f4ffed3f013cc2b89e5a445dec15258 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 04:58:03 -0500 Subject: [PATCH 104/152] one more GCC < 8 fix --- src/engine/platform/sound/ymfm/ymfm_opn.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/sound/ymfm/ymfm_opn.h b/src/engine/platform/sound/ymfm/ymfm_opn.h index 34dc065d..00fd61ad 100644 --- a/src/engine/platform/sound/ymfm/ymfm_opn.h +++ b/src/engine/platform/sound/ymfm/ymfm_opn.h @@ -784,7 +784,7 @@ public: protected: // simulate the DAC discontinuity - constexpr int32_t dac_discontinuity(int32_t value) const { return (value < 0) ? (value - 2) : (value + 3); } + int32_t dac_discontinuity(int32_t value) const { return (value < 0) ? (value - 2) : (value + 3); } // internal state uint16_t m_address; // address register From 60334fb03cfbe47bfe2e278daaa89200a7b5fcf6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 15:20:02 -0500 Subject: [PATCH 105/152] GUI: add spoiler window --- CMakeLists.txt | 1 + src/gui/debugWindow.cpp | 3 +++ src/gui/findReplace.cpp | 19 +++++++++++++++++++ src/gui/gui.cpp | 4 ++++ src/gui/gui.h | 6 ++++-- src/gui/spoiler.cpp | 37 +++++++++++++++++++++++++++++++++++++ 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/gui/spoiler.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d064ac0..74d622be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -510,6 +510,7 @@ src/gui/sampleEdit.cpp src/gui/settings.cpp src/gui/songInfo.cpp src/gui/songNotes.cpp +src/gui/spoiler.cpp src/gui/stats.cpp src/gui/subSongs.cpp src/gui/sysConf.cpp diff --git a/src/gui/debugWindow.cpp b/src/gui/debugWindow.cpp index 7d6d057f..22527a7b 100644 --- a/src/gui/debugWindow.cpp +++ b/src/gui/debugWindow.cpp @@ -369,6 +369,9 @@ void FurnaceGUI::drawDebug() { if (ImGui::Button("Inspect")) { inspectorOpen=!inspectorOpen; } + if (ImGui::Button("Spoiler")) { + spoilerOpen=!spoilerOpen; + } ImGui::TreePop(); } if (ImGui::TreeNode("Performance")) { diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index f16ccd7a..78abce7c 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -1,3 +1,22 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2022 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + #include "gui.h" #include "imgui.h" #include "IconsFontAwesome4.h" diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index dc45acf4..9b37f987 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3006,6 +3006,7 @@ bool FurnaceGUI::loop() { if (ImGui::MenuItem("register view",BIND_FOR(GUI_ACTION_WINDOW_REGISTER_VIEW),regViewOpen)) regViewOpen=!regViewOpen; if (ImGui::MenuItem("log viewer",BIND_FOR(GUI_ACTION_WINDOW_LOG),logOpen)) logOpen=!logOpen; if (ImGui::MenuItem("statistics",BIND_FOR(GUI_ACTION_WINDOW_STATS),statsOpen)) statsOpen=!statsOpen; + if (spoilerOpen) if (ImGui::MenuItem("spoiler",NULL,spoilerOpen)) spoilerOpen=!spoilerOpen; ImGui::EndMenu(); } @@ -4035,6 +4036,7 @@ bool FurnaceGUI::init() { effectListOpen=e->getConfBool("effectListOpen",false); subSongsOpen=e->getConfBool("subSongsOpen",true); findOpen=e->getConfBool("findOpen",false); + spoilerOpen=e->getConfBool("spoilerOpen",false); tempoView=e->getConfBool("tempoView",true); waveHex=e->getConfBool("waveHex",false); @@ -4258,6 +4260,7 @@ bool FurnaceGUI::finish() { e->setConf("effectListOpen",effectListOpen); e->setConf("subSongsOpen",subSongsOpen); e->setConf("findOpen",findOpen); + e->setConf("spoilerOpen",spoilerOpen); // commit last window size e->setConf("lastWindowWidth",scrW); @@ -4407,6 +4410,7 @@ FurnaceGUI::FurnaceGUI(): chanOscOpen(false), subSongsOpen(true), findOpen(false), + spoilerOpen(false), selecting(false), selectingFull(false), dragging(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index ac15d5a8..271b8eaa 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -246,7 +246,8 @@ enum FurnaceGUIWindows { GUI_WINDOW_EFFECT_LIST, GUI_WINDOW_CHAN_OSC, GUI_WINDOW_SUBSONGS, - GUI_WINDOW_FIND + GUI_WINDOW_FIND, + GUI_WINDOW_SPOILER }; enum FurnaceGUIFileDialogs { @@ -1149,7 +1150,7 @@ class FurnaceGUI { bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen; bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; bool pianoOpen, notesOpen, channelsOpen, regViewOpen, logOpen, effectListOpen, chanOscOpen; - bool subSongsOpen, findOpen; + bool subSongsOpen, findOpen, spoilerOpen; SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd; bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI; @@ -1445,6 +1446,7 @@ class FurnaceGUI { void drawEffectList(); void drawSubSongs(); void drawFindReplace(); + void drawSpoiler(); void parseKeybinds(); void promptKey(int which); diff --git a/src/gui/spoiler.cpp b/src/gui/spoiler.cpp new file mode 100644 index 00000000..dc64b14c --- /dev/null +++ b/src/gui/spoiler.cpp @@ -0,0 +1,37 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2022 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "gui.h" +#include "imgui.h" + +void FurnaceGUI::drawSpoiler() { + if (nextWindow==GUI_WINDOW_SPOILER) { + spoilerOpen=true; + ImGui::SetNextWindowFocus(); + nextWindow=GUI_WINDOW_NOTHING; + } + if (!spoilerOpen) return; + if (ImGui::Begin("Spoiler",&spoilerOpen,globalWinFlags|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::PushFont(bigFont); + ImGui::Text("SPOILER"); + ImGui::PopFont(); + } + if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_SPOILER; + ImGui::End(); +} From 57fab1626966c8de64ab6d29f1f7e5ee1593297b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 16:24:14 -0500 Subject: [PATCH 106/152] GUI: add ability to drag to move when holding Ctrl --- src/gui/cursor.cpp | 2 +- src/gui/settings.cpp | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/gui/cursor.cpp b/src/gui/cursor.cpp index 19526268..5a98a78c 100644 --- a/src/gui/cursor.cpp +++ b/src/gui/cursor.cpp @@ -43,7 +43,7 @@ void FurnaceGUI::startSelection(int xCoarse, int xFine, int y, bool fullRow) { } } - if (settings.dragMovesSelection && !fullRow) { + if ((settings.dragMovesSelection==1 || (settings.dragMovesSelection==2 && (ImGui::IsKeyDown(ImGuiKey_LeftCtrl) || ImGui::IsKeyDown(ImGuiKey_RightCtrl)))) && !fullRow) { if (xCoarse>=selStart.xCoarse && (xFine>=selStart.xFine || xCoarse>selStart.xCoarse) && y>=selStart.y && xCoarse<=selEnd.xCoarse && (xFine<=selEnd.xFine || xCoarsegetConfInt("effectValCellSpacing",0); settings.doubleClickColumn=e->getConfInt("doubleClickColumn",1); settings.blankIns=e->getConfInt("blankIns",0); - settings.dragMovesSelection=e->getConfInt("dragMovesSelection",1); + settings.dragMovesSelection=e->getConfInt("dragMovesSelection",2); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); @@ -2127,7 +2133,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.effectValCellSpacing,0,32); clampSetting(settings.doubleClickColumn,0,1); clampSetting(settings.blankIns,0,1); - clampSetting(settings.dragMovesSelection,0,1); + clampSetting(settings.dragMovesSelection,0,2); settings.initialSys=e->decodeSysDesc(e->getConfString("initialSys","")); if (settings.initialSys.size()<4) { From 41135f4a954646f7dfa3e18ac39b0f6443f11bb0 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 21 Jun 2022 06:35:11 +0900 Subject: [PATCH 107/152] Add extended channel 3 preset for here --- src/gui/presets.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 46335227..5fa4d75e 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1910,6 +1910,13 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Seta 1 + FM addon (extended channel 3)", { + DIV_SYSTEM_X1_010, 64, 0, 0, + DIV_SYSTEM_YM2612_EXT, 64, 0, 2, // Discrete YM3438 + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Seta 2", { DIV_SYSTEM_X1_010, 64, 0, 1, From df21621ce7b5b74054e6c4a8bb349e257f7990f5 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 21 Jun 2022 06:36:41 +0900 Subject: [PATCH 108/152] Add drums mode in here, too --- src/gui/presets.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 5fa4d75e..d85865f7 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1972,6 +1972,14 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Dynax/Nakanihon 3rd generation hardware (drums mode)", { + DIV_SYSTEM_AY8910, 64, 0, 0, // AY or YM, optional - 1.79MHz or 3.58MHz; various per game + DIV_SYSTEM_OPLL_DRUMS, 64, 0, 0, + DIV_SYSTEM_MSM6295, 64, 0, 6, // 1.023MHz mostly + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Dynax/Nakanihon Real Break", { DIV_SYSTEM_OPLL, 64, 0, 0, @@ -1979,6 +1987,13 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Dynax/Nakanihon Real Break (drums mode)", { + DIV_SYSTEM_OPLL_DRUMS, 64, 0, 0, + DIV_SYSTEM_YMZ280B, 64, 0, 0, + 0 + } + )); sysCategories.push_back(cat); cat=FurnaceGUISysCategory("DefleMask-compatible","these configurations are compatible with DefleMask.\nselect this if you need to save as .dmf or work with that program."); From b3201853bc5256605d6f1e932df4f36cddd96dcf Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 21 Jun 2022 06:54:18 +0900 Subject: [PATCH 109/152] Fix YM2151 clock in CPS-1 --- src/gui/presets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index d85865f7..67acca82 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1405,7 +1405,7 @@ void FurnaceGUI::initSystemPresets() { )); cat.systems.push_back(FurnaceGUISysDef( "Capcom CPS-1", { - DIV_SYSTEM_YM2151, 64, 0, 2, + DIV_SYSTEM_YM2151, 64, 0, 0, // 3.58MHz DIV_SYSTEM_MSM6295, 64, 0, 0, 0 } From ee709b85c2bbdc7b7e3aedb41c19426852df565b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 18:20:49 -0500 Subject: [PATCH 110/152] Namco WSG: per-channel oscilloscope --- src/engine/platform/namcowsg.cpp | 13 +++++++++---- src/engine/platform/sound/namco.cpp | 9 +++++---- src/engine/platform/sound/namco.h | 3 ++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/engine/platform/namcowsg.cpp b/src/engine/platform/namcowsg.cpp index 1e8ff46d..43136d91 100644 --- a/src/engine/platform/namcowsg.cpp +++ b/src/engine/platform/namcowsg.cpp @@ -164,9 +164,6 @@ const char* DivPlatformNamcoWSG::getEffectName(unsigned char effect) { } void DivPlatformNamcoWSG::acquire(short* bufL, short* bufR, size_t start, size_t len) { - short* buf[2]={ - bufL+start, bufR+start - }; while (!writes.empty()) { QueuedWrite w=writes.front(); switch (devType) { @@ -186,7 +183,15 @@ void DivPlatformNamcoWSG::acquire(short* bufL, short* bufR, size_t start, size_t regPool[w.addr&0x3f]=w.val; writes.pop(); } - namco->sound_stream_update(buf,len); + for (size_t h=start; hsound_stream_update(buf,1); + for (int i=0; idata[oscBuf[i]->needle++]=namco->m_channel_list[i].last_out*chans; + } + } } void DivPlatformNamcoWSG::updateWave(int ch) { diff --git a/src/engine/platform/sound/namco.cpp b/src/engine/platform/sound/namco.cpp index 82141301..811c34ab 100644 --- a/src/engine/platform/sound/namco.cpp +++ b/src/engine/platform/sound/namco.cpp @@ -172,10 +172,11 @@ void namco_audio_device::build_decoded_waveform(uint8_t *rgnbase) /* generate sound by oversampling */ -uint32_t namco_audio_device::namco_update_one(short* buffer, int size, const int16_t *wave, uint32_t counter, uint32_t freq) +uint32_t namco_audio_device::namco_update_one(short* buffer, int size, const int16_t *wave, uint32_t counter, uint32_t freq, int16_t& last_out) { for (int sampindex = 0; sampindex < size; sampindex++) { + last_out=wave[WAVEFORM_POSITION(counter)]; buffer[sampindex]+=wave[WAVEFORM_POSITION(counter)]; counter += freq; } @@ -700,7 +701,7 @@ void namco_audio_device::sound_stream_update(short** outputs, int len) const int16_t *lw = &m_waveform[lv][voice->waveform_select * 32]; /* generate sound into the buffer */ - c = namco_update_one(lmix, len, lw, voice->counter, voice->frequency); + c = namco_update_one(lmix, len, lw, voice->counter, voice->frequency, voice->last_out); } /* only update if we have non-zero right volume */ @@ -709,7 +710,7 @@ void namco_audio_device::sound_stream_update(short** outputs, int len) const int16_t *rw = &m_waveform[rv][voice->waveform_select * 32]; /* generate sound into the buffer */ - c = namco_update_one(rmix, len, rw, voice->counter, voice->frequency); + c = namco_update_one(rmix, len, rw, voice->counter, voice->frequency, voice->last_out); } /* update the counter for this voice */ @@ -789,7 +790,7 @@ void namco_audio_device::sound_stream_update(short** outputs, int len) const int16_t *w = &m_waveform[v][voice->waveform_select * 32]; /* generate sound into buffer and update the counter for this voice */ - voice->counter = namco_update_one(buffer, len, w, voice->counter, voice->frequency); + voice->counter = namco_update_one(buffer, len, w, voice->counter, voice->frequency, voice->last_out); } } } diff --git a/src/engine/platform/sound/namco.h b/src/engine/platform/sound/namco.h index 507eaed2..d3844abc 100644 --- a/src/engine/platform/sound/namco.h +++ b/src/engine/platform/sound/namco.h @@ -31,6 +31,7 @@ public: uint32_t noise_counter; int32_t noise_hold; int32_t waveform_select; + int16_t last_out; }; namco_audio_device(uint32_t clock); @@ -43,7 +44,7 @@ public: void build_decoded_waveform( uint8_t *rgnbase ); void update_namco_waveform(int offset, uint8_t data); - uint32_t namco_update_one(short* buffer, int size, const int16_t *wave, uint32_t counter, uint32_t freq); + uint32_t namco_update_one(short* buffer, int size, const int16_t *wave, uint32_t counter, uint32_t freq, int16_t& last_out); /* waveform region */ uint8_t* m_wave_ptr; From b697694c0d37decee804dd7727213d6fec10b1ed Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 18:41:23 -0500 Subject: [PATCH 111/152] GUI: per-channel osc DC offset centering --- src/gui/chanOsc.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 5bd945f1..964af6f1 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -135,6 +135,9 @@ void FurnaceGUI::drawChanOsc() { waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f)); } } else { + float minLevel=1.0f; + float maxLevel=-1.0f; + float dcOff=0.0f; unsigned short needlePos=buf->needle; if (chanOscWaveCorr) { /* @@ -195,20 +198,32 @@ void FurnaceGUI::drawChanOsc() { needlePos-=displaySize; for (unsigned short i=0; i<512; i++) { - float x=(float)i/512.0f; float y=(float)buf->data[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; - if (y<-0.5f) y=-0.5f; - if (y>0.5f) y=0.5f; - waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y)); + if (minLevel>y) minLevel=y; + if (maxLeveldata[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; if (y<-0.5f) y=-0.5f; if (y>0.5f) y=0.5f; - waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y)); + waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-(y-dcOff))); + } + } else { + needlePos-=displaySize; + for (unsigned short i=0; i<512; i++) { + float y=(float)buf->data[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; + if (minLevel>y) minLevel=y; + if (maxLeveldata[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; + if (y<-0.5f) y=-0.5f; + if (y>0.5f) y=0.5f; + waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-(y-dcOff))); } } } From fd61e0e9f8ccafc55b0d0e25e34101cac6343cd2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 18:48:10 -0500 Subject: [PATCH 112/152] ZX beeper: per-"channel" osc there's only one --- src/engine/platform/zxbeeper.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/zxbeeper.cpp b/src/engine/platform/zxbeeper.cpp index 34265f8a..524d3c11 100644 --- a/src/engine/platform/zxbeeper.cpp +++ b/src/engine/platform/zxbeeper.cpp @@ -59,6 +59,7 @@ void DivPlatformZXBeeper::acquire(short* bufL, short* bufR, size_t start, size_t } o=sampleOut; bufL[h]=o?16384:0; + oscBuf[0]->data[oscBuf[0]->needle++]=o?16384:-16384; continue; } @@ -76,6 +77,7 @@ void DivPlatformZXBeeper::acquire(short* bufL, short* bufR, size_t start, size_t if (++curChan>=6) curChan=0; bufL[h]=o?16384:0; + oscBuf[0]->data[oscBuf[0]->needle++]=o?16384:-16384; } } @@ -256,7 +258,7 @@ DivMacroInt* DivPlatformZXBeeper::getChanMacroInt(int ch) { } DivDispatchOscBuffer* DivPlatformZXBeeper::getOscBuffer(int ch) { - return oscBuf[ch]; + return (ch<1)?oscBuf[ch]:NULL; } unsigned char* DivPlatformZXBeeper::getRegisterPool() { From 5a1a583ab02c5540754667212faded79e6d7e192 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 18:53:39 -0500 Subject: [PATCH 113/152] AY: finally fix unmuting --- src/engine/platform/ay.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index 52ac6e57..07377610 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -489,9 +489,9 @@ void DivPlatformAY8910::muteChannel(int ch, bool mute) { isMuted[ch]=mute; if (isMuted[ch]) { rWrite(0x08+ch,0); - } else if (intellivision && (chan[ch].psgMode&4)) { + } else if (intellivision && (chan[ch].psgMode&4) && chan[ch].active) { rWrite(0x08+ch,(chan[ch].vol&0xc)<<2); - } else { + } else if (chan[ch].active) { rWrite(0x08+ch,(chan[ch].outVol&15)|((chan[ch].psgMode&4)<<2)); } } From 4ca64cc66c46bc78652b778146e0e7ef1e15811f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 18:56:20 -0500 Subject: [PATCH 114/152] GUI: hide hidden channels in per-chan osc --- src/gui/chanOsc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 964af6f1..0626c355 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -81,7 +81,7 @@ void FurnaceGUI::drawChanOsc() { for (int i=0; igetOscBuffer(i); - if (buf!=NULL) { + if (buf!=NULL && e->curSubSong->chanShow[i]) { oscBufs.push_back(buf); oscFFTs.push_back(&chanOscChan[i]); oscChans.push_back(i); From 69ea1d02276aa64b0dd753c3106c2361a96560bd Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 21 Jun 2022 11:06:26 +0900 Subject: [PATCH 115/152] Fix AY8930 unmuting --- src/engine/platform/ay8930.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index a92f185c..0fad4025 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -521,7 +521,7 @@ void DivPlatformAY8930::muteChannel(int ch, bool mute) { isMuted[ch]=mute; if (isMuted[ch]) { rWrite(0x08+ch,0); - } else { + } else if (chan[ch].active) { rWrite(0x08+ch,(chan[ch].outVol&31)|((chan[ch].psgMode&4)<<3)); } } From af4a3598016f44214b10d40967478298552aaa4e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 21:11:03 -0500 Subject: [PATCH 116/152] GUI: make spoiler actually visible --- src/gui/gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 9b37f987..bb33073a 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3100,6 +3100,7 @@ bool FurnaceGUI::loop() { drawSubSongs(); drawFindReplace(); + drawSpoiler(); drawPattern(); drawEditControls(); drawSongInfo(); From e3686c2e3437589f7e4b0a26b2d525a9f1f16bf0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 22:14:16 -0500 Subject: [PATCH 117/152] fix song playing from begin if stopped on last row --- src/engine/engine.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 8ce31a60..e8a766b3 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1431,7 +1431,10 @@ void DivEngine::stop() { freelance=false; playing=false; extValuePresent=false; + endOfSong=false; // what? stepPlay=0; + curOrder=prevOrder; + curRow=prevRow; remainingLoops=-1; sPreview.sample=-1; sPreview.wave=-1; From 6372f279fa1f1c5816c8460d966ed22ec96d9461 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Jun 2022 22:35:34 -0500 Subject: [PATCH 118/152] update to-do list --- TODO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.md b/TODO.md index cca5ffdb..da090151 100644 --- a/TODO.md +++ b/TODO.md @@ -10,3 +10,4 @@ - Game Boy envelope macro/sequence - volume commands should work on Game Boy - ability to customize `OFF`, `===` and `REL` +- stereo separation control for AY From e0bccc8c14137cbc4d2d1567a9000b3dd906dbbd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 21 Jun 2022 18:01:53 -0500 Subject: [PATCH 119/152] GUI: prepare for colors in the per-chan osc --- CMakeLists.txt | 1 + src/gui/chanOsc.cpp | 107 +++++++++++++++++++++++++++++++++---------- src/gui/gradient.cpp | 70 ++++++++++++++++++++++++++++ src/gui/gui.cpp | 6 +++ src/gui/gui.h | 44 +++++++++++++++++- 5 files changed, 204 insertions(+), 24 deletions(-) create mode 100644 src/gui/gradient.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 74d622be..82094ce0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -495,6 +495,7 @@ src/gui/editing.cpp src/gui/editControls.cpp src/gui/effectList.cpp src/gui/findReplace.cpp +src/gui/gradient.cpp src/gui/insEdit.cpp src/gui/log.cpp src/gui/mixer.cpp diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 0626c355..d9d3ddd4 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -34,36 +34,93 @@ void FurnaceGUI::drawChanOsc() { } if (!chanOscOpen) return; ImGui::SetNextWindowSizeConstraints(ImVec2(64.0f*dpiScale,32.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale)); - if (ImGui::Begin("Oscilloscope (per-channel)",&chanOscOpen,globalWinFlags)) { + if (ImGui::Begin("Oscilloscope (per-channel)",&chanOscOpen,globalWinFlags|((chanOscOptions)?0:ImGuiWindowFlags_NoTitleBar))) { bool centerSettingReset=false; - if (ImGui::BeginTable("ChanOscSettings",3)) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("Columns"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::InputInt("##COSColumns",&chanOscCols,1,1)) { - if (chanOscCols<1) chanOscCols=1; - if (chanOscCols>64) chanOscCols=64; + if (chanOscOptions) { + if (ImGui::BeginTable("ChanOscSettings",3)) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("Columns"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##COSColumns",&chanOscCols,1,1)) { + if (chanOscCols<1) chanOscCols=1; + if (chanOscCols>64) chanOscCols=64; + } + + ImGui::TableNextColumn(); + ImGui::Text("Size (ms)"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputFloat("##COSWinSize",&chanOscWindowSize,1.0f,1.0f)) { + if (chanOscWindowSize<1.0f) chanOscWindowSize=1.0f; + if (chanOscWindowSize>50.0f) chanOscWindowSize=50.0f; + } + + ImGui::TableNextColumn(); + if (ImGui::Checkbox("Center waveform",&chanOscWaveCorr)) { + centerSettingReset=true; + } + + ImGui::EndTable(); } - ImGui::TableNextColumn(); - ImGui::Text("Size (ms)"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::InputFloat("##COSWinSize",&chanOscWindowSize,1.0f,1.0f)) { - if (chanOscWindowSize<1.0f) chanOscWindowSize=1.0f; - if (chanOscWindowSize>50.0f) chanOscWindowSize=50.0f; + ImGui::Text("Gradient"); + + if (chanOscGradTex==NULL) { + chanOscGradTex=SDL_CreateTexture(sdlRend,SDL_PIXELFORMAT_ABGR8888,SDL_TEXTUREACCESS_STREAMING,chanOscGrad.width,chanOscGrad.height); + + if (chanOscGradTex==NULL) { + logE("error while creating gradient texture! %s",SDL_GetError()); + } else { + updateChanOscGradTex=true; + } } - ImGui::TableNextColumn(); - if (ImGui::Checkbox("Center waveform",&chanOscWaveCorr)) { - centerSettingReset=true; - } + if (ImGui::BeginTable("ChanOscGradSet",2)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch); - ImGui::EndTable(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (chanOscGradTex!=NULL) { + if (updateChanOscGradTex) { + chanOscGrad.render(); + if (SDL_UpdateTexture(chanOscGradTex,NULL,chanOscGrad.grad.get(),chanOscGrad.width*4)==0) { + updateChanOscGradTex=false; + } else { + logE("error while updating gradient texture! %s",SDL_GetError()); + } + } + + ImGui::ImageButton(chanOscGradTex,ImVec2(400.0f*dpiScale,400.0f*dpiScale)); + ImVec2 gradLeft=ImGui::GetItemRectMin(); + ImVec2 gradSize=ImGui::GetItemRectSize(); + if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) { + chanOscGrad.points.push_back(Gradient2DPoint( + (ImGui::GetMousePos().x-gradLeft.x)/gradSize.x, + (ImGui::GetMousePos().y-gradLeft.y)/gradSize.y + )); + updateChanOscGradTex=true; + logI("a point inserted"); + } + + ImVec2 oldCurPos=ImGui::GetCursorPos(); + for (Gradient2DPoint& i: chanOscGrad.points) { + ImGui::SetCursorPos(ImVec2(gradLeft.x+i.x*gradSize.x,gradLeft.y+i.y*gradSize.y)); + ImGui::Text("Here"); + } + ImGui::SetCursorPos(oldCurPos); + } + + ImGui::TableNextColumn(); + if (ImGui::ColorEdit4("Background",(float*)&chanOscGrad.bgColor)) { + updateChanOscGradTex=true; + } + + ImGui::EndTable(); + } } - ImGui::PushStyleVar(ImGuiStyleVar_CellPadding,ImVec2(0.0f,0.0f)); float availY=ImGui::GetContentRegionAvail().y; @@ -232,6 +289,10 @@ void FurnaceGUI::drawChanOsc() { } } ImGui::EndTable(); + + if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) { + chanOscOptions=!chanOscOptions; + } } ImGui::PopStyleVar(); } diff --git a/src/gui/gradient.cpp b/src/gui/gradient.cpp new file mode 100644 index 00000000..c9b26fb8 --- /dev/null +++ b/src/gui/gradient.cpp @@ -0,0 +1,70 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2022 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "gui.h" +#include "imgui.h" +#include + +void Gradient2D::render() { + ImU32* g=grad.get(); + ImU32 bgColorU=ImGui::ColorConvertFloat4ToU32(bgColor); + + // 1. fill with background color + for (size_t i=0; i=pDistSquared) continue; + + float dist=(1.0-(sqrt(distSquared)/i.distance))-i.spread; + if (dist<0) dist=0; + if (dist>1) dist=1; + + ImU32 shadeColor=ImGui::ColorConvertFloat4ToU32( + ImVec4( + i.color.x*i.color.w*dist, + i.color.y*i.color.w*dist, + i.color.z*i.color.w*dist, + 1.0f + ) + ); + + ImU32 origColor=g[j*width+k]; + g[j*width+k]=( + (MIN( 0xff, (origColor&0xff) + (shadeColor&0xff) )) | // R + (MIN( 0xff00, (origColor&0xff00) + (shadeColor&0xff00) )) | // G + (MIN(0xff0000,(origColor&0xff0000)+(shadeColor&0xff0000))) | // B + (origColor&0xff000000) // A + ); + } + } + } +} \ No newline at end of file diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index bb33073a..fbfc2b4d 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4575,6 +4575,10 @@ FurnaceGUI::FurnaceGUI(): chanOscCols(3), chanOscWindowSize(20.0f), chanOscWaveCorr(true), + chanOscOptions(false), + updateChanOscGradTex(true), + chanOscGrad(64,64), + chanOscGradTex(NULL), followLog(true), #ifdef IS_MOBILE pianoOctaves(7), @@ -4664,4 +4668,6 @@ FurnaceGUI::FurnaceGUI(): memset(queryReplaceEffectVal,0,sizeof(int)*8); memset(queryReplaceEffectDo,0,sizeof(bool)*8); memset(queryReplaceEffectValDo,0,sizeof(bool)*8); + + chanOscGrad.bgColor=ImVec4(0.0f,0.0f,0.0f,1.0f); } diff --git a/src/gui/gui.h b/src/gui/gui.h index 271b8eaa..a538c5ba 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -757,6 +758,45 @@ struct TouchPoint { z(pressure) {} }; +struct Gradient2DPoint { + ImVec4 color; + float x, y; + float spread, distance; + bool selected, grab; + Gradient2DPoint(float xPos, float yPos): + color(1,1,1,1), + x(xPos), + y(yPos), + spread(0.0f), + distance(0.5f), + selected(false), + grab(false) {} + Gradient2DPoint(): + color(1,1,1,1), + x(0.0f), + y(0.0f), + spread(0.0f), + distance(0.5f), + selected(false), + grab(false) {} +}; + +struct Gradient2D { + ImVec4 bgColor; + std::vector points; + std::unique_ptr grad; + size_t width, height; + + void render(); + ImU32 get(float x, float y); + Gradient2D(size_t w, size_t h): + bgColor(0.0f,0.0f,0.0f,0.0f), + width(w), + height(h) { + grad=std::make_unique(width*height); + } +}; + struct FurnaceGUISysDef { const char* name; std::vector definition; @@ -1344,7 +1384,9 @@ class FurnaceGUI { // per-channel oscilloscope int chanOscCols; float chanOscWindowSize; - bool chanOscWaveCorr; + bool chanOscWaveCorr, chanOscOptions, updateChanOscGradTex; + Gradient2D chanOscGrad; + SDL_Texture* chanOscGradTex; float chanOscLP0[DIV_MAX_CHANS]; float chanOscLP1[DIV_MAX_CHANS]; unsigned short lastNeedlePos[DIV_MAX_CHANS]; From 22dd22ca3303a4f8369436b1a7fabb920663c785 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Wed, 22 Jun 2022 19:38:29 +0700 Subject: [PATCH 120/152] Allow accessing all 256 waves in macros --- src/gui/insEdit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index df62a87e..275a34f9 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -3483,7 +3483,7 @@ void FurnaceGUI::drawInsEdit() { } const char* waveLabel="Waveform"; - int waveMax=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930 || ins->type==DIV_INS_VERA)?3:63; + int waveMax=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930 || ins->type==DIV_INS_VERA)?3:255; bool bitMode=false; if (ins->type==DIV_INS_C64 || ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930 || ins->type==DIV_INS_SAA1099) { bitMode=true; @@ -3520,7 +3520,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_X1_010) { dutyMax=0; ex1Max=7; - ex2Max=63; + ex2Max=255; ex2Bit=false; } if (ins->type==DIV_INS_N163) { From 4bf4be1ea26c3da3cc914e29f667a99fc35bdadd Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Wed, 22 Jun 2022 21:55:31 +0700 Subject: [PATCH 121/152] Fix 16-bit samples in YMZ280B VGM export --- src/engine/sample.h | 1 + src/engine/vgmOps.cpp | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/engine/sample.h b/src/engine/sample.h index d9ad633c..70f8418c 100644 --- a/src/engine/sample.h +++ b/src/engine/sample.h @@ -248,6 +248,7 @@ struct DivSample { offQSound(0), offX1_010(0), offSU(0), + offYMZ280B(0), offRF5C68(0), samples(0) {} ~DivSample(); diff --git a/src/engine/vgmOps.cpp b/src/engine/vgmOps.cpp index 6e2bc82c..0d1ad4f5 100644 --- a/src/engine/vgmOps.cpp +++ b/src/engine/vgmOps.cpp @@ -1653,13 +1653,34 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version) { w->write(writeX1010[i]->getSampleMem(),writeX1010[i]->getSampleMemUsage()); } if (writeZ280[i]!=NULL && writeZ280[i]->getSampleMemUsage()>0) { + // In VGM, YMZ280B's 16-bit PCM has an endianness swapped + // which have been fixed in the upstream MAME since 2013 + // in order to get Konami FireBeat working + // The reason given for VGM not applying this change was + // "It matches OPL4 and MAME probably did an endianness optimization" + size_t sampleMemLen=writeZ280[i]->getSampleMemUsage(); + unsigned char* sampleMem=new unsigned char[sampleMemLen]; + memcpy(sampleMem,writeZ280[i]->getSampleMem(),sampleMemLen); + for (int i=0; idepth==16) { + unsigned int pos=s->offYMZ280B; + for (unsigned int j=0; jsamples; j++) { + unsigned char lo=sampleMem[pos+j*2]; + unsigned char hi=sampleMem[pos+j*2+1]; + sampleMem[pos+j*2]=hi; + sampleMem[pos+j*2+1]=lo; + } + } + } w->writeC(0x67); w->writeC(0x66); w->writeC(0x86); w->writeI((writeZ280[i]->getSampleMemUsage()+8)|(i*0x80000000)); w->writeI(writeZ280[i]->getSampleMemCapacity()); w->writeI(0); - w->write(writeZ280[i]->getSampleMem(),writeZ280[i]->getSampleMemUsage()); + w->write(sampleMem,sampleMemLen); + delete[] sampleMem; } } From 8dc143af7b774eedefc4daec0532a02fc0484f64 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Thu, 23 Jun 2022 02:42:11 +0700 Subject: [PATCH 122/152] PET: Support full 16-bit period range Fix #500 --- src/engine/platform/pet.cpp | 69 +++++++++++++++++++++++-------------- src/engine/platform/pet.h | 4 ++- 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/engine/platform/pet.cpp b/src/engine/platform/pet.cpp index 0decd909..9b3c9988 100644 --- a/src/engine/platform/pet.cpp +++ b/src/engine/platform/pet.cpp @@ -21,15 +21,15 @@ #include "../engine.h" #include -#define rWrite(a,v) {regPool[(a)]=(v)&0xff; if((a)==10) {chan.sreg=(v); chan.cnt=2;}} - #define CHIP_DIVIDER 16 #define SAMP_DIVIDER 4 const char* regCheatSheet6522[]={ "T2L", "08", + "T2H", "09", "SR", "0A", "ACR", "0B", + "PCR", "0C", NULL }; @@ -46,26 +46,45 @@ const char* DivPlatformPET::getEffectName(unsigned char effect) { return NULL; } +// high-level emulation of 6522 shift register and driver software for now +void DivPlatformPET::rWrite(unsigned int addr, unsigned char val) { + bool hwSROutput=((regPool[11]>>2)&7)==4; + switch (addr) { + case 9: + // simulate phase reset from switching between hw/sw shift registers + if ((regPool[9]==0)^(val==0)) { + chan.sreg=chan.wave; + } + break; + case 10: + chan.sreg=val; + if (hwSROutput) chan.cnt=2; + break; + } + regPool[addr]=val; +} + void DivPlatformPET::acquire(short* bufL, short* bufR, size_t start, size_t len) { - // high-level emulation of 6522 shift register for now - int t2=regPool[8]*2+4; - if (((regPool[11]>>2)&7)==4) { + bool hwSROutput=((regPool[11]>>2)&7)==4; + if (chan.enable) { + int reload=regPool[8]*2+4; + if (!hwSROutput) { + reload+=regPool[9]*512; + } for (size_t h=start; h0) { - int adv=MIN(cycs,chan.cnt); - chan.cnt-=adv; - cycs-=adv; - if (chan.cnt==0) { - chan.out=(chan.sreg&1)*32767; - chan.sreg=(chan.sreg>>1)|((chan.sreg&1)<<7); - chan.cnt=t2; - } + if (SAMP_DIVIDER>chan.cnt) { + chan.out=(chan.sreg&1)*32767; + chan.sreg=(chan.sreg>>1)|((chan.sreg&1)<<7); + chan.cnt+=reload-SAMP_DIVIDER; + } else { + chan.cnt-=SAMP_DIVIDER; } bufL[h]=chan.out; bufR[h]=chan.out; oscBuf->data[oscBuf->needle++]=chan.out; } + // emulate driver writes to PCR + if (!hwSROutput) regPool[12]=chan.out?0xe0:0xc0; } else { chan.out=0; for (size_t h=start; h0) { - if (regPool[11]!=16) { - rWrite(11,16); - rWrite(10,chan.wave); - } + chan.enable=true; + rWrite(11,regPool[9]==0?16:0); } else { + chan.enable=false; rWrite(11,0); } } @@ -118,21 +136,22 @@ void DivPlatformPET::tick(bool sysTick) { chan.freqChanged=true; } if (chan.freqChanged || chan.keyOn || chan.keyOff) { - chan.freq=parent->calcFreq(chan.baseFreq,chan.pitch,true,0,chan.pitch2,chipClock,CHIP_DIVIDER); - if (chan.freq>257) chan.freq=257; - if (chan.freq<2) chan.freq=2; - rWrite(8,chan.freq-2); + chan.freq=parent->calcFreq(chan.baseFreq,chan.pitch,true,0,chan.pitch2,chipClock,CHIP_DIVIDER)-2; + if (chan.freq>65535) chan.freq=65535; + if (chan.freq<0) chan.freq=0; + rWrite(8,chan.freq&0xff); + rWrite(9,chan.freq>>8); if (chan.keyOn) { if (!chan.std.vol.will) { chan.outVol=chan.vol; - writeOutVol(); } chan.keyOn=false; } if (chan.keyOff) { - rWrite(11,0); chan.keyOff=false; } + // update mode setting and channel enable + writeOutVol(); chan.freqChanged=false; } } diff --git a/src/engine/platform/pet.h b/src/engine/platform/pet.h index a5037045..06c7e736 100644 --- a/src/engine/platform/pet.h +++ b/src/engine/platform/pet.h @@ -26,7 +26,7 @@ class DivPlatformPET: public DivDispatch { struct Channel { int freq, baseFreq, pitch, pitch2, note, ins; - bool active, insChanged, freqChanged, keyOn, keyOff, inPorta; + bool active, insChanged, freqChanged, keyOn, keyOff, inPorta, enable; int vol, outVol, wave; unsigned char sreg; int cnt; @@ -49,6 +49,7 @@ class DivPlatformPET: public DivDispatch { keyOn(false), keyOff(false), inPorta(false), + enable(false), vol(1), outVol(1), wave(0b00001111), @@ -85,6 +86,7 @@ class DivPlatformPET: public DivDispatch { ~DivPlatformPET(); private: void writeOutVol(); + void rWrite(unsigned int addr, unsigned char val); }; #endif From 4731dad9170250dac50de1725f8057b6549b53fc Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 22 Jun 2022 15:10:53 -0500 Subject: [PATCH 123/152] GUI: colors --- src/gui/chanOsc.cpp | 350 +++++++++++++++++++++++++++---------------- src/gui/gradient.cpp | 16 +- src/gui/gui.cpp | 7 + src/gui/gui.h | 29 +++- 4 files changed, 268 insertions(+), 134 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index d9d3ddd4..57fa99da 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -26,6 +26,49 @@ #define FURNACE_FFT_RATE 80.0 #define FURNACE_FFT_CUTOFF 0.1 +const char* chanOscRefs[]={ + "None (0%)", + "None (50%)", + "None (100%)", + + "Frequency", + "Volume", + "Channel", + "Brightness", + + "Note Trigger" +}; + +float FurnaceGUI::computeGradPos(int type, int chan) { + switch (type) { + case GUI_OSCREF_NONE: + return 0.0f; + break; + case GUI_OSCREF_CENTER: + return 0.5f; + break; + case GUI_OSCREF_MAX: + return 1.0f; + break; + case GUI_OSCREF_FREQUENCY: + return chanOscPitch[chan]; + break; + case GUI_OSCREF_VOLUME: + return chanOscVol[chan]; + break; + case GUI_OSCREF_CHANNEL: + return (float)chan/(float)(e->getTotalChannelCount()-1); + break; + case GUI_OSCREF_BRIGHT: + return chanOscBright[chan]; + break; + case GUI_OSCREF_NOTE_TRIGGER: + return keyHit[chan]*5.0f; + break; + } + return 0.0f; +} + void FurnaceGUI::drawChanOsc() { if (nextWindow==GUI_WINDOW_CHAN_OSC) { chanOscOpen=true; @@ -36,6 +79,7 @@ void FurnaceGUI::drawChanOsc() { ImGui::SetNextWindowSizeConstraints(ImVec2(64.0f*dpiScale,32.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale)); if (ImGui::Begin("Oscilloscope (per-channel)",&chanOscOpen,globalWinFlags|((chanOscOptions)?0:ImGuiWindowFlags_NoTitleBar))) { bool centerSettingReset=false; + ImDrawList* dl=ImGui::GetWindowDrawList(); if (chanOscOptions) { if (ImGui::BeginTable("ChanOscSettings",3)) { ImGui::TableNextRow(); @@ -65,60 +109,142 @@ void FurnaceGUI::drawChanOsc() { ImGui::EndTable(); } - ImGui::Text("Gradient"); - - if (chanOscGradTex==NULL) { - chanOscGradTex=SDL_CreateTexture(sdlRend,SDL_PIXELFORMAT_ABGR8888,SDL_TEXTUREACCESS_STREAMING,chanOscGrad.width,chanOscGrad.height); + ImGui::Checkbox("Gradient",&chanOscUseGrad); + if (chanOscUseGrad) { if (chanOscGradTex==NULL) { - logE("error while creating gradient texture! %s",SDL_GetError()); - } else { - updateChanOscGradTex=true; + chanOscGradTex=SDL_CreateTexture(sdlRend,SDL_PIXELFORMAT_ABGR8888,SDL_TEXTUREACCESS_STREAMING,chanOscGrad.width,chanOscGrad.height); + + if (chanOscGradTex==NULL) { + logE("error while creating gradient texture! %s",SDL_GetError()); + } else { + updateChanOscGradTex=true; + } } - } - if (ImGui::BeginTable("ChanOscGradSet",2)) { - ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch); + if (ImGui::BeginTable("ChanOscGradSet",2)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch); - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - if (chanOscGradTex!=NULL) { - if (updateChanOscGradTex) { - chanOscGrad.render(); - if (SDL_UpdateTexture(chanOscGradTex,NULL,chanOscGrad.grad.get(),chanOscGrad.width*4)==0) { - updateChanOscGradTex=false; - } else { - logE("error while updating gradient texture! %s",SDL_GetError()); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (chanOscGradTex!=NULL) { + if (updateChanOscGradTex) { + chanOscGrad.render(); + if (SDL_UpdateTexture(chanOscGradTex,NULL,chanOscGrad.grad.get(),chanOscGrad.width*4)==0) { + updateChanOscGradTex=false; + } else { + logE("error while updating gradient texture! %s",SDL_GetError()); + } + } + + ImVec2 gradLeft=ImGui::GetCursorPos(); + ImVec2 gradSize=ImVec2(400.0f*dpiScale,400.0f*dpiScale); + ImGui::Image(chanOscGradTex,gradSize); + ImVec2 gradLeftAbs=ImGui::GetItemRectMin(); + if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) { + chanOscGrad.points.push_back(Gradient2DPoint( + (ImGui::GetMousePos().x-gradLeftAbs.x)/gradSize.x, + (ImGui::GetMousePos().y-gradLeftAbs.y)/gradSize.y + )); + updateChanOscGradTex=true; + } + + ImVec2 oldCurPos=ImGui::GetCursorPos(); + int index=0; + int removePoint=-1; + for (Gradient2DPoint& i: chanOscGrad.points) { + ImGui::PushID(index+16); + ImGui::SetCursorPos(ImVec2(gradLeft.x+i.x*gradSize.x-8.0*dpiScale,gradLeft.y+i.y*gradSize.y-8.0*dpiScale)); + if (ImGui::InvisibleButton("gradPoint",ImVec2(16.0*dpiScale,16.0*dpiScale))) { + if (!i.grab) { + ImGui::OpenPopup("gradPointSettings"); + } + } + if (ImGui::IsItemHovered() || ImGui::IsItemActive()) { + ImGui::SetTooltip("(%.1f, %.1f)",i.x*100.0f,(1.0f-i.y)*100.0f); + } + if (ImGui::IsItemClicked(ImGuiMouseButton_Middle)) { + removePoint=index; + } + if (ImGui::IsItemActive()) { + float mX=(ImGui::GetMousePos().x-gradLeftAbs.x)/gradSize.x; + float mY=(ImGui::GetMousePos().y-gradLeftAbs.y)/gradSize.y; + + if (i.grab || (fabs(i.x-mX)>0.015 || fabs(i.y-mY)>0.015)) { + i.x=mX; + i.y=mY; + i.grab=true; + + if (i.x<0) i.x=0; + if (i.x>1) i.x=1; + if (i.y<0) i.y=0; + if (i.y>1) i.y=1; + updateChanOscGradTex=true; + } + } else { + i.grab=false; + i.prevX=i.x; + i.prevY=i.y; + } + if (ImGui::BeginPopup("gradPointSettings",ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize)) { + if (ImGui::ColorPicker4("Color",(float*)&i.color)) { + updateChanOscGradTex=true; + } + ImGui::Text("Distance"); + ImGui::SameLine(); + float pDist=i.distance*100.0f; + if (ImGui::SliderFloat("##PDistance",&pDist,0.0f,150.0f,"%.1f%%")) { + i.distance=pDist/100.0f; + updateChanOscGradTex=true; + } + + ImGui::Text("Spread"); + ImGui::SameLine(); + float pSpread=i.spread*100.0f; + if (ImGui::SliderFloat("##PSpread",&pSpread,0.0f,150.0f,"%.1f%%")) { + i.spread=pSpread/100.0f; + updateChanOscGradTex=true; + } + + if (ImGui::Button("Remove")) { + removePoint=index; + ImGui::CloseCurrentPopup(); + } + + ImGui::EndPopup(); + } + + dl->AddCircle(ImVec2(gradLeftAbs.x+i.x*gradSize.x,gradLeftAbs.y+i.y*gradSize.y),8.0*dpiScale,ImGui::ColorConvertFloat4ToU32(ImVec4(0.5,0.5,0.5,1.0)),6,2.0f*dpiScale); + dl->AddCircle(ImVec2(gradLeftAbs.x+i.x*gradSize.x,gradLeftAbs.y+i.y*gradSize.y),5.0*dpiScale,ImGui::ColorConvertFloat4ToU32(ImVec4(0.1,0.1,0.1,1.0)),6,2.0f*dpiScale); + + ImGui::PopID(); + index++; + } + ImGui::SetCursorPos(oldCurPos); + + if (removePoint>=0) { + chanOscGrad.points.erase(chanOscGrad.points.begin()+removePoint); + updateChanOscGradTex=true; } } - ImGui::ImageButton(chanOscGradTex,ImVec2(400.0f*dpiScale,400.0f*dpiScale)); - ImVec2 gradLeft=ImGui::GetItemRectMin(); - ImVec2 gradSize=ImGui::GetItemRectSize(); - if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) { - chanOscGrad.points.push_back(Gradient2DPoint( - (ImGui::GetMousePos().x-gradLeft.x)/gradSize.x, - (ImGui::GetMousePos().y-gradLeft.y)/gradSize.y - )); + ImGui::TableNextColumn(); + if (ImGui::ColorEdit4("Background",(float*)&chanOscGrad.bgColor)) { updateChanOscGradTex=true; - logI("a point inserted"); } + ImGui::Combo("X Axis##AxisX",&chanOscColorX,chanOscRefs,GUI_OSCREF_MAX); + ImGui::Combo("Y Axis##AxisY",&chanOscColorY,chanOscRefs,GUI_OSCREF_MAX); - ImVec2 oldCurPos=ImGui::GetCursorPos(); - for (Gradient2DPoint& i: chanOscGrad.points) { - ImGui::SetCursorPos(ImVec2(gradLeft.x+i.x*gradSize.x,gradLeft.y+i.y*gradSize.y)); - ImGui::Text("Here"); - } - ImGui::SetCursorPos(oldCurPos); + ImGui::EndTable(); } + } else { + ImGui::SetNextItemWidth(400.0f*dpiScale); + ImGui::ColorPicker4("Color",(float*)&chanOscColor); + } - ImGui::TableNextColumn(); - if (ImGui::ColorEdit4("Background",(float*)&chanOscGrad.bgColor)) { - updateChanOscGradTex=true; - } - - ImGui::EndTable(); + if (ImGui::Button("OK")) { + chanOscOptions=false; } } @@ -129,12 +255,10 @@ void FurnaceGUI::drawChanOsc() { std::vector oscFFTs; std::vector oscChans; int chans=e->getTotalChannelCount(); - ImDrawList* dl=ImGui::GetWindowDrawList(); ImGuiWindow* window=ImGui::GetCurrentWindow(); ImVec2 waveform[512]; ImGuiStyle& style=ImGui::GetStyle(); - ImU32 color=ImGui::GetColorU32(uiColors[GUI_COLOR_OSC_WAVE]); for (int i=0; igetOscBuffer(i); @@ -196,93 +320,63 @@ void FurnaceGUI::drawChanOsc() { float maxLevel=-1.0f; float dcOff=0.0f; unsigned short needlePos=buf->needle; - if (chanOscWaveCorr) { - /* - double fftDataRate=(FURNACE_FFT_SIZE*FURNACE_FFT_RATE)/((double)buf->rate); - while (buf->readNeedle!=needlePos) { - fft->inBufPosFrac+=fftDataRate; - while (fft->inBufPosFrac>=1.0) { - chanOscLP0[ch]+=FURNACE_FFT_CUTOFF*((float)buf->data[buf->readNeedle]-chanOscLP0[ch]); - chanOscLP1[ch]+=FURNACE_FFT_CUTOFF*(chanOscLP0[ch]-chanOscLP1[ch]); - fft->inBuf[fft->inBufPos]=(double)chanOscLP1[ch]/32768.0; - if (++fft->inBufPos>=FURNACE_FFT_SIZE) { - fftw_execute(fft->plan); - fft->inBufPos=0; - fft->needle=buf->readNeedle; - } - fft->inBufPosFrac-=1.0; - } - buf->readNeedle++; - }*/ - - for (int i=0; iinBuf[i]=(double)buf->data[(unsigned short)(needlePos-displaySize*2+((i*displaySize*2)/FURNACE_FFT_SIZE))]/32768.0; - } - fftw_execute(fft->plan); - - // find origin frequency - int point=1; - double candAmp=0.0; - for (unsigned short i=1; i<512; i++) { - fftw_complex& f=fft->outBuf[i]; - // AMPLITUDE - double amp=sqrt(pow(f[0],2.0)+pow(f[1],2.0))/pow((double)i,0.8); - if (amp>candAmp) { - point=i; - candAmp=amp; - } - } - - // PHASE - fftw_complex& candPoint=fft->outBuf[point]; - double phase=((double)(displaySize*2)/(double)point)*(0.5+(atan2(candPoint[1],candPoint[0])/(M_PI*2))); - - //needlePos=fft->needle; - needlePos-=phase; - - /* - int alignment=0; - for (unsigned short i=0; idata[(unsigned short)(needlePos-i)])>fabs(buf->data[(unsigned short)(needlePos-alignment)])) { - alignment=i; - } - } - needlePos-=alignment; - */ - - //String cPhase=fmt::sprintf("%d cphase: %f",point,phase); - //dl->AddText(inRect.Min,0xffffffff,cPhase.c_str()); - - needlePos-=displaySize; - for (unsigned short i=0; i<512; i++) { - float y=(float)buf->data[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; - if (minLevel>y) minLevel=y; - if (maxLeveldata[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; - if (y<-0.5f) y=-0.5f; - if (y>0.5f) y=0.5f; - waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-(y-dcOff))); - } - } else { - needlePos-=displaySize; - for (unsigned short i=0; i<512; i++) { - float y=(float)buf->data[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; - if (minLevel>y) minLevel=y; - if (maxLeveldata[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; - if (y<-0.5f) y=-0.5f; - if (y>0.5f) y=0.5f; - waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-(y-dcOff))); + for (int i=0; iinBuf[i]=(double)buf->data[(unsigned short)(needlePos-displaySize*2+((i*displaySize*2)/FURNACE_FFT_SIZE))]/32768.0; + } + fftw_execute(fft->plan); + + // find origin frequency + int point=1; + double candAmp=0.0; + for (unsigned short i=1; i<512; i++) { + fftw_complex& f=fft->outBuf[i]; + // AMPLITUDE + double amp=sqrt(pow(f[0],2.0)+pow(f[1],2.0))/pow((double)i,0.8); + if (amp>candAmp) { + point=i; + candAmp=amp; } } + + // PHASE + fftw_complex& candPoint=fft->outBuf[point]; + double phase=((double)(displaySize*2)/(double)point)*(0.5+(atan2(candPoint[1],candPoint[0])/(M_PI*2))); + + if (chanOscWaveCorr) { + needlePos-=phase; + } + chanOscPitch[ch]=(float)point/32.0f; + + /* + String cPhase=fmt::sprintf("%d cphase: %f vol: %f",point,phase,chanOscVol[ch]); + dl->AddText(inRect.Min,0xffffffff,cPhase.c_str()); + */ + + needlePos-=displaySize; + for (unsigned short i=0; i<512; i++) { + float y=(float)buf->data[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; + if (minLevel>y) minLevel=y; + if (maxLeveldata[(unsigned short)(needlePos+(i*displaySize/512))]/65536.0f; + if (y<-0.5f) y=-0.5f; + if (y>0.5f) y=0.5f; + waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-(y-dcOff))); + } + } + ImU32 color=ImGui::GetColorU32(chanOscColor); + if (chanOscUseGrad) { + float xVal=computeGradPos(chanOscColorX,ch); + float yVal=computeGradPos(chanOscColorY,ch); + + xVal=CLAMP(xVal,0.0f,1.0f); + yVal=CLAMP(yVal,0.0f,1.0f); + + color=chanOscGrad.get(xVal,1.0f-yVal); } dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale); } diff --git a/src/gui/gradient.cpp b/src/gui/gradient.cpp index c9b26fb8..510f2ad5 100644 --- a/src/gui/gradient.cpp +++ b/src/gui/gradient.cpp @@ -21,6 +21,16 @@ #include "imgui.h" #include +ImU32 Gradient2D::get(float x, float y) { + int xi=round(x*width); + int yi=round(y*height); + if (xi<0) xi=0; + if (xi>=(int)width) xi=width-1; + if (yi<0) yi=0; + if (yi>=(int)height) yi=height-1; + return grad[yi*width+xi]; +} + void Gradient2D::render() { ImU32* g=grad.get(); ImU32 bgColorU=ImGui::ColorConvertFloat4ToU32(bgColor); @@ -33,18 +43,18 @@ void Gradient2D::render() { // 2. insert points for (Gradient2DPoint& i: points) { float pDistSquared=i.distance*i.distance; - printf("shading this point %f %f\n",i.x,i.y); for (size_t j=0; j=pDistSquared) continue; - float dist=(1.0-(sqrt(distSquared)/i.distance))-i.spread; + float dist=(1.0-(sqrt(distSquared)/i.distance)); if (dist<0) dist=0; if (dist>1) dist=1; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index fbfc2b4d..f3f246cd 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4573,10 +4573,14 @@ FurnaceGUI::FurnaceGUI(): oscWindowSize(20.0f), oscZoomSlider(false), chanOscCols(3), + chanOscColorX(GUI_OSCREF_CENTER), + chanOscColorY(GUI_OSCREF_CENTER), chanOscWindowSize(20.0f), chanOscWaveCorr(true), chanOscOptions(false), updateChanOscGradTex(true), + chanOscUseGrad(false), + chanOscColor(1.0f,1.0f,1.0f,1.0f), chanOscGrad(64,64), chanOscGradTex(NULL), followLog(true), @@ -4655,6 +4659,9 @@ FurnaceGUI::FurnaceGUI(): memset(chanOscLP0,0,sizeof(float)*DIV_MAX_CHANS); memset(chanOscLP1,0,sizeof(float)*DIV_MAX_CHANS); + memset(chanOscVol,0,sizeof(float)*DIV_MAX_CHANS); + memset(chanOscPitch,0,sizeof(float)*DIV_MAX_CHANS); + memset(chanOscBright,0,sizeof(float)*DIV_MAX_CHANS); memset(lastCorrPos,0,sizeof(short)*DIV_MAX_CHANS); memset(acedData,0,23); diff --git a/src/gui/gui.h b/src/gui/gui.h index a538c5ba..ddda9d53 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -525,6 +525,21 @@ enum FurnaceGUIActions { GUI_ACTION_MAX }; +enum FurnaceGUIChanOscRef { + GUI_OSCREF_NONE=0, + GUI_OSCREF_CENTER, + GUI_OSCREF_FULL, + + GUI_OSCREF_FREQUENCY, + GUI_OSCREF_VOLUME, + GUI_OSCREF_CHANNEL, + GUI_OSCREF_BRIGHT, + + GUI_OSCREF_NOTE_TRIGGER, + + GUI_OSCREF_MAX +}; + enum PasteMode { GUI_PASTE_MODE_NORMAL=0, GUI_PASTE_MODE_MIX_FG, @@ -760,13 +775,15 @@ struct TouchPoint { struct Gradient2DPoint { ImVec4 color; - float x, y; + float x, y, prevX, prevY; float spread, distance; bool selected, grab; Gradient2DPoint(float xPos, float yPos): color(1,1,1,1), x(xPos), y(yPos), + prevX(0.0f), + prevY(0.0f), spread(0.0f), distance(0.5f), selected(false), @@ -1382,13 +1399,17 @@ class FurnaceGUI { bool oscZoomSlider; // per-channel oscilloscope - int chanOscCols; + int chanOscCols, chanOscColorX, chanOscColorY; float chanOscWindowSize; - bool chanOscWaveCorr, chanOscOptions, updateChanOscGradTex; + bool chanOscWaveCorr, chanOscOptions, updateChanOscGradTex, chanOscUseGrad; + ImVec4 chanOscColor; Gradient2D chanOscGrad; SDL_Texture* chanOscGradTex; float chanOscLP0[DIV_MAX_CHANS]; float chanOscLP1[DIV_MAX_CHANS]; + float chanOscVol[DIV_MAX_CHANS]; + float chanOscPitch[DIV_MAX_CHANS]; + float chanOscBright[DIV_MAX_CHANS]; unsigned short lastNeedlePos[DIV_MAX_CHANS]; unsigned short lastCorrPos[DIV_MAX_CHANS]; struct ChanOscStatus { @@ -1501,6 +1522,8 @@ class FurnaceGUI { bool importLayout(String path); bool exportLayout(String path); + float computeGradPos(int type, int chan); + void resetColors(); void resetKeybinds(); From a65b4ded00fe708a1de443d8b283bfd8bb9ea2b1 Mon Sep 17 00:00:00 2001 From: 20Enderdude20 Date: Wed, 22 Jun 2022 13:14:23 -0700 Subject: [PATCH 124/152] Added "c" in "channel" typo and added a TI-99 bit (#551) --- papers/doc/7-systems/sms.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/papers/doc/7-systems/sms.md b/papers/doc/7-systems/sms.md index 53560a97..882085f1 100644 --- a/papers/doc/7-systems/sms.md +++ b/papers/doc/7-systems/sms.md @@ -6,10 +6,13 @@ surely had better graphics than NES, but its sound (fairly weak, 4ch PSG with A- this console is powered by a derivative of the Texas Instruments SN76489. +the original iteration of the SN76489 used in the TI-99/4A computers was clocked much lower at 447 kHz, being able to play as low as 13.670 Hz (A -1). consequentially, pitch accuracy for higher notes is compromised. + + # effects - `20xy`: set noise mode. - - `x` controls whether to inherit frequency from hannel 3. + - `x` controls whether to inherit frequency from channel 3. - 0: use one of 3 preset frequencies (C: A-2; C#: A-3; D: A-4). - 1: use frequency of channel 3. - `y` controls whether to select noise or thin pulse. From 2ffec02e26561ebaf2d0390983c7e64095473bf8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 22 Jun 2022 15:15:24 -0500 Subject: [PATCH 125/152] Revert "Added "c" in "channel" typo and added a TI-99 bit (#551)" This reverts commit a65b4ded00fe708a1de443d8b283bfd8bb9ea2b1. --- papers/doc/7-systems/sms.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/papers/doc/7-systems/sms.md b/papers/doc/7-systems/sms.md index 882085f1..53560a97 100644 --- a/papers/doc/7-systems/sms.md +++ b/papers/doc/7-systems/sms.md @@ -6,13 +6,10 @@ surely had better graphics than NES, but its sound (fairly weak, 4ch PSG with A- this console is powered by a derivative of the Texas Instruments SN76489. -the original iteration of the SN76489 used in the TI-99/4A computers was clocked much lower at 447 kHz, being able to play as low as 13.670 Hz (A -1). consequentially, pitch accuracy for higher notes is compromised. - - # effects - `20xy`: set noise mode. - - `x` controls whether to inherit frequency from channel 3. + - `x` controls whether to inherit frequency from hannel 3. - 0: use one of 3 preset frequencies (C: A-2; C#: A-3; D: A-4). - 1: use frequency of channel 3. - `y` controls whether to select noise or thin pulse. From c7ea30dda1688ecfd44164760139b27f9536aa1b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 22 Jun 2022 15:16:19 -0500 Subject: [PATCH 126/152] Revert "Revert "Added "c" in "channel" typo and added a TI-99 bit (#551)"" This reverts commit 2ffec02e26561ebaf2d0390983c7e64095473bf8. --- papers/doc/7-systems/sms.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/papers/doc/7-systems/sms.md b/papers/doc/7-systems/sms.md index 53560a97..882085f1 100644 --- a/papers/doc/7-systems/sms.md +++ b/papers/doc/7-systems/sms.md @@ -6,10 +6,13 @@ surely had better graphics than NES, but its sound (fairly weak, 4ch PSG with A- this console is powered by a derivative of the Texas Instruments SN76489. +the original iteration of the SN76489 used in the TI-99/4A computers was clocked much lower at 447 kHz, being able to play as low as 13.670 Hz (A -1). consequentially, pitch accuracy for higher notes is compromised. + + # effects - `20xy`: set noise mode. - - `x` controls whether to inherit frequency from hannel 3. + - `x` controls whether to inherit frequency from channel 3. - 0: use one of 3 preset frequencies (C: A-2; C#: A-3; D: A-4). - 1: use frequency of channel 3. - `y` controls whether to select noise or thin pulse. From 142b8b2bb0839ce1a07e3cdc076c1cffe43b644e Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Thu, 23 Jun 2022 09:03:20 +0700 Subject: [PATCH 127/152] safeReader: Copy a value instead of direct casting This fix crashes on architectures with forced alignments such as ARM --- src/engine/safeReader.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/engine/safeReader.cpp b/src/engine/safeReader.cpp index 173ffd23..3cb1f4b1 100644 --- a/src/engine/safeReader.cpp +++ b/src/engine/safeReader.cpp @@ -82,7 +82,8 @@ short SafeReader::readS() { logD("SR: reading short %x:",curSeek); #endif if (curSeek+2>len) throw EndOfFileException(this,len); - short ret=*(short*)(&buf[curSeek]); + short ret; + memcpy(&ret,&buf[curSeek],2); #ifdef READ_DEBUG logD("SR: %.4x",ret); #endif @@ -92,7 +93,8 @@ short SafeReader::readS() { short SafeReader::readS_BE() { if (curSeek+2>len) throw EndOfFileException(this,len); - short ret=*(short*)(&buf[curSeek]); + short ret; + memcpy(&ret,&buf[curSeek],2); curSeek+=2; return ((ret>>8)&0xff)|(ret<<8); } @@ -102,7 +104,8 @@ int SafeReader::readI() { logD("SR: reading int %x:",curSeek); #endif if (curSeek+4>len) throw EndOfFileException(this,len); - int ret=*(int*)(&buf[curSeek]); + int ret; + memcpy(&ret,&buf[curSeek],4); curSeek+=4; #ifdef READ_DEBUG logD("SR: %.8x",ret); @@ -112,28 +115,32 @@ int SafeReader::readI() { int SafeReader::readI_BE() { if (curSeek+4>len) throw EndOfFileException(this,len); - unsigned int ret=*(unsigned int*)(&buf[curSeek]); + unsigned int ret; + memcpy(&ret,&buf[curSeek],4); curSeek+=4; return (int)((ret>>24)|((ret&0xff0000)>>8)|((ret&0xff00)<<8)|((ret&0xff)<<24)); } int64_t SafeReader::readL() { if (curSeek+8>len) throw EndOfFileException(this,len); - int64_t ret=*(int64_t*)(&buf[curSeek]); + int64_t ret; + memcpy(&ret,&buf[curSeek],8); curSeek+=8; return ret; } float SafeReader::readF() { if (curSeek+4>len) throw EndOfFileException(this,len); - float ret=*(float*)(&buf[curSeek]); + float ret; + memcpy(&ret,&buf[curSeek],4); curSeek+=4; return ret; } double SafeReader::readD() { if (curSeek+8>len) throw EndOfFileException(this,len); - double ret=*(double*)(&buf[curSeek]); + double ret; + memcpy(&ret,&buf[curSeek],8); curSeek+=8; return ret; } From abbd6e7274821e6ab036035514f6ed8e63d7a101 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 02:48:28 -0500 Subject: [PATCH 128/152] potentially fix #550 --- extern/imgui_patched/imgui_widgets.cpp | 65 ++++++++++++++++++-------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/extern/imgui_patched/imgui_widgets.cpp b/extern/imgui_patched/imgui_widgets.cpp index c6fec68b..93dfd534 100644 --- a/extern/imgui_patched/imgui_widgets.cpp +++ b/extern/imgui_patched/imgui_widgets.cpp @@ -4545,27 +4545,52 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used // without any storage on user's side. - IM_ASSERT(apply_new_text_length >= 0); - if (is_resizable) - { - ImGuiInputTextCallbackData callback_data; - callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize; - callback_data.Flags = flags; - callback_data.Buf = buf; - callback_data.BufTextLen = apply_new_text_length; - callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1); - callback_data.UserData = callback_user_data; - callback(&callback_data); - buf = callback_data.Buf; - buf_size = callback_data.BufSize; - apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1); - IM_ASSERT(apply_new_text_length <= buf_size); - } - //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length); - // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size. - ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size)); - value_changed = true; + // don't assert because maybe the user passes an invalid UTF-8 string... + if (apply_new_text_length >= 0) { + if (is_resizable) + { + ImGuiInputTextCallbackData callback_data; + callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize; + callback_data.Flags = flags; + callback_data.Buf = buf; + callback_data.BufTextLen = apply_new_text_length; + callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1); + callback_data.UserData = callback_user_data; + callback(&callback_data); + buf = callback_data.Buf; + buf_size = callback_data.BufSize; + apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1); + IM_ASSERT(apply_new_text_length <= buf_size); + } + //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length); + + // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size. + ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size)); + value_changed = true; + } else { + printf("invalid buffer!\n"); + if (is_resizable) + { + ImGuiInputTextCallbackData callback_data; + callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize; + callback_data.Flags = flags; + callback_data.Buf = buf; + callback_data.BufTextLen = 0; + callback_data.BufSize = ImMax(buf_size, 1); + callback_data.UserData = callback_user_data; + callback(&callback_data); + buf = callback_data.Buf; + buf_size = callback_data.BufSize; + apply_new_text_length = 0; + IM_ASSERT(apply_new_text_length <= buf_size); + } + //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length); + + // clear the buffer + ImStrncpy(buf, "", 1); + value_changed = true; + } } // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value) From 1b5396e814b6c3f9dfb971474267f9e55796abf8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 04:02:41 -0500 Subject: [PATCH 129/152] GUI: save per-chan osc state --- src/gui/chanOsc.cpp | 12 +++++++----- src/gui/gradient.cpp | 14 ++++++++++++++ src/gui/gui.cpp | 27 +++++++++++++++++++++++++++ src/gui/gui.h | 2 ++ 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 57fa99da..da82de27 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -143,11 +143,13 @@ void FurnaceGUI::drawChanOsc() { ImGui::Image(chanOscGradTex,gradSize); ImVec2 gradLeftAbs=ImGui::GetItemRectMin(); if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) { - chanOscGrad.points.push_back(Gradient2DPoint( - (ImGui::GetMousePos().x-gradLeftAbs.x)/gradSize.x, - (ImGui::GetMousePos().y-gradLeftAbs.y)/gradSize.y - )); - updateChanOscGradTex=true; + if (chanOscGrad.points.size()<32) { + chanOscGrad.points.push_back(Gradient2DPoint( + (ImGui::GetMousePos().x-gradLeftAbs.x)/gradSize.x, + (ImGui::GetMousePos().y-gradLeftAbs.y)/gradSize.y + )); + updateChanOscGradTex=true; + } } ImVec2 oldCurPos=ImGui::GetCursorPos(); diff --git a/src/gui/gradient.cpp b/src/gui/gradient.cpp index 510f2ad5..ac69bf86 100644 --- a/src/gui/gradient.cpp +++ b/src/gui/gradient.cpp @@ -19,6 +19,7 @@ #include "gui.h" #include "imgui.h" +#include #include ImU32 Gradient2D::get(float x, float y) { @@ -31,6 +32,19 @@ ImU32 Gradient2D::get(float x, float y) { return grad[yi*width+xi]; } +String Gradient2D::toString() { + String ret=fmt::sprintf("GRAD #%.2X%.2X%.2X%.2X",(unsigned char)(bgColor.x*255.0f),(unsigned char)(bgColor.y*255.0f),(unsigned char)(bgColor.z*255.0f),(unsigned char)(bgColor.w*255.0f)); + for (Gradient2DPoint& i: points) { + ret+=fmt::sprintf(" %f,%f:%f,%f:#%.2X%.2X%.2X%.2X",i.x,i.y,i.distance,i.spread,(unsigned char)(i.color.x*255.0f),(unsigned char)(i.color.y*255.0f),(unsigned char)(i.color.z*255.0f),(unsigned char)(i.color.w*255.0f)); + } + return ret; +} + +// TODO: this one please +bool Gradient2D::fromString(String val) { + return false; +} + void Gradient2D::render() { ImU32* g=grad.get(); ImU32 bgColorU=ImGui::ColorConvertFloat4ToU32(bgColor); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index f3f246cd..3de09f8e 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4070,6 +4070,19 @@ bool FurnaceGUI::init() { pianoView=e->getConfInt("pianoView",pianoView); pianoInputPadMode=e->getConfInt("pianoInputPadMode",pianoInputPadMode); + chanOscCols=e->getConfInt("chanOscCols",3); + chanOscColorX=e->getConfInt("chanOscColorX",GUI_OSCREF_CENTER); + chanOscColorY=e->getConfInt("chanOscColorY",GUI_OSCREF_CENTER); + chanOscWindowSize=e->getConfFloat("chanOscWindowSize",20.0f); + chanOscWaveCorr=e->getConfBool("chanOscWaveCorr",true); + chanOscOptions=e->getConfBool("chanOscOptions",false); + chanOscColor.x=e->getConfFloat("chanOscColorR",1.0f); + chanOscColor.y=e->getConfFloat("chanOscColorG",1.0f); + chanOscColor.z=e->getConfFloat("chanOscColorB",1.0f); + chanOscColor.w=e->getConfFloat("chanOscColorA",1.0f); + chanOscUseGrad=e->getConfBool("chanOscUseGrad",false); + chanOscGrad.fromString(e->getConfString("chanOscGrad","")); + syncSettings(); if (settings.dpiScale>=0.5f) { @@ -4294,6 +4307,20 @@ bool FurnaceGUI::finish() { e->setConf("pianoView",pianoView); e->setConf("pianoInputPadMode",pianoInputPadMode); + // commit per-chan osc state + e->setConf("chanOscCols",chanOscCols); + e->setConf("chanOscColorX",chanOscColorX); + e->setConf("chanOscColorY",chanOscColorY); + e->setConf("chanOscWindowSize",chanOscWindowSize); + e->setConf("chanOscWaveCorr",chanOscWaveCorr); + e->setConf("chanOscOptions",chanOscOptions); + e->setConf("chanOscColorR",chanOscColor.x); + e->setConf("chanOscColorG",chanOscColor.y); + e->setConf("chanOscColorB",chanOscColor.z); + e->setConf("chanOscColorA",chanOscColor.w); + e->setConf("chanOscUseGrad",chanOscUseGrad); + e->setConf("chanOscGrad",chanOscGrad.toString()); + for (int i=0; i grad; size_t width, height; + String toString(); + bool fromString(String val); void render(); ImU32 get(float x, float y); Gradient2D(size_t w, size_t h): From b90552dfb1a3c4b36ec8028b3dba8103925c1203 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 16:23:46 -0500 Subject: [PATCH 130/152] fix Termux build --- CMakeLists.txt | 18 ++++++++++++++++++ src/engine/platform/pcspkr.cpp | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82094ce0..4c00b62f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -537,6 +537,24 @@ endif() if (NOT WIN32 AND NOT APPLE) list(APPEND GUI_SOURCES src/gui/icon.c) + + include(CheckIncludeFile) + + CHECK_INCLUDE_FILE(sys/io.h SYS_IO_FOUND) + CHECK_INCLUDE_FILE(linux/input.h LINUX_INPUT_FOUND) + CHECK_INCLUDE_FILE(linux/kd.h LINUX_KD_FOUND) + if (SYS_IO_FOUND) + list(APPEND DEPENDENCIES_DEFINES HAVE_SYS_IO) + message(STATUS "PC speaker output: outb()") + endif() + if (LINUX_INPUT_FOUND) + list(APPEND DEPENDENCIES_DEFINES HAVE_LINUX_INPUT) + message(STATUS "PC speaker output: evdev") + endif() + if (LINUX_KD_FOUND) + list(APPEND DEPENDENCIES_DEFINES HAVE_LINUX_KD) + message(STATUS "PC speaker output: KIOCSOUND") + endif() endif() set(USED_SOURCES ${ENGINE_SOURCES} ${AUDIO_SOURCES} src/main.cpp) diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index d977690f..57c72b67 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -27,11 +27,17 @@ #include #include #include +#ifdef HAVE_LINUX_INPUT #include +#endif +#ifdef HAVE_LINUX_KD #include +#endif #include +#ifdef HAVE_SYS_IO #include #endif +#endif #define PCSPKR_DIVIDER 4 #define CHIP_DIVIDER 1 @@ -80,6 +86,7 @@ void DivPlatformPCSpeaker::pcSpeakerThread() { } if (beepFD>=0) { switch (realOutMethod) { +#ifdef HAVE_LINUX_INPUT case 0: { // evdev static struct input_event ie; ie.time.tv_sec=r.tv_sec; @@ -98,11 +105,14 @@ void DivPlatformPCSpeaker::pcSpeakerThread() { } break; } +#endif +#ifdef HAVE_LINUX_KD case 1: // KIOCSOUND (on tty) if (ioctl(beepFD,KIOCSOUND,r.val)<0) { logW("ioctl error! %s",strerror(errno)); } break; +#endif case 2: { // /dev/port unsigned char bOut; bOut=0; @@ -144,11 +154,14 @@ void DivPlatformPCSpeaker::pcSpeakerThread() { } break; } +#ifdef HAVE_LINUX_KD case 3: // KIOCSOUND (on stdout) if (ioctl(beepFD,KIOCSOUND,r.val)<0) { logW("ioctl error! %s",strerror(errno)); } break; +#endif +#ifdef HAVE_SYS_IO case 4: // outb() if (r.val==0) { outb(inb(0x61)&(~3),0x61); @@ -163,6 +176,7 @@ void DivPlatformPCSpeaker::pcSpeakerThread() { } } break; +#endif } } else { //logV("not writing because fd is less than 0"); @@ -544,6 +558,7 @@ void DivPlatformPCSpeaker::reset() { break; case 4: // outb() beepFD=-1; +#ifdef HAVE_SYS_IO if (ioperm(0x61,8,1)<0) { logW("ioperm 0x61: %s",strerror(errno)); break; @@ -557,6 +572,9 @@ void DivPlatformPCSpeaker::reset() { break; } beepFD=STDOUT_FILENO; +#else + errno=ENOSYS; +#endif break; } if (beepFD<0) { From 7586db9a1bd262e18753df518af1574de43888ce Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 16:25:51 -0500 Subject: [PATCH 131/152] fix Termux build again --- CMakeLists.txt | 2 +- src/audio/{sdl.cpp => sdlAudio.cpp} | 3 +-- src/audio/{sdl.h => sdlAudio.h} | 0 src/engine/engine.cpp | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) rename src/audio/{sdl.cpp => sdlAudio.cpp} (98%) rename src/audio/{sdl.h => sdlAudio.h} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c00b62f..0ef3a508 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -252,7 +252,7 @@ src/audio/midi.cpp ) if (USE_SDL2) - list(APPEND AUDIO_SOURCES src/audio/sdl.cpp) + list(APPEND AUDIO_SOURCES src/audio/sdlAudio.cpp) endif() if (WITH_JACK) diff --git a/src/audio/sdl.cpp b/src/audio/sdlAudio.cpp similarity index 98% rename from src/audio/sdl.cpp rename to src/audio/sdlAudio.cpp index 3ef38d4f..5c11a034 100644 --- a/src/audio/sdl.cpp +++ b/src/audio/sdlAudio.cpp @@ -17,11 +17,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include #include #include #include "../ta-log.h" -#include "sdl.h" +#include "sdlAudio.h" void taSDLProcess(void* inst, unsigned char* buf, int nframes) { TAAudioSDL* in=(TAAudioSDL*)inst; diff --git a/src/audio/sdl.h b/src/audio/sdlAudio.h similarity index 100% rename from src/audio/sdl.h rename to src/audio/sdlAudio.h diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index e8a766b3..12ee7a06 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -24,7 +24,7 @@ #include "../ta-log.h" #include "../fileutils.h" #ifdef HAVE_SDL2 -#include "../audio/sdl.h" +#include "../audio/sdlAudio.h" #endif #include #ifndef _WIN32 From aa511d27183268fced347922d36fb85aa034a4e3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 18:16:12 -0500 Subject: [PATCH 132/152] GUI: implement Gradient2D::fromString() WE ARE CLOSE --- src/gui/gradient.cpp | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/gui/gradient.cpp b/src/gui/gradient.cpp index ac69bf86..774f7a10 100644 --- a/src/gui/gradient.cpp +++ b/src/gui/gradient.cpp @@ -40,9 +40,39 @@ String Gradient2D::toString() { return ret; } -// TODO: this one please bool Gradient2D::fromString(String val) { - return false; + std::vector split; + String cur; + for (char i: val) { + if (i==' ') { + if (!cur.empty()) { + split.push_back(cur); + cur=""; + } + } else { + cur+=i; + } + } + + if (split.size()<2) return false; + + if (split[0]!="GRAD") return false; + + ImU32 bgColorH=0; + if (sscanf(split[1].c_str(),"#%X",&bgColorH)!=1) return false; + + bgColor=ImGui::ColorConvertU32ToFloat4(bgColorH); + + for (size_t i=2; i Date: Thu, 23 Jun 2022 20:58:48 -0500 Subject: [PATCH 133/152] GUI: fix gradient color byte order --- src/gui/gradient.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/gradient.cpp b/src/gui/gradient.cpp index 774f7a10..e4af10b5 100644 --- a/src/gui/gradient.cpp +++ b/src/gui/gradient.cpp @@ -53,6 +53,9 @@ bool Gradient2D::fromString(String val) { cur+=i; } } + if (!cur.empty()) { + split.push_back(cur); + } if (split.size()<2) return false; @@ -60,6 +63,7 @@ bool Gradient2D::fromString(String val) { ImU32 bgColorH=0; if (sscanf(split[1].c_str(),"#%X",&bgColorH)!=1) return false; + bgColorH=(bgColorH>>24)|((bgColorH>>8)&0xff00)|((bgColorH<<8)&0xff0000)|(bgColorH<<24); bgColor=ImGui::ColorConvertU32ToFloat4(bgColorH); @@ -69,6 +73,8 @@ bool Gradient2D::fromString(String val) { if (sscanf(split[i].c_str(),"%f,%f:%f,%f:#%X",&point.x,&point.y,&point.distance,&point.spread,&colorH)!=5) { return false; } + colorH=(colorH>>24)|((colorH>>8)&0xff00)|((colorH<<8)&0xff0000)|(colorH<<24); + point.color=ImGui::ColorConvertU32ToFloat4(colorH); points.push_back(point); } From e34de2262b47a5283ee89b96b16e63fb715cdee2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 23 Jun 2022 22:21:41 -0500 Subject: [PATCH 134/152] update demo songs --- demos/Melody_of_Certain_Feelings.fur | Bin 0 -> 17076 bytes demos/UNATCOPCM.fur | Bin 205943 -> 205943 bytes demos/ecolove.fur | Bin 57812 -> 57810 bytes demos/neon_night_riders_TFMX.fur | Bin 0 -> 160437 bytes demos/wolf3d.fur | Bin 0 -> 29910 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/Melody_of_Certain_Feelings.fur create mode 100644 demos/neon_night_riders_TFMX.fur create mode 100644 demos/wolf3d.fur diff --git a/demos/Melody_of_Certain_Feelings.fur b/demos/Melody_of_Certain_Feelings.fur new file mode 100644 index 0000000000000000000000000000000000000000..6ccf4e13cb18a3104f26a94ef12f2314b34d2046 GIT binary patch literal 17076 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