diff --git a/demos/a2600/atari_breakbeat.fur b/demos/a2600/atari_breakbeat.fur deleted file mode 100644 index 7dfbb0e35..000000000 Binary files a/demos/a2600/atari_breakbeat.fur and /dev/null differ diff --git a/demos/amiga/furnace0.6crk.fur b/demos/amiga/furnace0.6crk.fur deleted file mode 100644 index 0966f17b0..000000000 Binary files a/demos/amiga/furnace0.6crk.fur and /dev/null differ diff --git a/demos/arcade/Utter_Determination_TaitoArcade.fur b/demos/arcade/Utter_Determination_TaitoArcade.fur deleted file mode 100644 index 67467ba22..000000000 Binary files a/demos/arcade/Utter_Determination_TaitoArcade.fur and /dev/null differ diff --git a/demos/gameboy/ice_3_advert.fur b/demos/gameboy/ice_3_advert.fur deleted file mode 100644 index cb0d61a93..000000000 Binary files a/demos/gameboy/ice_3_advert.fur and /dev/null differ diff --git a/demos/genesis/All Good Times.fur b/demos/genesis/All Good Times.fur index e5ab47351..505952dc0 100644 Binary files a/demos/genesis/All Good Times.fur and b/demos/genesis/All Good Times.fur differ diff --git a/demos/genesis/Another_winter.fur b/demos/genesis/Another_winter.fur deleted file mode 100644 index b0ccceac1..000000000 Binary files a/demos/genesis/Another_winter.fur and /dev/null differ diff --git a/demos/genesis/CorridorsOfTimeRMX.fur b/demos/genesis/CorridorsOfTimeRMX.fur deleted file mode 100644 index 0ddd1cb29..000000000 Binary files a/demos/genesis/CorridorsOfTimeRMX.fur and /dev/null differ diff --git a/demos/genesis/laidback.fur b/demos/genesis/laidback.fur deleted file mode 100644 index 2edd201c7..000000000 Binary files a/demos/genesis/laidback.fur and /dev/null differ diff --git a/demos/genesis/last_chiptune.fur b/demos/genesis/last_chiptune.fur deleted file mode 100644 index 7f38f61ae..000000000 Binary files a/demos/genesis/last_chiptune.fur and /dev/null differ diff --git a/demos/genesis/louder.fur b/demos/genesis/louder.fur deleted file mode 100644 index 81c14738b..000000000 Binary files a/demos/genesis/louder.fur and /dev/null differ diff --git a/demos/genesis/mummy_in_the_pyramid.fur b/demos/genesis/mummy_in_the_pyramid.fur deleted file mode 100644 index d36533c7a..000000000 Binary files a/demos/genesis/mummy_in_the_pyramid.fur and /dev/null differ diff --git a/demos/genesis/my_problem.fur b/demos/genesis/my_problem.fur deleted file mode 100644 index 22c2c71a5..000000000 Binary files a/demos/genesis/my_problem.fur and /dev/null differ diff --git a/demos/genesis/newer_song_lol.fur b/demos/genesis/newer_song_lol.fur index b8b81eead..77ea964d1 100644 Binary files a/demos/genesis/newer_song_lol.fur and b/demos/genesis/newer_song_lol.fur differ diff --git a/demos/msx/ranburu_song.fur b/demos/msx/ranburu_song.fur deleted file mode 100644 index 7ddd54019..000000000 Binary files a/demos/msx/ranburu_song.fur and /dev/null differ diff --git a/demos/nes/Rise_against_the_ashes_to_the_new_dawn.fur b/demos/nes/Rise_against_the_ashes_to_the_new_dawn.fur index be28182fc..ce8a8f245 100644 Binary files a/demos/nes/Rise_against_the_ashes_to_the_new_dawn.fur and b/demos/nes/Rise_against_the_ashes_to_the_new_dawn.fur differ diff --git a/demos/nes/The East.fur b/demos/nes/The East.fur index 89f8027a1..0525a3a16 100644 Binary files a/demos/nes/The East.fur and b/demos/nes/The East.fur differ diff --git a/demos/nes/carve_your_own_path.fur b/demos/nes/carve_your_own_path.fur index 2d6736b25..9b4cc452a 100644 Binary files a/demos/nes/carve_your_own_path.fur and b/demos/nes/carve_your_own_path.fur differ diff --git a/demos/nes/christmas-fever.fur b/demos/nes/christmas-fever.fur index 874530242..4f05fee6f 100644 Binary files a/demos/nes/christmas-fever.fur and b/demos/nes/christmas-fever.fur differ diff --git a/demos/opl/Funky_Bubbles_OPL3.fur b/demos/opl/Funky_Bubbles_OPL3.fur deleted file mode 100644 index 5f2ffd244..000000000 Binary files a/demos/opl/Funky_Bubbles_OPL3.fur and /dev/null differ diff --git a/demos/snes/Breezy.fur b/demos/snes/Breezy.fur index 20c5121a6..d74ea7e7b 100644 Binary files a/demos/snes/Breezy.fur and b/demos/snes/Breezy.fur differ diff --git a/demos/snes/amalgam.fur b/demos/snes/amalgam.fur index 44e15b257..5c6e26aad 100644 Binary files a/demos/snes/amalgam.fur and b/demos/snes/amalgam.fur differ diff --git a/demos/x16/lunacommdemo.fur b/demos/x16/lunacommdemo.fur deleted file mode 100644 index 43531b8bc..000000000 Binary files a/demos/x16/lunacommdemo.fur and /dev/null differ diff --git a/demos/x68000/Optimistic.fur b/demos/x68000/Optimistic.fur index 5265c0b15..c1c1b0c9f 100644 Binary files a/demos/x68000/Optimistic.fur and b/demos/x68000/Optimistic.fur differ diff --git a/doc/4-instrument/MPCM-ADSRchart.png b/doc/4-instrument/MPCM-ADSRchart.png new file mode 100644 index 000000000..254a39bd8 Binary files /dev/null and b/doc/4-instrument/MPCM-ADSRchart.png differ diff --git a/doc/4-instrument/ay8910.md b/doc/4-instrument/ay8910.md index b47e46444..730faff96 100644 --- a/doc/4-instrument/ay8910.md +++ b/doc/4-instrument/ay8910.md @@ -1,6 +1,6 @@ # AY-3-8910 instrument editor -the AY-3-8910 instrument editor consists of two tabs. +the AY-3-8910 instrument editor consists of three tabs. ## Sample @@ -10,6 +10,13 @@ the only differences are the lack of an "Use wavetable" option, and the presence note that using samples on AY is CPU expensive! +## Timer Macros +- **Timer FX**: timer effect type sequence. 0- off, 1- tone PWM, 2- envelope distortion, 3- reserved +- **TFX Offset**: PWM speed sequence. +- **Timer Num and Den**: multiplier of a virtual square wave modulator (?) +- **PWM Boundary**: sets the range of a pulse width modulation + +note that timer effects might not be supported by VGM players, and are rather CPU expensive! ## Macros - **Volume**: volume sequence. diff --git a/doc/4-instrument/multipcm.md b/doc/4-instrument/multipcm.md index c31e90aab..6306af506 100644 --- a/doc/4-instrument/multipcm.md +++ b/doc/4-instrument/multipcm.md @@ -8,15 +8,20 @@ for sample settings, see [the Sample instrument editor](sample.md). ## MultiPCM -MultiPCM contains an ADSR envelope, not unlike Yamaha OPN/OPM envelpes, and simple LFO, also similiar to that found in OPN. +MultiPCM contains an ADSR envelope, not unlike Yamaha OPN/OPM envelopes, and simple LFO, also similiar to that found in OPN. + you may use this tab to set up MultiPCM-specific parameters: -- **AR**: sets attack rate. -- **D1R**: sets Decay 1 rate. +- **AR**: sets Attack Rate. +- **D1R**: sets Decay 1 Rate. - **DL**: sets Decay Level (analogue of Sustain Level on OPN chips). -- **D2R**: sets Decay 2 rate (a.k.a. SR, Sustain Rate). -- **RR**: sets release rate. -- **LFO rate**: sets speed of LFO. +- **D2R**: sets Decay 2 Rate (a.k.a. SR, Sustain Rate). +- **RR**: sets Release Rate. + +![MultiPCM envelope chart](MPCM-ADSRchart.png) + +- **RC**: sets Rate Correction amount. similar to Key Scale or Rate Scale in FM parameters, this determines the degree to which the envelope execution speed increases according to the pitch. +- **LFO Rate**: sets speed of LFO. - **PM Depth**: sets depth of LFO vibrato. - **AM Depth**: sets depth of LFO tremolo/amplitude modulation. - **Damp**: enforce quickly fading out the sample over 11 ms. diff --git a/doc/7-systems/ay8910.md b/doc/7-systems/ay8910.md index d6a9376c0..393b3f341 100644 --- a/doc/7-systems/ay8910.md +++ b/doc/7-systems/ay8910.md @@ -6,7 +6,7 @@ it is a 3-channel square/noise/envelope sound generator. the chip's powerful sou the AY-3-8914 variant was used in Intellivision, which is pretty much an AY with 4 level envelope volume per channel and different register format. -Furnace is capable of doing software sample playback on AY-3-8910, where all 3 channels can play 4-bit PCM samples (at the cost of a very high CPU usage). +Furnace is capable of doing software sample playback on AY-3-8910, where all 3 channels can play 4-bit PCM samples (at the cost of a very high CPU usage) and utilize CPU timer effects, providing all kinds of modulation (PWM and envelope distortion) effects, again at the cost of a higher CPU usage. Songs utilizing timer effects may not sound as intented after VGM export. ## effects diff --git a/doc/7-systems/watarasv.md b/doc/7-systems/watarasv.md index 22390ff00..4c60a93a1 100644 --- a/doc/7-systems/watarasv.md +++ b/doc/7-systems/watarasv.md @@ -9,7 +9,7 @@ these are 2 pulse wave channels (same as on GB), barely working PCM channel and - range is `0` to `3 ` for pulses and `0` to `1` for noise. ## info -this chip uses the [Watara Supervision](../4-instrument/vatarasv.md) and [Generic Sample](../4-instrument/sample.md) instrument editors. +this chip uses the [Watara Supervision](../4-instrument/watarasv.md) and [Generic Sample](../4-instrument/sample.md) instrument editors. ### sample info diff --git a/doc/7-systems/ym2203.md b/doc/7-systems/ym2203.md index d51b039de..b92290914 100644 --- a/doc/7-systems/ym2203.md +++ b/doc/7-systems/ym2203.md @@ -123,6 +123,12 @@ SSG-EG is short for "Software-controlled Sound Generator – Envelope Generator" a full guide to SSG-EG is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU), this [detailed technical explanation](https://gendev.spritesmind.net/forum/viewtopic.php?t=386&start=106), and this [chart of tunings](https://docs.google.com/spreadsheets/d/1HGKQ08CnLGAjA1U0StJFldod3FkQ3uq86rYy1VBIuZc/). +## CSM + +CSM, or "Composite Sine Mode", involves a timer matching the frequency of the note in the "CSM Timer" channel. each time it triggers, it generates key-on and key-off commands to reset the phase of all operators on channel 3 and force their envelopes to restart at the release point. this can be used to create vocal formants (speech synthesis!) or other complex effects. outside this chip's specific implementation, the technique is known as "oscillator sync". + +working with CSM is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU). + ## chip config the following options are available in the Chip Manager window: diff --git a/doc/7-systems/ym2608.md b/doc/7-systems/ym2608.md index b2cb91a41..570883569 100644 --- a/doc/7-systems/ym2608.md +++ b/doc/7-systems/ym2608.md @@ -123,6 +123,12 @@ SSG-EG is short for "Software-controlled Sound Generator – Envelope Generator" a full guide to SSG-EG is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU), this [detailed technical explanation](https://gendev.spritesmind.net/forum/viewtopic.php?t=386&start=106), and this [chart of tunings](https://docs.google.com/spreadsheets/d/1HGKQ08CnLGAjA1U0StJFldod3FkQ3uq86rYy1VBIuZc/). +## CSM + +CSM, or "Composite Sine Mode", involves a timer matching the frequency of the note in the "CSM Timer" channel. each time it triggers, it generates key-on and key-off commands to reset the phase of all operators on channel 3 and force their envelopes to restart at the release point. this can be used to create vocal formants (speech synthesis!) or other complex effects. outside this chip's specific implementation, the technique is known as "oscillator sync". + +working with CSM is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU). + ## chip config the following options are available in the Chip Manager window: diff --git a/doc/7-systems/ym2610.md b/doc/7-systems/ym2610.md index 2edcfaf6d..d8279e833 100644 --- a/doc/7-systems/ym2610.md +++ b/doc/7-systems/ym2610.md @@ -121,6 +121,12 @@ SSG-EG is short for "Software-controlled Sound Generator – Envelope Generator" a full guide to SSG-EG is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU), this [detailed technical explanation](https://gendev.spritesmind.net/forum/viewtopic.php?t=386&start=106), and this [chart of tunings](https://docs.google.com/spreadsheets/d/1HGKQ08CnLGAjA1U0StJFldod3FkQ3uq86rYy1VBIuZc/). +## CSM + +CSM, or "Composite Sine Mode", involves a timer matching the frequency of the note in the "CSM Timer" channel. each time it triggers, it generates key-on and key-off commands to reset the phase of all operators on channel 2 and force their envelopes to restart at the release point. this can be used to create vocal formants (speech synthesis!) or other complex effects. outside this chip's specific implementation, the technique is known as "oscillator sync". + +working with CSM is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU). + ## chip config the following options are available in the Chip Manager window: diff --git a/doc/7-systems/ym2610b.md b/doc/7-systems/ym2610b.md index 50f20d107..f9fd0017b 100644 --- a/doc/7-systems/ym2610b.md +++ b/doc/7-systems/ym2610b.md @@ -120,6 +120,12 @@ SSG-EG is short for "Software-controlled Sound Generator – Envelope Generator" a full guide to SSG-EG is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU), this [detailed technical explanation](https://gendev.spritesmind.net/forum/viewtopic.php?t=386&start=106), and this [chart of tunings](https://docs.google.com/spreadsheets/d/1HGKQ08CnLGAjA1U0StJFldod3FkQ3uq86rYy1VBIuZc/). +## CSM + +CSM, or "Composite Sine Mode", involves a timer matching the frequency of the note in the "CSM Timer" channel. each time it triggers, it generates key-on and key-off commands to reset the phase of all operators on channel 3 and force their envelopes to restart at the release point. this can be used to create vocal formants (speech synthesis!) or other complex effects. outside this chip's specific implementation, the technique is known as "oscillator sync". + +working with CSM is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU). + ## chip config the following options are available in the Chip Manager window: diff --git a/doc/8-advanced/find-find.png b/doc/8-advanced/find-find.png index 69889f360..19e4e9d71 100644 Binary files a/doc/8-advanced/find-find.png and b/doc/8-advanced/find-find.png differ diff --git a/src/engine/fileOps/pzi.cpp b/src/engine/fileOps/pzi.cpp index 906e1f43b..133d31fdf 100644 --- a/src/engine/fileOps/pzi.cpp +++ b/src/engine/fileOps/pzi.cpp @@ -108,9 +108,8 @@ void DivEngine::loadPZI(SafeReader& reader, std::vector& ret, String for(int i = 0; i < PZI_BANK_SIZE; i++) { - if (headers[i].start_pointer < MAX_SANITY_CAP && headers[i].sample_length < MAX_SANITY_CAP && - headers[i].loop_start < MAX_SANITY_CAP && headers[i].loop_end < MAX_SANITY_CAP && - headers[i].start_pointer > 0 && headers[i].sample_length > 0) + if (headers[i].start_pointer < MAX_SANITY_CAP && headers[i].sample_length < MAX_SANITY_CAP && + headers[i].sample_length > 0) { DivSample* s = new DivSample; @@ -152,4 +151,4 @@ void DivEngine::loadPZI(SafeReader& reader, std::vector& ret, String lastError=_("premature end of file"); logE("premature end of file"); } -} \ No newline at end of file +} diff --git a/src/gui/about.cpp b/src/gui/about.cpp index b39ae184e..9144332f1 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -92,7 +92,6 @@ const char* aboutLine[]={ "AmigaX", "AquaDoesStuff", "AstralBlue", - "AURORA*FIELDS", "Background2982", "battybeats", "bbqzzd", @@ -143,10 +142,8 @@ const char* aboutLine[]={ "LovelyA72", "LTVA", "LunaMoth", - "Lunathir", "LVintageNerd", "Mahbod Karamoozian", - "Martin Demsky", "masicbemester", "MelonadeM", "Miker",