.................................
To leave Commie, hyper to
http://commie.oy.com/commie_leaving.html
.................................

> GoatTracker 1.12
> http://www.student.oulu.fi/~loorni/

Before you try it, read README!

Included:

...................................................................

GoatTracker v1.12
-----------------

Editor by Lasse ��rni ([EMAIL PROTECTED])
reSID engine by Dag Lem.

Distributed under GNU General Public License
(see the file COPYING for details)


Table of contents
-----------------

1. General information

2. Warnings

3. Using GoatTracker
3.1 Keyboard commands
3.1.1 General keys
3.1.2 Pattern edit mode
3.1.2.1 Protracker note-entry mode
3.1.2.2 DMC note-entry mode
3.1.3 Song edit mode
3.1.4 Instrument edit mode
3.1.5 Songname edit mode
3.2 Song data
3.3 Pattern data
3.4 Instrument data

4. Using the included utilities
4.1 INS2SND.EXE
4.2 SNGSPLIT.EXE

5. Using the songs in your C64 programs
5.1 Playroutine 1: Original
5.2 Playroutine 2: Game (with sound effects)
5.3 Playroutine 3: Scene (author info + timing marks)
5.4 Playroutine 4: Everything (author info + timing marks AND sound effects)

6. File/data formats description
6.1 GoatTracker song (.SNG) format
6.1.1 Song header
6.1.2 Song orderlists
6.1.3 Instruments
6.1.4 Patterns header
6.1.5 Patterns
6.2 GoatTracker instrument (.INS) format
6.3 Sound effect data format

7. Hints for creating SID sounds

8. Version history


1. General information
----------------------

This program is a C64 music editor running as a 32-bit Windows application
(should work on W9x/NT4/W2K etc.) Familiarity with tracker programs in
general,
hexadecimal notation, and the C64's audio chip (consult the C64 Programmer's
Reference Guide, it's available on the net too) are required to successfully
utilize this program.


2. Warnings
-----------

1. Always save your songs in the .SNG-format with F11 key if you plan to
   continue editing! Packed & relocated songs (.PRG/.BIN/.SID) can't be
loaded
   back into the editor.

2. A subtune must have at least one pattern in the orderlist for each
channel
   for it to be saved. GoatTracker will terminate saving to the first
"empty"
   subtune it encounters, so do not skip over any subtune-numbers!

3. Even the reSID emulation is in some cases quite far from the output of a
   real SID. Consider strongly testing your tune (especially if filters are
   in use) on a C64 or on a HardSID card. (Using filters has always been
   complicated because every SID tends to sound different.)



3. Using GoatTracker
--------------------

Run the program with the option /? to see the list of command line options.
For example, if you experience choppy audio you can increase audio
buffering.
There's also screenmode options and the possibility to file-write all audio
output.

HardSID support is available with the /H option. (use first HardSID = /H1,
second = /H2 etc., return to emulated output = /H0) You must have the
HardSID
drivers and HardSID.DLL installed to use this feature.

To use the PC64 cable, check out Daniel Illgen's HardSID-DLL-Clone at
http://home.t-online.de/home/lord_leinad/pages/_work.htm

This program is entirely operated on keyboard. For a list of keyboard
commands
press F12 in the tracker or see the table below:

3.1 Keyboard commands
---------------------

Note: SHIFT & CTRL are interchangeable in the commands.
You can also use [ ] or ( ) instead of < >.

3.1.1 General keys
------------------

TAB       Cycle between editing modes
F1        Play from beginning
F2        Play from current pos.
SHIFT+F1  Play from beginning    (Follow play)
SHIFT+F2  Play from current pos. (Follow play)
F3        Stop playing & silence all sounds
F4        Mute current channel
F5        Go to pattern editor
F6        Go to song editor
F7        Go to instrument editor
F8        Go to songname editor
F9        Pack, relocate & save PRG,SID etc.
F10       Load song (Pattern/Song/Songname mode) or instrument (Instrument
mode)
F11       Save song (Pattern/Song/Songname mode) or instrument (Instrument
mode)
F12       Online help screen
INS       Insert row (Press INS/DEL on endmark to change pattern/song
length)
DEL       Delete row
SHIFT+ESC Clear musicdata & set default pattern length
ESC       Exit program

3.1.2 Pattern edit mode
-----------------------

0-9 & A-F   Enter parameters
SPACE       Switch between jam/editmode
RETURN      (or CAPSLOCK) Insert keyoff
BACKSPACE   Insert rest
- +         Select instrument
/ *         Select octave
< >         Select pattern
SHIFT+Q     Transpose halfstep up
SHIFT+A     Transpose halfstep down
SHIFT+CRSR  Mark pattern
SHIFT+L     Mark entire pattern
SHIFT+X,C,V Cut,copy,paste pattern
SHIFT+E,R   Copy,paste effects
SHIFT+Z     Cycle autoadvance-mode

There are 2 modes for note entering:

3.1.2.1 Protracker note-entry mode
----------------------------------

This is the default or activated with command line option /K0. There are
two rows of a piano keyboard:

  Lower octave     Higher octave
 S D  G H  K L    2 3  5 6 7  9 0
Z X CV B NM , .  Q W ER T Y UI O P

Octave (0-7) is selected with / and * keys on the numeric keypad.

In this mode there's 2 different autoadvance-modes (the mode can be
seen from the color of the jam/editmode indicator)

GREEN - Advance when entering notes & command-databytes
RED - Do not advance automatically

3.1.2.2 DMC note-entry mode
---------------------------

Activated with command line option /K1, there is one row of piano keyboard

 W E  T Y U  O P
A S DF G H JK L

and octave of a note (sets default octave at the same time) is changed with
number keys 0-7.

In this mode there's 3 different autoadvance-modes:

GREEN - Advance when entering notes, octaves or command-databytes
YELLOW - Advance when entering notes or command-databytes, not octaves
RED - Do not advance automatically

3.1.3 Song edit mode
--------------------

0-9 & A-F  Enter pattern numbers
SPACE      Set start position for F2 key
RETURN     Go to pattern
SHIFT+RET. Go to pattern on all channels
< >        Select subtune
SHIFT+R,S  Set endmark to RESTART or STOP

3.1.4 Instrument edit mode
--------------------------

0-9 & A-F  Enter parameters
SPACE      Play test note
RETURN     Silence test note
- +        Select instrument
/ *        Select octave
SHIFT+X,C,V Cut,copy,paste instrument

3.1.5 Songname edit mode
------------------------

Use cursor UP/DOWN to move between song, author & copyright strings, and
other keys to edit them.

3.2 Song data
-------------

A song can consist of up to 32 sub-tunes. Each sub-tune has
pattern-orderlists
for all 3 channels. The pattern-orderlist is a list of patterns to be played
(max. 255 columns long) plus the endmark, which can be either RST (restart;
repeat orderlist from beginning) or STP (stop; repeat last pattern
infinitely)

3.3 Pattern data
----------------

Patterns are single-channel as there's a pattern-order list for each
channel.
A pattern can have variable length, however 80 rows is the maximum. There
can
be 254 different patterns in a song.

The explanation of a pattern row:

 Note name
 |
 | Octave
 | |
 | | Instrument number (01 - 1F, or 00 for no change)
 | | |
 | | |  Command (0 - 7)
 | | |  |
 | | |  | Databyte
 | | |  | |
 C-1 00 0 00

Commands 0,1 & 3 and 4 bear some resemblance to Soundtracker/Protracker/
Fasttracker effects. However, they are different in some ways, so read their
descriptions!!! Note that there is no "databyte 00 uses the last databyte"-
action in the commands.

The "continuous" commands 0, 1, 3 and 4, are executed only on ticks 1-N,
where
N is tempo - 1, and commands 2, 5, 6 and 7 are executed on tick 0 (when a
new
pattern row is also read)

Command 0XY: Arpeggio. Arpeggiates with the root note, then root note + X
             halftones and then root note + Y halftones. If the X value
             is 8 or higher, the arpeggio will be at half speed (8 will
             be subtracted from the value of X to get the amount of
halftones)

Command 1XY: Portamento. Raises the pitch with (XY and 7F) * 2 each tick.
             Highest bit of XY decides direction: 0 is up and 1 is down.

Command 2XY: Set filter cutoff speed. The cutoff speed will be added to the
             cutoff frequency each tick, until stopped with a 200 command.

Command 3XY: Toneportamento. Raises or lowers pitch until target note has
been
             reached. Highest bit of XY decides direction of toneportamento
             (this is an optimization for the C64 playroutine, to keep it
fast:
             you must know the direction yourself) and the actual speed used
             is (XY and 7F) * 2. By specifying the "wrong" direction you can
             get infinitely fast toneportamentos that go to the target note
             right away, for the "tie note" effect.

Command 4XY: Vibrato. X determines how fast the direction will change (E
             is slowest and the lowest bit doesn't matter) and Y*16+X is the
             amount of pitch change on each tick. (That weird formula is
just c
             aused by playroutine optimizations)

Command 5XY: Set filter parameters. X is the filter resonance and Y is the
             bitmask of channels to be filtered.

               Bitvalue 01 = Channel 1
               Bitvalue 02 = Channel 2
               Bitvalue 04 = Channel 3

Command 6XY: Set sustain/release. Sets the channel's sustain/release
register
             to XY.

Command 7XY: Set tempo. If highest bit is 1 (values 80-FF) the tempo
             (XY and 7F) will be set to current channel only, otherwise on
             all channels. A tempo lower than 3 can't be used.

             If there's both a "current channel" and "all channels" tempo
             change on a same row, the "all channels" tempo change must be
             on the lesser channel number or else the "current channel"
tempo
             setting will be overrided.

             Playroutines 3 & 4 use values C0-FF for timing mark purposes,
             so they won't affect the tempo. When packing a song for
             playroutines 1 & 2 the timing marks will be removed from the
             output data, because those playroutines wouldn't understand
them.

3.4 Instrument data
-------------------

If a description for a parameter is separated in two by a slash it means it
contains two different parameters: leftmost hexadecimal nybble is the first
parameter and rightmost is the second.

Attack/Decay          0 is fastest attack or decay, F is slowest

Sustain/Release       Sustain level 0 is silent and F is the loudest.
Release
                      is a speed like attack & decay.

Pulse                 The starting value of pulsewidth (00-FF)

Pulse Speed           The value that will be added to pulsewidth each tick
                      (0-F)

Pulse Limit Low       The pulsewidths where pulsewidth modulation will
change
Pulse Limit High      its direction. The low nybble will be always 0 because
of
                      optimizations.

Filter Freq/Type      Frequency is the highest 8 bits of cutoff frequency.
                      Filter type is a bitmask consisting of:

                        Bitvalue 01 = Lowpass filter
                        Bitvalue 02 = Bandpass filter
                        Bitvalue 04 = Highpass filter

                      This byte comes into effect when a new note is played.
                      If its value is 0 then filter cutoff & type will be
                      unchanged. Because there's only one filter, it's a
good
                      idea to have filter-controlling instruments only on
one
                      channel at a time :-)

                      NOTE: The low 4 bits (type) also affect cutoff
frequency.
                      This is a playroutine optimization.

In addition to these parameters, each instrument has a wave/note table that
determines the waveforms and pitches to be used when a note starts. With
this table you can make either a simple sound that just has one waveform and
the note's base pitch, or a complex sound that has many waveform changes
(to make good-sounding drums), or anything in between.

The wave/note table consists of byte pairs. The leftmost byte is always the
waveform and the rightmost is the note. A pair that has FF in the waveform
ends wavetable execution (if note number is 00) or loops to position n (if
note
number n > 0) NOTE: before the table ends, no portamento, vibrato or
arpeggio
will be executed! Pulsemodulation will be executed, as of V0.94 onwards.

A waveform of 00 tells not to change the waveform, this is useful if you use
keyoffs (gatebit off) during wavetable execution.

Waveform byte consists of these bits:

  Bitvalue 01 = Gate bit. THIS IS IMPORTANT TO GET AN AUDIBLE SOUND! Gate
bit
                initiates the attack/decay/sustain phase of a sound. When it
                goes zero, the release phase begins.
  Bitvalue 02 = Synchronize bit. Will synchronize with an another channel
                (Consult C64 Programmer's Reference Guide for details)
  Bitvalue 04 = Ring-modulation bit. Will ring-modulate with an another
channel
                (Consult C64 Programmer's Reference Guide for details)
  Bitvalue 08 = Test bit. Will silence the channel and reset the random-seed
                of a channel if the noise random generator has "locked up"
                because of using noise waveform in combination with another
                waveform. This value is automatically used when a song
starts
                playing!
  Bitvalue 10 = Triangle waveform
  Bitvalue 20 = Sawtooth waveform
  Bitvalue 40 = Pulse waveform. There must be nonzero pulsewidth on the
                instrument or else this waveform will be silent!
  Bitvalue 80 = Noise waveform. Don't combine with other waveforms!

Note byte consists of these values:

  00-5F       = Relative notes. Will be added to the current note playing
                on that channel to get the final pitch
  80-DF       = Absolute notes C-0 - B-7.

Values outside of this range will result in a pitch that isn't any correct
note.

Some examples of wave tables:

  21/00 Sawtooth waveform on note's original pitch
  FF/00

  81/C8 A snaredrum sound, using all absolute notes so it doesn't depend on
  41/A8 which note it's played. Use pulsewidth 80 for best result.
  41/A0
  80/C8
  80/C4
  FF/00

  81/C8 A pulse sound on original pitch, preceded with a short noise (like
  41/00 a hi-hat or something) that has always an absolute pitch of G#6
  FF/00

  41/00 A 4-note arpeggio sound with pulse waveform. (Arpeggio command
itself
  00/04 uses only 3-note arpeggios) Note that waveform will not be changed
  00/07 after the initial setting of pulse waveform.
  00/0C
  00/00
  FF/02


4. Using the included utilities
-------------------------------

4.1 INS2SND.EXE
---------------

INS2SND.EXE converts GoatTracker instruments (.INS-files) into sound
effects,
outputting the data as source code.

Usage: INS2SND <instrumentfile> <sourcecodefile>

Look at section 6.3 or run the program without parameters to see the
limitations of the sound effect system.

4.2 SNGSPLIT.EXE
----------------

SNGSPLIT.EXE splits the patterns of a GoatTracker song into smaller pieces
for
memory use optimization. It is comfortable to compose with large patterns
but
usually more efficient memory-wise to use small patterns. Remember! Always
keep
the original song because a pattern-splitted song is much harder to edit
further.

Usage: SNGSPLIT <sourcesong> <dest.song> [splits]

Default number of splits is 4 and maximum is 8. With a higher amount of
splits
it's more likely that the maximum orderlist length or the maximum number of
patterns are exceeded, and in that case an error message is displayed.


5. Using the songs in your C64 programs
---------------------------------------

Press F9 in the editor to enter the packer/relocator. Choose startaddress,
zeropage baseaddress and file format (.PRG or .BIN), then type the filename.

Playroutines 1-2 use 3 bytes starting from zeropage baseaddress as temporary
variables (by default $FC, $FD, $FE). Playroutines 3 & 4 use in addition a
4th
byte (by default $FF) to store timing mark data.

5.1 Playroutine 1: Original
---------------------------

Music playing will take 12 rasterlines max. This player has the smallest
size.

To init music:

        LDA #tunenumber         ;Starting from 0
        JSR startaddress

To play music:

        JSR startaddress+3

To change volume:

        LDA #volume             ;0-F, F is default
        JSR startaddress+6

To tweak instrument data: Instruments reside as 8-byte structures starting
from startaddress+$45C:

        Instr. 1 AD              startaddress+$45C
        Instr. 1 SR              startaddress+$45D
        Instr. 1 Pulse           startaddress+$45E *
        Instr. 1 Pulsespeed      startaddress+$45F *
        Instr. 1 Pulselimit Low  startaddress+$460 *
        Instr. 1 Pulselimit High startaddress+$461 *
        Instr. 1 Filt. Freq/Type startaddress+$462
        Instr. 1 Wavetbl. Index  startaddress+$463
        Instr. 2 AD              startaddress+$464 etc.

Observe that parameters marked with (*) have actually the nybbles reversed
from what they look like in the editor.

5.2 Playroutine 2: Game (with sound effects)
--------------------------------------------

Music playing will take 13 rasterlines max. without sound effects, or
possibly
more with sound effects playing.

To init music:

        LDA #tunenumber         ;Starting from 0
        JSR startaddress

To play music:

        JSR startaddress+3

To change volume:

        LDA #volume             ;0-F, F is default
        JSR startaddress+6

To play a sound effect

        LDA #<sound             ;Address of sound effect data
        LDX #>sound
        LDY #channel            ;0-2
        JSR startaddress+9

The actual sound data can be created from an instrument with the included
INS2SND tool or you can look below for the data format description.

In this playroutine the instrument data resides at startaddress+$04F2.

5.3 Playroutine 3: Scene (author info + timing marks)
-----------------------------------------------------

Music playing will take 12 rasterlines max.

To init music:

        LDA #tunenumber         ;Starting from 0
        JSR startaddress

To play music:

        JSR startaddress+3

To change volume:

        LDA #volume             ;0-F, F is default
        JSR startaddress+6

To use timing marks:

        Put a tempo command (7) with parameter C0-FF in the music data.
        Now tempo won't be set, but the parameter is copied to the 4th
zeropage
        address (by default $FF) when this command is encountered.

Author-info can be read at startaddress+$20 (32 bytes) and instrument data
resides at startaddress+$48A.


5.4 Playroutine 4: Everything (author info + timing marks + sound effects)
--------------------------------------------------------------------------

Music playing will take 13 rasterlines max. without sound effects, or
possibly
more with sound effects playing.

To init music:

        LDA #tunenumber         ;Starting from 0
        JSR startaddress

To play music:

        JSR startaddress+3

To change volume:

        LDA #volume             ;0-F, F is default
        JSR startaddress+6

To play a sound effect

        LDA #<sound             ;Address of sound effect data
        LDX #>sound
        LDY #channel            ;0-2
        JSR startaddress+9

To use timing marks:

        Put a tempo command (7) with parameter C0-FF in the music data.
        Now tempo won't be set, but the parameter is copied to the 4th
zeropage
        address (by default $FF) when this command is encountered.

Author-info can be read at startaddress+$20 (32 bytes) and instrument data
resides at startaddress+$51D.


6. File/data formats description
--------------------------------

The sections in the files come in the sequential order in which they're
described.

6.1 GoatTracker song (.SNG) format
----------------------------------

6.1.1 Song header
-----------------

Offset  Size    Description
+0      4       Identification string GTS!
+4      32      Song name, padded with zeros
+36     32      Author name, padded with zeros
+68     32      Copyright string, padded with zeros
+100    byte    Number of subtunes

6.1.2 Song orderlists
---------------------

The orderlist structure repeats first for channels 1,2,3 of first subtune,
then for channels 1,2,3 of second subtune etc., until all subtunes
have been gone thru.

Offset  Size    Description
+0      byte    Length of this channel's orderlist n
+1+n    n       The orderlist data:
                Values 0-253 are pattern numbers
                Value 254 is the STOP endmark (repeat last pattern
indefinitely)
                Value 255 is the RESTART endmark (loop song)

6.1.3 Instruments
-----------------

This structure repeats for each of the 31 instruments. Instrument 0 (the
empty instrument) is not stored.

Offset  Size    Description
+0      byte    Attack/Decay
+1      byte    Sustain/Release
+2      byte    Initial pulse width *
+3      byte    Pulse speed *
+4      byte    Pulse limit low *
+5      byte    Pulse limit high *
+6      byte    Filter freq/type
+7      byte    Size of wavetable in bytes n
                (note: this is always an even number)
+8      16      Instrument name
+24     n       Wavetable, containing the waveform/note pairs as seen on
                the editor screen.

* = nybbles reversed compared to how they appear in the editor

6.1.4 Patterns header
---------------------

Offset  Size    Description
+0      byte    Number of patterns n

6.1.5 Patterns
--------------

Repeat n times, starting from pattern number 0.

+0      byte    Size of pattern in bytes m
+1      m       Groups of 3 bytes for each row of the pattern:
                1st byte: Notenumber
                          Values 0-93 are the notes C-0 - A-7
                          Value 94 is the KEYOFF-command
                          Value 95 is a rest
                2nd byte: Bits 3-7 Instrument number (0-31)
                          Bits 0-2 Command number (0-7)
                3rd byte: Command databyte

6.2 GoatTracker instrument (.INS) format
----------------------------------------

Offset  Size    Description
+0      4       Identification string GTI!
+4      byte    Attack/Decay
+5      byte    Sustain/Release
+6      byte    Initial pulse width *
+7      byte    Pulse speed *
+8      byte    Pulse limit low *
+9      byte    Pulse limit high *
+10     byte    Filter freq/type
+11     byte    Size of wavetable in bytes n
                (note: this is always an even number)
+12     16      Instrument name
+28     n       Wavetable, containing the waveform/note pairs as seen on
                the editor screen.

* = nybbles reversed compared to how they appear in the editor

6.3 Sound effect data format
----------------------------

Offset  Size    Description
+0      byte    Attack/Decay
+1      byte    Sustain/Release
+2      byte    Pulse width. This value has nybbles reversed from what it
looks
                like in the editor so a middle pulse $80 will be stored as
$08,
                and the sound effect routine will put this value to both
$D402
                and $D403 registers.
+3      ?       Wavetable. Contains note/waveform pairs (different order
than
                in instrument wavetable), from which the waveform can be
                omitted if unchanged, as the value ranges don't overlap:
                        Value 0 ends the sound effect
                        Values 1-129 are waveforms
                        Values 130-223 are absolute notes D-0 - B-7
                        Value 255 tells to repeat the same note & wave once
                        Value 254 tells to repeat the same note & wave twice
                        etc.

                Note that a note can't be omitted to store only waveform
                changes!

As you can see, the sound effect format is very simplistic. When converting
an
instrument to a sound effect with INS2SND, following things cause an error
message:

        - If the resulting sound effect is more than 128 bytes
        - If the instrument's wavetable contains relative notes, absolute
          notes C-0 or C#0, or waveforms > 129 ($81)

The instrument's pulsewidth modulation & filter settings will be completely
discarded.


7. Hints for creating SID sounds
--------------------------------

(Very short and not so in-depth section. Contributions are welcome)

Pulse:

- Pulse is "widest" and loudest at middle pulse width 80, the sound thins
out
  towards both extremities (00 and FF). Pulsewidth 80 is most useful as a
  part of drum sounds but may sound too dominating for other instruments.
  For bass sounds, 40 is usually good. For harpsichord or acoustic guitar,
  you can go even more towards 00.

- Don't let the pulsewidth cross its entire range or an ugly "pop" sound
will
  be heard; use the limits to limit it between 10 & F0 or even closer. When
  a sound starts, the pulsewidth will be first increasing.

- Using small pulsewidth speeds creates a "peaceful" sound while high pulse-
  speeds are more menacing & aggressive (or ugly, depending how you view it)

Combination waveforms:

- Experiment with combination waveforms; for example waveform 51 (pulse and
  triangle combined) is a thin and weird sound.

Waveforms in sequence, and variations in the note pitch (with wavetable):

- An "oriental" sounding flute can be created with the following wavetable:

        41/01
        11/00
        FF/00

  It plays the first frame with pulse waveform, one halftone sharp. Then it
  goes to original pitch and triangle waveform for the rest of the sound.

ADSR:

- The higher a sound is, the more dominating it will be. So lower its
  sustain level to keep things balanced.

- Using small (or zero) attack & decay values creates sharp &
"modern"-sounding
  sounds.

- Use zero sustain & release with some decay to get a sound that starts
  decaying immediately, like a piano (you probably knew this :-))

- Set drums' sustain mercilessly to full for maximum power! :-)

Synchronize & ring-modulation:

- A "screaming guitar" type sound (like Sanxion loader song) can be created
  by using synchronize bit in combination with the pulse waveform. It is
highly
  dependant on what the synchronizing channel is playing, so experiment!

- Using ring-modulation or synchronize with the triangle waveform creates
cool
  "eerie" sounds, like those in Fist II cave music.

Filter:

- One word: Experiment. The lowpass filter might be most widely used, beware
  of using too small cutoff frequencies though, because they might result in
  practically inaudible sound on some SID chips.

- If you have an instrument that sets the filter frequency/type (freq/type
  byte nonzero) and don't want the frequency to be reset on each subsequent
  note, create a copy of that instrument with the filter freq/type byte
zeroed
  and then you can control cutoff speed freely with the 2XY command.


8. Version history
------------------

0.9 Beta  - Original public release

0.91 Beta - Corrected a crash caused by an uninitialized pointer when
executing
            wavetable on the last row of a pattern. This same bug also
caused
            sounds being cropped one tick too early on the last row.
          - Corrected the description of ringmodulation in the docs
          - A drum test song added (when making it the crash was discovered)

0.92 Beta - Orderlist editing simplified (one cursor position for all
channels)
          - SPACE in orderlist sets now play position for F2 key
          - Pattern wrap also when trying to enter notes on the last pattern
            row

0.93 Beta - Vibrato was practically useless on odd speeds (3, 5 etc.)
because
            it went a bit out of tune. Now the whole vibrato routine has
been
            rewritten and the meaning of the speed parameter has changed.
          - Playroutine optimizations in filter cutoff setting & vibrato
pitch
            change: the second parameter will also affect them, however it's
            the 4 lowest bits so it doesn't matter much.

0.94 Beta - Reworked wavetable system making wavetable loops possible. Also,
            now pulsemodulation is executed during wavetable. Still the
player
            takes only 12 lines!
          - Note that you have to change the wavetable end byte manually
from
            00 to FF if you load songs or instruments made with old
versions.
          - Command 6 (set sustain/release) is no longer overridden by
            wavetable execution.
          - Wavetable maximum length (for packed & relocated songs) is now
            510 bytes.
          - Added musicdata clear option (SHIFT+ESC).

0.95 Beta - Some reordering in the playroutine, however retaining the same
            size as in 0.94. Init music & Set volume subroutines added to
the
            playroutine.
          - Wavetable maximum length is now 512 bytes.

0.96 Beta - $d404 must come before $d405 & $d406 in note initialization to
get
            sharper attack.
          - Had to remove the Init & Set volume subroutines. (no room for
them)
          - Instruments with looped wavetables didn't always play correctly
            when entering notes in the editor - fixed.
          - The playroutine startaddress is now remembered when packing/
            relocating multiple songs during one session.

0.97 Beta - Added screenmode options.

0.98 Beta - Added Follow Play option (SHIFT+F1/F2)
          - Added fast scrolling with PAGE UP & PAGE DOWN keys.
          - SHIFT+RETURN in orderlist editor updates pattern numbers of all
            channels.

0.99 Beta - Added HardSID support. Use /H1 option to utilize first HardSID,
/H2
            for second etc. and /H0 to return to emulated output.

1.0       - Added HOME/END to go to the beginning/end of an orderlist or a
            pattern.
          - Note and hexvalue entry work now also with SHIFT or CAPS-LOCK
down.

1.01      - Added choice of emulated SID model with /E option. /E0 for 6581
            (default) and /E1 for 8580.
          - Added NTSC timing (with /N option, return to PAL timing with /P)
          - Frequency table corrected for A-440Hz tuning.

1.02      - SIDs saved are now in PSID V2 format.
          - Added mention of the HardSID-DLL-Clone for PC64 cable support.
          - Added suggestion to not rely only on reSID emulation.

1.03      - Added \ to drive names in the fileselector to make them work
            better under Win9x.

1.1       - Added Playroutines 2-4:
            "Game-playroutine" with sound effect support
            "Scene-playroutine" with author info at startaddress+$20 and
            timing mark support
            "Everything-playroutine" that has those features combined
          - Added DMC note-entry mode as an option.
          - Added configurable playroutine zeropage address.
          - Added default pattern length selection when clearing patterns.
          - Added possibility to turn auto-advance off.
          - Added documentation of the song, instrument & sound effect data
            formats.
          - Added hints on creating SID sounds.
          - Added sound effect converter INS2SND.EXE. This turns instrument
            files to sound effects (with certain limitations)
          - Added pattern splitter utility SNGSPLIT.EXE, for optimizing song
            memory usage.
          - Added 4 C64 example programs that show features of each
            playroutine.
          - Follow play follows now also orderlist.
          - Relocator fileformat and saveaddress saved in config now.
          - Restructured all playroutines with a "jump table" for easy
access
            of features.
          - Changed directory sorting to be case-insensitive.
          - Changes in keyboard commands:
            SHIFT+X,C,V Cut,copy,paste (pattern & instrument mode)
            SHIFT+Q,A Transpose
            SHIFT+cursor keys Mark pattern
            SHIFT+L Mark whole pattern
            F5-F8 go directly to different editing modes
          - Fixed hex-editing of instrument/command data in jam mode:
            it shouldn't be possible

1.11      - Optimized playroutines 1, 2 & 4 to take less memory
          - Rearranged ADSR and pulsewidth in the sound effect data

1.12      - Added SHIFT+E,R to copy/paste effects row


...................................................................


---> jab | commie | http://commie.oy.com
     
         "Less is moo." - The Holy Mad Cow 
                          http://www.holymadcow.org

Reply via email to