furnace/doc/7-systems/c64.md

2.4 KiB

Commodore 64

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, multi-mode filter and ADSR envelope.

very popular in Europe and mostly due to the demoscene, which stretched the machine's limbs to no end.

two versions of aforementioned chip 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:
    • 00: nothing
    • 01: triangle
    • 02: saw
    • 03: triangle and saw
    • 04: pulse
    • 05: pulse and triangle
    • 06: pulse and saw
    • 07: pulse and triangle and saw
    • 08: noise
  • 11xx: set coarse cutoff. xx may be a value between 00 to 64.
    • this effect only exists for compatibility reasons, and its use is discouraged.
    • use effect 4xxx instead.
  • 12xx: set coarse duty cycle. xx may be a value between 00 to 64.
    • this effect only exists for compatibility reasons, and its use is discouraged.
    • use effect 3xxx instead.
  • 13xx: set resonance. xx may be a value between 00 and 0F.
  • 14xx: 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
  • 15xx: set envelope reset time.
    • this is the amount of ticks the channel turns off before a note occurs in order to reset the envelope safely.
    • if xx is 0 or higher than the song speed, the envelope will not reset.
  • 1Axx: disable envelope reset for this channel.
  • 1Bxy: 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.
  • 1Cxy: 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.
  • 1Exy: 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: disable channel 3 (y is 0 or 1)
  • 3xxx: set duty cycle. xxx range is 000-FFF
  • 4xxx: set cutoff. xxx range is 000-7FF.