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)#
| value | meaning |
|---|---|
0..222 | pattern number to play |
REP | repeat the following sequence of commands (up to 16 entries) 2–17 times |
TR | transpose −15..+15 semitones for all following patterns |
RST | always last: index to restart from, or let the voice end |
Pattern commands ($00–$10)#
| cmd | name | parameter |
|---|---|---|
00 | Stop | bit field: 0 arpeggio, 1 portamento up, 2 portamento down, 3 tone portamento, 4 vibrato, 5 pulse up, 6 pulse down |
01 | Set Tempo | new tempo from this row; 0 = the pattern's own |
02 / 03 | Set AD / SR | $xx |
04 | Set Volume | 0–15 (starts at 15) |
05 | Set Arpeggio | bits 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 / 07 | Portamento up / down | amount, applied ×2 per tick to the 16-bit frequency |
08 | Tone Portamento | amount, same units; target = the note on the same row |
09 | Set Vibrato | low nibble + 1 = speed in ticks, (high nibble + 1) × 16 = frequency units per tick (source: s-sidin13-inside-jitt64) |
0A / 0B | Pulse slide up / down | amount per tick on the 12-bit pulse width |
0C | Auto fade out | delay in ticks between volume steps |
0D / 0E / 0F | Filter type / resonance / cut-off | type = high/band/low + voices; resonance 0–15; cut-off high byte |
10 | Gate Sustain/Release | new 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#
| field | meaning |
|---|---|
| none | no action at note change — "all is left to you for preventing ADSR bugs" |
| Gate off + N. ticks | gate bit cleared N ticks before the end of the note |
| Hard Restart + N. ticks | N 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 order | Wave–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)#
| column | entries |
|---|---|
| D/N | delay | repeats: 0|0 one tick; 2|0 next command after 3 ticks; 2|3 = (2+1)×(3+1) = 12 ticks |
| AD, SR | $00–$FF |
| Wave | control byte $00–$FF (0 = keep) |
| Frequency | absolute 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) |
| Pulse | fixed 0–2048 (editable) or relative ± |
| Filter cut-off | relative or absolute |
| Resonance | fixed, add or subtract, 0–15 |
| Filter type | high / 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:
HRbyte (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.
Related#
stefano-tognon · sidin · sid-player-routine · instrument-tables · hard-restart · goattracker · sid-wizard · tracker · sid · commodore-64