SIDin #1 — Iseq music composition program: the comp.sys.cbm threads and Steve Judd's Commando cover (2002)
Tognon reprints the June 2002 comp.sys.cbm/alt.c64 argument over Steve Judd's iseq — "a new kind of music player for the C64", "very different respect all the other players around" — and then Judd's own cover of rob-hubbard's commando as it appears in the editor, instruments included. The thread is the best short statement in the wiki of two opposed editor philosophies: the register-level "you control the SID" tool versus the tracker with built-in effects.
Key claims#
The program#
- Announced on comp.sys.cbm and alt.c64 by Robert Bernardo (Fresno Commodore User Group) on 2002-06-09; the page at www.ffd2.com/fridge/iseq went online on 2002-05-31. "Written totally from scratch (i.e. it isn't just a Tunesmith update)"; the screens read "iseq 01.0 1/2002 -- ctrl-h for help". Author Stephen L. Judd (sjudd at ffd2.com); his earlier players were "blahtune/tunesmith".
- Files:
iseq10.zip(program, docs, examples),ISEQ1.D64.gz,iseq.docs,iseq.tutorial; tunessnood.tune(written for the game Blockhead's Revenge) andexamples.tune(instruments partly adapted from daBlondie's Tunesmith instruments); a tune plays from BASIC withSYS 4102; the source is "pretty big" and available by e-mail. - Screens: the main editor's status line shows the memory range, octave and rastertime (
me: $1088-$166c oct: 03 raster: 60 max:00); voices are rows of pattern letters with markers such asgate,trans,hard+,sync,wait; "Iseq allows multiple tunes" (current tune: 0-snood numtunes=2). The instrument editor (Inst 1-bassthi voice=1 oct: 2 note: f) lists the fieldsd415 d416 d417 d418 atdk surl pwid freq creg frq+ fixf gate— "Instruments consist of sequence values or modulation schemes, and are compiled into the player." The arpeggio editor (speed=8): "Arpeggios can be of any speed or length, with both positive and negative values". - Keys named in the article:
ctrl-hhelp on every screen,f1edit tune,ctrl-x/c/pcut/copy/paste,shift-ttranspose,ctrl-ttempo values,ctrl-athe arpeggio editor from the instrument editor,shift-clearclear tune (detects PAL/NTSC and sets the timer),cbm +/cbm -double / halve playback speed; notes and durations are single keys on a "musical keyboard layout", cursor keys move, "CTRL-letter keys for editor commands". - Playing and tempo: the play routine is called with
JSR $1003"at fixed intervals" — from a CIA timer by default, but "if you set the CIA timer to the frame rate, the tune will sound exactly the same when called from a VIC interrupt"; "the only place where CIA timers are necessary is doing true tempo changes". The first tempo value$4cc7makes it "behave just like a VIC interrupt" on PAL;$42c6is "the normal NTSC setting, and$417fis for old NTSC R56A VICs (64 cycles per line)". Timers also bring PAL and NTSC tempos "much closer". Pressingcbm+too often makes "IRQs start happening faster than they can be acknowledged". - Philosophy: "Any music player can only write to SID every time it's called. In iseq, you specify exactly what gets written on each call … all registers are available to each instrument." Building blocks: plain sequences "written continuously or just once", and "modulators" — ramps "from A to B step C" and adders. "It's not 1990 anymore; why should I limit myself to yet another clone of a 10-15 year old music program/system?" The interface is meant for composing "by ear" — "you compose by single-stepping through your notes, instead of staring at the screen".
- No built-in effects: vibrato is a
frq+list added to the frequency each call —frq+ 0100 0200 0100 0000 ff00 fe00 ff00 0000, looped — "not 'proportional'" but combinable with "a rising frequency … little ornaments … an 'asymmetric' vibrato" (vibrato); slides and glides are built the same way or in the arpeggio editor ("kind-of a crappy way", so "philosophical purity … may be abandoned in a future release"); ties come from switches — "You can turn gate toggling on/off, restarts on/off" — plus two special notes, "hold" (continue the previous note) and "rest" (zero frequency) (pitch-slide-and-portamento). - The drum recipe: "1st player call: waveform=$81 freq=$a000 (or whatever) / 2nd player call: waveform=$11 freq=$a000 / 3rd player call: waveform=$41 freq=original value — fix restores the frequency, that's all" (wavetable-programming). Mixed waveforms such as
$51"didn't work on lots of SIDS". - Layout: notes run left to right "like sheet music"; "Iseq fits, what, 12 'tracks' on the screen at a time by using rows"; the octave is shown at the top and in the "long description" of the note under the cursor because
A B C# B C# A Dreads better thanA-4 B-4 C#-4 …. The program is "something like 70 blocks of code". Known bug: loading fails under an Action Replay cartridge (the KERNALLOADcalled from bank 2).
The debate#
- Blackspawn (from the screenshots): "much too complicated and spartan … there are already much better tools for making music for the C64, like GoatTracker or OdinTracker"; later "Impractical … because it's spartan", "I'm very used to the typical tracker interface, like Goat- oder OdinTracker have (or FT2/IT2 etc on PC) and I could never imagine using a system like yours", and "Why didn't you implement one?" (goattracker).
- Agemixer/SCL (after testing): "too far from the common 'standards'"; it hangs on speed changes; the loader fails with Action Replay; CIA-timer tempo "makes a lot of restrictions in demo and game needs" — a tune with CIA timing cannot go into "a fullscreen FLI demo or raster timing stuff"; "I wouldn't recommend Iseq for any serious music making." Reading the docs: no flexible wave list or arpeggio (only the
fixffeature) and not a word about "slide", "glide", "tie" or "vibrato"; his test case is a continuous bass wave list —Wave trp+:51,41 0c,41,41(0) 00×4,40 00×3. Keyboard advice: single keys for the common actions,F1/F3/F5/F7 = play/stop/cont/f.forward (DMC-styled), destructive commands behind SHIFT/CBM/CTRL, "different keysets (DMC-like, JCH-like)"; Voicetracker once made you type "C#4.1f" for a note and its duration. The horizontal note rows are "very strange for music"; the octave and a sequence position are missing on screen. His own "Ultimate Tracker" project — flexible player, "'variable speed' like iseq", "SLTS samples", "free IRQ/NMI for possible sample addition", "cleverly optimizing tune packer" — was "too large a project". He challenges Judd to cover Hubbard's Commando; his own cover, made in DMC 4.0B ("easy but one of hardest ones for covering anything well"), is HVSC's/VARIOUS/A-F/Agemixer/Commando_Remix.sid(hvsc). - Anders Carlsson: "Something that very many of the music editors for the C64 lacks is well-written documentation. Not strange, as they often were hacks by demo groups"; "I only know one music editor which comes with decent docs, and that is SIDwinder."
- Judd's answers: "Heh, which is it: too complicated, or too spartan?"; "all you've said is, 'It's not what I'm used to.' But the question is: what doesn't it do that you are looking for?"; "most sceners don't like to step out of the comfort zone"; "Who will use iseq? I will, of course!"; to Agemixer's abandoned project: "I totally think you should write your own player … That's what keeps the C= going". He takes the Commando challenge — "I can do the notes from memory but I don't know how to make his instruments" — and asks for the instrument descriptions by e-mail.
'Commando' tune in Iseq#
Judd's cover "with the hidden numbers in the editor added here for more reliability":
- Voice tracks are strings of pattern letters with in-line settings —
V0: hard+ gate=3 DDDDG trans=3 G trans=0 HIJIJKKLLMM trans=2 M trans=0 NPPPPTULL …,V1: hard+ gate=3 EEEEEE trans=3 EE trans=0 …,V2: hard+ gate=0 AAA trans=3 A trans=0 BAAC trans=5 C trans=-3 C …—trans=na transpose in semitones (negative allowed),gate=na gate setting,hard+a per-voice switch (orderlist). - Patterns A–X:
inst=n(name),dur=1(6)/dur=3(12)(duration index and its length in calls),arp=1(octave),gate+/gate-, notes asa1 h a1 a2wherehis hold, plusrest. Pattern A:inst=0(hubbass) dur=1(6) a1 h a1 a2 inst=1(crash) a1 h inst=0(hubbass) a1 h a1 h h a2 inst=1(crash) a1 h …— the crash sits on the bass voice between bass notes (channel-interleaving). - Arpeggios:
0 <no arp>,1 [+0 +12](octave-bass, chord-arpeggio). - Instruments (fields as printed;
atdk= attack/decay,surl= sustain/release,pwid= pulse-width list,freq= fixed-frequency list,creg= control-register list,frq+= frequency-add list,gate= gate/control byte):0-hubbass atdk=09 surl=d0 pwid=0102 01ff 0016 creg=41 gate=40·1-crash atdk=0a surl=09 freq=0f82 1f04 creg=81 80 gate=88·2-crish-v1 atdk=0d surl=f1 creg=15 81 81 15 gate=14·3-crish-v2 atdk=0f surl=b4 pwid=0200 creg=43 81 81 43 gate=42·4-hubharmo atdk=06 surl=ea pwid=0800 creg=41 81 81 41 gate=40·5-hublead atdk=29 surl=99 pwid=0900 09a8 0a50 0af8 0ba0 0c48 creg=41 frq+=0000 0040 0080 00c0 00c0 0080 gate=40·6-beop atdk=0a freq=0dd0 0100 0100 creg=41 81 81 40 gate=40·9-harmo2 atdk=06 surl=c9 pwid=0800 0006 creg=41 81 81 40· three "scream" leadsa-scream-,b-scream+,c-scream(atdk38 / 29 / 38,surl9a / 99 / 7a, pulse lists such as0b20 0c00 0ce0 0dc0 0ea0 0dc0and0900 09c0 0a80 0c00 0cc0,frq+lists0000 0028and0000 0094 0094 0094 0000 ff6c,creg=41) ·f-hard. The bass is a pulse with a three-step pulse-width list, the crash two calls of noise at fixed frequencies, the "crish" drums triangle+ring or triangle+pulse+ring switched through noise, the leads pulse sweeps under additive vibrato (instrument-design, pulse-width-modulation, ring-modulation-and-sync).
Practical takeaways#
- Judd's three-call drum is the generic table drum: two calls of noise (or noise then triangle) at a fixed high frequency, then the real waveform at the note's frequency — compare Hubbard's and MoN's drums on wavetable-programming.
- An additive vibrato list (
frq+) is cheap and precise but not proportional; a tracker's calculated vibrato (sid-wizard, goattracker) is the same idea scaled by pitch (vibrato). - The three CIA timer values are the frame lengths in cycles:
$4cc7PAL,$42c6NTSC,$417ffor the old 64-cycle NTSC VIC — useful whenever a player is driven from a timer (sid-player-routine, commodore-64). - The ergonomic points Agemixer makes — one key per common action, destructive commands behind a modifier, selectable keysets, an on-screen octave and position — are the checklist trackers settled on (tracker).
Notable quotes#
"Any music player can only write to SID every time it's called. In iseq, you specify exactly what gets written on each call."
"It's not 1990 anymore; why should I limit myself to yet another clone of a 10-15 year old music program/system?"
"I only know one music editor which comes with decent docs, and that is SIDwinder." (Anders Carlsson)
Relevance to the wiki#
Creates iseq; a sourced instrument-by-instrument reading of the commando sounds as rebuilt in 2002; the C64 editor scene of 2002 for tracker-scene-history and goattracker; concrete additive-vibrato and three-call-drum examples for vibrato and wavetable-programming; the CIA-timer frame constants for sid-player-routine.
Pages touched#
iseq · commando · rob-hubbard · goattracker · tracker-scene-history · vibrato · wavetable-programming · sid-player-routine · octave-bass · hvsc · sidin
To verify#
- (unverified) The instrument block is printed in three columns; the field-to-instrument assignment of the three "scream" leads above is my reading of the column order and may be shifted. The text extraction prints
hubharmo's pulse width as01800, read here as0800. - (unverified) The screenshot's key list (
shift-r ritard,shift-g gate delay,shift-w wait,shift-z,shift 1-8,ctrl-d) is only partly legible in the OCR and is not carried into the wiki.