diff --git a/demos/ay8910/AyMate.fur b/demos/ay8910/AyMate.fur new file mode 100644 index 000000000..c42647b78 Binary files /dev/null and b/demos/ay8910/AyMate.fur differ diff --git a/demos/gameboy/GB_WaitForMe.fur b/demos/gameboy/GB_WaitForMe.fur index 5e3c82141..499c627a2 100644 Binary files a/demos/gameboy/GB_WaitForMe.fur and b/demos/gameboy/GB_WaitForMe.fur differ diff --git a/demos/msx/OPLL_OperationPleaseLeaveLeave.fur b/demos/msx/OPLL_OperationPleaseLeaveLeave.fur index 390274532..a97c1f660 100644 Binary files a/demos/msx/OPLL_OperationPleaseLeaveLeave.fur and b/demos/msx/OPLL_OperationPleaseLeaveLeave.fur differ diff --git a/demos/multichip/satellite_interconnects.fur b/demos/multichip/satellite_interconnects.fur new file mode 100644 index 000000000..b8516e4a4 Binary files /dev/null and b/demos/multichip/satellite_interconnects.fur differ diff --git a/demos/nes/Famitune1.fur b/demos/nes/Famitune1.fur new file mode 100644 index 000000000..d01f04961 Binary files /dev/null and b/demos/nes/Famitune1.fur differ diff --git a/instruments/OPM/Bowed Lead 1.dmp b/instruments/OPM/Bowed Lead 1.dmp new file mode 100644 index 000000000..5e485475a Binary files /dev/null and b/instruments/OPM/Bowed Lead 1.dmp differ diff --git a/instruments/OPM/Brass 4.dmp b/instruments/OPM/Brass 4.dmp new file mode 100644 index 000000000..3509dba50 Binary files /dev/null and b/instruments/OPM/Brass 4.dmp differ diff --git a/instruments/OPM/Brass 5.dmp b/instruments/OPM/Brass 5.dmp new file mode 100644 index 000000000..d062d650e Binary files /dev/null and b/instruments/OPM/Brass 5.dmp differ diff --git a/instruments/OPM/Brass 6.dmp b/instruments/OPM/Brass 6.dmp new file mode 100644 index 000000000..045023bdb Binary files /dev/null and b/instruments/OPM/Brass 6.dmp differ diff --git a/instruments/OPM/Brass 7.dmp b/instruments/OPM/Brass 7.dmp new file mode 100644 index 000000000..26cea36ea Binary files /dev/null and b/instruments/OPM/Brass 7.dmp differ diff --git a/instruments/OPM/Brass 8.dmp b/instruments/OPM/Brass 8.dmp new file mode 100644 index 000000000..55925a13b Binary files /dev/null and b/instruments/OPM/Brass 8.dmp differ diff --git a/instruments/OPM/Dist 2.dmp b/instruments/OPM/Dist 2.dmp new file mode 100644 index 000000000..3b32c9993 Binary files /dev/null and b/instruments/OPM/Dist 2.dmp differ diff --git a/instruments/OPM/Dist Bass 2.dmp b/instruments/OPM/Dist Bass 2.dmp new file mode 100644 index 000000000..93a97392c Binary files /dev/null and b/instruments/OPM/Dist Bass 2.dmp differ diff --git a/instruments/OPM/Elec Bass 1.dmp b/instruments/OPM/Elec Bass 1.dmp new file mode 100644 index 000000000..74357feb7 Binary files /dev/null and b/instruments/OPM/Elec Bass 1.dmp differ diff --git a/instruments/OPM/Electric Piano 2.dmp b/instruments/OPM/Electric Piano 2.dmp new file mode 100644 index 000000000..169689818 Binary files /dev/null and b/instruments/OPM/Electric Piano 2.dmp differ diff --git a/instruments/OPM/FlangerStrings 1.dmp b/instruments/OPM/FlangerStrings 1.dmp new file mode 100644 index 000000000..334caeff2 Binary files /dev/null and b/instruments/OPM/FlangerStrings 1.dmp differ diff --git a/instruments/OPM/FlangerStrings 2.dmp b/instruments/OPM/FlangerStrings 2.dmp new file mode 100644 index 000000000..7425f9ee6 Binary files /dev/null and b/instruments/OPM/FlangerStrings 2.dmp differ diff --git a/instruments/OPM/FlangerStrings 3.dmp b/instruments/OPM/FlangerStrings 3.dmp new file mode 100644 index 000000000..9becf2f8d Binary files /dev/null and b/instruments/OPM/FlangerStrings 3.dmp differ diff --git a/instruments/OPM/Flute 2.dmp b/instruments/OPM/Flute 2.dmp new file mode 100644 index 000000000..97a711fd4 Binary files /dev/null and b/instruments/OPM/Flute 2.dmp differ diff --git a/instruments/OPM/Flute.dmp b/instruments/OPM/Flute.dmp new file mode 100644 index 000000000..ade7fa7e5 Binary files /dev/null and b/instruments/OPM/Flute.dmp differ diff --git a/instruments/OPM/HammeredMetalLd1.dmp b/instruments/OPM/HammeredMetalLd1.dmp new file mode 100644 index 000000000..172a27fd0 Binary files /dev/null and b/instruments/OPM/HammeredMetalLd1.dmp differ diff --git a/instruments/OPM/Impact Synth 4.dmp b/instruments/OPM/Impact Synth 4.dmp new file mode 100644 index 000000000..dbbb86c63 Binary files /dev/null and b/instruments/OPM/Impact Synth 4.dmp differ diff --git a/instruments/OPM/Liquid Lead 3.dmp b/instruments/OPM/Liquid Lead 3.dmp new file mode 100644 index 000000000..a98e80ee6 Binary files /dev/null and b/instruments/OPM/Liquid Lead 3.dmp differ diff --git a/instruments/OPM/Mallet 2.dmp b/instruments/OPM/Mallet 2.dmp new file mode 100644 index 000000000..9299fe1d5 Binary files /dev/null and b/instruments/OPM/Mallet 2.dmp differ diff --git a/instruments/OPM/Mallet 3.dmp b/instruments/OPM/Mallet 3.dmp new file mode 100644 index 000000000..9e55d50bd Binary files /dev/null and b/instruments/OPM/Mallet 3.dmp differ diff --git a/instruments/OPM/Mallet 4.dmp b/instruments/OPM/Mallet 4.dmp new file mode 100644 index 000000000..a9576c4ce Binary files /dev/null and b/instruments/OPM/Mallet 4.dmp differ diff --git a/instruments/OPM/Mellow Lead 1.dmp b/instruments/OPM/Mellow Lead 1.dmp new file mode 100644 index 000000000..9adb3ced0 Binary files /dev/null and b/instruments/OPM/Mellow Lead 1.dmp differ diff --git a/instruments/OPM/Metal Bass 2.dmp b/instruments/OPM/Metal Bass 2.dmp new file mode 100644 index 000000000..2eefd72e5 Binary files /dev/null and b/instruments/OPM/Metal Bass 2.dmp differ diff --git a/instruments/OPM/Metal Bass 4.dmp b/instruments/OPM/Metal Bass 4.dmp new file mode 100644 index 000000000..1c7d8ac58 Binary files /dev/null and b/instruments/OPM/Metal Bass 4.dmp differ diff --git a/instruments/OPM/Metal Bass 5.dmp b/instruments/OPM/Metal Bass 5.dmp new file mode 100644 index 000000000..f3d148fed Binary files /dev/null and b/instruments/OPM/Metal Bass 5.dmp differ diff --git a/instruments/OPM/Metal Bass 6.dmp b/instruments/OPM/Metal Bass 6.dmp new file mode 100644 index 000000000..e6806ba31 Binary files /dev/null and b/instruments/OPM/Metal Bass 6.dmp differ diff --git a/instruments/OPM/Mini Acid 1.dmp b/instruments/OPM/Mini Acid 1.dmp new file mode 100644 index 000000000..22d361897 Binary files /dev/null and b/instruments/OPM/Mini Acid 1.dmp differ diff --git a/instruments/OPM/Octave Synth 1.dmp b/instruments/OPM/Octave Synth 1.dmp new file mode 100644 index 000000000..617e8d3af Binary files /dev/null and b/instruments/OPM/Octave Synth 1.dmp differ diff --git a/instruments/OPM/Piano Low.dmp b/instruments/OPM/Piano Low.dmp new file mode 100644 index 000000000..7b6e66112 Binary files /dev/null and b/instruments/OPM/Piano Low.dmp differ diff --git a/instruments/OPM/Plucked 1.dmp b/instruments/OPM/Plucked 1.dmp new file mode 100644 index 000000000..adbaf68db Binary files /dev/null and b/instruments/OPM/Plucked 1.dmp differ diff --git a/instruments/OPM/Plucked 2.dmp b/instruments/OPM/Plucked 2.dmp new file mode 100644 index 000000000..42df0e2fc Binary files /dev/null and b/instruments/OPM/Plucked 2.dmp differ diff --git a/instruments/OPM/Plucked 3.dmp b/instruments/OPM/Plucked 3.dmp new file mode 100644 index 000000000..368e9b717 Binary files /dev/null and b/instruments/OPM/Plucked 3.dmp differ diff --git a/instruments/OPM/Slap Bass 1.dmp b/instruments/OPM/Slap Bass 1.dmp new file mode 100644 index 000000000..95dd31c43 Binary files /dev/null and b/instruments/OPM/Slap Bass 1.dmp differ diff --git a/instruments/OPM/StringEns 3.dmp b/instruments/OPM/StringEns 3.dmp new file mode 100644 index 000000000..db134804e Binary files /dev/null and b/instruments/OPM/StringEns 3.dmp differ diff --git a/instruments/OPM/Synth Brass 3.dmp b/instruments/OPM/Synth Brass 3.dmp new file mode 100644 index 000000000..1b166cafd Binary files /dev/null and b/instruments/OPM/Synth Brass 3.dmp differ diff --git a/instruments/OPM/Synth Brass 4.dmp b/instruments/OPM/Synth Brass 4.dmp new file mode 100644 index 000000000..3b26a9e2b Binary files /dev/null and b/instruments/OPM/Synth Brass 4.dmp differ diff --git a/instruments/OPM/Synth Brass 5.dmp b/instruments/OPM/Synth Brass 5.dmp new file mode 100644 index 000000000..f567503e6 Binary files /dev/null and b/instruments/OPM/Synth Brass 5.dmp differ diff --git a/instruments/OPM/Synth Brass 6.dmp b/instruments/OPM/Synth Brass 6.dmp new file mode 100644 index 000000000..a8baa1473 Binary files /dev/null and b/instruments/OPM/Synth Brass 6.dmp differ diff --git a/instruments/OPM/Synth Flute.dmp b/instruments/OPM/Synth Flute.dmp new file mode 100644 index 000000000..a2ee31648 Binary files /dev/null and b/instruments/OPM/Synth Flute.dmp differ diff --git a/instruments/OPM/Synth Lead 2.dmp b/instruments/OPM/Synth Lead 2.dmp new file mode 100644 index 000000000..0248a94e3 Binary files /dev/null and b/instruments/OPM/Synth Lead 2.dmp differ diff --git a/instruments/OPM/Synth Lead 3.dmp b/instruments/OPM/Synth Lead 3.dmp new file mode 100644 index 000000000..4a6eacfab Binary files /dev/null and b/instruments/OPM/Synth Lead 3.dmp differ diff --git a/instruments/OPM/Synth Reed 2.dmp b/instruments/OPM/Synth Reed 2.dmp new file mode 100644 index 000000000..e2cafd0a2 Binary files /dev/null and b/instruments/OPM/Synth Reed 2.dmp differ diff --git a/instruments/OPM/Synth Reed 3.dmp b/instruments/OPM/Synth Reed 3.dmp new file mode 100644 index 000000000..a508ee5d0 Binary files /dev/null and b/instruments/OPM/Synth Reed 3.dmp differ diff --git a/instruments/OPM/Synth Reed 4.dmp b/instruments/OPM/Synth Reed 4.dmp new file mode 100644 index 000000000..947190ba2 Binary files /dev/null and b/instruments/OPM/Synth Reed 4.dmp differ diff --git a/instruments/OPM/VariBrass 2.dmp b/instruments/OPM/VariBrass 2.dmp new file mode 100644 index 000000000..0b8605e40 Binary files /dev/null and b/instruments/OPM/VariBrass 2.dmp differ diff --git a/instruments/OPN/bass/A.Bass1.fui b/instruments/OPN/bass/A.Bass1.fui new file mode 100644 index 000000000..46604da86 Binary files /dev/null and b/instruments/OPN/bass/A.Bass1.fui differ diff --git a/instruments/OPN/bass/A.Bass2a.fui b/instruments/OPN/bass/A.Bass2a.fui new file mode 100644 index 000000000..02ca3f21e Binary files /dev/null and b/instruments/OPN/bass/A.Bass2a.fui differ diff --git a/instruments/OPN/bass/A.Bass2b.fui b/instruments/OPN/bass/A.Bass2b.fui new file mode 100644 index 000000000..d643c4f0b Binary files /dev/null and b/instruments/OPN/bass/A.Bass2b.fui differ diff --git a/instruments/OPN/bass/A.Bass2c.fui b/instruments/OPN/bass/A.Bass2c.fui new file mode 100644 index 000000000..d2d24b1a9 Binary files /dev/null and b/instruments/OPN/bass/A.Bass2c.fui differ diff --git a/instruments/OPN/bass/Digi.Bass1.fui b/instruments/OPN/bass/Digi.Bass1.fui new file mode 100644 index 000000000..796a4457e Binary files /dev/null and b/instruments/OPN/bass/Digi.Bass1.fui differ diff --git a/instruments/OPN/bass/Digi.Bass2.fui b/instruments/OPN/bass/Digi.Bass2.fui new file mode 100644 index 000000000..3239f31dd Binary files /dev/null and b/instruments/OPN/bass/Digi.Bass2.fui differ diff --git a/instruments/OPN/bass/Digi.Bass3.fui b/instruments/OPN/bass/Digi.Bass3.fui new file mode 100644 index 000000000..bafe20b76 Binary files /dev/null and b/instruments/OPN/bass/Digi.Bass3.fui differ diff --git a/instruments/OPN/bass/E.Bass1a.fui b/instruments/OPN/bass/E.Bass1a.fui new file mode 100644 index 000000000..5a1e49514 Binary files /dev/null and b/instruments/OPN/bass/E.Bass1a.fui differ diff --git a/instruments/OPN/bass/E.Bass1b.fui b/instruments/OPN/bass/E.Bass1b.fui new file mode 100644 index 000000000..b008696ae Binary files /dev/null and b/instruments/OPN/bass/E.Bass1b.fui differ diff --git a/instruments/OPN/bass/E.Bass1c.fui b/instruments/OPN/bass/E.Bass1c.fui new file mode 100644 index 000000000..1a1fa9933 Binary files /dev/null and b/instruments/OPN/bass/E.Bass1c.fui differ diff --git a/instruments/OPN/bass/E.Bass1d.fui b/instruments/OPN/bass/E.Bass1d.fui new file mode 100644 index 000000000..13db5e3af Binary files /dev/null and b/instruments/OPN/bass/E.Bass1d.fui differ diff --git a/instruments/OPN/bass/E.Bass1e.fui b/instruments/OPN/bass/E.Bass1e.fui new file mode 100644 index 000000000..bdfdecbc6 Binary files /dev/null and b/instruments/OPN/bass/E.Bass1e.fui differ diff --git a/instruments/OPN/bass/E.Bass2a.fui b/instruments/OPN/bass/E.Bass2a.fui new file mode 100644 index 000000000..89fd5678b Binary files /dev/null and b/instruments/OPN/bass/E.Bass2a.fui differ diff --git a/instruments/OPN/bass/E.Bass2b.fui b/instruments/OPN/bass/E.Bass2b.fui new file mode 100644 index 000000000..df090c5c1 Binary files /dev/null and b/instruments/OPN/bass/E.Bass2b.fui differ diff --git a/instruments/OPN/bass/E.Bass2c.fui b/instruments/OPN/bass/E.Bass2c.fui new file mode 100644 index 000000000..7577d468d Binary files /dev/null and b/instruments/OPN/bass/E.Bass2c.fui differ diff --git a/instruments/OPN/bass/E.Bass3a.fui b/instruments/OPN/bass/E.Bass3a.fui new file mode 100644 index 000000000..96f236ccb Binary files /dev/null and b/instruments/OPN/bass/E.Bass3a.fui differ diff --git a/instruments/OPN/bass/E.Bass3b.fui b/instruments/OPN/bass/E.Bass3b.fui new file mode 100644 index 000000000..fe7e9922f Binary files /dev/null and b/instruments/OPN/bass/E.Bass3b.fui differ diff --git a/instruments/OPN/bass/E.Bass3c.fui b/instruments/OPN/bass/E.Bass3c.fui new file mode 100644 index 000000000..e1b3feb47 Binary files /dev/null and b/instruments/OPN/bass/E.Bass3c.fui differ diff --git a/instruments/OPN/bass/E.Bass3d.fui b/instruments/OPN/bass/E.Bass3d.fui new file mode 100644 index 000000000..fedfb8431 Binary files /dev/null and b/instruments/OPN/bass/E.Bass3d.fui differ diff --git a/instruments/OPN/bass/E.Bass3e.fui b/instruments/OPN/bass/E.Bass3e.fui new file mode 100644 index 000000000..64a3c187e Binary files /dev/null and b/instruments/OPN/bass/E.Bass3e.fui differ diff --git a/instruments/OPN/bass/E.Bass3f.fui b/instruments/OPN/bass/E.Bass3f.fui new file mode 100644 index 000000000..ae876d3a7 Binary files /dev/null and b/instruments/OPN/bass/E.Bass3f.fui differ diff --git a/instruments/OPN/bass/E.Bass3g.fui b/instruments/OPN/bass/E.Bass3g.fui new file mode 100644 index 000000000..0bf4008be Binary files /dev/null and b/instruments/OPN/bass/E.Bass3g.fui differ diff --git a/instruments/OPN/bass/E.Bass4a.fui b/instruments/OPN/bass/E.Bass4a.fui new file mode 100644 index 000000000..39c9027dc Binary files /dev/null and b/instruments/OPN/bass/E.Bass4a.fui differ diff --git a/instruments/OPN/bass/E.Bass4b.fui b/instruments/OPN/bass/E.Bass4b.fui new file mode 100644 index 000000000..0d7bf5082 Binary files /dev/null and b/instruments/OPN/bass/E.Bass4b.fui differ diff --git a/instruments/OPN/bass/E.Bass4c.fui b/instruments/OPN/bass/E.Bass4c.fui new file mode 100644 index 000000000..5d093ef60 Binary files /dev/null and b/instruments/OPN/bass/E.Bass4c.fui differ diff --git a/instruments/OPN/bass/E.Bass5.fui b/instruments/OPN/bass/E.Bass5.fui new file mode 100644 index 000000000..9f48b6214 Binary files /dev/null and b/instruments/OPN/bass/E.Bass5.fui differ diff --git a/instruments/OPN/bass/E.Bass6.fui b/instruments/OPN/bass/E.Bass6.fui new file mode 100644 index 000000000..c8f0ee3be Binary files /dev/null and b/instruments/OPN/bass/E.Bass6.fui differ diff --git a/instruments/OPN/bass/E.Bass7.fui b/instruments/OPN/bass/E.Bass7.fui new file mode 100644 index 000000000..a199aa5bd Binary files /dev/null and b/instruments/OPN/bass/E.Bass7.fui differ diff --git a/instruments/OPN/bass/House Bass 2.fui b/instruments/OPN/bass/House Bass 2.fui new file mode 100644 index 000000000..acd2ee3d6 Binary files /dev/null and b/instruments/OPN/bass/House Bass 2.fui differ diff --git a/instruments/OPN/bass/House Bass.fui b/instruments/OPN/bass/House Bass.fui new file mode 100644 index 000000000..c9f50c207 Binary files /dev/null and b/instruments/OPN/bass/House Bass.fui differ diff --git a/instruments/OPN/bass/Metal Bass 1.dmp b/instruments/OPN/bass/Metal Bass 1.dmp new file mode 100644 index 000000000..c7f807e2f Binary files /dev/null and b/instruments/OPN/bass/Metal Bass 1.dmp differ diff --git a/instruments/OPN/bass/Metal Bass 3.dmp b/instruments/OPN/bass/Metal Bass 3.dmp new file mode 100644 index 000000000..afb3374f6 Binary files /dev/null and b/instruments/OPN/bass/Metal Bass 3.dmp differ diff --git a/instruments/OPN/bass/Percussion Bass 2.dmp b/instruments/OPN/bass/Percussion Bass 2.dmp new file mode 100644 index 000000000..1e751ebcc Binary files /dev/null and b/instruments/OPN/bass/Percussion Bass 2.dmp differ diff --git a/instruments/OPN/bass/Percussion Bass.dmp b/instruments/OPN/bass/Percussion Bass.dmp new file mode 100644 index 000000000..ff580b77a Binary files /dev/null and b/instruments/OPN/bass/Percussion Bass.dmp differ diff --git a/instruments/OPN/bass/Slap Bass 2.fui b/instruments/OPN/bass/Slap Bass 2.fui new file mode 100644 index 000000000..7898c13c1 Binary files /dev/null and b/instruments/OPN/bass/Slap Bass 2.fui differ diff --git a/instruments/OPN/bass/Slap Bass 3.fui b/instruments/OPN/bass/Slap Bass 3.fui new file mode 100644 index 000000000..b61505ed7 Binary files /dev/null and b/instruments/OPN/bass/Slap Bass 3.fui differ diff --git a/instruments/OPN/bass/Slap Bass 4.fui b/instruments/OPN/bass/Slap Bass 4.fui new file mode 100644 index 000000000..937c1e89d Binary files /dev/null and b/instruments/OPN/bass/Slap Bass 4.fui differ diff --git a/instruments/OPN/drums/BassD 1.dmp b/instruments/OPN/drums/BassD 1.dmp new file mode 100644 index 000000000..f3e7ea190 Binary files /dev/null and b/instruments/OPN/drums/BassD 1.dmp differ diff --git a/instruments/OPN/drums/Cymbal.fui b/instruments/OPN/drums/Cymbal.fui new file mode 100644 index 000000000..475b4f726 Binary files /dev/null and b/instruments/OPN/drums/Cymbal.fui differ diff --git a/instruments/OPN/drums/Kick Drum.fui b/instruments/OPN/drums/Kick Drum.fui new file mode 100644 index 000000000..286c63767 Binary files /dev/null and b/instruments/OPN/drums/Kick Drum.fui differ diff --git a/instruments/OPN/drums/Snare 4.dmp b/instruments/OPN/drums/Snare 4.dmp new file mode 100644 index 000000000..b335ca03a Binary files /dev/null and b/instruments/OPN/drums/Snare 4.dmp differ diff --git a/instruments/OPN/drums/Snare Drum.fui b/instruments/OPN/drums/Snare Drum.fui new file mode 100644 index 000000000..7c966423d Binary files /dev/null and b/instruments/OPN/drums/Snare Drum.fui differ diff --git a/instruments/OPN/guitar/Synth Guitar.dmp b/instruments/OPN/guitar/Synth Guitar.dmp new file mode 100644 index 000000000..6f7efa205 Binary files /dev/null and b/instruments/OPN/guitar/Synth Guitar.dmp differ diff --git a/instruments/OPN/horn/Brass Lead 1.fui b/instruments/OPN/horn/Brass Lead 1.fui new file mode 100644 index 000000000..eed11f9f8 Binary files /dev/null and b/instruments/OPN/horn/Brass Lead 1.fui differ diff --git a/instruments/OPN/horn/Brass Lead 2.fui b/instruments/OPN/horn/Brass Lead 2.fui new file mode 100644 index 000000000..817a98893 Binary files /dev/null and b/instruments/OPN/horn/Brass Lead 2.fui differ diff --git a/instruments/OPN/horn/Brass Synth 1.dmp b/instruments/OPN/horn/Brass Synth 1.dmp new file mode 100644 index 000000000..3b440a887 Binary files /dev/null and b/instruments/OPN/horn/Brass Synth 1.dmp differ diff --git a/instruments/OPN/horn/ModBrass 1.dmp b/instruments/OPN/horn/ModBrass 1.dmp new file mode 100644 index 000000000..97f8a0aac Binary files /dev/null and b/instruments/OPN/horn/ModBrass 1.dmp differ diff --git a/instruments/OPN/horn/Sharp Hepta-Brass.dmp b/instruments/OPN/horn/Sharp Hepta-Brass.dmp new file mode 100644 index 000000000..2599a07dd Binary files /dev/null and b/instruments/OPN/horn/Sharp Hepta-Brass.dmp differ diff --git a/instruments/OPN/horn/Sharp Horn.dmp b/instruments/OPN/horn/Sharp Horn.dmp new file mode 100644 index 000000000..ed1d71fb9 Binary files /dev/null and b/instruments/OPN/horn/Sharp Horn.dmp differ diff --git a/instruments/OPN/horn/Synth Brass 1.dmp b/instruments/OPN/horn/Synth Brass 1.dmp new file mode 100644 index 000000000..ceb765fe7 Binary files /dev/null and b/instruments/OPN/horn/Synth Brass 1.dmp differ diff --git a/instruments/OPN/horn/Synth Brass 2.dmp b/instruments/OPN/horn/Synth Brass 2.dmp new file mode 100644 index 000000000..818d70cf4 Binary files /dev/null and b/instruments/OPN/horn/Synth Brass 2.dmp differ diff --git a/instruments/OPN/horn/Trumpet 1.fui b/instruments/OPN/horn/Trumpet 1.fui new file mode 100644 index 000000000..d7c97a2f5 Binary files /dev/null and b/instruments/OPN/horn/Trumpet 1.fui differ diff --git a/instruments/OPN/horn/Trumpet 2.fui b/instruments/OPN/horn/Trumpet 2.fui new file mode 100644 index 000000000..111665d21 Binary files /dev/null and b/instruments/OPN/horn/Trumpet 2.fui differ diff --git a/instruments/OPN/horn/VariBrass 1.dmp b/instruments/OPN/horn/VariBrass 1.dmp new file mode 100644 index 000000000..ef970e6d3 Binary files /dev/null and b/instruments/OPN/horn/VariBrass 1.dmp differ diff --git a/instruments/OPN/keys/Digital Clav 1.fui b/instruments/OPN/keys/Digital Clav 1.fui new file mode 100644 index 000000000..3867cfd1d Binary files /dev/null and b/instruments/OPN/keys/Digital Clav 1.fui differ diff --git a/instruments/OPN/keys/Digital Piano 1.fui b/instruments/OPN/keys/Digital Piano 1.fui new file mode 100644 index 000000000..998b3afde Binary files /dev/null and b/instruments/OPN/keys/Digital Piano 1.fui differ diff --git a/instruments/OPN/keys/Digital Piano 2.fui b/instruments/OPN/keys/Digital Piano 2.fui new file mode 100644 index 000000000..e799aedeb Binary files /dev/null and b/instruments/OPN/keys/Digital Piano 2.fui differ diff --git a/instruments/OPN/keys/Digital Piano 3.fui b/instruments/OPN/keys/Digital Piano 3.fui new file mode 100644 index 000000000..3636a6202 Binary files /dev/null and b/instruments/OPN/keys/Digital Piano 3.fui differ diff --git a/instruments/OPN/keys/E. Piano 3 (Glassy).dmp b/instruments/OPN/keys/E. Piano 3 (Glassy).dmp new file mode 100644 index 000000000..a519345ad Binary files /dev/null and b/instruments/OPN/keys/E. Piano 3 (Glassy).dmp differ diff --git a/instruments/OPN/keys/Organ 2 (Digital).dmp b/instruments/OPN/keys/Organ 2 (Digital).dmp new file mode 100644 index 000000000..47ea44cca Binary files /dev/null and b/instruments/OPN/keys/Organ 2 (Digital).dmp differ diff --git a/instruments/OPN/keys/Organ 3.fui b/instruments/OPN/keys/Organ 3.fui new file mode 100644 index 000000000..b952efa90 Binary files /dev/null and b/instruments/OPN/keys/Organ 3.fui differ diff --git a/instruments/OPN/keys/Organ 4.fui b/instruments/OPN/keys/Organ 4.fui new file mode 100644 index 000000000..cdb3c8fa6 Binary files /dev/null and b/instruments/OPN/keys/Organ 4.fui differ diff --git a/instruments/OPN/keys/Soft Organ Lead.dmp b/instruments/OPN/keys/Soft Organ Lead.dmp new file mode 100644 index 000000000..1582e5d7b Binary files /dev/null and b/instruments/OPN/keys/Soft Organ Lead.dmp differ diff --git a/instruments/OPN/percussion/Mallet 1.dmp b/instruments/OPN/percussion/Mallet 1.dmp new file mode 100644 index 000000000..c54a1c6ba Binary files /dev/null and b/instruments/OPN/percussion/Mallet 1.dmp differ diff --git a/instruments/OPN/synth/Liquid Lead.dmp b/instruments/OPN/synth/Liquid Lead.dmp new file mode 100644 index 000000000..92b2f1fbd Binary files /dev/null and b/instruments/OPN/synth/Liquid Lead.dmp differ diff --git a/instruments/OPN/synth/Metal Lead 2.dmp b/instruments/OPN/synth/Metal Lead 2.dmp new file mode 100644 index 000000000..ceba5240e Binary files /dev/null and b/instruments/OPN/synth/Metal Lead 2.dmp differ diff --git a/instruments/OPN/synth/Metal Lead 3.dmp b/instruments/OPN/synth/Metal Lead 3.dmp new file mode 100644 index 000000000..779a7a559 Binary files /dev/null and b/instruments/OPN/synth/Metal Lead 3.dmp differ diff --git a/instruments/OPN/synth/Metal Lead.dmp b/instruments/OPN/synth/Metal Lead.dmp new file mode 100644 index 000000000..716bff888 Binary files /dev/null and b/instruments/OPN/synth/Metal Lead.dmp differ diff --git a/instruments/OPN/synth/ResoUnison-Synth 1.dmp b/instruments/OPN/synth/ResoUnison-Synth 1.dmp new file mode 100644 index 000000000..4b2f38d6c Binary files /dev/null and b/instruments/OPN/synth/ResoUnison-Synth 1.dmp differ diff --git a/instruments/OPN/synth/Saw Lead.fui b/instruments/OPN/synth/Saw Lead.fui new file mode 100644 index 000000000..5b2352051 Binary files /dev/null and b/instruments/OPN/synth/Saw Lead.fui differ diff --git a/instruments/OPN/synth/SeqSynth 1.dmp b/instruments/OPN/synth/SeqSynth 1.dmp new file mode 100644 index 000000000..036bf0ab6 Binary files /dev/null and b/instruments/OPN/synth/SeqSynth 1.dmp differ diff --git a/instruments/OPN/synth/Synth Reed 1.dmp b/instruments/OPN/synth/Synth Reed 1.dmp new file mode 100644 index 000000000..bdbacbb43 Binary files /dev/null and b/instruments/OPN/synth/Synth Reed 1.dmp differ diff --git a/instruments/OPN/wind/Clarinet.fui b/instruments/OPN/wind/Clarinet.fui new file mode 100644 index 000000000..d505247dd Binary files /dev/null and b/instruments/OPN/wind/Clarinet.fui differ diff --git a/instruments/OPN/wind/Even-Calliope.dmp b/instruments/OPN/wind/Even-Calliope.dmp new file mode 100644 index 000000000..55cee7bdf Binary files /dev/null and b/instruments/OPN/wind/Even-Calliope.dmp differ diff --git a/instruments/OPN/wind/Harmonica 2.fui b/instruments/OPN/wind/Harmonica 2.fui new file mode 100644 index 000000000..56d6a1483 Binary files /dev/null and b/instruments/OPN/wind/Harmonica 2.fui differ diff --git a/instruments/OPN/wind/Sax 1.fui b/instruments/OPN/wind/Sax 1.fui new file mode 100644 index 000000000..8d4d8920e Binary files /dev/null and b/instruments/OPN/wind/Sax 1.fui differ diff --git a/instruments/OPN/wind/Sax 2 (Bari).fui b/instruments/OPN/wind/Sax 2 (Bari).fui new file mode 100644 index 000000000..31fb98e75 Binary files /dev/null and b/instruments/OPN/wind/Sax 2 (Bari).fui differ diff --git a/papers/format.md b/papers/format.md index 92f8b0edf..d8e12b7bd 100644 --- a/papers/format.md +++ b/papers/format.md @@ -256,6 +256,8 @@ size | description | - 0xe0: QSound - 19 channels | - 0xe1: PS1 - 24 channels (UNAVAILABLE) | - 0xe2: C64 (6581) with PCM - 4 channels (UNAVAILABLE) + | - 0xe3: Watara Supervision - 4 channels (UNAVAILABLE) + | - 0xe4: µPD1771C - 1 channel (UNAVAILABLE) | - 0xf0: SID2 - 3 channels | - 0xf1: 5E01 - 5 channels | - 0xfc: Pong - 1 channel diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index b073e423e..4e5357722 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -155,43 +155,76 @@ void DivPlatformAY8910::runDAC() { } void DivPlatformAY8910::runTFX() { - if (selCore) return; + /* + developer's note: if you are checking for intellivision + make sure to add "&& selCore" + because for some reason, the register remap doesn't work + when the user uses AtomicSSG core + */ int timerPeriod, output; for (int i=0; i<3; i++) { if (chan[i].active && (chan[i].curPSGMode.val&16) && !(chan[i].curPSGMode.val&8) && chan[i].tfx.mode!=-1) { + if (chan[i].tfx.mode == -1 && !isMuted[i]) { + /* + bug: if in the timer FX macro the user enables + and then disables PWM while there is no volume macro + there is now a random chance that the resulting output + is silent or has volume set incorrectly + i've tried to implement a fix, but it seems to be + ineffective, so... + TODO: actually implement a proper fix + */ + if (intellivision && chan[i].curPSGMode.getEnvelope()) { + immWrite(0x08+i,(chan[i].outVol&0xc)<<2); + continue; + } else { + immWrite(0x08+i,(chan[i].outVol&15)|((chan[i].curPSGMode.getEnvelope())<<2)); + continue; + } + } chan[i].tfx.counter += 1; if (chan[i].tfx.counter >= chan[i].tfx.period && chan[i].tfx.mode == 0) { chan[i].tfx.counter = 0; chan[i].tfx.out ^= 1; - output = MAX(0, ((chan[i].tfx.out) ? (chan[i].outVol&15) : (chan[i].tfx.lowBound-(15-chan[i].outVol)))); - output &= 15; + output = ((chan[i].tfx.out) ? chan[i].outVol : (chan[i].tfx.lowBound-(15-chan[i].outVol))); + // TODO: fix this stupid crackling noise that happens + // everytime the volume changes + output = (output <= 0) ? 0 : output; // underflow + output = (output >= 15) ? 15 : output; // overflow + output &= 15; // i don't know if i need this but i'm too scared to remove it if (!isMuted[i]) { - immWrite(0x08+i,output|(chan[i].curPSGMode.getEnvelope()<<2)); + if (intellivision && selCore) { + immWrite(0x0b+i,(output&0xc)<<2); + } else { + immWrite(0x08+i,output|(chan[i].curPSGMode.getEnvelope()<<2)); + } } } if (chan[i].tfx.counter >= chan[i].tfx.period && chan[i].tfx.mode == 1) { chan[i].tfx.counter = 0; if (!isMuted[i]) { - immWrite(0xd, ayEnvMode); + if (intellivision && selCore) { + immWrite(0xa, ayEnvMode); + } else { + immWrite(0xd, ayEnvMode); + } } } if (chan[i].tfx.counter >= chan[i].tfx.period && chan[i].tfx.mode == 2) { chan[i].tfx.counter = 0; } - if (chan[i].tfx.mode == -1 && !isMuted[i]) { - if (intellivision && chan[i].curPSGMode.getEnvelope()) { - immWrite(0x08+i,(chan[i].outVol&0xc)<<2); - } else { - immWrite(0x08+i,(chan[i].outVol&15)|((chan[i].curPSGMode.getEnvelope())<<2)); - } - } } if (chan[i].tfx.num > 0) { - timerPeriod = chan[i].freq*chan[i].tfx.den/chan[i].tfx.num; - } else { - timerPeriod = chan[i].freq*chan[i].tfx.den; - } + timerPeriod = chan[i].freq*chan[i].tfx.den/chan[i].tfx.num; + } else { + timerPeriod = chan[i].freq*chan[i].tfx.den; + } if (chan[i].tfx.num > 0 && chan[i].tfx.den > 0) chan[i].tfx.period=timerPeriod+chan[i].tfx.offset; + // stupid pitch correction because: + // YM2149 half-clock and Sunsoft 5B: timers run an octave too high + // on AtomicSSG core timers run 2 octaves too high + if (clockSel || sunsoft) chan[i].tfx.period = chan[i].tfx.period * 2; + if (selCore) chan[i].tfx.period = chan[i].tfx.period * 4; } } @@ -388,6 +421,7 @@ void DivPlatformAY8910::tick(bool sysTick) { if (chan[i].std.phaseReset.had) { if (chan[i].std.phaseReset.val==1) { chan[i].tfx.counter = 0; + chan[i].tfx.out = 0; if (chan[i].nextPSGMode.val&8) { if (dumpWrites) addWrite(0xffff0002+(i<<8),0); if (chan[i].dac.sample<0 || chan[i].dac.sample>=parent->song.sampleLen) { @@ -726,12 +760,10 @@ int DivPlatformAY8910::dispatch(DivCommand c) { break; } case DIV_CMD_STD_NOISE_MODE: - if (c.value&0xf0 && !(chan[c.chan].nextPSGMode.val&8)) { - chan[c.chan].nextPSGMode.val|=16; - chan[c.chan].tfx.mode = (c.value&3); - } if (!(chan[c.chan].nextPSGMode.val&8)) { - if (c.value<16) { + chan[c.chan].nextPSGMode.val|=16; + chan[c.chan].tfx.mode=(((c.value&0xf0)>>4)&3)-1; + if ((c.value&15)<16) { chan[c.chan].nextPSGMode.val=(c.value+1)&7; chan[c.chan].nextPSGMode.val|=chan[c.chan].curPSGMode.val&16; if (chan[c.chan].active) { @@ -805,9 +837,16 @@ int DivPlatformAY8910::dispatch(DivCommand c) { updateOutSel(true); immWrite(14+(c.value?1:0),(c.value?portBVal:portAVal)); break; - case DIV_CMD_AY_AUTO_PWM: - chan[c.chan].tfx.offset=c.value; + case DIV_CMD_AY_NOISE_MASK_AND: + chan[c.chan].tfx.num=c.value>>4; + chan[c.chan].tfx.den=c.value&15; break; + case DIV_CMD_AY_AUTO_PWM: { + // best way i could find to do signed :/ + signed char signVal=c.value; + chan[c.chan].tfx.offset=signVal; + break; + } case DIV_CMD_SAMPLE_MODE: if (c.value>0) { chan[c.chan].nextPSGMode.val|=8; diff --git a/src/engine/song.h b/src/engine/song.h index 8912ec4a1..5976b904f 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -141,6 +141,8 @@ enum DivSystem { DIV_SYSTEM_5E01, DIV_SYSTEM_BIFURCATOR, DIV_SYSTEM_SID2, + + DIV_SYSTEM_MAX }; enum DivEffectType: unsigned short { diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index f56f50a1e..5aa7abdac 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -433,6 +433,7 @@ void DivEngine::registerSystems() { {0x25, {DIV_CMD_AY_ENVELOPE_SLIDE, _("25xx: Envelope slide up"), negEffectVal}}, {0x26, {DIV_CMD_AY_ENVELOPE_SLIDE, _("26xx: Envelope slide down")}}, {0x29, {DIV_CMD_AY_AUTO_ENVELOPE, _("29xy: Set auto-envelope (x: numerator; y: denominator)")}}, + {0x2c, {DIV_CMD_AY_AUTO_PWM, _("2Cxx: Set timer period offset (bit 7: sign)")}}, {0x2e, {DIV_CMD_AY_IO_WRITE, _("2Exx: Write to I/O port A"), constVal<0>, effectVal}}, {0x2f, {DIV_CMD_AY_IO_WRITE, _("2Fxx: Write to I/O port B"), constVal<1>, effectVal}}, }; diff --git a/src/gui/about.cpp b/src/gui/about.cpp index eb4b06753..81849c0ca 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -75,7 +75,7 @@ const char* aboutLine[]={ "Polski: freq-mod, PoznańskiSzybkowiec", "Português (Brasil): Kagamiin~", "Русский: Background2982, LTVA", - "Slovenčina: Mr. Hassium", + "Slovenčina: Wegfrei", "Svenska: RevvoBolt", "ไทย: akumanatt", "", @@ -206,6 +206,7 @@ const char* aboutLine[]={ "Ultraprogramer", "UserSniper", "Weeppiko", + "Wegfrei", "Xan", "Yuzu4K", "Zabir", diff --git a/src/gui/editControls.cpp b/src/gui/editControls.cpp index 3eba0298c..c492a8e17 100644 --- a/src/gui/editControls.cpp +++ b/src/gui/editControls.cpp @@ -130,7 +130,7 @@ const bool mobileButtonPersist[32]={ // page 1 false, false, - false, + true, false, true, true, diff --git a/src/gui/exportOptions.cpp b/src/gui/exportOptions.cpp index aca5523f0..bb223aac4 100644 --- a/src/gui/exportOptions.cpp +++ b/src/gui/exportOptions.cpp @@ -249,16 +249,18 @@ void FurnaceGUI::drawExportROM(bool onWindow) { for (int i=0; igetROMExportDef((DivROMExportOptions)i); if (newDef!=NULL) { - if (ImGui::Selectable(newDef->name)) { - romTarget=(DivROMExportOptions)i; - romMultiFile=newDef->multiOutput; - romConfig=DivConfig(); - if (newDef->fileExt==NULL) { - romFilterName=""; - romFilterExt=""; - } else { - romFilterName=newDef->fileType; - romFilterExt=newDef->fileExt; + if (romExportAvail[i]) { + if (ImGui::Selectable(newDef->name)) { + romTarget=(DivROMExportOptions)i; + romMultiFile=newDef->multiOutput; + romConfig=DivConfig(); + if (newDef->fileExt==NULL) { + romFilterName=""; + romFilterExt=""; + } else { + romFilterName=newDef->fileType; + romFilterExt=newDef->fileExt; + } } } } @@ -436,9 +438,11 @@ void FurnaceGUI::drawExport() { drawExportVGM(true); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem(_("ROM"))) { - drawExportROM(true); - ImGui::EndTabItem(); + if (romExportExists) { + if (ImGui::BeginTabItem(_("ROM"))) { + drawExportROM(true); + ImGui::EndTabItem(); + } } int numZSMCompat=0; for (int i=0; isong.systemLen; i++) { diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 45d71e95f..37443c46e 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -752,6 +752,88 @@ void FurnaceGUI::autoDetectSystem() { } } +void FurnaceGUI::updateROMExportAvail() { + unsigned char sysReqCount[DIV_SYSTEM_MAX]; + unsigned char defReqCount[DIV_SYSTEM_MAX]; + + memset(sysReqCount,0,DIV_SYSTEM_MAX); + for (int i=0; isong.systemLen; i++) { + sysReqCount[e->song.system[i]]++; + } + + memset(romExportAvail,0,sizeof(bool)*DIV_ROM_MAX); + romExportExists=false; + + for (int i=0; igetROMExportDef((DivROMExportOptions)i); + if (newDef!=NULL) { + // check for viability + bool viable=true; + + memset(defReqCount,0,DIV_SYSTEM_MAX); + for (DivSystem j: newDef->requisites) { + defReqCount[j]++; + } + + switch (newDef->requisitePolicy) { + case DIV_REQPOL_EXACT: + for (int j=0; jsysReqCount[j]) { + viable=false; + break; + } + } + break; + case DIV_REQPOL_LAX: + viable=false; + for (DivSystem j: newDef->requisites) { + if (defReqCount[j]<=sysReqCount[j]) { + viable=true; + break; + } + } + break; + } + + if (viable) { + romExportAvail[i]=true; + romExportExists=true; + } + } + } + + if (!romExportAvail[romTarget]) { + // find a new one + romTarget=DIV_ROM_ABSTRACT; + for (int i=0; igetROMExportDef((DivROMExportOptions)i); + if (newDef!=NULL) { + if (romExportAvail[i]) { + romTarget=(DivROMExportOptions)i; + romMultiFile=newDef->multiOutput; + romConfig=DivConfig(); + if (newDef->fileExt==NULL) { + romFilterName=""; + romFilterExt=""; + } else { + romFilterName=newDef->fileType; + romFilterExt=newDef->fileExt; + } + break; + } + } + } + } +} + ImVec4 FurnaceGUI::channelColor(int ch) { switch (settings.channelColors) { case 0: @@ -2359,6 +2441,7 @@ int FurnaceGUI::load(String path) { undoHist.clear(); redoHist.clear(); updateWindowTitle(); + updateROMExportAvail(); updateScroll(0); if (!e->getWarnings().empty()) { showWarning(e->getWarnings(),GUI_WARN_GENERIC); @@ -4301,9 +4384,11 @@ bool FurnaceGUI::loop() { drawExportVGM(); ImGui::EndMenu(); } - if (ImGui::BeginMenu(_("export ROM..."))) { - drawExportROM(); - ImGui::EndMenu(); + if (romExportExists) { + if (ImGui::BeginMenu(_("export ROM..."))) { + drawExportROM(); + ImGui::EndMenu(); + } } int numZSMCompat=0; for (int i=0; isong.systemLen; i++) { @@ -4336,9 +4421,11 @@ bool FurnaceGUI::loop() { curExportType=GUI_EXPORT_VGM; displayExport=true; } - if (ImGui::MenuItem(_("export ROM..."))) { - curExportType=GUI_EXPORT_ROM; - displayExport=true; + if (romExportExists) { + if (ImGui::MenuItem(_("export ROM..."))) { + curExportType=GUI_EXPORT_ROM; + displayExport=true; + } } int numZSMCompat=0; for (int i=0; isong.systemLen; i++) { @@ -4387,6 +4474,7 @@ bool FurnaceGUI::loop() { autoDetectSystem(); } updateWindowTitle(); + updateROMExportAvail(); } ImGui::EndMenu(); } @@ -4413,6 +4501,7 @@ bool FurnaceGUI::loop() { autoDetectSystem(); } updateWindowTitle(); + updateROMExportAvail(); } else { showError(fmt::sprintf(_("cannot change chip! (%s)"),e->getLastError())); } @@ -4437,6 +4526,7 @@ bool FurnaceGUI::loop() { autoDetectSystem(); updateWindowTitle(); } + updateROMExportAvail(); } } ImGui::EndMenu(); @@ -5695,6 +5785,7 @@ bool FurnaceGUI::loop() { selEnd=SelectionPoint(); cursor=SelectionPoint(); updateWindowTitle(); + updateROMExportAvail(); } else { ImGui::OpenPopup(_("New Song")); } @@ -6245,6 +6336,7 @@ bool FurnaceGUI::loop() { updateWindowTitle(); MARK_MODIFIED; } + updateROMExportAvail(); ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -7263,6 +7355,7 @@ bool FurnaceGUI::init() { } updateWindowTitle(); + updateROMExportAvail(); logV("max texture size: %dx%d",rend->getMaxTextureWidth(),rend->getMaxTextureHeight()); @@ -8397,7 +8490,8 @@ FurnaceGUI::FurnaceGUI(): romTarget(DIV_ROM_ABSTRACT), romMultiFile(false), romExportSave(false), - pendingExport(NULL) { + pendingExport(NULL), + romExportExists(false) { // value keys valueKeys[SDLK_0]=0; valueKeys[SDLK_1]=1; @@ -8516,6 +8610,8 @@ FurnaceGUI::FurnaceGUI(): // effect sorting memset(effectsShow,1,sizeof(bool)*10); + memset(romExportAvail,0,sizeof(bool)*DIV_ROM_MAX); + strncpy(noteOffLabel,"OFF",32); strncpy(noteRelLabel,"===",32); strncpy(macroRelLabel,"REL",32); diff --git a/src/gui/gui.h b/src/gui/gui.h index aeecf4ee5..dcc2bf405 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2687,6 +2687,8 @@ class FurnaceGUI { String romFilterName, romFilterExt; String romExportPath; DivROMExport* pendingExport; + bool romExportAvail[DIV_ROM_MAX]; + bool romExportExists; // user presets window std::vector selectedUserPreset; @@ -2736,6 +2738,7 @@ class FurnaceGUI { bool portSet(String label, unsigned int portSetID, int ins, int outs, int activeIns, int activeOuts, int& clickedPort, std::map& portPos); void updateWindowTitle(); + void updateROMExportAvail(); void autoDetectSystem(); void autoDetectSystemIter(std::vector& category, bool& isMatch, std::map& defCountMap, std::map& defConfMap, std::map& sysCountMap, std::map& sysConfMap); void prepareLayout(); diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 045fab861..1c7dd9afb 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -7585,6 +7585,10 @@ void FurnaceGUI::drawInsEdit() { macroList.push_back(FurnaceGUIMacroDesc(_("Timer Num"),&ins->std.ex8Macro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); macroList.push_back(FurnaceGUIMacroDesc(_("Timer Den"),&ins->std.fmsMacro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); macroList.push_back(FurnaceGUIMacroDesc(_("PWM Boundary"),&ins->std.amsMacro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); + // workaround, because the gui will not set + // zoom or scroll if we're not in macros tab + ins->std.ex7Macro.vZoom=128; + ins->std.ex7Macro.vScroll=2048-64; drawMacros(macroList,macroEditStateMacros); ImGui::EndTabItem(); } diff --git a/src/gui/newSong.cpp b/src/gui/newSong.cpp index d542188a4..f03715be5 100644 --- a/src/gui/newSong.cpp +++ b/src/gui/newSong.cpp @@ -289,6 +289,7 @@ void FurnaceGUI::drawNewSong() { selEnd=SelectionPoint(); cursor=SelectionPoint(); updateWindowTitle(); + updateROMExportAvail(); ImGui::CloseCurrentPopup(); } diff --git a/src/gui/sysManager.cpp b/src/gui/sysManager.cpp index e7a25d67c..b4e08fc36 100644 --- a/src/gui/sysManager.cpp +++ b/src/gui/sysManager.cpp @@ -91,6 +91,11 @@ void FurnaceGUI::drawSysManager() { if (!e->duplicateSystem(i,sysDupCloneChannels,sysDupEnd)) { showError(fmt::sprintf(_("cannot clone chip! (%s)"),e->getLastError())); } else { + if (e->song.autoSystem) { + autoDetectSystem(); + updateWindowTitle(); + } + updateROMExportAvail(); MARK_MODIFIED; } } @@ -105,6 +110,7 @@ void FurnaceGUI::drawSysManager() { autoDetectSystem(); } updateWindowTitle(); + updateROMExportAvail(); } else { showError(fmt::sprintf(_("cannot change chip! (%s)"),e->getLastError())); } @@ -143,6 +149,7 @@ void FurnaceGUI::drawSysManager() { autoDetectSystem(); } updateWindowTitle(); + updateROMExportAvail(); ImGui::CloseCurrentPopup(); } ImGui::EndPopup();