---------------------------------------------------------------------------------------------------------------------- X-SID Music Editor v1.0 30.05.2006 - 25.10.2006 (c) 2006 Soeren Lund aka Jeff/Viruz/Camelot/Crest/Bonzai ------------------------------------------------------- Keys --------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- -------- Discmenu ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- F1 : Load directory F3 : Clear all -Y to confirm clear -N to cancel F5 : Save file -Type a filename -DEL to delete chars -RETURN to save the file -RUN/STOP to cancel If the typed filename already exists in the directory, the file will be overwritten F7 : Enter the editor Cursors : Move cursor around in the directory RETURN : Load file -Y to confirm load -N to cancel load ---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- Main editor ----------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- -------- Overall keys ------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------- SHIFT+X : Go to discmenu SHIFT+A : Toggle soundspeed 1-4 for current song SHIFT+L : Edit mode on/off (off = locks the keys used for editing) F1 : Reset song and start playing from play mark F2 : Stop/Continue playing F3 : Keyboard jam-mode on/off and Edit mode off/on F4 : Play from top of song F5 : Increase instrument number F6 : Decrease instrument number F7 : Increase octave F8 : Decrease octave [ : Instrument subtable auto-advance (IADV) - cursor moves to next/previous, 0 = off, 1 = on ] : Sequence auto-advance (ADV) - cursor moves to next line, 0 = off, 1 = on Arrow Left : Fast forward CTRL+1 : Voice 1 on/off CTRL+2 : Voice 2 on/off CTRL+3 : Voice 3 on/off ---------------------------------------------------------------------------------------------------------------------- -------- Sequence editing -------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- HOME : Move cursor to top of current sequence SHIFT+HOME : Move cursor to last step of current sequence DEL : Delete current step of current sequence SHIFT+DEL : Insert blank step at current sequence step Cursors : Move around in the sequences+toggle between voices Run-Stop : Toggle edit-voice SHIFT+S : Toggle song 0-3 = : Toggle fill until next note with gate on (+++) or gate off (---) SHIFT+RETURN : Go to next sequence line, placing the cursor in the left column / : Move 8 steps down shift+/ : Move 8 steps up , : Go to command table editing mode . : Go to speed table editing mode RETURN : Go to track editing mode Z : Go to instrument editor - If an Ixx command is at cursor position, you will go to edit that instrument Commodore+C : Copy from cursor-position to end of current sequence, into sequence-buffer Commodore+V : Copy sequence-buffer into current sequence at cursor-position Commodore+Z : Clear current sequence, making it just 1 step long Commodore+DEL : Insert $10 blank steps in current sequence at cursor position Commodore+S : Transpose notes from cursor position to end of sequence +1 halfnote Commodore+A : Transpose notes from cursor position to end of sequence -1 halfnote ------------ Left column of sequence ------------ * : Set tie-note command (***) SHIFT+SPACE : Set tie-note command (***) SPACE : Set blank space I : Set 'instrument' command (Ixx) - type hexnumber from 00-2F after the 'I' C : Set 'command' (Cxx) - type hexnumber from 00-4A after the 'C' ------------ Right column of sequence ------------ SPACE : Set gate off (---) SHIFT+SPACE : Set gate on (+++) Following keys work as the keys on a piano: Q,2,W,3,E,R,5,T,6,Y,7,U,I,9,O,0,P,@,-,*,£,"Arrow up" ----------------------------------------------------------------------------------------------------------------------- -------- Command table ------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------- , : Go to sequence editing mode RETURN : Go to sequence editing mode Cursors : Move around in the table HOME : Move cursor to top of table Use hexnumbers as values ---------------------------------------------------------------------------------------------------------------------- -------- Speed table ------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- . : Go to sequence editing mode RETURN : Go to sequence editing mode Cursors : Move around in the table HOME : Move cursor to top of table SPACE : Mark current table position as offset for current song Use hexnumbers as values ---------------------------------------------------------------------------------------------------------------------- -------- Track editing ----------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- RETURN : Go to sequence editing mode HOME : Move cursor to top of current song Run-Stop : Toggle edit-voice Cursors : Move around in the track SPACE : Set 'Blank' space in the transpose-row DEL : Delete current track-step SHIFT+DEL : Insert step at current track step Commodore+C : Copy from cursor-position to end of current sequence, into sequence-buffer Commodore+V : Copy sequence-buffer into current sequence at cursor-position Commodore+Z : Clear current sequence, making it just 1 step long Commodore+1 : Set mark 1 Commodore+2 : Set mark 2 Commodore+3 : Set mark 3 SHIFT+1 : Go to mark 1 and set it as play mark SHIFT+2 : Go to mark 2 and set it as play mark SHIFT+3 : Go to mark 3 and set it as play mark -Marks you set,go to and play from, are always from top of a sequence Z : Go to instrument editor - If an Ixx command is at cursor position, you will go to edit that instrument = : Go to order list Use hexnumbers as values ---------------------------------------------------------------------------------------------------------------------- -------- Order list -------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- = : Back to track edit mode Run-Stop : Toggle edit-voice HOME : Go to top of current song Cursors : Move around in the list / : Move down in current voice SHIFT+/ : Move up in current voice Commodore+1 : Set mark 1 and set it as play mark Commodore+2 : Set mark 2 and set it as play mark Commodore+3 : Set mark 3 and set it as play mark SHIFT+1 : Go to mark 1 and set it as play mark SHIFT+2 : Go to mark 2 and set it as play mark SHIFT+3 : Go to mark 3 and set it as play mark DEL : Delete current track-step SHIFT+DEL : Insert step at current track step Use hexnumbers as values ---------------------------------------------------------------------------------------------------------------------- -------- Instrument editor ------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- ------------ Overall ------------ Z : Go back to sequence or track editing mode ------------ Instrument table ------------ HOME : Move cursor to top of current instrument Cursors : Move around in current instrument RETURN : Go to sub-table, depending on where in the table the cursor is placed Commodore+Z : Clear current instrument Commodore+C : Copy current instrument into buffer Commodore+V : Copy buffer into current instrument Use hexnumbers as values ------------ Wave+Freq table ------------ RETURN : Go back to instrument table Cursors : Move around in table / : Move down $08 steps shift+/ : Move up $08 steps SHIFT+HOME : Move cursor to top of table HOME : Move cursor to pointer position SHIFT+DEL : Insert step DEL : Delete step SPACE : Set current table position as table pointer in the instrument table Use hexnumbers as values ------------ Pulse table ------------ RETURN : Go back to instrument table Cursors : Move around in table SHIFT+HOME : Move cursor to top of table HOME : Move cursor to pointer position SHIFT+DEL : Insert step DEL : Delete step SPACE : Set current table position as table pointer in the instrument table Use hexnumbers as values ------------ Filter table ------------ RETURN : Go back to instrument table Cursors : Move around in table SHIFT+HOME : Move cursor to top of table HOME : Move cursor to pointer position SHIFT+DEL : Insert step DEL : Delete step SPACE : Set current table position as table pointer in the instrument table Use hexnumbers as values ------------ Hard Restart table ------------ RETURN : Go back to instrument table Cursors : Move around in table SHIFT+HOME : Move cursor to top of table HOME : Move cursor to pointer position SPACE : Set current table position as table pointer in the instrument table Use hexnumbers as values ---------------------------------------------------------------------------------------------------------------------- -------- Keyboard jam-mode ------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- Following keys work as the keys on a piano: Q,2,W,3,E,R,5,T,6,Y,7,U,I,9,O,0,P,@,-,*,£,"Arrow up" ---------------------------------------------------------------------------------------------------------------------- --------------------------------------------------- Editing ---------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- This music-editor mainly uses hex-numbers, it's simply the best and easiest way to work with numbers in an editor like this. To calculate binary values into hex easily you can use following table, which also shows the corresponding values in decimal numbers. Just look at what bits that are "on" and add their corresponding hex-value together. Binary -> Hex -> Decimal -------------------------------------------- Bit 0 on -> $01 -> 1 Bit 1 on -> $02 -> 2 Bit 2 on -> $04 -> 4 Bit 3 on -> $08 -> 8 Bit 4 on -> $10 -> 16 Bit 5 on -> $20 -> 32 Bit 6 on -> $40 -> 64 Bit 7 on -> $80 -> 128 The red/light-red meters ------------------------- The first 3 ones show pulse output for each voice. 4th one shows instrument filter program output cutoff. 5th one shows additional filter program output cutoff. 6th one shows overall filter output (instrument filter+additional filter or temporaty cutoff) Some of you might ask "WHY?!", but it's a great help for programming sounds and so. ---------------------------------------------------------------------------------------------------------------------- ------------ Instrument ---------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- XX Attack/Decay XX Sustain/Release XX W+F table 1 or 2/Detune/Arpeggio speed Bit 7 = Wave+Freq table 1 or 2 Bit 6 = Detune mode on/off (Use wave+freq table as wave+detune table) Bit 5-0 = Arpeggio speed (00-3F) XX Wave+Freq table pointer XX Pulse table pointer 00 = off, 01-7F = table pointer, 80 = continuous mode XX Filter table pointer 00 = off and also switches filter off ( resonance and voice(s) ) 01-7F = table pointer, 80 = continuous mode 00 = filter off XX Hard restart+sound init+HR table pointer Bit 7 = Hard Restart on/off Bit 6 = Gate off 1 or 2 frames before trigging sound. Off = 1 frame, on = 2 frames. Bit 5 = First frame of sound, "wave" set to $01 - This will also delay the soundroutine 1 frame (in single-speed mode) Bit 4 = Oscillator reset on/off (works only when bit 5 set) Bit 3-0 = Hard Restart table pointer (only when bit 7 is on) XX Additional properties Bit 4 = Temporary cutoff - Bit 3-0 being the pointer to the additional properties table For a standard hard restart, set bit 7,6,5 and 4, while letting bit 3-0 point to a place in the hard restart table, containing that values FF 00. Bit 4 is optional when using hard restart, depenging on whether you want to do an oscillator reset or not. Additional properties table --------------------------- Temporary cutoff - This allows you to set a temporary cutoff value, which will override the cutoff of the other filter programs. - XY,ZZ XY = 00 -> Temporary cutoff off X = Delay before activating temporary cutoff Y = Time - Duration of temporary cutoff ZZ = Cutoff value -------- X-SID Hard-/Soft-Restart -------- Here you see the possibilities of the X-SID Restart System. "Frame1" is 2 frames before trigging a sound/note. "Frame2" is 1 frame before trigging a sound/note. "Frame3" is the first frame of the trigged sound/note. "HR-Att/Dec" and "HR-Sus/Rel" are values taken from the Hard Restart table (Only when HR is active). * Wave Register * Attack/Decay * Sustain/Release *** ******************************************************************************************* ******************************************************************************************* Frame1 * Gate On/Off * HR-Att/Dec * HR-Sus/Rel *** Previous sound/note * * Or keep * Or keep *** * * Instrument value * Instrument value *** --------------------------------------------------------------------***-------------------- Frame2 * Forced Gate Off * -"- * -"- *** -"- ====================================================================***==================== Frame3 * "First Wave" * New * New *** Trig new sound/note * -Gate On, * Instrument AD * Instrument SR *** * -Gate On+Reset * * *** * Oscillator or * * *** * -Wave table value * * *** ---------------- Wave+Freq table ---------------- XX,YY XX = Wave (If bit 3 is on then force "Locked note freqs", meaning that only the freq of the table will be played. So notes,transpose, slide and vibrato will not have any effect.) FE = End FF,YY = Jump to table position YY YY = Freq (00-5F = Regular notefreqs (slide+vibrato+transpose+note will be added to these) 80-DF = Notefreqs 2 (transpose+note will be added to these) ---------------- Wave+Freq table in Wave+Detune mode ---------------- XX - Works the same way as the wave+freq mode YY = Bit 7 set positive or negative detune mode Bit 6-4 = coarse detune Bit 3-0 = fine detune (actually only values from 0-B, but will in most cases work from 0-F) If YY = 00, then detune is ofcourse set to 00 ---------------- Pulse table ---------------- XX,YY,ZZ XX = 00 = Offset YY low/high (4 bits each) 01-7F = Time in ADD mode -> YY = Speed 81-FF = Time in SUB mode -> YY = Speed ZZ = Jump to table step ZZ after executing current program line If ZZ = 00 then stop after executing current program line -------- Example -------- 00,84,02 - Set pulse low to $80 and high to $04, Jump to table position $02 20,10,03 - Add $10 to pulse $20 times and jump to table position $03 A0,10,02 - Subtract $10 from pulse $20 times and jump to table position $02 ---------------- Filter table ---------------- XX,YY,ZZ,AA AA = Jump to table position after executing current program line If AA = 00 then stop after executing current program line XX = 00 -> set YY as cutoff (high) XX = $F1-$F7 -> bit 0-3 in XX determins the filtertype F1 = LPF, F2 = BPF, F4 = HPF, the types can ofcourse be combined YY = Cutoff (high) ZZ = Resonance/Filter voice(s) XX = $01-$EF -> Execution time for adding YY = speed high, ZZ = speed low -------- Example -------- F1,A0,F1,02 - Set filtertype to 1, Cutoff (high) to $A0, Resonance $F, Filter voice 1, Jump to table position $02 09,F0,00,03 - Add $F000 (same as subtracting $1000) to cutoff $09 times and jump to table position $03 05,10,00,04 - Add $1000 to cutoff $05 times and jump to table position $04 05,F0,80,03 - Add $F080 (same as subtracting $0F80) to cutoff $05 times and jump to table position $03 ---------------- Hard Restart table ---------------- XX,YY - XX = Attack/Decay - YY = Sustain/Release ---------------------------------------------------------------------------------------------------------------------- ---------------- Track / Orderlist ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- XX,YY : XX = FF -> Jump to step YY : XX = A0 to FC -> Transpose $00 to $5c - YY = Sequence $00-$9F : XX = FD -> No transpose used - YY = Sequence $00-$9F ---------------------------------------------------------------------------------------------------------------------- ---------------- Sequence -------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- *** = Tie-note +++ = Gate on --- = Gate off Ixx = Set Instrument $xx ($00-$2F) Cxx = Set Commdand $xx ($00-$4A) ---------------- Commands CXX ---------------- 10,XX,YY = Slide XX = high YY = Low 20,XX,YY,ZZ = Alternative Instrument ADSR & Wave+Freq pointer (works when trigging a note) XX = Attack/Decay YY = Sustain/Release ZZ = Wave+Freq table pointer - 00 = skip 3X,YY,ZZ = Additional filter-program (can be controlled from any voice and the output of it will be added to the output of the instrument filter-program) X = Tie-note mode, 0 = off, 1 = on YY = Add high ZZ = Add Low If YY = $80, then set additional filter cutoff to ZZ (high) This command will keep running until it's turned off, which can be done by doing a 3X,80,ZZ command 4X,0Y,ZZ,WW = Vibrato X = Depth coarse tune 0-F Y = Depth fine tune 0-B ZZ = Speed 01-FF WW = Depth addition value 50,XX = Set vibrato depth addition value XX = Addition value 7X,YY = Speed table jump X = Tie-note mode, 0 = off, 1 = on YY = Speed Table pointer ---------------- Commands that force tie-note mode ---------------- AX,YY,ZZ,WW = Temporary cutoff - This allows you to set a temporary cutoff value, which will override the cutoff of the other filter programs. X = Delay before activating temporary cutoff YY = Time - Duration of temporary cutoff ZZ = Cutoff value WW = Wave+freq table jumper - 00 = skip B0,XX,YY = Resonance+filter voice(s) and Filter type XX = Resonance+filter voice(s) YY = Filter type, 00 = skip C0,XX,YY = Portamento (Detune and transpose won't work with portamento) XX = Speed high YY = Speed low D0,XX,YY,ZZ = Direct SR change, Wave+Freq & Pulse table jumper XX = Sustain/Release YY = Wave+freq table pointer - 00 = skip ZZ = Pulse table pointer - 80 = skip E0,XX,YY,ZZ = Direct ADSR change and Wave+Freq table jump XX = Attack/Decay YY = Sustain/Release ZZ = Wave+Freq table pointer - 00 = skip F0,XX,YY,ZZ = Table Jumper XX = Wave+Freq table pointer - 00 = skip YY = Pulse table pointer - 80 = skip ZZ = Filter table pointer - 80 = skip ---------------------------------------------------------------------------------------------------------------------- ---------------- Speed-Table ----------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- XX - Bit 0-6 = Speed (in frames) - Bit 7 = Loop mark (loops from the offset point) ---- Example ---- 05,03,04,83 - Execute speed 5, then speed 3, then speed 4 and finally speed 3 before looping.