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)#
| what | how |
|---|---|
| load / file selector | F10 |
| play song | F1; toggle tracks Ctrl+1/2/3 |
| instrument table / wave table / pulse table | Alt+i / Alt+w / Alt+p (or Tab around) |
| play the current instrument | Shift+q (Shift+w, Shift+e … for other notes) |
| jump from an instrument's table index to that table row | Ctrl+Enter |
| edit a flag byte bit by bit | Shift+Enter opens a box; Space toggles a bit |
| old / new SID chip | click 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) andSidFactory_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 hh | driver v6.0x instrument aa bb cc dd ee ff |
|---|---|
aa attack/decay · bb sustain/release | aa 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 pointer | cc 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 delay | dd filter table pointer (if $40 is set) |
ee resonance — non-zero enables the filter for the channel | ee pulse table pointer (unless $20 is set) |
ff filter · gg pulse · hh wave table pointer | ff wave table pointer |
- Wave table
aa bb: note offset (bit 7 = fixed note) and waveform;$7f bbjump; v5 also$7e bbset the wave-table delay and$7d bbwait (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 < $10addaabbforccframes;$8x bb ccset width$xbband waitcc;$7f ?? ccjump tocc. v6aa bb:aa < $80= frames,bb= sweep value as a reversed nibble;aa ≥ $80set width,bb = xy→$0yx0;$7f bbjump (pulse-width-modulation). Filter table v5:0a bb ccadd (low byte first, "the opposite of the pulse table"),$8x bb ccset high byte and wait,$7f ?? ccjump; v6:aa bbframes and add value,$80 bbset,$7f bbjump (filter-programming) (source: s-sidin11-sid-factory-vs-ninjatracker). - Commands v5:
0x aa ?bslide (additive only) ·1x aa ?bvibrato (frequency, amplitude) ·2x ?? aaarpeggio pointer ·3x aa bbfilter and/or pulse pointer (bit 0 →aais a filter pointer, bit 1 →bba pulse pointer) ·4x aa bbwave and/or pulse pointer (same bits) ·8x AD SRADSR for the instrument's scope ·9x AD SRADSR for this note only ·c0 xxvolume ·f0 xxtempo (index into a tempo table) ·f1 xx xxportamento, "set until vibrato, slide or new instrument is set!". v6:0X XXslide up,1X XXslide down ·2X YYvibrato (X frequency, YY amplitude) ·3X YYfilter parameters (X band width, YY resonance and select bits) ·4x YYfilter,5x YYpulse,6x YYwave pointer ·8D SRset DSR — "Attack is always set to 0.. Bummer!" (vibrato, pitch-slide-and-portamento). v6 init tableaa 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).
Related#
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