Homeentitytool

SID Factory II

A sid music editor documented here through chordian's tutorial. Its data model is the familiar one — instruments as byte rows, a wave table, a pulse table and a filter table, sequences in tracks with +++ (gate held) and --- (gate off) rows, and an order list — with drivers that implement hard-restart "exactly two ticks before" the next note (source: s-chordian-sf2-instruments). Its ancestor SID-Factory is among the editors hermit lists as inspiration for sid-wizard (source: s-witchmaster-creating-chiptunes-with-sid-wizard).

The family line runs straight back to the jch-editor: laxity wrote the JCH editor's last player generation (NewPlayer 21), his SID Factory (2007) "has inherited a lot of features and look from the JCH editor" while "programmed from scratch" (sources: s-sidin11-laxity-interview, s-sidin-news-digest) — and SID Factory II is maintained by Chordian, who is JCH: "My alter ego on the Commodore 64 was JCH of Vibrants" (source: s-chordian-player-editor-notes). His site's sidebar lists SID Factory II and DeepSID as its top links.

Cheat sheet (from the tutorial)#

whathow
load / file selectorF10
play songF1; toggle tracks Ctrl+1/2/3
instrument table / wave table / pulse tableAlt+i / Alt+w / Alt+p (or Tab around)
play the current instrumentShift+q (Shift+w, Shift+e … for other notes)
jump from an instrument's table index to that table rowCtrl+Enter
edit a flag byte bit by bitShift+Enter opens a box; Space toggles a bit
old / new SID chipclick the field in the top bar (defaults to 8580)

Instrument bytes: byte 1 = attack/decay, byte 2 = sustain/release, byte 3 = flags — $80 hard restart on, $10 set the test bit at note start; second nibble points to the HR table (default pair 0F 00); last byte = wave table start index. Example rows: 00 c9 00 00 00 00 sawtooth, 04 69 90 00 00 00 "support" with hard restart + test bit, 00 c8 80 00 00 05 snare drum.

Wave table: waveform note per tick; 7f xx loops to row xx; waveform bytes 11 triangle, 21 saw, 41 pulse, 81 noise (+ 51, 61, 31, 71 combinations); the note byte is a semitone offset (0c = octave) or a static frequency-table note 80–df. Pulse table minimal entry 84 00 00 / 7f 00 00.

The line it stands in#

  • The chain starts inside the jch-editor: JCH records that after laxity joined Vibrants in September 1990 he "later even created a new player version for my C64 editor and admitted that it was well thought out" — that player line (NewPlayer 21) is what Laxity carried into SID Factory and, thirty years on, into SID Factory II, and what cheesecutter forked on its own side (source: s-chordian-my-computer-chronicles).
  • sidid can tell the whole line apart in a SID file: JCH_NewPlayer (variants V1–V20), Vibrants/Laxity, Laxity_NewPlayer_V21, SidFactory/Laxity (2006) and SidFactory_II/Laxity (2020) are separate signatures — so a tune made here is identifiable as such in hvsc (source: s-sidid-player-list).

SID Factory (2007), the ancestor#

The first SID Factory was a native C64 editor by laxity, released around the turn of 2006/2007 — the SIDin #11 news (2007-02-14) lists "SID Factory 0.05 (alpha 1)" and its editorial says it and lasse-oorni's ninjatracker V2 "were released in the same week" (the news dates NinjaTracker 2.0–2.03 to August–September 2006; sources: s-sidin-news-digest, s-sidin11-sid-factory-vs-ninjatracker); sidin #11 documents it (source: s-sidin11-sid-factory-vs-ninjatracker). What survives into SID Factory II is its founding idea: the editor loads different player drivers, and each driver defines its own table layout — "I can create table setups defined in the drivers, instead of having to write a driver that uses tables as defined in the editor" — with separate instrument and command columns in the tracks. Laxity wrote it after building the driver for the JCH editor: "SID Factory … takes off in the JCH Editor platform — and the idea was to take it a bit further"; version 0.5 was on CSDb by January 2007 (users asked for a STOP command, multiple tunes and cursor jumps from pointer to table row), a 0.6 with changes to the driver/editor integration was unreleased (source: s-sidin11-laxity-interview).

  • Screen: main menu (enter editor, disk, packer, options) with the loaded driver's information; in the editor the patterns per track on top, the instrument and command tables below, and a dynamic table in the centre showing the table the cursor points into; green/white with light green and blue. A row holds instrument (32 max), command (64 max) and note; the file selector is a list. In Tognon's tally it scored 10 plus / 9 minus against Ninjatracker's 15 / 4 — no subtunes, no relocation found, no online help, fixed colours, no fast forward, no instrument save, source not available, "in alpha state" — but it was "the first editor I try" with multispeed "in a natural way with a specific player" (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Two drivers: v5.0x, "standard music driver with calculated vibrato and no aim at execution speed (multispeed allowed)"; v6.0x, "'fast' music driver without calculated vibrato and aims at a maximum execution spike at around $18 scanlines" (sid-player-routine, multispeed) (source: s-sidin11-sid-factory-vs-ninjatracker).
driver v5.0x instrument aa bb cc dd ee ff gg hhdriver v6.0x instrument aa bb cc dd ee ff
aa attack/decay · bb sustain/releaseaa attack/decay · bb sustain/release
cc properties 1: bits 7–6 restart settings, bit 5 arpeggio mode, bit 4 oscillator reset, bits 3–0 hard-restart table pointercc properties: $80 restart, $40 filter pointer set enable, $20 pulse pointer set disable, $10 oscillator reset ("changed from $08 in driver 6.02 and forward")
dd properties 2: bits 7–6 pulse and filter settings, bits 5–0 arpeggio delta delaydd filter table pointer (if $40 is set)
ee resonance — non-zero enables the filter for the channelee pulse table pointer (unless $20 is set)
ff filter · gg pulse · hh wave table pointerff wave table pointer
  • Wave table aa bb: note offset (bit 7 = fixed note) and waveform; $7f bb jump; v5 also $7e bb set the wave-table delay and $7d bb wait (not implemented). Arpeggio table (v5 only): note offsets, $7x = "repeat X steps from the top of the current arpeggio" (wavetable-programming, chord-arpeggio) (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Pulse table v5 aa bb cc: aa < $10 add aabb for cc frames; $8x bb cc set width $xbb and wait cc; $7f ?? cc jump to cc. v6 aa bb: aa < $80 = frames, bb = sweep value as a reversed nibble; aa ≥ $80 set width, bb = xy$0yx0; $7f bb jump (pulse-width-modulation). Filter table v5: 0a bb cc add (low byte first, "the opposite of the pulse table"), $8x bb cc set high byte and wait, $7f ?? cc jump; v6: aa bb frames and add value, $80 bb set, $7f bb jump (filter-programming) (source: s-sidin11-sid-factory-vs-ninjatracker).
  • Commands v5: 0x aa ?b slide (additive only) · 1x aa ?b vibrato (frequency, amplitude) · 2x ?? aa arpeggio pointer · 3x aa bb filter and/or pulse pointer (bit 0 → aa is a filter pointer, bit 1 → bb a pulse pointer) · 4x aa bb wave and/or pulse pointer (same bits) · 8x AD SR ADSR for the instrument's scope · 9x AD SR ADSR for this note only · c0 xx volume · f0 xx tempo (index into a tempo table) · f1 xx xx portamento, "set until vibrato, slide or new instrument is set!". v6: 0X XX slide up, 1X XX slide down · 2X YY vibrato (X frequency, YY amplitude) · 3X YY filter parameters (X band width, YY resonance and select bits) · 4x YY filter, 5x YY pulse, 6x YY wave pointer · 8D SR set DSR — "Attack is always set to 0.. Bummer!" (vibrato, pitch-slide-and-portamento). v6 init table aa bb cc: tempo index; volume/filter passband ($1f = volume $f, band-pass 1); resonance/channels ($f1 = resonance $f, voice 1; bits $01/$02/$04 = voices 1–3) (source: s-sidin11-sid-factory-vs-ninjatracker).

The first SID Factory (2007)#

sidin #11 (2007-02-14) announced SID Factory 0.05 (alpha 1) as "a new editor system, developed by laxity of Vibrants/Maniacs of Noise", which "has inherited a lot of features and look from the JCH editor" (chordian) but was "programmed from scratch and is very different from the JCH editor behind the surface"; it loaded players — v5 for multispeed, v6 for low rastertime — and was compared with NinjaTracker 2 in the same issue (source: s-sidin-news-digest).

chordian · hard-restart · wavetable-programming · instrument-design · sid-wizard · goattracker · jch-editor · cheesecutter · sidid

Sources#

s-chordian-sf2-instruments · s-sidin11-sid-factory-vs-ninjatracker · s-sidin11-laxity-interview · s-sidin-news-digest · s-chordian-player-editor-notes · s-witchmaster-creating-chiptunes-with-sid-wizard · s-chordian-my-computer-chronicles · s-sidid-player-list

source file wiki/entities/sid-factory-ii.md · graph