########################################################################## # # FILE victracker.txt # Copyright (c) 1994, 2001, 2003, 2004 Daniel Kahlin # Written by Daniel Kahlin # $Id: victracker.txt,v 1.1 2004/10/03 19:14:57 tlr Exp $ # # DESCRIPTION # Documentation for VIC-TRACKER. # NOTE: (*) marks a feature that is not yet implemented! # ###### ########################################################################## VIC-20 SOUND HARDWARE ########################################################################## The Vic-20 has 3 channels of square wave, one channel of noise, and a 4-bit global volume. The frequency is determined by a 7-bit value for each of the 4 channels. The three square wave channels have different frequency ranges. they are one octave apart. ########################################################################## GLOSSARY ########################################################################## Module - A set of songs. Position - A position is the smallest unit of a pattern list. It gets incremented after all steps in the current set of patterns have been played. Pattern - A list of notes and effects, one set for each step. Patternlist - A list of numbers that adresses Patterns, one for each position. Song - A set of positions within a module. Speed - The number of ticks-1 that a step takes. Step - A step is the smallest unit of a pattern. It gets incremented every speed+1 ticks. Tick - This is the smallest time unit. (about 20ms for PAL) ########################################################################## VIC-TRACKER keys! ########################################################################## **ALWAYS** Load Module SHIFT-L Save Module SHIFT-S Directory SHIFT-D Init Module SHIFT-I Play Song M Toggle Play Song P Play from this Pattern F1 Set StartPos F3 Set RepeatPos F4 Set EndPos F5 Toggle RepeatFlags F6 Inc/Dec StartSpeed F7/F8 Voice 1-4 Mute Toggle C= Q,W,E,R Inc/Dec Current Song C= A,S Inc/Dec Number of Songs C= D,F Change PlayMode Up/Down C= G,H **EDIT** Change AdvanceMode F2 Enter data 0-F Enter --/00 SPACE Enter ++/80 (only in note column) SHIFT-SPACE Move around CRSR keys Go to top HOME Editstep CTRL-1 - CTRL-0 Go to position SHIFT-1 - SHIFT-9 ** PATTERNEDIT ** Inc/Dec pattlist row C= N, C= M Inc/Dec current pattern C= J, C= K Up/Down transpose pattern C= T, C= Y Find the first unused pattern LEFT-ARROW Begin C= B Copy C= C Cut C= X Paste C= V Delete INS/DEL (*) Insert SHIFT-INS/DEL (*) Clear Pattern SHIFT-CLR/HOME Go to ArpEdit R Go to SoundEdit S Exit from PatternEdit RETURN ** PATTLISTEDIT ** Find the first unused pattern LEFT-ARROW Begin C= B (*) Copy C= C (*) Cut C= X (*) Paste C= V (*) Delete INS/DEL Insert SHIFT-INS/DEL Clear Voice SHIFT-CLR/HOME (*) Go to ArpEdit R Go to SoundEdit S Edit Patterns under cursor RETURN ** ARPEDIT ** Go to SoundEdit S Go to previous Edit RETURN ** SOUNDEDIT ** Go to ArpEdit R Go to previous Edit RETURN ########################################################################## MAIN ########################################################################## 00 00 00 00 00 01 1F 01 00 00 00 00 01 1F 02 00 00 00 00 01 1F 03 00 00 00 00 01 1F 04 00 00 00 00 01 1F 05 00 00 00 00 01 1F 06 00 00 00 00 01 1F PATTERNLIST +---------+-+-+------+ | |R|1|1234 .| +---------+-+-+------+ |FST 00|PAL...|STP 00| |LST 00|......|POS 00| |RPT ^^|SNGS 1|SPD 00| |SPD 07+------+------+ +--^^--+PROGRAMMED BY| |SONG 0|DANIEL KAHLIN| +------+-------------+ VIC-TRACKER 2.0 Runtime Flags and Status: ------------------------- Edit step Advance mode | Voice mutes \ | / Play flag +---------+|+|+-|----/ | |R|1|1234 .| +---------+-+-+------+ |xxx xx|xxxxxx|STP 00|<-- Current Step |xxx xx|xxxxxx|POS 00|<-- Current Position |xxx xx|xxxx x|SPD 00|<-- Current Speed |xxx xx+------+------+ +--^^--+xxxxxxxxxx xx| Global Configuration: --------------------- Play Mode \ | \ |x|x|xxxx x| +-------|-+-+-+------+ |xxx xx|PAL...|xxx xx| |xxx xx|......|<-------- Flags |xxx xx|SNGS 1|xxx xx| |xxx xx+--|---+------+ +--^^--+xxx\xxxxxx xx| \ Number of Songs Per Song Configuration: ----------------------- | |x|x|xxxx x| +---------+-+-+------+ First Position -->|FST 00|xxxxxx|xxx xx| Last Position -->|LST 00|xxxxxx|xxx xx| Repeat Position -->|RPT ^^|xxxx x|xxx xx| Start Speed -->|SPD 00+------+------+ +--^^--+xxxxxxxxxx xx| Current Song -->|SONG 0|xxxxxx xxxxxx| +------+-------------+ ########################################################################## PATTERNLIST ########################################################################## Patternlist editor: (spaces added for readability) 00 00 00 00 00 01 1f <- patternlist position 00 01 00 00 00 00 01 1f <- patternlist position 01 02 00 00 00 00 01 1f | 03 00 00 00 00 01 1f | 04 00 00 00 00 01 1f | 05 00 00 00 00 01 1f | 06 00 00 00 00 01 1f <- patternlist position 06 | | | | | | osc1 | osc3 | vol \ osc2 noise length-1 The first five columns indicate which patterns are to played during this particular patternlist position. The sixth column tells us which number the last row to be played in those patterns has. (i.e the pattern length-1) The default is $1f (=32-1). Pressing RETURN will switch to the pattern editor show the contents of the patterns corresponding to the patternlist row under the cursor. ########################################################################## PATTERNS ########################################################################## Pattern editor: (spaces added for readability) 00 --00 --00 --00 --00 0f00 <- pattern step 00 01 --00 --00 --00 --00 0f00 <- pattern step 01 02 --00 --00 --00 --00 0f00 | 03 --00 --00 --00 --00 0f00 | 04 --00 --00 --00 --00 0f00 | 05 --00 --00 --00 --00 0f00 | 06 --00 --00 --00 --00 0f00 <- pattern step 06 00 ^00 ^00 ^00 ^00 ^01 VIC-TRACKER NoteFormat! ----------------------- Voice 1-3 --------- NOTRIG NOTE EFFECT PARAM \ / \ \ \/ / 00000000 00000000 Voice 4 (Noise) --------------- NOTRIG FREQ EFFECT PARAM \ / \ \ \/ / 00000000 00000000 Voice 5 (Volume) ---------------- SPEED VOL EFFECT PARAM \ \/ \ \ \/ / 00000000 00000000 Notes ----- \Note Oct\ C C# D D# E F F# G G# A A# B 1 10 11 12 13 14 15 16 17 18 19 1A 1B 2 20 21 22 23 24 25 26 27 28 29 2A 2B 3 30 31 32 33 34 35 36 37 38 39 3A 3B 4 40 41 (4 3C 3D) <- these are the same as the ones above. Ties ---- \Note Oct\ C C# D D# E F F# G G# A A# B 1 90 91 92 93 94 95 96 97 98 99 9A 9B 2 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB 3 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB 4 C0 C1 (4 BC BD) <- these are the same as the ones above. Effects ------- 1 - Portamento up (param = speed) 2 - Portamento down (param = speed) 3 - Arpeggio (param = arpnum) 5 - Portamento up (slow) (param = speed) 6 - Portamento down (slow) (param = speed) 7 - Set flag (param = flagvalue) 8 - Set sound (param = sound) C - Cut note (param = ticks) D - Delay note (param = ticks) 1 - Portamento up & 2 - Portamento down --------------------------------------- param/2 is added to/subtracted from the frequency value each tick for the duration of this step. 3 - Arpeggio ------------ Arpeggio 'param' is run each tick for the duration of this step. If it was used the previous step it is not retriggered. 5 - Portamento up (slow) & 6 - Portamento down (slow) ----------------------------------------------------- param/8 is added to/subtracted from the frequency value each tick for the duration of this step. 7 - Set flag ------------ The global userflag is set to 'param'. It may be read from the packed song by calling pl_ReadFlag. This is intended to be used in demos and games for syncronizing graphics effects with the music. 8 - Set sound ------------- The current sound of this voice is set to 'param'. C - Cut note ------------ Cut note after 'param' ticks. NOTE: This also works to make a note longer. D - Delay note -------------- Delay note for 'param' ticks. ########################################################################## ARPEGGIOS ########################################################################## Arpeggio editor: (spaces added for readability) 00 00 00 00 00 00 00 00 00 00--Arpeggio 0 -- 00 00 00 00 00 00 00 00 00_/ 01 00 00 00 00 00 00 00 00 00--Arpeggio 1 -- 00 00 00 00 00 00 00 00 00_/ 02 00 00 00 00 00 00 00 00 00--Arpeggio 2 -- 00 00 00 00 00 00 00 00 00_/ 03 00 00 00 00 00 00 00 00 00 Each arpeggio: (spaces added for readability) Mode Speed \ | Step 0 Step 7 \ / / / 00 00 00 00 00 00 00 00 00 00 -- 00 00 00 00 00 00 00 00 00 / \ \ \ / | Step 8 Step F Repeat Last When an arpeggio is triggered it starts at step 0 and the proceeds. 'Speed' is the number of ticks between each step minus one. i.e 0 means a new step every tick, and 1 means a new step every other tick. 'Repeat' This sets the step to go to after we where at 'Last'. 'Last' This sets the last step that is part of the arpeggio. 'Mode' selects how each step shall be interpreted. (See below) Arpeggio Mode '0' ----------------- Voices 1-3: $00-$1f is a positive note offset of 0 to 31 semitones. $20-$3f is a negative note offset of -32 to -1 semitones. $40-$7f is an absolute note ($40 is silent) MSB signals that portamento should not be added. Voices 4: $00-$1f is a positive frequency offset of 0 to 31 semitones. $20-$3f is a negative frequency offset of -32 to -1 semitones. $40-$7f is an absolute note ($40 is silent) MSB signals that portamento should not be added. Note offsets ------------ 00 Unison 01 Minor second 02 Major second 03 Minor third 04 Major third 05 Perfect fourth 06 Tritone 07 Perfect fifth 08 Minor sixth 09 Major sixth 0A Minor seventh 0B Major seventh 0C Octave 11 Octave + Perfect fourth 18 Two octaves Absolute Notes -------------- \Note Oct\ C C# D D# E F F# G G# A A# B 1 50 51 52 53 54 55 56 57 58 59 5A 5B 2 60 61 62 63 64 65 66 67 68 69 6A 6B 3 70 71 72 73 74 75 76 77 78 79 7A 7B 4 7C 7D Arpeggio Mode '1' ----------------- Voice 1-4: $00-$3f is a positive frequency offset of 0 to 63 units. $40-$7f is a negative frequency offset of -64 to -1 units. MSB signals that portamento should not be added. Arpeggio Mode '2' (*) ----------------- Voice 1-4: $00-$3f is a positive frequency offset of 0 to 63 units. $40-$7f is a negative frequency offset of -64 to -1 units. $80-$ff is an absolute frequency. Arpeggio Mode 'F' (This may be removed in a future release) ----------------- This is the compatibility mode. (only for compatibility with older songs) Each entry is an offset. When used in Voices 1-3 it means note offset +$7f to -$80 When used in Voice 4 it means frequency offset +$7f to -$80 ########################################################################## SOUNDS ########################################################################## Sound editor: (spaces added for readability) 00 00 00 00 00 00 00 00 00 <- sound 0 (default) 01 00 00 00 00 00 00 00 00 <- sound 1 02 00 00 00 00 00 00 00 00 | 03 00 00 00 00 00 00 00 00 | 04 00 00 00 00 00 00 00 00 | 05 00 00 00 00 00 00 00 00 | 06 00 00 00 00 00 00 00 00 <- sound 6 Sound format: Dur foffs glide arpeggio 00 00 00 00 00 00 00 00 ticks value speed arpnum \ | | / ----- not used ------ Byte 00: Note len this sets the duration of the sound in ticks. (len $00 means that the note will continue for the whole step.) Byte 01: Frequency offset foffs of $00 means that the frequency registers get loaded with $0080, such that portamento up/portamento down gets evenly distributed. For old songs this is $fc for compatibility. Byte 02: Freq glide Glide selects a glide speed equivalent to that of portamento slow. Byte 03: Arpeggio If MSB is set, the low part of this byte selects a default arpeggio for this sound. Byte 04-07: Not Used (reserved for future use) ########################################################################## EXAMPLES ########################################################################## Portamento down: 00 2321 01 ++21 02 ++21 03 ++21 04 --00 Arpeggio: 00 2030 01 ++30 02 ++30 03 ++30 04 --00 00 2030 01 ++30 02 ++30 03 ++30 04 --00 # eof