home *** CD-ROM | disk | FTP | other *** search
/ Large Pack of OldSkool DOS MOD Trackers / goattracker_2.73.diz < prev    next >
Text File  |  1996-01-01  |  84KB  |  1,968 lines

  1. Goatcompo examplesongs & commandline parameters
  2. -----------------------------------------------
  3.  
  4. Randall: I'll Be A Pimp In Cabrini Green.. (cabrinigreen.sng)  /e1 /s1 /a0ff0
  5. Richard Bayliss: Everlasting Annoyance     (everlasting.sng)   /e0 /s1 /a0f00
  6. Hein: GhostTrackers                           (ghosttrackers.sng) /e0 /s1 /a0f00
  7. Jammer: My Own Hyperspace                  (hyperspace.sng)    /e1 /s1 /a0ff0
  8. Cadaver: On A Sanction From CIA            (sanction.sng)      /e0 /s1 /a0f00
  9. No-XS: Sixpack Of Cola *                   (sixpack.sng)       /e0 /s1 /a0f00
  10.  
  11. * = based on an original song by beek
  12. GoatTracker v2.73
  13. -----------------
  14.  
  15. Editor by Lasse ╓÷rni (loorni@gmail.com)
  16. HardSID 4U support by TΘli Sßndor.
  17. Uses reSID engine by Dag Lem.
  18. Uses reSID distortion / nonlinearity by Antti Lankila.
  19. Uses 6510 crossassembler from Exomizer2 beta by Magnus Lind.
  20. Uses the SDL library.
  21. GoatTracker icon by Antonio Vera.
  22. Command quick reference by Simon Bennett.
  23. Patches and further development by Stefan A. Haubenthal, Valerio Cannone, Raine M. Ekman, 
  24. Tero Lindeman, Henrik Paulini and Groepaz
  25.  
  26. Distributed under GNU General Public License
  27. (see the file COPYING for details)
  28.  
  29. Covert BitOps homepage:
  30. http://covertbitops.c64.org
  31.  
  32. GoatTracker 2 SourceForge.net page:
  33. http://sourceforge.net/projects/goattracker2
  34.  
  35.  
  36. Table of contents
  37. -----------------
  38.  
  39. 1. General information
  40. 1.1 Warnings
  41. 1.2 Compatibility with v1.xx
  42.  
  43. 2. Using GoatTracker
  44. 2.1 Command line options
  45. 2.2 Hardware support
  46. 2.3 Keyboard commands
  47. 2.3.1 General keys
  48. 2.3.2 Pattern edit mode
  49. 2.3.2.1 Protracker note-entry mode
  50. 2.3.2.2 DMC note-entry mode
  51. 2.3.3 Song edit mode
  52. 2.3.4 Instrument edit mode
  53. 2.3.5 Table edit mode
  54. 2.3.6 Songname edit mode
  55. 2.4 Mouse control
  56.  
  57. 3. Song data
  58. 3.1 Orderlist data
  59. 3.2 Pattern data
  60. 3.3 Instrument data
  61. 3.4 Table data
  62. 3.4.1 Wavetable
  63. 3.4.2 Pulsetable
  64. 3.4.3 Filtertable
  65. 3.4.4 Speedtable
  66. 3.5 Playback details
  67. 3.6 Miscellaneous tips
  68. 3.6.1 Limit-based modulation steps
  69. 3.6.2 Precalculated note-independent "hifi player" portamento/vibrato
  70. 3.7 Multispeed tips
  71.  
  72. 4. Using the included utilities
  73. 4.1 INS2SND2.EXE
  74. 4.2 SNGSPLI2.EXE
  75. 4.3 MOD2SNG.EXE
  76. 4.4 BETACONV.EXE
  77. 4.5 GT2RELOC.EXE
  78.  
  79. 5. Using the songs outside the editor
  80. 5.1 Playroutine options
  81.  
  82. 6. File/data formats description
  83. 6.1 GoatTracker v2 song (.SNG) format
  84. 6.1.1 Song header
  85. 6.1.2 Song orderlists
  86. 6.1.3 Instruments
  87. 6.1.4 Tables
  88. 6.1.5 Patterns header
  89. 6.1.6 Patterns
  90. 6.2 GoatTracker v2 instrument (.INS) format
  91. 6.3 Sound effect data format
  92.  
  93. 7. Recompiling
  94.  
  95. 8. Version history
  96.  
  97.  
  98. 1. General information
  99. ----------------------
  100.  
  101. This program is a tracker-like C64 music editor running on Win32 or Linux
  102. platforms (using the SDL library, see http://www.libsdl.org)
  103.  
  104. GoatTracker v2 adds more commands and uniform step programming tables for
  105. waveform/arpeggio, pulse effects, and filter effects. It is likely much more
  106. complex to learn & master than v1.xx.
  107.  
  108. Familiarity with tracker programs in general, hexadecimal notation, and the
  109. C64's SID chip are required. Consult the C64 Programmer's Reference Guide
  110. (http://project64.c64.org) or AAY64 (http://www.the-dreams.de/aay.html) for
  111. SID chip reference.
  112.  
  113. For filesize & library compatibility reasons, precompiled binaries exist only
  114. for Win32 platform.
  115.  
  116. 1.1 Warnings
  117. ------------
  118.  
  119. 1. Always look at the end of this file for changes! Sometimes keyboard commands
  120.    change etc.
  121.  
  122. 2. Always save your songs in the .SNG-format with F11 key if you plan to
  123.    continue editing! Packed & relocated songs (PRG/BIN/SID) can not be loaded
  124.    back into the editor.
  125.  
  126. 3. Even the reSID emulation is in some cases quite far from the output of a
  127.    real SID. Especially if filters are in use, consider strongly testing your
  128.    tune on a C64 or on a HardSID card. (Using filters has always been
  129.    complicated because every SID tends to sound different.)
  130.  
  131. 4. The editor will stop playing if:
  132.    - The song restart position is illegal (beyond end of song)
  133.    - The sequence of orderlist commands is incorrect
  134.      * In a sequence of both TRANSPOSE & REPEAT, TRANSPOSE must come first
  135.      * The last thing before a RST-endmark should be a pattern number
  136.    - Gateoff timer value is too high compared to song tempo.
  137.    - The song tries to jump directly onto a table row containing a jump (FF xx),
  138.      either with instrument pointers or 8XY, 9XY, AXY commands.
  139.    - The song tries to execute pattern commands 0XY, 8XY or EXY from the
  140.      wavetable.
  141.    These all are error conditions, and trying to pack/relocate such song should
  142.    give an error message.
  143.  
  144. 5. Using delayed wavetable or no wavechange (0x 00, where x is 0-F) in the
  145.    first step of instrument wavetable is unsupported and may result in missing
  146.    notes.
  147.  
  148. 6. When using a playroutine with unbuffered SID-writes and encountering ADSR-
  149.    bugs after packing/relocating, you can try either:
  150.    1) Set pulse-startpos to nonzero value in the troublesome instruments and
  151.       change the 1stFrame Wave parameter of some instrument slightly, for
  152.       example from $09 to $0B, to disable a playroutine optimization. The
  153.       idea in this is to make the noteinit routine take more CPU cycles.
  154.    2) Use a playroutine with buffered writes to pack/relocate. You can try
  155.       the "standard" buffering first, and full buffering if that does not
  156.       help yet.
  157.    3) Try hardrestart attack parameter $F for alternative SID register write
  158.       order.
  159.  
  160. 7. From v2.18 onwards, wavetable left side values have changed. Delay can
  161.    now be maximum 16 frames (values $00-$0F), and waveform register values
  162.    $00-$0F (inaudible) have been mapped to table values $E0-$EF. For example,
  163.    testbit + gate would be $E9. You need to manually convert values $08-$0F
  164.    from your old songs!
  165.  
  166. 8. From v2.2 onwards, a new table (speedtable) has been added. The portamento,
  167.    vibrato and funktempo commands use it. Old songs will be converted upon
  168.    loading to use the speedtable. Note the keyboard command SHIFT+RETURN
  169.    to convert the old style parameters.
  170.  
  171. 9. From v2.4 onwards, pulse modulation speed has 1 bit added accuracy, so
  172.    you need to double pulsespeeds when composing new songs. Old songs will
  173.    be converted automatically.
  174.  
  175. 10. From v2.59 onwards, gateoff timer parameter high bit disables hardrestart
  176.    and bit $40 disables gateoff. Old songs & instruments will be converted
  177.    automatically.
  178.  
  179. 11. From v2.62 onwards, realtime calculated portamento/vibrato speeds are
  180.    supported. This is activated by having the high bit ($80) set in the speed-
  181.    table left side. Naturally, this means that very high portamento speeds (>=
  182.    $8000) or vibrato speeds (>= $80) become unavailable, but these should not 
  183.    be very useful anyway.
  184.    
  185. 12. From v2.68 onwards, SID write order has been tweaked for better stability
  186.    regarding badlines. This has the consequence, however, that notes with 
  187.    attack 0 & release 1 may ADSR-bug. In this case, try hardrestart attack 
  188.    parameter $F for alternative SID register write order.
  189.  
  190. 1.2 Compatibility with v1.xx
  191. ----------------------------
  192.  
  193. GoatTracker v2 can load v1.xx songs and instruments, but it saves only in v2
  194. format. Some subtleties (like tricks involving instrument changes) will not
  195. play back exactly like in v1.xx.
  196.  
  197. The only major feature removal is that of the arpeggio command in v2.
  198. Everything that this command does can also be done with wavetables, and the
  199. import feature converts all arpeggio commands to corresponding wavetable
  200. programs.
  201.  
  202.  
  203. 2. Using GoatTracker
  204. --------------------
  205.  
  206. 2.1 Command line options
  207. ------------------------
  208.  
  209. Start Goattracker V2 by typing GOATTRK2 in the command prompt, followed by the
  210. songname to be loaded at startup (optional) and any command line options you
  211. may want. For example "goattrk2 dojo.sng -s1 -e1" to set 1x-speed mode and SID
  212. model 8580 and to load "dojo.sng" on startup.
  213.  
  214. -Axx Set hard restart ADSR parameter in hex. DEFAULT=0F00
  215. -Bxx Set sound buffer length in milliseconds DEFAULT=100
  216. -Cxx Use CatWeasel MK3 PCI SID (0 = off, 1 = on)
  217. -Dxx Pattern row display (0 = decimal, 1 = hexadecimal)
  218. -Exx Set emulated SID model (0 = 6581 1 = 8580) DEFAULT=6581
  219. -Fxx Set custom SID clock cycles per second (0 = use PAL/NTSC default)
  220. -Gxx Set pitch of A-4 in Hz (0 = use default frequencytable, close to 440Hz)
  221. -Hxx Use HardSID (0 = off, 1 = HardSID ID0 2 = HardSID ID1 etc.)
  222. -Ixx Set reSID interpolation (0 = off, 1 = on, 2 = distortion, 3 = distortion & on) DEFAULT=off
  223. -Kxx Note-entry mode (0 = PROTRACKER 1 = DMC) DEFAULT=PROTRK.
  224. -Lxx SID memory location in hex. DEFAULT=D400
  225. -Mxx Set sound mixing rate DEFAULT=44100
  226. -Oxx Set pulse optimization/skipping (0 = off, 1 = on) DEFAULT=on
  227. -Rxx Set realtime command optimization/skipping (0 = off, 1 = on) DEFAULT=on
  228. -Sxx Set speed multiplier (0 for 25Hz, 1 for 1x, 2 for 2x etc.)
  229. -Txx Set HardSID interactive mode sound buffer length in milliseconds
  230.      DEFAULT=20, max.buffering=0
  231. -Uxx Set HardSID playback mode sound buffer length in milliseconds
  232.      DEFAULT=400, max.buffering=0
  233. -Vxx Set finevibrato conversion (0 = off, 1 = on) DEFAULT=on
  234. -Xxx Set window type (0 = window, 1 = fullscreen) DEFAULT=window
  235. -Zxx Set random reSID write delay in cycles (0 = off) DEFAULT=off
  236. -N   Use NTSC timing
  237. -P   Use PAL timing (DEFAULT)
  238. -W   Write emulated sound output to a file SIDAUDIO.RAW
  239. -?   Show command line options
  240. -??  Standalone online help window
  241.  
  242. Try the command line options if there are any problems. For example, if you
  243. experience choppy audio you can increase audio buffering with -B option. SDL
  244. seems to have trouble with some soundcards under Windows; you might want to
  245. try even a 500ms buffer, or tweak the hardware acceleration level of the
  246. soundcard (from Control Panel). Also, reSID interpolation will take remarkably
  247. more CPU time and could cause the sound and/or editing to get choppy.
  248.  
  249. Finevibrato mode is on by default. You can change this behaviour with -V
  250. option. Note that finevibrato mode only affects the conversion of old style
  251. vibrato parameters to speedtable format.
  252.  
  253. Pulse optimization -O determines if pulsetable execution will be skipped when
  254. getting new notes or a new pattern. By default it is on. Be warned that
  255. turning it off will increase the rastertime requirements of packed/relocated
  256. songs greatly!
  257.  
  258. Realtime command optimization -R determines if portamento, vibrato & instrument
  259. vibrato will be skipped on tick 0 of each pattern row. By default it is on, as
  260. this is how tracker programs have operated traditionally. Turning it off makes
  261. the commands sound same regardless of tempo but will increase rastertime use.
  262.  
  263. The hard restart ADSR parameter will especially affect how rapid passages of
  264. notes will sound like. 0000 is probably too hard to be useful, except perhaps
  265. with gateoff timer value 1. 0F00 (default) is a lot softer, and 0F01 adds also
  266. a little bit of release to the gateoff phase for even softer sound. 000F makes
  267. the note start very pronounced.
  268.  
  269. Hard restart parameter with attack at maximum (F) enables the use of an
  270. alternative playroutine, where waveform is written before ADSR. This can give
  271. more reliable note triggering, especially for very fast releases 0 & 1, but 
  272. may change the characteristics of the note's decay & release.
  273.  
  274. 2.2 Hardware support
  275. --------------------
  276.  
  277. HardSID support is available with the /H option (use first HardSID = -H1,
  278. second = -H2 etc., return to emulated output = -H0). You must have the HardSID
  279. drivers installed to use this feature.
  280.  
  281. CatWeasel MK3 PCI SID support is available with -C option (-C1 to turn on).
  282.  
  283. To use the PC64 cable or a userport RS-232 interface, get the HardSID-DLL-Clone
  284. drivers from Daniel Illgen's page
  285. http://dawork.synchronus.de/
  286.  
  287. To enable better support of multispeeds and cycle-exact timing on HardSID
  288. (currently Win32 only), download an enhanced HardSID.dll:
  289.  
  290. For HardSID ISA/PCI cards -
  291. http://sourceforge.net/project/showfiles.php?group_id=9266&release_id=61843
  292.  
  293. For HardSID 4U -
  294. http://www.hardsid.com
  295.  
  296. Cycle-exact HardSID buffer length is separately configurable for interactive
  297. mode (-T option) & playback mode (-U option).
  298.  
  299. HardSID interactive mode:
  300. Low latency mode for jamming and accurate GUI display. Interactive mode can
  301. be activated during song/pattern playback by enabling jamming (space key).
  302.  
  303. HardSID playback mode:
  304. High stability mode to avoid interruptions caused by other applications/poor
  305. drivers/weaker CPU. GUI display is less accurate in this mode. Set the -U
  306. parameter to zero to achieve the maximum stability (less accurate GUI).
  307.  
  308. 2.3 Keyboard commands
  309. ---------------------
  310.  
  311. This program is mainly operated on keyboard. For a list of keyboard commands
  312. press F12 (online help) in the tracker or see the table below:
  313.  
  314. NOTE: SHIFT & CTRL are interchangeable in the commands. You can also use [ ]
  315. or ( ) instead of < >.
  316.  
  317. 2.3.1 General keys
  318. ------------------
  319.  
  320. F1        Play from beginning
  321. F2        Play from current pos.
  322. F3        Play one pattern from current pos.
  323. F4        Stop playing & silence all sounds
  324. F5        Go to pattern editor
  325. F6        Go to song editor
  326. F7        Go to instrument/table editor
  327. F8        Go to songname editor
  328. F9        Pack, relocate & save PRG,SID etc.
  329. F10       Load song (Pattern/Song/Songname mode) or instrument (Instrument mode)
  330. F11       Save song (Pattern/Song/Songname mode) or instrument (Instrument mode)
  331. F12       Online help screen. Press F12 again to toggle context mode
  332. SHIFT+F1  Play from beginning /w follow play
  333. SHIFT+F2  Play from current pos. /w follow play
  334. SHIFT+F3  Play one pattern from current pos. /w follow play
  335. SHIFT+F4  Mute current channel
  336. SHIFT+F5  Decrease speed multiplier
  337. SHIFT+F6  Increase speed multiplier
  338. SHIFT+F7  Edit hardrestart ADSR parameter
  339. SHIFT+F8  Switch between 6581 and 8580 SID models
  340. SHIFT+F10 Merge-load song
  341. SHIFT+,.  Move song startposition on all channels and restart last playmode
  342. TAB       Cycle between editing modes (forwards)
  343. SHIFT+TAB Cycle between editing modes (backwards)
  344. INS       Insert row (Press INS/DEL on endmark to change pattern/song length)
  345. DEL       Delete row
  346. SHIFT+ESC Optimize musicdata, or clear musicdata & set default pattern length
  347. ESC       Exit program
  348.  
  349. 2.3.2 Pattern edit mode
  350. -----------------------
  351.  
  352. - +         Select instrument
  353. / *         Select octave
  354. < >         Select pattern
  355. BACKQUOTE   Select channel
  356. 0-9 & A-F   Enter parameters
  357. SPACE       Switch between jam/editmode
  358. RETURN      (also CAPSLOCK) Insert keyoff
  359.             Enter table (when cursor is over a table-utilizing command)
  360.             Enter instrument (when cursor is over a nonzero instrument number)
  361. SHIFT+RET.  Insert keyon
  362.             Convert portamento/vibrato/funktempo old style parameter to a
  363.             speedtable entry (when cursor is over the command)
  364.             Go into an empty table entry (when parameter is zero on a
  365.             table-utilizing command)
  366. BACKSPACE   Insert rest
  367. SHIFT+BKSP. Insert rest and clear commands
  368. SHIFT+SPACE Play from cursor position
  369. SHIFT+Q     Transpose halfstep up
  370. SHIFT+A     Transpose halfstep down
  371. SHIFT+W     Transpose octave up
  372. SHIFT+S     Transpose octave down
  373. SHIFT+O     Shrink pattern (divide size by 2)
  374. SHIFT+P     Expand pattern (multiply size by 2)
  375. SHIFT+J     Join pattern with next pattern in orderlist
  376. SHIFT+K     Split pattern from edit position
  377. SHIFT+H     Calculate "hifi" left/right shifted speedtable entry for
  378.             portamento or vibrato
  379. SHIFT+I     Invert selection / whole pattern if no selection
  380. SHIFT+CRSR UP,DOWN Mark pattern
  381. SHIFT+CRSR LEFT,RIGHT Select pattern
  382. SHIFT+L     Mark/unmark entire pattern
  383. SHIFT+M,N   Choose highlighting step size
  384. SHIFT+X,C,V Cut,copy,paste pattern
  385. SHIFT+E,R   Copy,paste commands
  386. SHIFT+Z     Cycle autoadvance-mode
  387.  
  388. For pattern joining to work properly, select the pattern you want to join with
  389. the next from the orderlist first (by pressing RETURN on it). Both joining and
  390. splitting will rearrange pattern numbers (for example if you split pattern 00,
  391. pattern 01 will be created and old patterns 01-xx will be shifted forward in
  392. the pattern order)
  393.  
  394. SHIFT+SPACE will play from the pattern onwards if playback was previously
  395. stopped, but if it is pressed while in pattern play mode, it will stay in
  396. the current pattern.
  397.  
  398. There are 2 modes for note entering:
  399.  
  400. 2.3.2.1 Protracker note-entry mode
  401. ----------------------------------
  402.  
  403. This is the default or activated with command line option /K0. There are two
  404. rows of a piano keyboard:
  405.  
  406.   Lower octave     Higher octave
  407.  S D  G H  K L    2 3  5 6 7  9 0
  408. Z X CV B NM , .  Q W ER T Y UI O P
  409.  
  410. Octave (0-7) is selected with / and * keys on the numeric keypad.
  411.  
  412. In this mode there are 2 different autoadvance-modes (the mode can be seen from
  413. the color of the jam/editmode indicator)
  414.  
  415. GREEN - Advance when entering notes & command-databytes
  416. RED - Do not advance automatically
  417.  
  418. 2.3.2.2 DMC note-entry mode
  419. ---------------------------
  420.  
  421. Activated with command line option /K1, there is one row of piano keyboard
  422.  
  423.  W E  T Y U  O P
  424. A S DF G H JK L
  425.  
  426. and octave of a note (sets default octave at the same time) is changed with
  427. number keys 0-7.
  428.  
  429. In this mode there are 3 different autoadvance-modes:
  430.  
  431. GREEN - Advance when entering notes, octaves or command-databytes
  432. YELLOW - Advance when entering notes or command-databytes, not octaves
  433. RED - Do not advance automatically
  434.  
  435. 2.3.3 Song edit mode
  436. --------------------
  437.  
  438. < >         Select subtune
  439. - +         Insert Transpose down/up command (shown as -/+ in the orderlist)
  440. 0-9 & A-F   Enter pattern numbers
  441. SPACE       Set start position for F2 key
  442. BACKSPACE   Set end position for F2 key
  443. RETURN      Go to pattern
  444. SHIFT+R     Insert Repeat command (shown as "R" in the order-list)
  445. SHIFT+CRSR LEFT/RIGHT Mark orderlist
  446. SHIFT+1,2,3 Swap current channel orderlist with channel 1,2,3
  447. SHIFT+X,C,V Cut,copy,paste channel orderlist
  448. SHIFT+L     Mark/unmark entire orderlist
  449. SHIFT+SPACE Set start position on all channels
  450. SHIFT+RET.  Go to pattern on all channels
  451.  
  452. SHIFT+SPACE or SHIFT+BACKSPACE set the start/end mark on all channels to
  453. the same position. To clear the endmark, press BACKSPACE again on it or
  454. at/before the startmark.
  455.  
  456. 2.3.4 Instrument edit mode
  457. --------------------------
  458.  
  459. < >         Select instrument
  460. - +         Select instrument
  461. / *         Select octave
  462. F7          Go to table editor
  463. 0-9 & A-F   Enter parameters
  464. SPACE       Play test note
  465. SHIFT+SPACE Silence test note
  466. RETURN      Go to table position indicated by wave/pulse/filter/vibratopos.
  467. SHIFT+N     Edit instrument name
  468. SHIFT+S     Smart paste an instrument
  469. SHIFT+U     Unlock/lock table scrolling
  470. SHIFT+X,C,V Cut,copy,paste instrument
  471. SHIFT+DEL   (also SHIFT+BACKSPACE) Delete instrument & tabledata
  472. SHIFT+RET.  Set tablepointer to empty position or convert old style vibrato
  473.             parameter
  474.  
  475. The test note will be played on the channel you last were on in the pattern
  476. editor. To hear filtering as intended, be sure to play it on a channel that has
  477. been selected for filtering in the filter parameters.
  478.  
  479. Note that cut,copy,paste instrument do not touch the tabledata, just for the
  480. case you need it in another instrument. If you want to completely get rid of
  481. an instrument + its associated tabledata, press SHIFT+DEL.
  482.  
  483. If wave/pulse/filter/vibrato param. is zero and you press RETURN over
  484. it, you will move to the first free location in the corresponding table. If
  485. you press SHIFT+RETURN, also the instrument parameter will be set accordingly.
  486.  
  487. If vibrato parameter is nonzero and you press SHIFT+RETURN over it, it will
  488. be interpreted as an old style vibrato parameter (left nybble speed, right
  489. nybble depth) and converted to a speedtable entry.
  490.  
  491. "Smart paste" will convert instrument numbers in all patterns if you "move" an
  492. instrument by cut/pasting it.
  493.  
  494. 2.3.5 Table edit mode
  495. ---------------------
  496.  
  497. < >         Select instrument
  498. - +         Select instrument
  499. / *         Select octave
  500. BACKQUOTE   Select table
  501. F7          Go to instrument editor
  502. 0-9 & A-F   Enter parameters
  503. SPACE       Play test note
  504. SHIFT+SPACE Silence test note
  505. RETURN      Go back to wave/pulse/filterpos. parameter
  506. SHIFT+Q,A   Transpose speedtable portamento speed halfstep up/down
  507. SHIFT+W,S   Transpose speedtable portamento speed octave up/down,
  508.             or multiply/divide pulse/filterspeed by 2
  509. SHIFT+L     Convert <limit,speed> modulation step to <time,speed>
  510. SHIFT+N     Negate speed parameter (pulse/filtertable) or relative note
  511.             (wavetable)
  512. SHIFT+O     Optimize current table (remove unused entries)
  513. SHIFT+R     Convert note between absolute/relative in wavetable
  514. SHIFT+U     Unlock/lock table scrolling
  515.  
  516. If you need to insert rows in the beginning of an instrument's wave/pulse/
  517. filtertable, press SHIFT+INS instead of just INS: this way table pointers
  518. pointing to the table first row will not move.
  519.  
  520. For easier programming of negative modulation speeds in pulse/filtertables, you
  521. can first enter a positive speed positive value ($00-$7F) and then press
  522. SHIFT+N to negate it.
  523.  
  524. Conversion between relative and absolute notes will use the basenote C-0 if
  525. octave is 0, C-1 if octave is 1 and so on.
  526.  
  527. When table scrolling is unlocked, each table maintains its separate view
  528. position. To indicate this mode, a "U" letter is visible in the bottom right
  529. part of the screen. By default table scrolling is locked.
  530.  
  531. 2.3.6 Songname edit mode
  532. ------------------------
  533.  
  534. Use cursor UP/DOWN to move between song, author & copyright strings, and
  535. other keys to edit them.
  536.  
  537. 2.4 Mouse control
  538. -----------------
  539.  
  540. By clicking with the left mouse button, you can select the data to edit.
  541.  
  542. By dragging with middle or right mouse button, you can mark orderlist/pattern/
  543. tabledata.
  544.  
  545. Some values like octave or subtune/pattern numbers can be incremented with
  546. the left mouse button and decremented with the right.
  547.  
  548. By holding the middle/right mouse button in the status bar, a menu becomes
  549. active. Continue to hold and click with left button to select options.
  550.  
  551. In the fileselector, confirm loading or entering a directory by double-
  552. clicking. Doubleclick outside the selector to cancel.
  553.  
  554.  
  555. 3. Song data
  556. ------------
  557.  
  558. 3.1 Orderlist data
  559. ------------------
  560.  
  561. A song can consist of up to 32 subtunes. For each subtune's each channel, there
  562. is an orderlist which determines in what order patterns are to be played. In
  563. addition to pattern numbers, there can be TRANSPOSE & REPEAT commands and
  564. finally there is a RST (RESTART) endmark followed by restart position. The
  565. maximum length of an orderlist is 254 pattern numbers/commands + the endmark.
  566.  
  567. TRANSPOSE is measured in halftones. Transpose up (shown as +X) can be 0-14
  568. halftones and transpose down (shown as -X) can be 1-15. Transpose is
  569. automatically reset only when starting the song, not when looping.
  570.  
  571. A REPEAT command (shown as RX) will repeat the pattern following it 1-16 times.
  572. "Repeat 16 times" is displayed as R0.
  573.  
  574. There are some rules for orderlist command order:
  575.  
  576. - If there are both TRANSPOSE and REPEAT commands before a pattern number,
  577.   TRANSPOSE must come first.
  578.  
  579. - The last thing before the RST-endmark must be a pattern number. If you need
  580.   to reset transpose on song repeat, do it in the beginning of the repeat loop.
  581.  
  582. In case of wrong order, the editor will halt playback. This tells that the
  583. resulting packed/relocated song would play incorrectly.
  584.  
  585. 3.2 Pattern data
  586. ----------------
  587.  
  588. Patterns are single-channel only for flexibility & low memory use. They contain
  589. the actual notes, instrument changes & sound commands. A pattern can have
  590. variable length, up to 128 rows. There can be 208 different patterns in a song.
  591.  
  592. The explanation of a pattern row:
  593.  
  594.  Note name
  595.  |
  596.  | Octave
  597.  | |
  598.  | | Instrument number ($01 - $3F, or $00 for no change)
  599.  | | |
  600.  | | |  Command ($0 - $F)
  601.  | | |  |
  602.  | | |  | Databyte
  603.  | | |  | |
  604.  C-1 00 0 00
  605.  
  606. The highest note available in a pattern is G#7. To reach the top three notes
  607. (A-7 to B-7), you can use transpose.
  608.  
  609. In place of a normal note, there can also be one of these special "notes":
  610.  
  611.  ... Rest
  612.  --- Key off (clear gatebit mask)
  613.  +++ Key on (set gatebit mask)
  614.  
  615. The actual state of the gatebit will be the gatebit mask ANDed with data from
  616. the wavetable. A key on cannot set the gatebit if it was explicitly cleared
  617. at the wavetable.
  618.  
  619. Commands 1XY-4XY and FXY bear some resemblance to Soundtracker/Protracker/
  620. Fasttracker effect commands. However, they are different in some ways, so
  621. read their descriptions! Note that there is no "databyte $00 uses the last
  622. databyte"-action in the commands.
  623.  
  624. Command 0XY: Do nothing. Databyte will always be $00.
  625.  
  626. Command 1XY: Portamento up. XY is an index to a 16-bit speed value in the
  627.              speedtable.
  628.  
  629. Command 2XY: Portamento down. XY is an index to a 16-bit speed value in the
  630.              speedtable.
  631.  
  632. Command 3XY: Toneportamento. Raise or lower pitch until target note has been
  633.              reached. XY is an index to a 16-bit speed value in the
  634.              speedtable, or $00 for "tie-note" effect (move pitch instantly to
  635.              target note)
  636.  
  637. Command 4XY: Vibrato. XY is an index to the speed table, where left side
  638.              determines how long until the direction changes (speed)
  639.              and right side determines the amount of pitch change on each tick
  640.              (depth).
  641.  
  642. Command 5XY: Set attack/decay register to value XY.
  643.  
  644. Command 6XY: Set sustain/release register to value XY.
  645.  
  646. Command 7XY: Set waveform register to value XY. If a wavetable is actively
  647.              changing the channel's waveform at the same time, will be
  648.              ineffective.
  649.  
  650. Command 8XY: Set wavetable pointer. $00 stops wavetable execution.
  651.  
  652. Command 9XY: Set pulsetable pointer. $00 stops pulsetable execution.
  653.  
  654. Command AXY: Set filtertable pointer. $00 stops filtertable execution.
  655.  
  656. Command BXY: Set filter control. X is resonance and Y is channel bitmask.
  657.              $00 turns filter off and also stops filtertable execution.
  658.  
  659. Command CXY: Set filter cutoff to XY. Can be ineffective if the filtertable is
  660.              active and also changing the cutoff.
  661.  
  662. Command DXY: Set mastervolume to Y, if X is $0. If X is not $0, value XY is
  663.              copied to the timing mark location, which is playeraddress+$3F.
  664.  
  665. Command EXY: Funktempo. XY is an index to the speedtable, tempo will alternate
  666.              between left side value and right side value on subsequent pattern
  667.              steps. Sets the funktempo active on all channels, but you can use
  668.              the next command to override this per-channel.
  669.  
  670. Command FXY: Set tempo. Values $03-$7F set tempo on all channels, values $83-
  671.              $FF only on current channel (subtract $80 to get actual tempo).
  672.              Tempos $00-$01 recall the funktempo values set by EXY command.
  673.  
  674. Master volume is by default the maximum ($F), but it is only reset when loading
  675. a new song or clearing songdata in the editor, not every time playback starts.
  676. If you change mastervolume, you have to reset it manually in the beginning of
  677. your song.
  678.  
  679. If the command is not 1XY-4XY, instrument vibrato will be active.
  680.  
  681. Note that the one-shot commands 5XY-FXY allow the previous 1XY-4XY command or
  682. instrument vibrato to continue "underneath" them. In section 3.6 (hints & tips)
  683. there is an example of this.
  684.  
  685. 3.3 Instrument data
  686. -------------------
  687.  
  688. You can use up to 63 different instruments in a song. Each instrument is
  689. defined by 9 parameters:
  690.  
  691. Attack/Decay          $0 is fastest attack or decay, $F is slowest
  692.  
  693. Sustain/Release       Sustain level $0 is silent and $F is the loudest. Release
  694.                       behaves like Attack & Decay (F slowest).
  695.  
  696. Wavetable Pos         Wavetable startposition. Value $00 stops the wavetable
  697.                       execution and is not very useful.
  698.  
  699. Pulsetable Pos        Pulsetable startposition. Value $00 will leave pulse
  700.                       execution untouched.
  701.  
  702. Filtertable Pos       Filtertable startposition. Value $00 will leave filter
  703.                       execution untouched. In most cases it makes sense to have
  704.                       a filter-controlling instrument only on one channel at a
  705.                       time.
  706.  
  707. Vibrato Param         Instrument vibrato parameter. An index to the speedtable,
  708.                       see command 4XY.
  709.  
  710. Vibrato Delay         How many ticks until instrument vibrato starts. Value $00
  711.                       turns instrument vibrato off.
  712.  
  713. HR/Gate Timer         How many ticks before note start note fetch, gateoff and
  714.                       hard restart happen. Can be at most tempo-1. So on tempo 4
  715.                       highest acceptable value is 3. Bitvalue $80 disables hard
  716.                       restart and bitvalue $40 disables gateoff.
  717.  
  718. 1stFrame Wave         Waveform used on init frame of the note, usually $09 (gate
  719.                       + testbit). Values $00, $FE and $FF have special meaning:
  720.                       leave waveform unchanged and additionally set gate off
  721.                       ($FE), gate on ($FF), or gate unchanged ($00).
  722.  
  723. In case of illegal (too high) gateoff timer values, the song playback is
  724. stopped.
  725.  
  726. ADSR settings are crucial to getting any sound at all. If all of them are zero
  727. just a very short "click" will be heard. Here is a diagram to help you
  728. visualize the Attack, Decay, Sustain & Release phases:
  729.  
  730.      V      /\            |<- gatebit reset (key-off) at this point
  731.      O     /  \           |
  732.      L    /    \__________|
  733.      U   /                |\
  734.      M  /                 | \
  735.      E /                  |  \
  736. TIME ---------------------------->
  737.          A   D      S       R
  738.  
  739. Some ADSR examples:
  740.  
  741.   A/D 09 Will produce a sound that starts from full volume right away and fades
  742.   S/R 00 to silence automatically. By increasing the Decay value, the fade will
  743.          last longer.
  744.  
  745.   A/D 00 A sound that goes very fast from full volume to sustain level 8.
  746.   S/R 8A If you increase the Decay value, it will go to the sustain level
  747.          slower. After key-off, starts fading out with speed A.
  748.  
  749.   A/D CC A sound that rises slowly to maximum volume, then decays slowly to the
  750.   S/R AF sustain level A and after key-off, fades out to silence very slowly.
  751.  
  752. Instrument legato works as following: When HR/Gate Timer parameter has bit $40
  753. set, no hard restart or gateoff will be performed. When 1st Frame Wave is also
  754. $00, no 1st frame waveform will be set and gate flag is untouched. However wave/
  755. pulse/filterpointers and ADSR are initialized normally. You can also use this in
  756. conjunction with command 8XY to set another wavetable pointer for the note.
  757.  
  758. 3.4 Table data
  759. --------------
  760.  
  761. Tables control the execution of instruments' waveform/arpeggio changes, pulse
  762. modulation, and filter modulation. All the tables are controlled by the left
  763. side bytes, while the right side byte specifies additional parameters.
  764.  
  765. Note that you should never jump directly onto a table jump command (FF) either
  766. with instrument parameters or pattern commands 8XY, 9XY, AXY. Otherwise,
  767. results are undefined.
  768.  
  769. 3.4.1 Wavetable
  770. ---------------
  771.  
  772. Wavetable left side:   00    Leave waveform unchanged
  773.                        01-0F Delay this step by 1-15 frames
  774.                        10-DF Waveform values
  775.                        E0-EF Inaudible waveform values $00-$0F
  776.                        F0-FE Execute command 0XY-EXY. Right side is parameter.
  777.                        FF    Jump. Right side tells position ($00 = stop)
  778.  
  779. Wavetable right side:  00-5F Relative notes
  780.                        60-7F Negative relative notes (lower pitch)
  781.                        80    Keep frequency unchanged
  782.                        81-DF Absolute notes C#0 - B-7
  783.  
  784. Short explanation of waveform bitvalues:
  785. 01 = Gatebit. When on, initiates attack/decay/sustain phase. When off,
  786.      initiates the release phase.
  787. 02 = Synchronize. Creates weird effects using output of another channel
  788. 04 = Ring modulation. Creates weird effects using output of another channel.
  789.      Most effective with the triangle waveform.
  790. 08 = Testbit. Silences sound and resets the oscillator.
  791. 10 = Triangle waveform.
  792. 20 = Sawtooth waveform.
  793. 40 = Pulse waveform.
  794. 80 = Noise waveform.
  795.  
  796. All waveforms except noise can be combined (for example triangle+pulse), but
  797. the effect will be different on 6581 and 8580 SID chips, so use caution.
  798.  
  799. The way how the channels work with synchronize/ringmod:
  800. - When used on channel 1, channel 3's output modulates the sound.
  801. - When used on channel 2, channel 1's output modulates the sound.
  802. - When used on channel 3, channel 2's output modulates the sound.
  803.  
  804. Wavetable delay or no wavechange should not be used in the first step of
  805. instrument wavetable. Otherwise, missing notes may be caused. On the other
  806. hand, if you use 8XY command to jump into a wavetable program, those are
  807. allowed.
  808.  
  809. Using wavetable delay or a wavetable step with no frequency change allows
  810. realtime commands & instrument vibrato to be executed together with wave-
  811. table. Be warned that this has the potential for large rastertime usage!
  812.  
  813. You can execute pattern commands from the wavetable. Right side
  814. is the command parameter. Note that commands 0XY (do nothing), 8XY (set
  815. wavetable pointer) and EXY (funktempo) are illegal and should not be used.
  816. When executing a command, no wave/note will be changed on the same frame.
  817.  
  818. Some examples of wave tables (all examples start on table step 1)
  819.  
  820.   01: 21 00 Sawtooth waveform on note's original pitch.
  821.   02: FF 00
  822.  
  823.   01: 41 00 A flute sound with pulse on the first tick and triangle on all
  824.   02: 11 00 the rest.
  825.   03: FF 00
  826.  
  827.   01: 41 01 A "koto" sound that is one halfstep higher on the first tick and
  828.   02: 40 00 on original pitch the next. Gatebit is also cleared on the second
  829.   03: FF 00 tick.
  830.  
  831.   01: 81 D0 A snaredrum sound, using all absolute notes so it does not depend
  832.   02: 41 AA on which note it's played. Use pulsewidth 800 for best result.
  833.   03: 41 A4
  834.   04: 80 D4
  835.   05: 80 D1
  836.   06: FF 00
  837.  
  838.   01: 81 DF A pulse sound on original pitch, preceded with a short noise (like
  839.   02: 41 00 a hi-hat or something) that has always an absolute pitch of B-7.
  840.   03: FF 00
  841.  
  842.   01: 41 00 A 4-note looping arpeggio sound with pulse waveform. Note that
  843.   02: 00 04 waveform does not change in the looping part.
  844.   03: 00 07
  845.   04: 00 0C
  846.   05: 00 00
  847.   06: FF 02
  848.  
  849.   01: 21 00 A delayed minor chord arpeggio with sawtooth waveform. Each step
  850.   02: 02 03 takes 3 ticks.
  851.   03: 02 07
  852.   04: 02 00
  853.   05: FF 02
  854.  
  855.   01: 41 00 Use pulse first, but then switch between pulse & triangle every 5
  856.   02: 03 80 ticks while frequency remains unchanged (allowing for vibrato &
  857.   03: 11 80 slides).
  858.   04: 03 80
  859.   05: 41 80
  860.   06: FF 02
  861.  
  862.   01: 81 CF Short noise in the beginning, sawtooth, after a short delay change
  863.   02: 21 00 sustain/release (via pattern command 6XY) to $2A.
  864.   03: 08 00
  865.   04: F6 2A
  866.   05: FF 00
  867.  
  868.  
  869. 3.4.2 Pulsetable
  870. ----------------
  871.  
  872. Pulsetable left side:  01-7F Pulse modulation step. Left side indicates time
  873.                              and right side the speed (signed 8-bit value).
  874.                        8X-FX Set pulse width. X is the high 4 bits, right
  875.                              side tells the 8 low bits.
  876.                        FF    Jump. Right side tells position ($00 = stop)
  877.  
  878. Some examples of pulse tables (all examples start on table step 1)
  879.  
  880.   01: 88 00 Set pulse value $800 (middle)
  881.   02: FF 00 Stop pulse execution
  882.  
  883.   01: 80 10 Set pulse value $010 (very thin)
  884.   02: 20 40 For 32 ticks, increase pulse with speed $0040 (64)
  885.   03: 40 E0 For 64 ticks, decrease pulse with speed $FFE0 (-32)
  886.   04: 40 20 For 64 ticks, increase pulse with speed $0020 (32)
  887.   05: FF 03 Jump back to step 03 for a nice loop
  888.  
  889. 3.4.3 Filtertable
  890. -----------------
  891.  
  892. Filtertable left side: 00    Set cutoff, indicated by right side
  893.                        01-7F Filter modulation step. Left side indicates time
  894.                              and right side the speed (signed 8-bit value)
  895.                        80-F0 Set filter parameters. Left side high nybble
  896.                              tells the passband ($90 = lowpass, $A0 = bandpass
  897.                              etc.) and right side tells resonance/channel
  898.                              bitmask, as in command BXY.
  899.                        FF    Jump. Right side tells position ($00 = stop)
  900.  
  901. If "Set filter parameters" is followed by "Set cutoff" directly below, both
  902. will be executed on the same frame.
  903.  
  904. Some examples of filter tables (all examples start on table step 1)
  905.  
  906.   01: 90 F1 Set lowpass, resonance F, channel bitmask 1 (filter channel 1 only)
  907.   02: 00 40 Set cutoff to $40
  908.   03: FF 00 Stop filter execution
  909.  
  910.   01: 80 00 No passband selected, resonance 0, bitmask 0 (no filtered channels)
  911.   02: FF 00 Stop filter execution
  912.  
  913.   01: A0 87 Set bandpass, resonance 8, channel bitmask 7 (filter all channels)
  914.   02: 00 00 Set cutoff to $00
  915.   03: 7F 01 Increase cutoff with speed $01 for 127 ticks
  916.   04: 7F 01 Continue cutoff increase
  917.   05: 7F FF Then decrease back to starting position (speed $FF = -1)...
  918.   06: 7F FF
  919.   07: FF 03 ...and loop back to step 03
  920.  
  921.   01: C0 F2 Set highpass, resonance F, channel bitmask 2 (filter channel 2)
  922.   02: 00 F0 Set cutoff to $F0
  923.   03: 90 F2 On the next frame, change to lowpass...
  924.   04: 00 50 ...and set cutoff $50
  925.   05: FF 00 Stop filter execution
  926.  
  927. Note that the second example could also be achieved simply with pattern command
  928. B00 (set filter control, and stop filter execution, because parameter was $00)
  929.  
  930. 3.4.4 Speedtable
  931. ----------------
  932.  
  933. The speedtable is shared by vibrato, portamento and funktempo. No jump commands
  934. exist.
  935.  
  936. For vibrato:          XX YY Left side tells how long until vibrato direction
  937.                             changes (speed), right side is the value added to
  938.                             pitch each tick (depth).
  939.  
  940. For portamento:       XX YY A 16-bit value added to pitch each tick. Left side
  941.                             is the MSB and the right side the LSB.
  942.  
  943. For funktempo:        XX YY Two 8-bit tempo values that are alternated on each
  944.                             pattern row, starting from the left side.
  945.  
  946. For both vibrato and portamento, if XX has the high bit ($80) set, note 
  947. independent vibrato depth / portamento speed calculation is enabled, and YY
  948. specifies the divisor (higher value -> lower result and more rastertime taken).
  949.  
  950. Vibrato examples:
  951.  
  952.   01: 03 40 Vibrato with speed $03 and depth $40. Corresponds to old vibrato
  953.             parameter $34
  954.   01: 05 04 Speed $05 and depth $04. Slow shallow vibrato, suitable for bass
  955.             notes. Not possible to achieve with old parameters.
  956.   01: 83 04 Speed $03, note-independent depth enabled, depth divisor 4 right-
  957.             shifts (division by 16).
  958.  
  959. Portamento examples:
  960.  
  961.   01: 00 20 Portamento with speed $0020, corresponds to old parameter $08
  962.             (4 * $08 = $0020).
  963.   01: 01 00 Portamento with speed $0100, corresponds to old parameter $40
  964.             (4 * $40 = $0100).
  965.   01: 4F FF Portamento with speed $4fff, loops the pitch highbyte very fast
  966.             so that a SEUCK-like "space" effect is heard. Not possible to
  967.             achieve with old parameters.
  968.   01: 80 01 Note-independent speed enabled, speed divisor 1 rightshift
  969.             (division by 2).
  970.  
  971. Funktempo examples:
  972.  
  973.   01: 09 06 Play tempo $09 on even pattern steps and $06 on odd steps,
  974.             corresponds to old parameter $96.
  975.  
  976.   01: 24 18 The same funktempo adjusted for 4x-multispeed. Not possible to
  977.             achieve with old parameters.
  978.  
  979. Note that you can enter old style vibrato parameters, portamento speeds and
  980. funktempo to patterns & instruments, and when cursor is over the parameter,
  981. press SHIFT+RETURN to create a new speedtable entry corresponding to that
  982. parameter. The parameter will now be overwritten by a speedtable pointer.
  983.  
  984.  
  985. 3.5 Playback details
  986. --------------------
  987.  
  988. Each pattern row is divided into as many 50Hz/60Hz "ticks" as the tempo
  989. indicates. Some ticks are reserved for special actions, and to conserve raster-
  990. time, certain realtime effects/commands (pulse, vibrato, portamento) are
  991. skipped at the same time. Let's assume a tempo of 6 and gateoff timer value 2
  992. and look at what happens on each tick:
  993.  
  994. Tick    Actions
  995. 0       - Initialization of new notes (no audible sound yet)
  996.         - Orderlist advance if necessary
  997.         - Pulsetable execution only if no orderlist advance
  998.         - Wavetable execution
  999.         - "One-shot" commands 5XY-FXY
  1000.  
  1001. 1       - New notes become audible
  1002.         - Pulsetable execution
  1003.         - Wavetable or realtime pattern commands 1XY-4XY
  1004.  
  1005. 2,3     - Pulsetable execution
  1006.         - Wavetable or realtime pattern commands 1XY-4XY
  1007.  
  1008. 4       - New notes fetched from the pattern
  1009.         - Gateoff and hard restart for new notes
  1010.           (2 ticks before first frame, as gateoff timer indicates)
  1011.         - No pulsetable execution
  1012.         - Wavetable or realtime pattern commands 1XY-4XY
  1013.  
  1014. 5       - Pulsetable execution
  1015.         - Wavetable or realtime pattern commands 1XY-4XY
  1016.  
  1017. Filtertable is executed on each tick regardless of what the channels are doing.
  1018. Wavetable is never skipped, so arpeggios/drumsounds should always play OK.
  1019.  
  1020. With the commandline parameter /O0 (or by clicking the "PO" text on the status
  1021. bar) you can disable pulse skipping. This leads to increased rastertime use but
  1022. can be good for example with tempo 3 tunes.
  1023.  
  1024. Likewise, with the commandline parameter /R0 (or by clicking the "RO" text on
  1025. the status bar) you can disable realtime pattern command skipping on tick 0.
  1026.  
  1027. 3.6 Miscellaneous tips
  1028. ----------------------
  1029.  
  1030. - Patterns will take less memory the less there are command changes. When the
  1031.   song is packed/relocated, for example a long vibrato or portamento command
  1032.   needs to be stored only once as long as the parameter stays the same on
  1033.   subsequent pattern rows.
  1034.  
  1035. - Using instrument vibrato can make 4XY commands unnecessary and save even
  1036.   more memory. Use realtime calculated note-independent speed (see speedtable
  1037.   section) if you want the vibrato to have the same magnitude regardless of 
  1038.   the note.
  1039.  
  1040. - In the instrument parameters, there is no option to stop pulse execution
  1041.   directly. So if you have for example a sawtooth instrument, there might be
  1042.   an "unnecessary" pulsemodulation going on underneath and wasting rastertime.
  1043.   There are two ways you can stop this:
  1044.   1) Make a short pulseprogram like this and use it in the instrument:
  1045.      01: 80 00 Set pulse $000
  1046.      02: FF 00 Stop pulse execution
  1047.   2) Use pattern command 900 to stop pulse execution
  1048.  
  1049. - If you have a realtime command (vibrato/portamento), you can put "one-shot"
  1050.   commands 5XY-FXY inbetween and the realtime command will be unaffected. An
  1051.   example:
  1052.  
  1053.   C-4 01000
  1054.   --- 00401 Begin vibrato with speedtable index $01
  1055.   --- 00401
  1056.   --- 00401
  1057.   --- 0065A Set sustain/release to $5A. Vibrato executes also on this step!
  1058.   --- 00401 Continue vibrato normally
  1059.   --- 00401
  1060.  
  1061.   However, the vibrato would stop immediately if command 0 was encountered.
  1062.  
  1063. - Normally tempo 3 is the fastest you can use. However, by using the funktempo
  1064.   command you can get tempo 2. To do this, create a following speedtable entry:
  1065.   02 02, and point your funktempo command to it. You also need to use gateoff
  1066.   timer 1 in all instruments and disable the pulse-optimization skipping.
  1067.  
  1068. - For very optimized songdata & player you can refrain from using any pattern
  1069.   commands and rely on the instruments' step-programming. Even in this case, you
  1070.   can set song startup default tempo with the Attack/Decay parameter of the last
  1071.   instrument (63), if you otherwise leave this instrument unused.
  1072.  
  1073. 3.6.1 Limit-based modulation steps
  1074. ----------------------------------
  1075.  
  1076. You can enter pulse/filter modulation steps in limit-based format, and convert
  1077. them to time-based with SHIFT+L. For example, you could enter the following in
  1078. the pulsetable:
  1079.  
  1080.   01: 84 00 Set initial pulse to $400
  1081.   02: C0 10 Modulate pulse to $C00 with speed $0010
  1082.   03: 40 10 Modulate pulse back to $400 with speed $0010
  1083.  
  1084. Now position the cursor on step 02 and press SHIFT+L twice, to convert both of
  1085. the modulation steps to usual time-based steps. If necessary, the steps will
  1086. be expanded to several (if the resulting time parameter is over $7F.)
  1087.  
  1088. Remember that the player only understands time-based steps and you always have
  1089. to convert limit-based steps before they play correctly!
  1090.  
  1091. 3.6.2 Precalculated note-independent "hifi player" portamento/vibrato
  1092. ---------------------------------------------------------------------
  1093.  
  1094. From v2.62 onwards, GoatTracker actually supports realtime calculated note 
  1095. independent portamento and vibrato speeds, see speedtable section for this. 
  1096. However, this makes the player bigger and much slower. You can still also use 
  1097. the old method of manually precalculating needed note-independent speeds with 
  1098. the SHIFT+H function, which this section is about.
  1099.  
  1100. The idea is to take the frequency difference between 2 adjacent notes in
  1101. the frequency table and manipulate it by bit shifting left (multiply) or
  1102. right (divide).
  1103.  
  1104. To use, you need a portamento or vibrato command in the pattern, and the note
  1105. you wish to base the calculation on on the current pattern step or before it
  1106. (before it only for toneportamento) The amount of shift is determined by the
  1107. command parameter. A number in the left nybble means shift left and right
  1108. nybble right shift. When you press Shift+H while the cursor is on the command,
  1109. a speedtable entry is created, and the parameter is replaced with a speedtable
  1110. index.
  1111.  
  1112. Some examples:
  1113.  
  1114.   C-3 00110 Take the frequency difference between C-3 & C#3 and shift it left
  1115.             1 times (multiply by 2.)
  1116.  
  1117.   E-4 00000
  1118.   ... 00000
  1119.   G-4 00302 Take the frequency difference between E-4 & F-4 and shift it right
  1120.             2 times (divide by 4.)
  1121.  
  1122. 3.7 Multispeed tips
  1123. -------------------
  1124.  
  1125. - When making multispeed songs, remember to multiply your tempos and also the
  1126.   gateoff timer values! For example, gateoff timer is normally 2, but in a 2X-
  1127.   speed tune the same gateoff length would be achieved with value 4.
  1128.  
  1129. - If you want to keep vibrato the same compared to 1X-speed, you must multiply
  1130.   vibrato speed by the speed multiplier, and divide vibrato depth by the
  1131.   multiplier. Remember also to divide portamento and pulse/filter modulation
  1132.   speeds as necessary.
  1133.  
  1134. - When importing a v1.xx multispeed song, you also need to multiply the
  1135.   gateoff timers.
  1136.  
  1137. - In the instruments, using Attack 0 might result in a very silent first row of
  1138.   the wavetable. You could try increasing the attack, or adding one or more
  1139.   rows of E9 00 (testbit+gate) to the beginning of the wavetable.
  1140.  
  1141.  
  1142. 4. Using the included utilities
  1143. -------------------------------
  1144.  
  1145. 4.1 INS2SND2.EXE
  1146. ----------------
  1147.  
  1148. INS2SND2.EXE converts GoatTracker v1.xx or v2 instruments (.INS-files) into
  1149. sound effects, outputting the data as source code or binary.
  1150.  
  1151. Usage: INS2SND <instrumentfile> <sourcecodefile> <options>
  1152. Options:
  1153. -b output in binary
  1154. -c output in CovertScript format (deprecated)
  1155.  
  1156. Default output is C64 assembler (DASM) style source code
  1157.  
  1158. Look at section 6.3 or run the program without parameters to see the
  1159. limitations of the sound effect system.
  1160.  
  1161. 4.2 SNGSPLI2.EXE
  1162. ----------------
  1163.  
  1164. SNGSPLI2.EXE splits the patterns of a GoatTracker v2 song into smaller pieces
  1165. for memory use optimization. It is comfortable to compose with large patterns
  1166. but usually more efficient memory-wise to use small patterns. Remember! Always
  1167. keep the original song because a pattern-splitted song is much harder to edit
  1168. further.
  1169.  
  1170. Usage: SNGSPLI2 <source> <destination> [target len]
  1171.  
  1172. For example, if a pattern is 64 rows long and the target length is 16, it will
  1173. be split into 4 pieces. A pattern that falls below 2 x target length, will not
  1174. be split at all.
  1175.  
  1176. 4.3 MOD2SNG.EXE
  1177. ---------------
  1178.  
  1179. Dedicated exclusively to T.M.R, this program converts the pattern & orderlist
  1180. data of 4-channel, 31-instrument MOD-files into GoatTracker .SNG files. You
  1181. must choose one channel to leave out, and obviously instruments are not
  1182. converted, except for their names. You can also specify a transpose in
  1183. halfsteps.
  1184.  
  1185. Usage: MOD2SNG <mod> <sng> [channel] [transpose]
  1186.        [channel] is the channel to leave out (1-4), default 4
  1187.        [transpose] is the halfstep transpose added to notes, default 0
  1188.  
  1189. 4.4 BETACONV.EXE
  1190. ----------------
  1191.  
  1192. Converts GT v2 beta songs to new format used by GT v2 RC1 onwards. Old format
  1193. had 47 instruments max. and new has 63 max. Additionally, depending on what
  1194. beta version you used, you can choose to halve vibrato depths and pulse speeds
  1195. to make them play correct in the current version. Warning: the conversion is
  1196. irreversible, so have backups if you overwrite the old versions.
  1197.  
  1198. Usage: BETACONV <source> <destination> [vibdepth] [pulse]
  1199.        [vibdepth] decides whether to halve vibdepth (1=yes 0=no), default 0
  1200.        [pulse] decides whether to halve pulse speed (1=yes 0=no), default 0
  1201.  
  1202. 4.5 GT2RELOC.EXE
  1203. ----------------
  1204.  
  1205. This is a standalone version of the packer/relocator. It converts .sng files
  1206. into .bin, .prg or .sid depending on outfiles extension.
  1207.  
  1208. Usage: GT2RELOC <songname> <outfile> [options]
  1209.  
  1210. Options:
  1211. -Axx Set ADSR parameter for hardrestart in hex. DEFAULT=0F00
  1212. -Bx  enable/disable buffered SID writes. DEFAULT=disabled
  1213. -Cx  enable/disable zeropage ghost registers. DEFAULT=disabled
  1214. -Dx  enable/disable sound effect support. DEFAULT=disabled
  1215. -Ex  enable/disable volume change support. DEFAULT=disabled
  1216. -Fxx Set custom SID clock cycles per second (0 = use PAL/NTSC default)
  1217. -Gxx Set pitch of A-4 in Hz (0 = use default frequencytable, close to 440Hz)
  1218. -Hx  enable/disable storing of author info. DEFAULT=disabled
  1219. -Ix  enable/disable optimizations. DEFAULT=enabled
  1220. -Jx  enable/disable full buffering. DEFAULT=disabled
  1221. -Lxx SID memory location in hex. DEFAULT=D400
  1222. -N   Use NTSC timing
  1223. -Oxx Set pulseoptimization/skipping (0 = off, 1 = on) DEFAULT=on
  1224. -P   Use PAL timing (DEFAULT)
  1225. -Rxx Set realtime-effect optimization/skipping (0 = off, 1 = on) DEFAULT=on
  1226. -Sxx Set speed multiplier (0 for 25Hz, 1 for 1x, 2 for 2x etc.) DEFAULT=1
  1227. -Vxx Set finevibrato conversion (0 = off, 1 = on) DEFAULT=on
  1228. -Wxx player memory location highbyte in hex. DEFAULT=1000
  1229. -Zxx zeropage memory location in hex. DEFAULT=FC
  1230. -?   Show options
  1231.  
  1232.  
  1233. 5. Using the songs outside the editor
  1234. -------------------------------------
  1235.  
  1236. Press F9 in the editor to enter the packer/relocator. Choose playroutine
  1237. options, startaddress, zeropage address (need 2 consecutive locations) and file
  1238. format (PRG/BIN/SID), then type the filename.
  1239.  
  1240. If you use patterns longer than 64 rows, there is the possibility that
  1241. relocation fails because of too complex patterns. Each pattern row can be 0-4
  1242. bytes packed, and the total amount of bytes per one pattern may not exceed 256.
  1243.  
  1244. If wave/pulse/filtertables overflow past row 255 without a jump command or there
  1245. are other serious errors, you get a warning screen and have to fix the error.
  1246.  
  1247. The relocator optimizes & removes when saving:
  1248. - Unused patterns
  1249. - Unused instruments
  1250. - Unused table-entries
  1251. - Selfcontained (ie. no jumps to/from outside) duplicate parts of tables
  1252. - Player code not needed in the playback of the song
  1253.  
  1254. Look at /examples/example1.prg - example4.prg to get an idea how much these
  1255. playroutines take rastertime. No promises!
  1256.  
  1257. The basic functions independent of playroutine options are:
  1258.  
  1259. Init music:
  1260.  
  1261.         LDA #subtunenumber       ;Starting from 0
  1262.         JSR startaddress
  1263.  
  1264. Play one frame of music:
  1265.  
  1266.         JSR startaddress+3
  1267.  
  1268. 5.1 Playroutine options
  1269. -----------------------
  1270.  
  1271. BUFFERED SID-WRITES - Instead of writing each SID value as soon as possible,
  1272. waits for the end of the channel's execution on each frame and then writes the
  1273. registers in one go. Improves sound stability but takes more memory & raster-
  1274. time.
  1275.  
  1276. SOUND EFFECT SUPPORT - Adds a sound effect engine for use in games. Implies
  1277. buffered writes. To use, call in the following way:
  1278.  
  1279.         LDA #<effect        ;Start address of sound effect data
  1280.         LDY #>effect
  1281.         LDX #channel        ;0, 7 or 14 for channels 1-3
  1282.         JSR startaddress+6
  1283.  
  1284. The sound effects have a hardcoded priority system based on their start
  1285. addresses. A sound higher up in memory (bigger address) will never be
  1286. interrupted with a sound lower in memory.
  1287.  
  1288. VOLUME CHANGE SUPPORT - Adds a routine in the player's jumptable to change the
  1289. master volume level. To use, call in the following way:
  1290.  
  1291.         LDA #volume        ;0-15
  1292.         JSR startaddress+6 ;(startaddress+9 with sound effect support)
  1293.  
  1294. Note that the master volume command (DXY) also modifies this same location,
  1295. so it will clash if you also change the volume manually.
  1296.  
  1297. STORE AUTHOR-INFO - Writes the "AUTHOR" string from songname editor to the
  1298. location range (startaddress+$20 - startaddress+$3F). Also enables timing mark
  1299. support. A timing mark is a mastervolume command (DXY) with parameter $10-$FF.
  1300. This parameter will be copied into startaddress+$3F when the command is
  1301. encountered in playback.
  1302.  
  1303. USE ZEROPAGE GHOSTREGS - Instead of writing to the SID, a memory range in the
  1304. zeropage is used for holding the SID register data. This can then be copied
  1305. in the main program to the SID, for example to enable the playroutine & music
  1306. data to reside under the I/O area. Implies buffered writes. A reverse copy loop
  1307. should be used after each call to the playroutine:
  1308.  
  1309.         LDX #$18
  1310. copy:   LDA ghostregs,x
  1311.         STA $D400,x
  1312.         DEX
  1313.         BPL copy
  1314.  
  1315. The copy loop can also be unrolled for more speed.
  1316.  
  1317. Note that when you use the alternative hardrestart method & playroutine (hard-
  1318. restart attack parameter F) the copy loop should not be in reverse order but
  1319. should be for each channel: wave, frequency, pulsewidth, and ADSR last.
  1320.  
  1321. If you are using both sound effect support and ghostregisters, there exists
  1322. a possibility of sound errors in the case that a sound effect has finished,
  1323. and the same channel starts a new pulse-waveform note without setting an
  1324. initial pulsewidth value (for example, like in the beginning of Sanxion loader
  1325. tune). This is because the ghostregisters are shared between music & sound
  1326. effect playback, and the sound effect has already overwritten the previous
  1327. pulse width.
  1328.  
  1329. DISABLE OPTIMIZATIONS - The relocator removes saved playroutine code based on
  1330. what effects & commands the song uses, resulting in a smaller playroutine
  1331. accordingly. If you encounter anomalies in the sound (such as ADSR bugs caused
  1332. by unpredictable timing variation) you can try disabling the optimizations.
  1333. Normally this is not necessary, but is included just in case.
  1334.  
  1335. FULL BUFFERING - in some cases, especially with multispeeds, the "standard"
  1336. or per-channel buffering is not enough and will still produce ADSR errors. 
  1337. This enables a functionality similar to the ZP ghost regs, where the previous
  1338. frame's SID data is copied to the SID at the beginning of the play call for
  1339. maximum stability. Will use more rastertime and imply the same problems with 
  1340. sound effect playback as the ZP ghost regs, so use only when necessary.
  1341.  
  1342.  
  1343. 6. File/data formats description
  1344. --------------------------------
  1345.  
  1346. The sections in the files appear in the sequential order in which they are
  1347. described.
  1348.  
  1349. 6.1 GoatTracker v2 song (.SNG) format
  1350. -------------------------------------
  1351.  
  1352. 6.1.1 Song header
  1353. -----------------
  1354.  
  1355. Offset  Size    Description
  1356. +0      4       Identification string GTS5
  1357. +4      32      Song name, padded with zeros
  1358. +36     32      Author name, padded with zeros
  1359. +68     32      Copyright string, padded with zeros
  1360. +100    byte    Number of subtunes
  1361.  
  1362. 6.1.2 Song orderlists
  1363. ---------------------
  1364.  
  1365. The orderlist structure repeats first for channels 1,2,3 of first subtune,
  1366. then for channels 1,2,3 of second subtune etc., until all subtunes
  1367. have been gone thru.
  1368.  
  1369. Offset  Size    Description
  1370. +0      byte    Length of this channel's orderlist n, not counting restart pos.
  1371. +1      n+1     The orderlist data:
  1372.                 Values $00-$CF are pattern numbers
  1373.                 Values $D0-$DF are repeat commands
  1374.                 Values $E0-$FE are transpose commands
  1375.                 Value $FF is the RST endmark, followed by a byte that indicates
  1376.                 the restart position
  1377.  
  1378. 6.1.3 Instruments
  1379. -----------------
  1380.  
  1381. Offset  Size    Description
  1382. +0      byte    Amount of instruments n
  1383.  
  1384. Then, this structure repeats n times for each instrument. Instrument 0 (the
  1385. empty instrument) is not stored.
  1386.  
  1387. Offset  Size    Description
  1388. +0      byte    Attack/Decay
  1389. +1      byte    Sustain/Release
  1390. +2      byte    Wavepointer
  1391. +3      byte    Pulsepointer
  1392. +4      byte    Filterpointer
  1393. +5      byte    Vibrato param. (speedtable pointer)
  1394. +6      byte    Vibraro delay
  1395. +7      byte    Gateoff timer
  1396. +8      byte    Hard restart/1st frame waveform
  1397. +9      16      Instrument name
  1398.  
  1399. 6.1.4 Tables
  1400. ------------
  1401.  
  1402. This structure repeats for each of the 4 tables (wavetable, pulsetable,
  1403. filtertable, speedtable).
  1404.  
  1405. Offset  Size    Description
  1406. +0      byte    Amount n of rows in the table
  1407. +1      n       Left side of the table
  1408. +1+n    n       Right side of the table
  1409.  
  1410. 6.1.5 Patterns header
  1411. ---------------------
  1412.  
  1413. Offset  Size    Description
  1414. +0      byte    Number of patterns n
  1415.  
  1416. 6.1.6 Patterns
  1417. --------------
  1418.  
  1419. Repeat n times, starting from pattern number 0.
  1420.  
  1421. Offset  Size    Description
  1422. +0      byte    Length of pattern in rows m
  1423. +1      m*4     Groups of 4 bytes for each row of the pattern:
  1424.                 1st byte: Notenumber
  1425.                           Values $60-$BC are the notes C-0 - G#7
  1426.                           Value $BD is rest
  1427.                           Value $BE is keyoff
  1428.                           Value $BF is keyon
  1429.                           Value $FF is pattern end
  1430.                 2nd byte: Instrument number ($00-$3F)
  1431.                 3rd byte: Command ($00-$0F)
  1432.                 4th byte: Command databyte
  1433.  
  1434. 6.2 GoatTracker v2 instrument (.INS) format
  1435. -------------------------------------------
  1436.  
  1437. Offset  Size    Description
  1438. +0      4       Identification string GTI5
  1439. +4      byte    Attack/Decay
  1440. +5      byte    Sustain/Release
  1441. +6      byte    Wavepointer
  1442. +7      byte    Pulsepointer
  1443. +8      byte    Filterpointer
  1444. +9      byte    Vibrato param. (speedtable pointer)
  1445. +10     byte    Vibrato delay
  1446. +11     byte    Gateoff timer
  1447. +12     byte    Hard restart/1st frame waveform
  1448. +13     16      Instrument name
  1449.  
  1450. After the instrument data, this structure repeats for each of the 4 tables
  1451. (wavetable, pulsetable, filtertable, speedtable).
  1452.  
  1453. Offset  Size    Description
  1454. +0      byte    Amount n of rows in the table
  1455. +1      n       Left side of the table
  1456. +1+n    n       Right side of the table
  1457.  
  1458. Note that the tables are a partial snapshot of the current song the instrument
  1459. was saved from, so upon loading they have to be relocated to the current free
  1460. table locations.
  1461.  
  1462. 6.3 Sound effect data format
  1463. ----------------------------
  1464.  
  1465. Offset  Size    Description
  1466. +0      byte    Attack/Decay
  1467. +1      byte    Sustain/Release
  1468. +2      byte    Pulse width. This value has nybbles reversed from what it looks
  1469.                 like in the editor so a middle pulse $800 will be stored as $08,
  1470.                 and the sound effect routine will put this value to both $D402
  1471.                 and $D403 registers.
  1472. +3      ?       Wavetable. Contains note/waveform pairs (different order than
  1473.                 in instrument wavetable), from which the waveform can be
  1474.                 omitted if unchanged, as the value ranges do not overlap:
  1475.                         Value $00 ends the sound effect
  1476.                         Values $01-$81 are waveforms
  1477.                         Values $82-$DF are absolute notes D-0 - B-7
  1478.                 Note that a note cannot be omitted to store only waveform
  1479.                 changes!
  1480.  
  1481. As you can see, the sound effect format is very simplistic. When converting an
  1482. instrument to a sound effect with INS2SND2, following things cause an error
  1483. message:
  1484.  
  1485. - If the resulting sound effect is more than 128 bytes
  1486. - If the instrument's wavetable contains relative notes, absolute notes C-0 or
  1487.   C#0, or waveforms > 129 ($81)
  1488.  
  1489. The instrument's pulsewidth modulation & filter settings will be completely
  1490. discarded.
  1491.  
  1492.  
  1493. 7. Recompiling
  1494. --------------
  1495.  
  1496. To recompile for Win32, you need the MinGW development environment, use the
  1497. file src/makefile.win as makefile.
  1498.  
  1499. To recompile for Linux, use src/makefile.
  1500.  
  1501. In both cases you need the SDL development libraries in addition to the SDL
  1502. runtime, see http://www.libsdl.org.
  1503.  
  1504. Compile first the utilities (datafile & dat2inc) from the src/bme directory,
  1505. and place them to your path.
  1506.  
  1507.  
  1508. 8. Version history
  1509. ------------------
  1510.  
  1511. v2.0Beta  - Original public release
  1512.  
  1513. v2.0      - Fixed crash in DMC-note entry mode.
  1514.           - Fixed v1.xx import pulse conversion, a case where pulse startpos
  1515.             was lower than the pulse low limit was not converted right.
  1516.           - Fixed instrument gatetimer becoming zero (can lead to tempo bugs)
  1517.             when cutting an instrument (SHIFT+X)
  1518.           - Fixed order of SID writes to make editor & C64 playroutine behave
  1519.             as similarly as possible.
  1520.           - Fixed removal of table-entries (when loading an instrument) in
  1521.             case another instrument uses them too.
  1522.           - Fixed toneportamento (3XY) with wavetable delays.
  1523.           - Fixed funktempo in packed/relocated songs.
  1524.           - Fixed behaviour of + & - keys while editing instrument name.
  1525.           - Fixed pattern editor transpose functions.
  1526.           - Added SHIFT+DEL to delete an instrument + its tabledata.
  1527.           - Added SHIFT+INS to insert rows on table first row without having to
  1528.             adjust tablepointers afterwards.
  1529.           - Added SHIFT+W,S for octave transpose.
  1530.           - Added SHIFT+1,2,3 to swap orderlists between channels.
  1531.           - Added SHIFT+BACKSPACE to clear a whole pattern row.
  1532.           - Added optimized playroutines, that will be used if all instruments
  1533.             have the same gateoff timer & 1st wave parameters.
  1534.           - Added duplicate check for v1.xx pulse conversion.
  1535.           - Added BETACONV-utility for conversion from beta format.
  1536.           - Added reSID interpolation option /I.
  1537.           - Added hexadecimal pattern row display option /D.
  1538.           - Added SID memory location parameter /L.
  1539.           - reSID interpolation is on by default.
  1540.           - Changed appearance of pattern special notes (rest, keyoff/on)
  1541.           - Increased amount of instruments to 63 and changed song dataformat.
  1542.           - v1.xx import converts arpeggios to instruments as long as there is
  1543.             room.
  1544.           - Vibrato depth changed back to same as in v1.xx.
  1545.           - Pulse modulation speeds are doubled.
  1546.           - Upon startup, songdata erase, or importing v1.xx data, gatetimer
  1547.             will be set to 2 * multiplier as opposed to just 2.
  1548.           - Optimized size & speed of all playroutines (initialization,
  1549.             checking for new note fetch, pulsetable execution).
  1550.           - Wavetable delay or no-wavechange on first step of instrument is
  1551.             definitely unsupported now! Protection to allow this conflicted
  1552.             with 3XY command.
  1553.  
  1554. v2.01     - Added under-IO gamemusic playroutine.
  1555.  
  1556. v2.02     - Added RETURN when instrument tableparameter (wave/pulse/filter) is
  1557.             0 to get you to the first free table location. SHIFT+RETURN will
  1558.             additionally also set the instrument tableparameter.
  1559.           - Added "set mastervolume"-jump to gamemusic routines.
  1560.           - Improved sound effect handling, when an effect is interrupted by
  1561.             another (less silence between sounds).
  1562.  
  1563. v2.03     - Added execution of realtime commands & instrument vibrato during
  1564.             wavetable delay.
  1565.           - Added wavetable right side value $80 to keep frequency unchanged
  1566.             (as a consequence, the note C-0 will cause the same effect).
  1567.           - Added relocator optimizations: all unnecessary data is stripped
  1568.             when packing/relocating.
  1569.           - Playroutines size-optimized.
  1570.           - Explanation of how different gatetimer values can lead to playback
  1571.             going out of sync (section 3.3).
  1572.           - reSID interpolation is no longer on by default :)
  1573.  
  1574. v2.04     - Added a questionable 25Hz mode (/S0)
  1575.           - Execution of commands on wavetable delay is completely reworked
  1576.             and more consistent now.
  1577.           - Note C-0 is usable again.
  1578.  
  1579. v2.05     - Added instrument legato feature (Hardres/1stwave parameter $00).
  1580.           - ADSR writes moved farther away from wave writes in the standard
  1581.             playroutine noteinit, lessening possibility of ADSR bugs.
  1582.           - Song initialization and pulsetable execution speed/sizeoptimized.
  1583.  
  1584. v2.06     - Packer/relocator tolerates up to 256 bytes long patterns now.
  1585.           - Optimized playroutine sizes.
  1586.  
  1587. v2.07     - Fixed transpose reset with F2/F3 song start (should not happen).
  1588.           - Fixed varying tempo on channels with F2/F3 song start.
  1589.           - Added warning screen to packer/relocator if table execution
  1590.             overflows.
  1591.           - Added writing of PAL/NTSC and 6581/8580 flags according to PSID V2
  1592.             NG specification.
  1593.           - -mwindows added to linker options for no displaying of DOS prompt
  1594.             window (in win32 version).
  1595.  
  1596. v2.08     - Added finevibrato mode (/V command line option).
  1597.           - Optimized playroutine sizes & speed.
  1598.  
  1599. v2.09     - Fixed max.pattern length in Clear Musicdata operation.
  1600.           - Added Minimal playroutine.
  1601.           - First wave value $80 also acts as a proper legato instrument now.
  1602.           - Optimized playroutine sizes & speed.
  1603.           - SID chip type & timing (PAL/NTSC) displayed on top row.
  1604.  
  1605. v2.1      - Added SHIFT+N for negating pulse/filter modulation speeds.
  1606.           - Added no-funktempo & no-octave0 optimizations to playroutines (a
  1607.             total of 8 sub-types for each playroutine).
  1608.           - Maximum speed is 16X now.
  1609.           - Separate song/instrument/packed song directories are remembered
  1610.             during session.
  1611.           - Pathname is displayed in the fileselector.
  1612.           - Filters ** and *.* display all files in the fileselector.
  1613.           - Song entered on commandline will be loaded at startup.
  1614.           - Song filename currently being edited is shown in the titlebar.
  1615.           - Currently edited song filename will be used as default in the
  1616.             "SAVE SONG" and "SAVE MUSIC+PLAYROUTINE" dialogs.
  1617.           - Instrument name will also be used as instrument filename as default
  1618.             in the "SAVE INSTRUMENT" dialog.
  1619.           - UPX used for compression of win32 executables.
  1620.           - Included a short reference of waveform bits (manual only).
  1621.           - Configuration file has clearer structure.
  1622.  
  1623. v2.11     - Added SHIFT+S for smart instrument paste (converts instrument
  1624.             numbers in all patterns, after cut/pasting an instrument).
  1625.           - Added SHIFT+L which allows to write <limit,speed> pulse/filter
  1626.             modulation steps and then convert them to the proper <time,speed>
  1627.             format.
  1628.  
  1629. v2.12     - Playroutine 1 has buffered SID-writes.
  1630.           - Octave 0 is not disabled in routines with sound FX (no matter what
  1631.             the relocator says...)
  1632.  
  1633. v2.13     - Standard playroutine now both in unbuffered and buffered flavors.
  1634.  
  1635. v2.15     - Added SHIFT+I for inverting current pattern selection / whole
  1636.             pattern.
  1637.  
  1638. v2.16     - Fixed octave selection with / * for laptop keyboards.
  1639.           - Empty patterns referenced in the orderlist will be saved when
  1640.             saving a song.
  1641.           - Save dialog will reappear if writing the song/instrument/executable
  1642.             music failed.
  1643.           - Optimized handling of "packed rests" in the playroutines.
  1644.           - Added < > for instrument selection in instrument/table edit modes.
  1645.  
  1646. v2.17     - Fixed initialization of instrument vibrato.
  1647.           - Playroutines size-optimized.
  1648.  
  1649. v2.18     - Wavetable left side values changed. Delay is now $01-$0F and
  1650.             inaudible waveforms (register values $00-$0F) have been mapped to
  1651.             table values $E0-$EF. Old songs using values $08-$0F have to be
  1652.             manually converted!
  1653.  
  1654. v2.2      - Added the speedtable for more precise control of vibrato,
  1655.             portamento and funktempo.
  1656.           - Added SHIFT+O to optimize the speedtable (remove unused entries).
  1657.           - Added SHIFT+R to convert between absolute/relative notes in
  1658.             the wavetable.
  1659.           - Added SHIFT+RETURN in pattern/instrument editor to convert old
  1660.             style portamento, vibrato and funktempo parameters to speedtable
  1661.             entries.
  1662.           - SHIFT+R will paste several effect rows if there is data in pattern
  1663.             copybuffer.
  1664.           - Editing during Follow Play is possible.
  1665.           - Song and instrument format modified for 4 tables. Old 3-table
  1666.             data will be loaded but not saved anymore.
  1667.  
  1668. v2.21     - Fixed NTSC CIA timer value for SID files.
  1669.           - Shift+E will copy several effect rows if pattern has been marked.
  1670.  
  1671. v2.22     - Shift+N will also negate relative wavetable notes.
  1672.           - When converting oldstyle parameters to speedtable entries with
  1673.             SHIFT+RETURN, the speedtable view will shift to the new entry if
  1674.             one was created.
  1675.  
  1676. v2.23     - Fixed SHIFT+INS in wavetable (inserts $E9 $00 now as it should).
  1677.           - Added SHIFT+U to unlock table scrolling.
  1678.           - Added SHIFT+F5/F6 to change speed multiplier.
  1679.  
  1680. v2.24     - Added SHIFT+F7 to edit the hardrestart ADSR parameter.
  1681.           - Added SHIFT+F8 to switch between 6581 and 8580 SID models.
  1682.  
  1683. v2.25     - Added detail to table overflow error message in relocator.
  1684.           - Added stop of playback if a tablepointer gets pointed directly to a
  1685.             jump (would bug in packed/relocated tune).
  1686.           - Added relocator error message for the above case.
  1687.           - Added relocator error message for illegal song restart position.
  1688.           - Not possible to save erroneous packed/relocated songs anymore
  1689.             (now that there is adequate error location).
  1690.           - Added SHIFT+,. to move song startposition on all channels and
  1691.             restart last playmode.
  1692.  
  1693. v2.26     - Fixed relocator complaining of FF parameter in speedtable.
  1694.           - To increase stability, in multispeed mode relocator does not use the
  1695.             "same gatetimer/1st wave" optimization.
  1696.           - Changed Shift+O to optimize the currently edited table, not just
  1697.             speedtable.
  1698.           - Added an option to optimize everything with the SHIFT+ESC clear
  1699.             function. This clears unused patterns, instruments and table-entries.
  1700.  
  1701. v2.27     - Fixed optimize function with different pattern lengths.
  1702.           - Added marking & copy/pasting orderlist data like patterns & tables.
  1703.  
  1704. v2.28     - Added sort of mouse control.
  1705.           - Sound reinitialization when changing multiplier or other parameters
  1706.             is now faster.
  1707.  
  1708. v2.29Beta - Internal reorganization.
  1709.           - New assembler-based relocator that leaves out unused portions of
  1710.             player code.
  1711.           - Instead of choosing a player version, one can choose combinations
  1712.             of player features.
  1713.           - Relocator does not save selfcontained duplicate parts of tables.
  1714.           - Added keys 0-9 & A-Z in the fileselector to move to the
  1715.             corresponding part of the filelist (if found).
  1716.           - Added SHIFT+H to calculate left/right shifted "hifi" speedtable
  1717.             values, according to the frequency of a note.
  1718.  
  1719. v2.3      - Fixed songdata optimize function.
  1720.           - Fixed relocator with no-hardrestart instrument in slot 1.
  1721.           - Fixed relocator handling of effect C (Set cutoff).
  1722.  
  1723. v2.31     - Fixed effect copy/paste.
  1724.           - Added possibility to disable pulseskipping with /O command line
  1725.             option. Warning: causes huge rastertime increase.
  1726.           - Tempo 2 is allowed. See the tips section (3.6) for details.
  1727.  
  1728. v2.32     - Maximum pattern length increased to 128. Do not complain of
  1729.             "pattern too complex" errors :)
  1730.           - Optimized playroutine init in case of only 1 subtune.
  1731.  
  1732. v2.33     - Fixed a bug where relocator was checking pattern 208 (illegal).
  1733.           - Optimized playroutine in case there is no keyoff/keyon used.
  1734.           - Optimized playroutine in case there are no pattern effects used.
  1735.           - Optimized playroutine channel variables in case there is no
  1736.             transpose, repeat, wavedelay and pattern effects.
  1737.           - If not using the last instrument (63), you can control song
  1738.             startup default tempo by using its Attack/Decay parameter.
  1739.  
  1740. v2.34     - Added relocator optimization for using 1 or 2 channels only. To
  1741.             enable, you must use only channels 1 or 1,2 and not be using sound
  1742.             effect support or zeropage ghostregs.
  1743.           - Turning off buffered writes in relocator options works now even
  1744.             if sound effects or zeropage ghostregs are selected (they will be
  1745.             turned off too).
  1746.  
  1747. v2.35     - Auto-creation of speedtable entries will always generate a new
  1748.             entry (except for song loading), duplicate values will be optimized
  1749.             by the relocator.
  1750.           - Pressing SHIFT+RETURN over a speedtable-using pattern command while
  1751.             the parameter is zero, goes to the next empty speedtable entry and
  1752.             sets the command parameter to point to that entry.
  1753.  
  1754. v2.4      - Added one bit of accuracy to pulse modulation speed. A new song-
  1755.             format (identifier GTS4) reflects this, old songs will be converted
  1756.             upon loading.
  1757.           - Added possibility to execute pattern commands from the wavetable.
  1758.  
  1759. v2.41     - Fixed player code assembly errors when using some pattern commands
  1760.             only from the wavetable.
  1761.           - Fixed player code bug with command B when command A is not used.
  1762.           - Fixed SHIFT+O removing table entries pointed to from wavetable
  1763.             pattern commands.
  1764.  
  1765. v2.42     - Fixed frequency table size determination.
  1766.           - Changed behaviour of keyoff in pattern editing changed to use
  1767.             releasenote() like the instrument editor.
  1768.           - Added SHIFT+RETURN when parameter is zero to get you into an empty
  1769.             table entry for 8, 9 and A pattern commands as well.
  1770.           - Added adjustment of table views when changing instrument number
  1771.             in unlocked table scrolling mode.
  1772.           - Added RETURN over nonzero instrument number (in patterns) to go
  1773.             editing that instrument.
  1774.  
  1775. v2.43     - Added duplicate pattern detection/removal to song optimize.
  1776.           - Added pattern shrink/expand (SHIFT+O,P).
  1777.           - Added pattern join/split (SHIFT+J,K).
  1778.  
  1779. v2.44     - Fixed editor playroutine to not execute tick n commands, when a
  1780.             command has already been executed through the wavetable.
  1781.  
  1782. v2.45     - Added possibility to disable realtime pattern command optimization
  1783.             at tick 0 (/Rxx command line option or click the "RO" text on the
  1784.             statusbar) for tempo-independent portamento & vibrato.
  1785.           - To make room on the status bar for the realtime optimization
  1786.             status indicator, finevibrato & pulse optimization indicators have
  1787.             been shortened to "FV" and "PO".
  1788.  
  1789. v2.46     - Added transpose of speedtable portamento speeds (SHIFT+Q,A,W,S)
  1790.             SHIFT+W,S (octave transpose, multiply/divide by 2) also work in
  1791.             pulse & filtertable.
  1792.           - When editing the wavetable, RETURN & SHIFT+RETURN work for wave-
  1793.             table executed commands as in patterns (go to table position
  1794.             pointed by command, create new speedtable entries)
  1795.  
  1796. v2.47     - Added experimental random delay to write of reSID registers, in
  1797.             order to make potential ADSR-bugging on C64 audible. The
  1798.             amount of delay in cycles can be adjusted with /Z command line
  1799.             option.
  1800.           - SHIFT+L in pulsetable creates repeated "set tempo" commands if
  1801.             speed is greater than 127.
  1802.  
  1803. v2.48     - Fixed playroutine to use configurable baseaddress again.
  1804.  
  1805. v2.49     - Added /G command line option, guard 1stwave/gatetimer parameters.
  1806.             When this is on (default), only silent waveforms can be entered
  1807.             as firstwave (only thing that makes sense) and editing gatetimer
  1808.             of one instrument affects all of them, as otherwise bugs in
  1809.             playback result easily. Use /G0 to turn off.
  1810.  
  1811. v2.5      - Fixed "optimize everything" removing the tempo setting in
  1812.             instrument 63.
  1813.           - Fixed default tempo of multispeed tunes in packer/relocator.
  1814.  
  1815. v2.51     - Fixed packing of empty patterns when not using any effects.
  1816.           - Fixed differing gatetimer value in instruments causing playback
  1817.             going out of sync.
  1818.           - /G command line option no longer has to keep gatetimer values the
  1819.             same.
  1820.           - Added high bit of gatetimer value to control whether wavetable
  1821.             execution starts right on the note init frame. If used, will cause
  1822.             significant rastertime increase.
  1823.  
  1824. v2.52     - SHIFT+ENTER in orderlist view takes the next available pattern
  1825.             if pressed on a repeat or transpose command.
  1826.           - Added SHIFT+SPACE in pattern editor to start playback on a specific
  1827.             pattern row.
  1828.  
  1829. v2.53     - Fixed F3 to always play the currently visible patterns.
  1830.           - Added BACKSPACE in the orderlist editor to set playback end position.
  1831.             Only effective when starting playback from position, not beginning.
  1832.  
  1833. v2.54     - Fixed SHIFT+F3.
  1834.           - Changed SHIFT+, . to update the pattern view.
  1835.           - Changed SHIFT+SPACE to remain in pattern playback mode, if it was
  1836.             active.
  1837.  
  1838. v2.55     - Added BACKSPACE in the fileselector to go to the parent dir.
  1839.  
  1840. v2.56     - Song filename cleared on songdata erase.
  1841.           - Added /F to set custom SID clock frequency.
  1842.           - Graphics output routines no longer compare text screen buffer to 
  1843.             previous to find out if it should be updated.
  1844.             
  1845. v2.57     - Added alternative hardrestart method & playroutine that is used when
  1846.             HR attack parameter is at maximum (FF00 or F800 for example) - this 
  1847.             can in theory give better reliability.
  1848.             
  1849. v2.58     - Cleanup, removal of a few questionable features:
  1850.             * Gatetimer high bit to start wavetable immediately
  1851.             * Guard 1stwave parameter
  1852.             
  1853. v2.59     - Songformat version update (GTS5/GTI5)
  1854.           - Gateoff timer parameter bits control now hardrestart disable ($80)
  1855.             & gateoff disable ($40).
  1856.           - 1stFrame Wave can be any from $01-$8F, $00 to leave both waveform
  1857.             & gateflag unchanged, or $FE / $FF to control gateflag but leave
  1858.             waveform unchanged.
  1859.  
  1860. v2.6      - Fixed pattern default length selection display when decrementing
  1861.             from a length of 100 or higher.
  1862.           - Fixed mouse selection of pattern when adjusting an adjacent channel.
  1863.           - Fixed help screen instructions.
  1864.           - Changed resolution to 800x600.
  1865.           - Changed all songname rows to be displayed at the same time.
  1866.           - Changed mouse control to allow pattern column selection even when
  1867.             left mouse button is held down.
  1868.           - Changed speed of PageUp/PageDown scrolling to be faster.
  1869.           - Optimized graphics output.
  1870.           - BME library is no longer needed.
  1871.  
  1872. v2.61     - Added the backquote key (top-left on keyboard) to select channel
  1873.             in pattern edit mode, and to select table in table edit mode. Use 
  1874.             with SHIFT to go backwards.
  1875.           - Added SHIFT+channel number to mute channels in pattern edit mode.
  1876.           
  1877. v2.62     - Added possibility for realtime calculated note independent (hifi)
  1878.             portamento & vibrato. Warning: has potential for huge rastertime
  1879.             increase.
  1880.             
  1881. v2.63     - Fixed note independent portamento & vibrato to use the last note
  1882.             set in wavetable for calculations, instead of the last note in
  1883.             patterndata.
  1884.             
  1885. v2.64     - Fixed paste in table (SHIFT+V) working also without SHIFT pressed.
  1886.  
  1887. v2.65     - Fixed raw keycodes over 511 interpreted as some other keys in the
  1888.             0-511 range.
  1889.  
  1890. v2.66Beta - Initial cycle-exact HardSID support (Win32 only)
  1891.           - Permit running without sound.
  1892.           
  1893. v2.67     - Configurable cycle-exact HardSID buffer length (separate for inter-
  1894.             active and playback mode, see /T and /U command line options)  
  1895.             
  1896. v2.68     - Fixed set tempo -command overwriting frequencytable in 1 or 2
  1897.             channel modes.
  1898.           - Fixed sound uninit crash with multicore processors (?)
  1899.           - SID register write order tweaked to resemble JCH NewPlayer 21.
  1900.           - Unbuffered playroutine optimized & modified to resemble buffered
  1901.             mode timing more.
  1902.           - New reSID-fp engine (with distortion & nonlinearity) from Antti
  1903.             Lankila integrated. Activated with /I command line option parameters
  1904.             2 & 3.
  1905.           - Command quick reference by Simon Bennett included.
  1906.           
  1907. v2.69     - Fixed click bug in reSID audio output.
  1908.           - Newest reSID-fp code integrated.
  1909.           - reSID-fp filter parameters adjustable from the configuration file.
  1910.  
  1911. v2.70     - Hotfix for the new HardSID UPlay/Uno devices from TΘli Sßndor.
  1912.           - Fixed possible crash on some versions of the HardSID dll.
  1913.  
  1914. v2.71     - Added keycode fix patch from Valerio Cannone.
  1915.           - Added fullscreen switch patch from Raine M. Ekman (see /X option)
  1916.           - Added context mode to online help patch from Raine M. Ekman.
  1917.           - Added /G command line option for setting A-4 pitch.
  1918.           
  1919. v2.72     - Fixed incorrect transpose range determination in the relocator.
  1920.           - Fixed crash in jam mode whan an illegal pattern command was executed
  1921.             from the wavetable.
  1922.             
  1923. v2.73     - Reverted to old playroutine timing.
  1924.           - Added full buffering option (similar to ZP ghostregs) which will
  1925.             buffer everything to ghost regs and dump the previous frame to the
  1926.             SID at the beginning of the play call.
  1927.           - Merge song functionality (SHIFT+F10.)
  1928.           - Help text is written to console on non-Win32 platforms.
  1929.           - gt2reloc utility by Groepaz.
  1930. This is reSID, a reverse engineered software emulation of the MOS6581 SID
  1931. (Sound Interface Device). This chip was used in the Commodore 64 computer.
  1932.  
  1933. reSID is free software. See the file COPYING for copying permission.
  1934.  
  1935. reSID is a C++ library containing a complete emulation of the SID chip.
  1936. This library can be linked into programs emulating the MOS6510 MPU to
  1937. play music made for the Commodore 64 computer. reSID has been successfully
  1938. linked into VICE, a full-fledged Commodore 64 emulator, and SIDPLAY, a
  1939. popular SID tune player. The VICE home page is:
  1940. http://www.cs.cmu.edu/~dsladic/vice/
  1941. A patch for SIDPLAY can be found on the SIDPLAY home page:
  1942. http://www.geocities.com/SiliconValley/Lakes/5147/
  1943.  
  1944. Various SID emulators exist, however reSID should still be of great
  1945. interest to Commodore 64 nostalgics. The emulator engine is cycle-based,
  1946. emulating the internal operations of the SID chip. SID's audio filter is
  1947. modeled as an actual two-integrator-loop biquadratic filter circuit.
  1948. The engine has been developed based on available information on SID, sampling
  1949. of the OSC3 and ENV3 registers, filter theory, and meticulous testing.
  1950. In short, a scientific approach has been taken to model the SID chip as
  1951. accurately as possible.
  1952.  
  1953. To our knowledge reSID is by far the most accurate SID emulator ever created.
  1954. This comes at a price; what is considered a fairly fast CPU at the time of
  1955. this writing is needed to run the emulator.
  1956. Please distribute this file with the SDL runtime environment:
  1957.  
  1958. The Simple DirectMedia Layer (SDL for short) is a cross-platfrom library
  1959. designed to make it easy to write multi-media software, such as games and
  1960. emulators.
  1961.  
  1962. The Simple DirectMedia Layer library source code is available from:
  1963. http://www.libsdl.org/
  1964.  
  1965. This library is distributed under the terms of the GNU LGPL license:
  1966. http://www.gnu.org/copyleft/lesser.html
  1967.  
  1968.