From bfebe15f06d8d78a85c5475c4a8e12e7ff3fbc06 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 25 Apr 2024 22:55:30 -0500 Subject: [PATCH] copy SID2 docs from LTVA1/furnace tweak them a bit for Furnace --- doc/4-instrument/sid2.md | 67 ++++++++++++++++++++++++++++++++++++++++ doc/7-systems/sid2.md | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 doc/4-instrument/sid2.md create mode 100644 doc/7-systems/sid2.md diff --git a/doc/4-instrument/sid2.md b/doc/4-instrument/sid2.md new file mode 100644 index 000000000..33f67a1b2 --- /dev/null +++ b/doc/4-instrument/sid2.md @@ -0,0 +1,67 @@ +# SID2 instrument editor + +the SID2 instrument editor consists of two tabs: "SID2" to control various parameters of sound channels, and "Macros" containing several macros. + +## SID2 + +- **Waveform**: allows selecting a waveform. + - more than one waveform can be selected at once. in that case a logical AND mix of waves will occur... + - although with default mix mode it does occur a bit wrong (like on 8580 SID chip). see below what happens when other modes are in use. + - noise is an exception. it cannot be used with any of the other waveforms. + - again, only when default mix mode is on. +- **Attack**: determines the rising time for the sound. the bigger the value, the slower the attack. (0 to 15). +- **Decay**: determines the diminishing time for the sound. the higher the value, the longer the decay (0 to 15). +- **Sustain**: sets the volume level at which the sound stops decaying and holds steady (0 to 15). +- **Release**: determines the rate at which the sound fades out after note off. the higher the value, the longer the release (0 to 15). +- **Duty**: specifies the width of a pulse wave (0 to 4095). +- **Ring Modulation**: when enabled, the channel's output will be multiplied with the previous channel's. +- **Oscillator Sync**: enables oscillator hard sync. as the previous channel's oscillator finishes a cycle, it resets the period of the channel's oscillator, forcing the latter to have the same base frequency. this can produce a harmonically rich sound, the timbre of which can be altered by varying the synchronized oscillator's frequency. + +- **Enable filter**: when enabled, this instrument will go through the filter. +- **Initialize filter**: initializes the filter with the specified parameters: + - **Cutoff**: the filter's point in where frequencies are cut off (0 to 4095). + - **Resonance**: amplifies or focuses on the cutoff frequency, creating a secondary peak forms and colors the original pitch (0 to 255). + - **Filter mode**: sets the filter mode. you may pick one or more of the following: + - **low**: a low-pass filter. the lower the cutoff, the darker the sound. + - **high**: a high-pass filter. higher cutoff values result in a less "bassy" sound. + - **band**: a band-pass filter. cutoff determines which part of the sound is heard (from bass to treble). + - multiple filter modes can be selected simultaneously. for example, selecting both "low" and "high" results in a bandstop (notch) filter. + +- **Noise Mode**: dictates how noise behaves. + - 0 means usual "white" noise. + - 1-3 provide different tonal waves (in other words, small excerpts of noise are looped, creating a wave with tonal sound). mode 1 provides more "pure" tonal sound while modes 2 and 3 provide harsh, rich sounds, which can be further modified by filtering them. + - when *only* noise wave is enabled, frequency calculation is altered in a way that this noise wave stays in tune, so wave can freely be used to play actual music. +- **Wave Mix Mode**: dictates how different waves on the same channel are mixed together. + - mode 0 does it the same way as on 8580 SID chip. + - mode 1 does a bitwise AND between all the enabled waves (including noise!). + - modes 2 and 3 operate in the same way, but they do bitwise OR and bitwise XOR. + +- **Absolute Cutoff Macro**: when enabled, the cutoff macro will go from 0 to 4095, and it will be absolute (in other words, control the cutoff directly rather than being relative). +- **Absolute Duty Macro**: when enabled, the duty macro will go from 0 to 4095. + +## Macros + +- **Volume**: volume sequence. +- **Arpeggio**: pitch sequence. +- **Pitch**: fine pitch. +- **Duty**: pulse width sequence. +- **Waveform**: select the waveform used by instrument. +- **Phase Reset**: trigger restart of envelope. +- **Cutoff**: filter cutoff. +- **Filter Mode**: select the filter mode. +- **Filter Toggle**: turns filter on and off. +- **Resonance**: filter resonance sequence. +- **Special**: ring and oscillator sync selector, as well as: + - **gate bit**: + - set (1): key on. if previous state was 0 it triggers envelope start/restart; if previous state was 1, it does nothing. + - reset (0): key off. if previous state was 1 it triggers envelope release; if previous state was 0, it does nothing. +- **Attack**: sets envelope attack speed. + - if you modify attack speed when the envelope is in attack phase it immediately changes. +- **Decay**: sets envelope decay speed. + - if you modify decay speed when envelope is in decay phase it immediately changes. +- **Sustain**: sets envelope sustain level. + - if you modify sustain level when envelope is in sustain phase it immediately changes. note that, unlike SID chips, you can change sustain level in any direction (both 2->5 and 5->2 work and do not trigger envelope release). +- **Release**: sets envelope release speed. + - if you modify release speed when envelope is in release phase it immediately changes. +- **Noise Mode**: select the noise mode. +- **Wave Mix**: select the waveform mix mode. diff --git a/doc/7-systems/sid2.md b/doc/7-systems/sid2.md new file mode 100644 index 000000000..0e84200af --- /dev/null +++ b/doc/7-systems/sid2.md @@ -0,0 +1,54 @@ +# SID2 + +a fictional chip created by LTVA. the idea is to fix SID flaws and add more features, but not too much. + +unlike SID, it has per-channel volume control, better ADSR envelope which doesn't have bugs, more waveform mixing modes and the ability to play tonal noise waves. + +filter cutoff and resonance ranges were extended, as well as the frequency - finally the chip can hit B-7 note with default clock speed! + +## effects + +- `10xx`: **change wave.** lower 4 bits specify the wave: + - `bit 0`: triangle + - `bit 1`: saw + - `bit 2`: pulse + - `bit 3`: noise +- `11xx`: **set resonance.** `xx` may be a value between `00` and `FF`. +- `12xx`: **set filter mode.** the following values are accepted: + - `00`: filter off + - `01`: low pass + - `02`: band pass + - `03`: low+band pass + - `04`: high pass + - `05`: band reject/stop/notch + - `06`: high+band pass + - `07`: all pass +- `13xx`: **disable envelope reset for this channel.** +- `14xy`: **reset cutoff**: + - if `x` is not 0: on new note + - if `y` is not 0: now + - this effect is not necessary if the instrument's cutoff macro is absolute. +- `15xy`: **reset duty cycle**: + - if `x` is not 0: on new note + - if `y` is not 0: now + - this effect is not necessary if the instrument's duty macro is absolute. +- `16xy`: **change additional parameters.** + - `x` may be one of the following: + - `0`: attack (`y` from `0` to `F`) + - `1`: decay (`y` from `0` to `F`) + - `2`: sustain (`y` from `0` to `F`) + - `3`: release (`y` from `0` to `F`) + - `4`: ring modulation (`y` is `0` or `1`) + - `5`: oscillator sync (`y` is `0` or `1`) + - `6`: filter mode (`y` is `0` to `7`) + - `7`: waveform mix mode (`y` is `0` to `3`) + - `8`: noise mode (`y` is `0` to `3`) + - `9`: phase reset (`y` is a discarded parameter and does not matter) + - `A`: envelope key on/key off (`y` is `0` (trigger envelope release) or `1` (restart envelope again)) + - `B`: filter on/off (`y` is `0` (disable filter) or `1` (enable filter)) +- `3xxx`: **set duty cycle.** `xxx` range is `000` to `FFF`. +- `4xxx`: **set cutoff.** `xxx` range is `000` to `FFF`. + +## info + +this chip uses the [SID2](../4-instrument/sid2.md) instrument editor.