Homeentitytool

JITT64 (Java Ice Team Tracker)

A cross-platform tracker for the sid written in Java by stefano-tognon (ice00), the editor of sidin, and documented by him in SIDin #13 (2010-06-28) from the user's side and from inside the player. Its distinguishing idea is "a very freedom instrument implementation": every instrument owns eight command columns and its own value tables — up to 2 KB per instrument, unshared — at the cost of "a very rastertime consuming" player (sources: s-sidin13-jitt64-tracker, s-sidin13-inside-jitt64).

Facts#

  • Written in Java "for being portable"; sound through the JSidPlay library; hypertext help built in; project page sourceforge.net/projects/jitt64/; the player source discussed is "JITT64 ver 1.03" (sources: s-sidin13-jitt64-tracker, s-sidin13-inside-jitt64).
  • Song: name, author, copyright, one speed for all tunes and voices, number of tunes, SID chip type. Three track rows (voice 1–3), three pattern columns; each pattern has its own tempo and length; note entry by mouse menu or keyboard "using Protracker or DMC mode"; patterns cut/copy/paste and load/save as files (source: s-sidin13-jitt64-tracker).
  • Up to 255 instruments (the player's definition macro is conditional on the packer's NUM_INSTR); four tuning tables differing in A4 = 424, 434, 440 or 442 Hz; the packer strips unused table data, and the 2010 build adds conditional compilation of unused player features, MIDI keyboard input and a goattracker 2 instrument import; a digi track was planned (sources: s-sidin13-jitt64-tracker, s-sidin13-inside-jitt64).
  • The author's own estimate: possibly "up to 4X" multispeed tunes, but no rastertime figure is given (source: s-sidin13-jitt64-tracker).

Cheat sheet#

All from s-sidin13-jitt64-tracker unless noted.

Track commands (right-click in a track cell)#

valuemeaning
0..222pattern number to play
REPrepeat the following sequence of commands (up to 16 entries) 2–17 times
TRtranspose −15..+15 semitones for all following patterns
RSTalways last: index to restart from, or let the voice end

Pattern commands ($00–$10)#

cmdnameparameter
00Stopbit field: 0 arpeggio, 1 portamento up, 2 portamento down, 3 tone portamento, 4 vibrato, 5 pulse up, 6 pulse down
01Set Temponew tempo from this row; 0 = the pattern's own
02 / 03Set AD / SR$xx
04Set Volume0–15 (starts at 15)
05Set Arpeggiobits 7–6 speed (0–3), bits 5–3 first offset, bits 2–0 second offset added to the first note (source: s-sidin13-inside-jitt64)
06 / 07Portamento up / downamount, applied ×2 per tick to the 16-bit frequency
08Tone Portamentoamount, same units; target = the note on the same row
09Set Vibratolow nibble + 1 = speed in ticks, (high nibble + 1) × 16 = frequency units per tick (source: s-sidin13-inside-jitt64)
0A / 0BPulse slide up / downamount per tick on the 12-bit pulse width
0CAuto fade outdelay in ticks between volume steps
0D / 0E / 0FFilter type / resonance / cut-offtype = high/band/low + voices; resonance 0–15; cut-off high byte
10Gate Sustain/Releasenew SR with the gate released ("you can go up in volume level")

Planned but not implemented in 2010: a hard-restart command, a pointer command into an instrument, note-independent ("hifi") portamento and vibrato, a vibrato slider.

Instrument: restart of note#

fieldmeaning
noneno action at note change — "all is left to you for preventing ADSR bugs"
Gate off + N. ticksgate bit cleared N ticks before the end of the note
Hard Restart + N. ticksN ticks before the end: Attack/Decay HR, Sustain/Release HR and First Control HR are written; on the last tick before the new note, Second Control HR
write orderWave–ADSR or ADSR–Wave per instrument, "for letting you obtain good hardrestart"

N is capped by the pattern tempo (timing 3, ticks 4 → 3 effective). Test-bit recipes: (a) first control gate off, second control $09, ≥ 2 ticks, ADSR–Wave; (b) both controls gate off, 1 tick, and the instrument table's first row $09 before the real waveform, ADSR–Wave. See hard-restart.

Instrument table (127 rows, column pairs with a D/N field)#

columnentries
D/Ndelay | repeats: 0|0 one tick; 2|0 next command after 3 ticks; 2|3 = (2+1)×(3+1) = 12 ticks
AD, SR$00–$FF
Wavecontrol byte $00–$FF (0 = keep)
Frequencyabsolute note (8 octaves, hard-coded), relative note (±0–31 from the pattern note), relative frequency (±0–32768, editable — instrument-level vibrato/portamento), absolute frequency (0 = silence)
Pulsefixed 0–2048 (editable) or relative ±
Filter cut-offrelative or absolute
Resonancefixed, add or subtract, 0–15
Filter typehigh / band / low pass, filter on voice 1 / 2 / 3

"Set step to here" marks a column's loop row, "Set no step" removes it; loop count 1–255 or inf. The values behind the relative/absolute menus live in the per-instrument Table of Values (red = used), which can be saved as a library. In the player each table is a header of (length, repeats, step position) followed by (value, delay/repeat index) pairs, stepped by one macro for all eight columns (source: s-sidin13-inside-jitt64).

Player structure (source: s-sidin13-inside-jitt64)#

  • Init clears the variables, pre-reads the first pattern per track, sets volume 15. The IRQ routine first copies every shadow register to the SID (all voices together, one frame of latency), then per voice from 3 to 1: Play Pattern (only when the pattern tempo has elapsed), Play Instrument (eight table cores), Play Command (continuous commands, then one-shots), and Play Hard-Restart last so that it overrides the rest.
  • Instrument record: HR byte (low nibble = ticks, bit 7 = hard restart rather than gate off), AD, SR, CTRL1, CTRL2, then 16 table pointers (AD, SR, Wave, Freq, Pulse, Filter, Res, Type, FixFreq, RelFreq, FixPulse, RelPulse, RelFilter, FixFilter, Delay, Repeat).

Example instruments named in the article#

Sea (noise, long AD, no sustain), Emil's string (arpeggio + pulse "vibrato", 1-tick HR), oriental flute (high start pitch, growing vibrato, HR), two bass drums (fixed notes + noise), a filtered bass drum (pulse "portamento" + moving cut-off), matt-gray's bass (pulse-width vibrato) and snares (fixed notes + noise), two Dane leads (HR + pulse portamento or vibrato) — values were in screenshots only (source: s-sidin13-jitt64-tracker). See instrument-design.

stefano-tognon · sidin · sid-player-routine · instrument-tables · hard-restart · goattracker · sid-wizard · tracker · sid · commodore-64

Sources#

s-sidin13-jitt64-tracker · s-sidin13-inside-jitt64

source file wiki/entities/jitt64.md · graph