diff --git a/doc/1-intro/glossary.md b/doc/1-intro/glossary.md index 497783ea0..d76473ae6 100644 --- a/doc/1-intro/glossary.md +++ b/doc/1-intro/glossary.md @@ -72,6 +72,8 @@ **LFO**: low frequency oscillator. a wave with a slow period (often below hearing range) used to alter other sounds. +**LFSR**: linear-feedback shift register. an algorithm of generating pseudo-random noise that loops, also known as "periodic noise". depending on the location of the two "taps" used, different lengths of noise loops are generated. + **macro**: a sequence of values automatically applied while a note plays. **noise bass**: the technique of using a PSG's periodic noise generator with a very short period to create low-frequency sounds. @@ -86,7 +88,7 @@ **period**: the length of a repeating waveform. as frequency rises, the period shortens. -**periodic noise**: an approximation of random noise generated algorithmically. +**periodic noise**: an approximation of random noise generated algorithmically with an LFSR. - the period is the number of values generated until the algorithm repeats itself. **phase reset**: to restart a waveform at its initial value. diff --git a/doc/2-interface/asset-list.md b/doc/2-interface/asset-list.md index 3e2b4bed9..9b31680f7 100644 --- a/doc/2-interface/asset-list.md +++ b/doc/2-interface/asset-list.md @@ -13,10 +13,12 @@ buttons from left to right: - right-clicking always brings up the menu. - **Duplicate**: duplicates the currently selected instrument. - **Open**: brings up a file dialog to load a file as a new instrument at the end of the list. + - if the file is an instrument bank, a dialog will appear to select which instruments to load. - **Save**: brings up a file dialog to save the currently selected instrument. - instruments are saved as Furnace instrument (.fui) files. - right-clicking brings up a menu with the following options: - **save instrument as .dmp...**: saves the selected instrument in DefleMask format. + - **save all instruments...**: saves all instruments to the selected folder as .fui files. - **Toggle folders/standard view**: enables (and disables) folder view, explained below. - **Move up**: moves the currently selected instrument up in the list. pattern data will automatically be adjusted to match. - **Move down**: same, but downward. @@ -41,9 +43,10 @@ everything from the instrument list applies here also, with one major difference wavetables are saved as Furnace wavetable (.fuw) files. -- right-clicking the Save button brings up a menu with the following options: - - **save wavetable as .dmw...**: saves the selected wavetable in DefleMask format. - - **save raw wavetable...**: saves the selected wavetable as raw data. +right-clicking the Save button brings up a menu with the following options: +- **save wavetable as .dmw...**: saves the selected wavetable in DefleMask format. +- **save raw wavetable...**: saves the selected wavetable as raw data. +- **save all wavetables...**: saves all wavetables to the selected folder as .fuw files. ## sample list @@ -57,6 +60,7 @@ samples are saved as standard wave (.wav) files. right-clicking the Save button brings up a menu with the following options: - **save raw sample...**: saves the selected sample as raw data. +- **save all samples...**: saves all samples to the selected folder as .wav files. right-clicking a sample in the list brings up a menu: - **make instrument**: creates a new instrument which is set to use the selected sample. diff --git a/doc/2-interface/export.md b/doc/2-interface/export.md index 2b68a0a9a..fafc77454 100644 --- a/doc/2-interface/export.md +++ b/doc/2-interface/export.md @@ -68,6 +68,13 @@ the following settings are available: - **loop**: enables loop. if disabled, the song won't loop. - **optimize size**: removes unnecessary commands to reduce size. +## ROM + +depending on the system, this option may appear to allow you to export your song to a working ROM image or code that can be built into one. export options are explained in the system's accompanying documentation. + +currently, only one system can be exported this way: +- [Atari 2600 (TIunA)](../7-systems/tia.md) + ## text this option allows you to export your song as a text file. diff --git a/doc/2-interface/keyboard.md b/doc/2-interface/keyboard.md index 675ba0b55..b8244fa17 100644 --- a/doc/2-interface/keyboard.md +++ b/doc/2-interface/keyboard.md @@ -152,6 +152,7 @@ the keys in the "Global hotkeys" section can be used in any window, although not | Expand song | — | | Set note input latch | — | | Clear note input latch | — | +| Absorb instrument/octave from status at cursor | — | | | | | **Instrument list** | | | Add instrument | `Insert` | diff --git a/doc/2-interface/settings.md b/doc/2-interface/settings.md index cfe12c949..a5a448a8f 100644 --- a/doc/2-interface/settings.md +++ b/doc/2-interface/settings.md @@ -93,6 +93,10 @@ settings are saved when clicking the **OK** or **Apply** buttons at the bottom o - **Export**: select an `.ini` file to save current settings. - **Factory Reset**: resets all settings to default and purges settings backups. +### Import + +- **Use OPL3 instead of OPL2 for S3M import**: changes which system is used for the import of S3M files that contain FM channels. + ## Audio ### Output diff --git a/doc/3-pattern/effects.md b/doc/3-pattern/effects.md index aded0d92b..2104b43ce 100644 --- a/doc/3-pattern/effects.md +++ b/doc/3-pattern/effects.md @@ -15,6 +15,9 @@ however, effects are continuous (unless specified), which means you only need to - `F8xx`: **Single tick volume up.** adds `x` to volume. - `F9xx`: **Single tick volume down.** subtracts `x` from volume. - --- +- `D3xx`: **Volume portamento.** slides volume toward the new value instead of jumping immediately. `x` is the speed of the slide. +- `D4xx`: **Volume portamento (fast).** same as `D3xx` but 256× faster. + - --- - `07xy`: **Tremolo.** changes volume to be "wavy" with a sine LFO. `x` is the speed. `y` is the depth. - tremolo is downward only. - maximum tremolo depth is -60 volume steps. diff --git a/doc/7-systems/nes.md b/doc/7-systems/nes.md index 20e19c18a..f224b4107 100644 --- a/doc/7-systems/nes.md +++ b/doc/7-systems/nes.md @@ -72,6 +72,10 @@ the following options are available in the Chip Manager window: - DPCM: the default mode, playing 1-bit DPCM samples as supported by the hardware. - PCM: this mode provides crispier samples by writing the delta counter directly. uses a lot of CPU time in console. +## DPCM sample loop + +due to hardware limitations, a loop in a DPCM sample must start on a multiple of 512 samples (512, 1024, 1536...) and have a length that is a multiple of 128 plus 8 samples (136, 264, 392...) + ## short noise frequencies (NTSC) note | arpeggio | fundamental | MIDI note | pitch diff --git a/doc/7-systems/tia.md b/doc/7-systems/tia.md index 267b3a7f2..1de97ffa8 100644 --- a/doc/7-systems/tia.md +++ b/doc/7-systems/tia.md @@ -27,7 +27,9 @@ Furnace isn't complete without this one... - `E`: low pure buzzy - `F`: low reedy +## ROM export +a song can be exported to assembly code for use with the TIunA software driver for the Atari 2600. see [TIunA on GitHub](https://github.com/AYCEdemo/twin-tiuna) for explanations of the export options. ## info @@ -35,17 +37,6 @@ this chip uses the [TIA](../4-instrument/tia.md) instrument editor. the arp macro's fixed mode operates differently, writing the direct pitch to the chip. here's a list of pitches. -## chip config - -the following options are available in the Chip Manager window: - -- **Software pitch driver**: use TIunA, a software pitch driver similar to TIATune. it increases pitch precision by rapidly switching between two pitches. -- **Old pitch table**: use an older method to calculate pitch. only for compatibility. -- **Mixing mode**: changes mixing mode. - - **Mono**: normal output. - - **Mono (no distortion)**: process each channel separately to eliminate distortion. - - **Stereo**: output two channels on left and right. -- **PAL**: run slower blah blah blah ### shape 1 diff --git a/doc/7-systems/ym2151.md b/doc/7-systems/ym2151.md index cf07811bc..755be6d37 100644 --- a/doc/7-systems/ym2151.md +++ b/doc/7-systems/ym2151.md @@ -69,8 +69,9 @@ in most arcade boards the chip was used in combination with a PCM chip, like [Se - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** - `60xx`: **set operator mask.** - - `xx` goes from `0` to `F`. it is a bitfield. - - each bit corresponds to an operator. + - `xx` goes from `00` to `0F`. it is a bitfield, so the value is the sum of the active operators' bits: + - OP1 is +1, OP2 is +2, OP3 is +4, and OP4 is +8. + - for example, having only OP2 and OP4 on would be 2 + 8 = 10, resulting in an `xx` value of `0A`. ## info diff --git a/doc/7-systems/ym2203.md b/doc/7-systems/ym2203.md index 83356c05a..91d38341d 100644 --- a/doc/7-systems/ym2203.md +++ b/doc/7-systems/ym2203.md @@ -100,8 +100,9 @@ several variants of this chip were released as well, with more features. - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** - `60xx`: **set operator mask.** - - `xx` goes from `0` to `F`. it is a bitfield. - - each bit corresponds to an operator. + - `xx` goes from `00` to `0F`. it is a bitfield, so the value is the sum of the active operators' bits: + - OP1 is +1, OP2 is +2, OP3 is +4, and OP4 is +8. + - for example, having only OP2 and OP4 on would be 2 + 8 = 10, resulting in an `xx` value of `0A`. ## extended channel 3 diff --git a/doc/7-systems/ym2608.md b/doc/7-systems/ym2608.md index bca23c1d9..8331c2162 100644 --- a/doc/7-systems/ym2608.md +++ b/doc/7-systems/ym2608.md @@ -100,8 +100,9 @@ the YM2610 (OPNB) and YM2610B chips are very similar to this one, but the built- - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** - `60xx`: **set operator mask.** - - `xx` goes from `0` to `F`. it is a bitfield. - - each bit corresponds to an operator. + - `xx` goes from `00` to `0F`. it is a bitfield, so the value is the sum of the active operators' bits: + - OP1 is +1, OP2 is +2, OP3 is +4, and OP4 is +8. + - for example, having only OP2 and OP4 on would be 2 + 8 = 10, resulting in an `xx` value of `0A`. ## extended channel 3 diff --git a/doc/7-systems/ym2610.md b/doc/7-systems/ym2610.md index 449bc5a35..bad3e4ff7 100644 --- a/doc/7-systems/ym2610.md +++ b/doc/7-systems/ym2610.md @@ -98,8 +98,9 @@ its soundchip is a 4-in-1: 4ch 4-op FM, YM2149 (AY-3-8910 clone) and [2 differen - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** - `60xx`: **set operator mask.** - - `xx` goes from `0` to `F`. it is a bitfield. - - each bit corresponds to an operator. + - `xx` goes from `00` to `0F`. it is a bitfield, so the value is the sum of the active operators' bits: + - OP1 is +1, OP2 is +2, OP3 is +4, and OP4 is +8. + - for example, having only OP2 and OP4 on would be 2 + 8 = 10, resulting in an `xx` value of `0A`. ## extended channel 2 diff --git a/doc/7-systems/ym2610b.md b/doc/7-systems/ym2610b.md index df9f036c7..3416b81ef 100644 --- a/doc/7-systems/ym2610b.md +++ b/doc/7-systems/ym2610b.md @@ -97,8 +97,9 @@ it is backward compatible with the original chip. - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** - `60xx`: **set operator mask.** - - `xx` goes from `0` to `F`. it is a bitfield. - - each bit corresponds to an operator. + - `xx` goes from `00` to `0F`. it is a bitfield, so the value is the sum of the active operators' bits: + - OP1 is +1, OP2 is +2, OP3 is +4, and OP4 is +8. + - for example, having only OP2 and OP4 on would be 2 + 8 = 10, resulting in an `xx` value of `0A`. ## extended channel 3 diff --git a/doc/7-systems/ym2612.md b/doc/7-systems/ym2612.md index 989a6d41a..051ebeeaa 100644 --- a/doc/7-systems/ym2612.md +++ b/doc/7-systems/ym2612.md @@ -83,8 +83,9 @@ thanks to the Z80 sound CPU, DualPCM can play two samples at once! this mode spl - `5Exx`: **set D2R/SR of operator 3.** - `5Fxx`: **set D2R/SR of operator 4.** - `60xx`: **set operator mask.** - - `xx` goes from `0` to `F`. it is a bitfield. - - each bit corresponds to an operator. + - `xx` goes from `00` to `0F`. it is a bitfield, so the value is the sum of the active operators' bits: + - OP1 is +1, OP2 is +2, OP3 is +4, and OP4 is +8. + - for example, having only OP2 and OP4 on would be 2 + 8 = 10, resulting in an `xx` value of `0A`. ## info