_____       ___   _________   ___
     /  _  \     /  /\ /  ______/\ /  /\                   __
    /  / \  \   /  / //  / _____\//  / /______        |    __|
   /  /  /  /\ /  / //  / /   /\ /  / //_____/\       | . |__
  /  /__/  / //  / //  /__/  / //  / / \_____\/
 /________/ //__/ //________/ //__/ /
 \________\/ \__\/ \________\/ \__\/
   _________  _______    _________  _________  ___   ___  _________  _______
  /__   ___/\/  ___  \  /  ___   /\/  ___   /\/  /\ /  /\/  ______/\/  ___  \
  \_/  /\__\/  /__/  /\/  /__/  / /  /  /__/ /  /__/  / /  /______\/  /__/  /\
   /  / /  /  _   __/ /  ___   / /  /  _\_ \/  _   __/ /  ____/\  /  _   __/ /
  /  / /  /  / \  \ \/  /\_/  / /  /__/  /\/  / \  \ \/  /____\/ /  / \  \_\/
 /__/ /  /__/ //__/\/__/ //__/ /________/ /__/ //__/\/________/\/__/ //__/\
 \__\/   \__\/ \__\/\__\/ \__\/\________\/\__\/ \__\/\________\/\__\/ \__\/


DIGITRACKER 1.2 - 16 KHZ 3 CHANNEL MONO  8 BIT SAMPEL TRACKER - 128K CPC (PLUS)

                ALL CODE'N'DESIGN 1993 BY PRODATRON / SYMBIOSIS

                                THIS PROGRAM IS

                               S H A R E W A R E

                      THAT MEANS, THAT IT IS FREE TO COPY,
                 PUT IT INTO YOUR SOFTWARE-LIBRARY, SPREAD IT,
    BUT IF YOU USE IT, YOU SHOULD SEND A DONATION OF 10DM, 4P, 6$ OR 30F TO

                JOERN MIKA, BERGSTR. 128, 47443 MOERS, GERMANY

                BUG-REPORTS AND MODULE SWAPPING ALSO WELCOME !



                               UPDATE-INFORMATION
_______________________________________________________________________________

Folgendes hat sich gegenueber der Version 1.1 in der aktuellen (1.2) geaendert:
- Verbesserter Patterneditor (COPY+Shift, kleine ENTER-Taste, bessere Notenein-
  gabe bei eingeschalteten Samples, besserer Sample-Test).
- Playerabbruch jetzt auch mit ESC.
- MOD-Converter: Stimmenloeschen/-mixen  bei  der  Mod-File-Konvertierung jetzt
  wahlweise fuer den ganzen Sound oder einzeln fuer die Pattern.
- MOD-Converter: Sind  die Samples bei der 1:1 Mod-File-Konvertierung zu gross,
  kann direkt ein Versuch mit 1:2 Sampletransferierung erfolgen, ohne zu unter-
  brechen und den Parameter zu veraendern
- MOD-Converter: CPC-Protracker-MOD-File Konverter eingebaut. MOD-Files koennen
  direkt ins MDL-Format umgewandelt werden.
- C-Commando zusaetzlich. Schaltet Ton ab, wenn die Volume sich unterhalb einer
  bestimmten (vom User festgesetzten) Grenze befindet.
- Hoehere  Abspielfrequenz: 16,6 KHz ueber Digiblaster, bzw. 14,5 KHz ueber den
  Soundchip.
- 7-Bit Sampleaufloesung, statt 8-Bit. Das bringt die eben genannte Frequenzer-
  hoehung,  ausserdem  wird der Digiblaster nicht mehr ueberladen. Alte Module,
  die in 8-Bit vorliegen, werden beim Laden automatisch konvertiert.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                             +
+                     B E N U T Z E R - A N L E I T U N G                     +
+                                                                             +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


                             0.) KLEINE EINLEITUNG:
_______________________________________________________________________________

Digitracker  macht's  endlich  moeglich:  Das Erstellen und Abspielen von Melo-
dien, die auf digitalisierten Instrumenten und Geraeuschen (Samples) basieren.

Leistungsdaten:
- 64512 Bytes fuer Samples frei
-    34 moegliche Pattern bei 64 Positionen im Pattern
- 16667 Herz Abspielfrequenz (Digiblaster)
- 14493 Herz Abspielfrequenz (Soundchip)
-    96 Songpositionen moeglich
- 8 Bit-Digiblaster Sound Unterstuetzung
- Groesstenteils Amiga-Protracker-Effekt kompatible, 17 Effekte (Slides, Vibra-
  to, Arpeggios, Position-Loops, Sample-Offset...)
- MOD-Converter  fuer Amiga-Protrackermodule, kann Samples 1:1 oder 1:2 konver-
  tieren, so dass man maximal 161 KB lange Module transferieren kann.
- Playercode-Generator,  erzeugt  Abspielroutine  an beliebige Adresse, mit der
  Digitracker-Module in eigene Programme eingebunden werden koennen.
- Leisungsstarke  Abspielroutine,  beliebige  Startposition beim Abspielen, er-
  laubt Interrupts, auf Wunsch Farbequalizer und/oder Rasterbalken und mehr...
- Komfortable, einheitliche Benutzerfuehrung
- Highspeed auf allen Ebenen, da Programm 100% in Maschinensprache

Das Programm besteht aus 3 Modulen:
- Dem  eigentlichen  DIGITRACKER,  mit dem sich Stuecke editieren und abspielen
  lassen.
- Dem MOD-CONVERTER, mit dem AmigaProtracker-Module ins Digitracker Format kon-
  vertiert werden koennen, ausserdem Samples und CPC-Protracker-Module.
- Dem  PLAYERCODE-GENERATOR,  der eine externe Abspielroutine fuer Digitracker-
  Module erzeugen kann.


                                1.) DIGITRACKER
_______________________________________________________________________________

Die  Steuerung des Programms ist voellig einheitlich gehalten. Ausgewaehlt und/
oder  verstellt  wird  immer  mit den CURSOR-Tasten, aktiviert mit COPY, RETURN
oder  SPACE.  Alle Operationen koennen mit ESC abgebrochen, von den Untermenues
gelangt man ebenfalls mit ESC wieder ins Hauptmenue.

Ein  Sound besteht grundsaetzlich aus zwei Teilen, den Samples und den Pattern.
Die Pattern enthalten die eigentliche Melodie und werden in der Reihenfolge ab-
gespielt, wie es in der Song-Liste vorgegeben ist.

Sound-Parameter (im grossen Parameter-Fenster):
-----------------------------------------------
SngPos - Die aktuelle Position in der Song-Liste.
Pattrn - Der Pattern, welcher in der Song-Liste bei SngPos drankommt.
Height - Abweichung  von der Normalhoehe, mit der der eben genannte Pattern ab-
         gespielt wird (in Halbtonschritten).
Lenght - Song-Laenge.  Anzahl  der Stellen, die in der Song-Liste durchgespielt
         werden, bis von vorne begonnen wird.
LoopTo - Nach Durchspielen der Song-Liste wird an dieser Position neu begonnen.
Speed  - Abspielgeschwindigkeit  des  Songs,  genauer gesagt die Zeit in 50stel
         Sekunden, die zwischen zwei Position innerhalb einer Patterns vergeht.
Out At - Sound-Ausgabe.  A-C: Ueber  einen der drei Soundchip-Kanaele. D: Ueber
         den Digiblaster (8Bit A-D Wandler am Druckerport des CPC wie er in der
         CPC Amstrad Internation Ausgabe 8/9 1991 beschrieben wurde). Der Digi-
         blaster ist UNBEDINGT zu empfehlen, denn er bringt nahezu Soundblaster
         Qualitaet auf den CPC.
Sampel - Gerade fuer den Editor angewaehlter Sample.

Edit-Parameter (im kleinen Edit-Fenster):
-----------------------------------------
Pat - Im Editor ausgewaehlter Pattern.
Oct - Gerade fuer den Editor ausgewaehlte Octave.
Buf - Position im Zwischenspeicher.
Len - Anzahl der Positionen innerhalb eines Patterns.
Skp - Anzahl  der  Position  die  beim  Editieren nach jeder Eingabe im Pattern
      uebersprungen werden

DISC OP. - Diskettenmenue:
--------------------------
LOAD SONG - Modul laden (Samples, Patterns, SongDaten), Extension:MDL
SAVE SONG - Modul speichern
LOAD SAMP - Sample laden, wenn noch Speicherplatz vorhanden, Extension:SMP
            Vorsicht:  Alte Samples, die noch von der Version 1.1 stammen, wer-
            den  nicht mehr angenommen. Diese sollten mit der 1.1er geladen und
            als MDL-File gespeichert werden, welches problemlos ladbar ist.
SAVE SAMP - Sample speichern
ERASE     - Modul oder Sample von Diskette loeschen
DRIVE A/B - Laufwerk auswaehlen
USER      - Pfad-Nummer einstellen

Hinweis:
Beim  Laden  eines  Moduls  wird  das,  welches sich noch im Speicher befindet,
ueberschrieben.  Lediglich  die  Pattern, welche hinter dem letzten Pattern des
geladenen  Songs  liegen,  bleiben  erhalten. Dadurch ist es moeglich, Songs zu
mergen.

PLAY SONG - Komplettes Modul abspielen:
---------------------------------------
Das Modul wird ab der aktuellen Position (SngPos) abgespielt. Nach Abbruch wird
SngPos aktualisiert.

PLAY PAT. - Pattern abspielen:
------------------------------
Der im Editor angewaehlte Pattern wird abgespielt.

EDIT SONG - Pattern editieren:
------------------------------
Die  Pattern  koennen hiermit bearbeitet werden. Jeder Pattern besteht aus drei
Spuren,  jede davon steht fuer einen Kanal und ist wiederum unterteilt in (nor-
malerweise 64) Positionen. Eine Position ist folgendermassen aufgebaut:

AAB CDEE

AA - Note (C,C#,D,D#...)
B  - Oktave (1-3)
C  - Nummer des Samples, welches hier abgespielt werden soll
D  - Commando-Nummer
EE - genaue Spezifizierung des Commandos

Statt  der  Note+Octave  (AAB) kann auch nichts stehen ('---') oder ein Stopper
('Res'), der einen in dieser Spur eventuell noch anhaltenden Ton ausschaltet.

Um eine Note zu setzen, bedient man sich folgender Tasten:

             | Gewaehlte Octave             | Gewaehlte Octave + 1
     --------+------------------------------+-----------------------------
     Noten:  |  C# D#    F# G# A#    C# D#  |  C# D#    F# G# A#    C# D#
             | C  D  E  F  G  A  B  C  D  E | C  D  E  F  G  A  B  C  D  E
     --------+------------------------------+-----------------------------
     Tasten: |  S  D     G  H  J     L  :   |  2  3     5  6  7     9  0
             | Z  X  C  V  B  N  M  ,  .  / | Q  W  E  R  T  Y  U  I  O  P

Kommandos:
-------------------------------------------------------------------------------
0xy - Normales  Abspielen,  oder Arpeggio (0-X-Y). X und Y in Halbtonschritten,
      die auf den Grundton addiert werden.
1xx - Slide  Up. Tonhoehe nach oben gleiten lassen. XX gibt die Geschwindigkeit
      an. Je groesser XX ist, desto schneller aendert sich die Tonhoehe.
2xx - Slide Down. Tonhoehe nach unten gleiten.
3xx - Tone Portamento. Ein Ton muss bereits angeschlagen sein. Die Note,die vor
      diesem Kommando steht, gibt das Ziel an, zu dem hingeglitten werden soll.
      XX  gibt die Gleitgeschwindigkeit an. Ist XX Null, so wird der Wert ange-
      nommen, der zuletzt fuer dieses Kommando benutzt wurde.
4xy - Vibrato.  Y gibt die Anzahl der Stufen an, die nach oben/unten ausgelenkt
      werden,  X gibt die Groesse der Stufen an. ist XY=0 dann wird der zuletzt
      benutzte Wert uebernommen.
9xx - Sample  Offset.  Der Sample kann mit diesem Kommando von einer beliebigen
      Stelle  aus angespielt werden. Beispiel: XX=1D => Sample wird ab dem Byte
      #1D00 angespielt.
Bxx - Position  Jump. Der Pattern wird an dieser Stelle abgebrochen und es wird
      an die angegebene Position in der Song-Liste gesprungen
Cxx - Volume  eventuell  abschalten. Ist xx (in Hex!) kleiner oder gleicher der
      im Setup eingestellten Volumeuntergenze, so wirkt dieses Kommando wie ein
      Stopper (Ton abschalten). Sonst keine Auswirkungen.
D-- - Pattern Break. Pattern wird abgebrochen, im naechsten (in der Song-Liste)
      wird weitergemacht. Die Werte hinter dem D Commando sind nicht von Bedeu-
      tung
Exy - E-Kommando: Siehe unten.
Fxx - Song-Geschwindigkeit. Diese kann hiermit neu eingestellt werden.

5,6,7,8 und A werden nicht benutzt und zeigen keine Wirkung.

E-Kommandos:
-------------------------------------------------------------------------------
E0x - Kanalwechsel. X kan 0,1 oder 2 sein und gibt den Soundchip-Kanal an (A,B,
      C),  auf  den der Sound ausgegeben werden soll. Wird dieser auf dem Digi-
      blaster ausgegeben, so hat dieses Commando keine Wirkung.
E1x - Fine  Slide  Up.  X gibt an, alle wieviel 50stel Sekunden die Tonhoehe um
      eine  Stufe erhoeht wird. Je groesser also X, desto langsamer gleitet der
      Ton nach oben.
E2x - Fine Slide Down.
E4x - Vibrato  Waveform. X=0 (oder gerade Zahl): Vibrato wird als Dreiecksfunk-
      tion  ausgefuehrt.  X=1  (oder ungerade Zahl): Vibrato als Saegezahn aus-
      fuehren
E5- - Loop Point. Position setzen zu der nach dem E6 Kommando gesprungen wird.
E6x - Jump to Loop. Es wird x mal zu der Stelle mit dem letzten E5-Kommando ge-
      sprungen.Mit Hilfe dieser beiden Schleifenbefehle lassen sich Stellen in-
      nerhalb eines Pattern mehrmals wiederholen.
EDx - Note Delay. Die Note,die vor diesem Kommando steht, wird erst in x 50stel
      Sekunden angespielt
EEx - Pattern Delay. x Positionen warten, bis zur naechsten Position gewechselt
      wird.  Es  wird nach der Position mit diesem Kommando also eine Pause ge-
      macht, als laegen x Positionen zwischen dieser und der naechsten.

E3,E7,E8,E9,EA,EB,EC und EF werden nicht benutzt und zeigen keine Wirkung.

EDIT LIST - Songliste oder Sampleliste bearbeiten:
---------------------------------------------------
Songliste: Diese besteht aus zwei Haelften. Auf der einen Seite stehen die Num-
mern  der  Pattern, die an den jeweiligen Positionen abgespielt werden, auf der
anderen  die  Hoehen-Differenzen,  mit  denen die Pattern abgespielt werden (in
Halbtonschritten).

Sampleliste:  Die  erste  Spalte gibt den Namen an, die zweite die Laengen, die
dritte den Repeat-Start und die vierte die Repeat-Laenge (kleiner 256: kein Re-
peat)  an.  Beim Testen eines Samples mit COPY wird die eingestellte Oktave be-
ruecksichtigt.  Ein Wechsel dieser bringt unterschiedliche Frequenzen beim Sam-
peltesten.
Mit <H> wird die Lautstaerke das angewaehlten Samples halbiert.
Mit <V> kann diese verstaerkt oder abgeschwaecht werden.

CLEAR - Loeschen bestimmter Elemente:
-------------------------------------
Es  kann  alles, nur bestimmte/alle Samples oder nur die Pattern geloescht wer-
den.

PRINTER - Ausdrucken des Modules:
---------------------------------
Print-Songdatas: YES bedeutet, dass auch die Modul- (Patternliste, Song-Laenge,
...)  und Sampledaten (Name, Laenge,...) gedruckt werden, bei NO werden nur die
einzelnen Patterns gedruckt.
First/Last Pattern: Zu druckender Patternbereich.
Lines/Page: Um einen richtigen Seitenvorschub auszufuehren, muss dieser Parame-
ter gesetzt werden (0=kein Seitenvorschub). 12 Zoll Papier hat normalerweise 72
Zeilen (Standard).

OTHERS:
-------
Setup - Grundeinstellungen aendern
- Song-Transpose:  Hoehenverschiebung  des  Songs  in Halbtonschritten. Bei 1:1
  Amiga-Transferierten Samples '12', bei 1:2 Uebersetzungen '0'.
- Pattern-Lenght: Anzahl der Positionen innerhalb eines Patterns.
- Palette-Number: 0-7 Farbwahl
- Ed:PlaySamples: Normalerweise  YES.  In diesem Fall ertoenen im Patterneditor
  beim Setzen von Noten und beim Veraendern der Oktaven die jeweiligen Samples.
  NO verhindert das.
- TonStop At Vol: 0-63.  Setzt die Grenze, bei der das C-Commando wie ein Stop-
  per ('Res') wirkt.

Memory
- Sample-Memory: Wieviel belegt und frei ist. Die Samples liegen alle in der 2.
  64K Ram-Bank.
- Patterndatas  need...: Wichtig, wenn man Module in eigene Programme einbinden
  will. Hier folgt die Anzahl der Bytes (alles in Hex), die der Song in der er-
  sten Ram-Bank benoetigt.
- Song needs...on Disc: Wichtig beim Speichern


                               2.) MOD-CONVERTER
_______________________________________________________________________________

Zur  Zeit  gibt es  mehrere 1000 (!!!) Mod-Files (Amiga-Protracker-Format). Mit
diesem Modul koennen solche ins Digitracker-MDL-Format konvertiert werden.

Das  MOD-Files muss zunaechst vom Amiga/PC/... zum CPC transferiert werden. Das
erledigen  Programme  wie  DOS-COPY  (Face  Hugger Production), die in der Lage
sind, MS-DOS Disketten zum CPC zu kopieren.

Parameter:
----------
- Source/Destination Drive: A/B
- Sample-Transfer: 1:1 - die  Samples werden direkt uebernommen. 1:2 je 2 Bytes
  innerhalb der Samples werden zu einem zusammengefasst, wodurch die Samples in
  der Laenge halbiert werden.
- Sample-Volumes:  NO - Die  Samples  bleiben unveraendert in ihrem Originalzu-
  stand. YES - Die  Samples  werden  entsprechend  der  im MOD-File angegebenen
  Lautstaerke eingestellt.

CONVERT MOD - Amiga-Protracker-Modul konvertieren:
--------------------------------------------------
Nur moeglich, wenn das Modul nicht zuviele Patterns (>34), zuviele Songpositio-
nen (>96) oder zu lange Samples (>63 KB beim 1:1 Transfer bzw. >126 KB beim 1:2
Transfer) hat.

Ansonsten  werden  zunaechst  die einzelnen Pattern konvertiert. Da MOD-Pattern
aus vier Spuren/Kanaelen bestehen, muss immer einer davon entfernt werden. Beim
Beginn  muss eingestellt werden, ob man in allen Pattern ('per Song') immer die
selben  Spuren  loeschen/mischen  will, oder ob jeder Pattern einzeln abgefragt
werden soll ('per Pattern').
Nun  kann  entweder mit den Tasten 1-4 eine Stimme ganz geloescht (hierbei wird
nur  versucht,  eventuell  in der Stimme vorhandene B,D und F Kommandos in eine
andere zu retten) oder durch 'M' eine Stimme in eine andere hineingemischt wer-
den. Soll letzteres geschehen, so muss die 'Source Voice' 1-4 angegeben werden,
die  dann in eine 'Destination-Voice' (1-3) hineingemischt werden soll ('Desti-
nation Voice' hat die hoehere Prioritaet, d.h. in ihr bleiben alle Noten erhal-
ten,waehrend von der 'Source-Voice' nur diejenigen uebernommen werden, die auch
Platz finden). Wird z.B. die Tastenfolge 'M' , '1' , '2' gedrueckt, so wird der
1. Kanal  in den 2. hineingemischt, der vorher der 3.war (aber jetzt der zweite
ist, weil wegen Loeschung des 1. alle einen vorverschoben wurden). Bei 'M','3',
'2' wird der 3. in den 2. gemischt, der auch vorher der 2. war.

PRINT MOD - Amiga-Protracker-Module ausdrucken:
-----------------------------------------------
Ein MOD-File wird in der Form ausgedruckt, in der man es auch vom Amiga her ge-
wohnt ist.

CONVERT SAMPLE - PC, Amiga oder Drumming-CPC Samples konvertieren:
------------------------------------------------------------------
In dem Untermenue kann gewaehlt werden, welche Samples man konvertieren will:

- VOC-Files: Samples, die auf PCs benutzt werden (Soundblaster).
- WAV-Files: Samples, die auf PCs speziell unter Windows benutzt werden.
- SAM-Files: Amiga-Samples.
- INS-Files: Samples  fuer  'Drumming-CPC',  das  Face  Hugger Programm aus der
             CPCAI, welches zur Demonstration des Digiblasters diente.

Beim  Konvertieren wird ebenfalls der Parameterpunkt 'Sample-Transfer' beachtet
(1:1 oder 1:2).
Sollen  Amiga-Samples ('SAM') transferiert werden, so muss deren Laenge vom Be-
nutzer  aus  eingestellt werden, da es mit AMSDOS nicht moeglich ist, deren ge-
naue Laenge festzustellen.

CON.CPC-PROTRA. - CPC-MOD-Files ins MDL-Format umwandeln:
---------------------------------------------------------
Hiermit  koennen problemlos Module, die mit CPC-Protracker erstellt wurden, ins
MDL-Format uebersetzt werden.


                            3.) PLAYERCODE-GENERATOR
_______________________________________________________________________________

Dieser erlaubt das Erzeugen der Digitracker-Modul-Abspielroutine an (fast) eine
beliebige Adresse. Der Bereich von #4000 bis #7FFF und von #0000 bis #0200 kann
nicht  verwendet  werden, da diese von der Routine zum Bankswitching, bzw. fuer
die Interruptverwaltung benutzt werden.

Eine abgespeicherte Abspielroutine ist etwa 4KB lang und leistet folgendes:
- Laden eines Moduls
- Abspielen des geladenen Moduls

VORSICHT: Die Routine akzeptiert keine Module, die mit der Version 1.1 erstellt
wurden  (8-Bit Samples).  Loesung des Problems: Modul einfach mit der 1.2 laden
und wieder abspeichern.

Im  folgenden nun die Benutzung der Routine, wobei die angegebenen Offset-Werte
auf die Startadresse der Routine addiert werden muessen, um die richtige Adres-
se zu bekommen. In den angegebenen Beispielen wird immer davon ausgegangen,dass
die Routine an Adresse &3000 beginnt.

+ 00 => Laden eines Moduls unter Basic
        CALL Anfadr+00 (,Start-Adresse)
-------------------------------------------------------------------------------
Ein  Modul,  das  bereits  geoeffnet sein muss, wird geladen und initialisiert.
'Start-Adresse'  gibt  an,  an  welche Stelle die Song- und PatternDaten in den
Speicher  in die erste Ram-Bank geladen werden. Wird dieser Parameter nicht mit
angegeben,  so  wird  &5600  angenommen.  Die  Sampledaten  werden immer in die
zweite Ram-Bank ab #200 geladen (davor wird der Speicher fuer Tabellen und Rou-
tinen benoetigt).
Es  muss  immer  darauf geachtet werden, dass die Patterndaten nicht in bereits
benutzte Speicherbereiche geladen werden (z.B.Abspielroutine!).
Beispiel:
OPENIN"SOUND.MDL":CALL &3000,&4000:CLOSEIN
Laedt  das  Modul  'Sound.Mdl' wobei die Patterndaten ab Adresse &4000 abgelegt
werden.

+ 03 => Abspielen eines Moduls unter Basic:
        CALL Anfadr+03 (,Optionswert (,Start/Patternnummer))
-------------------------------------------------------------------------------
Ein  geladenes  Modul wird abgespielt. Wenn der 'Start/Patternnummer'-Parameter
oder  beide  weggelassen werden, wird automatisch 0 angenommen. Das Optionsbyte
ist in Bits unterteilt, die folgende Bedeutung haben:

Bit 0,1 => Ausgabe-Kanal:  0-2  Ausgabe  ueber einen Soundchip-Kanal, 3 Ausgabe
           ueber den Digiblaster.
Bit 2   => =0: Songplay.  Das komplette Modul wird abgespielt. Der zweite Para-
               meter gibt dabei dann die Startposition an.
           =1: Patternplay. Nur ein Pattern wird gespielt.Die Nummer davon gibt
               dann der zweite Parameter an.
Bit 3   => =1: Rasterbalken beim Abspielen einschalten
Bit 4   => =1: Farbequalizer  beim  Abspielen. Die Farben 1,2 und 3 stellen die
               Equalizer fuer die jeweiligen Kanaele dar.
Bit 5   => =0: Bereich von #100 bis #200 sichern.Da dieser Bereich von der Rou-
               tine waehrend des Abspielens benutzt wird,wird der direkt hinter
               ihr zwischengespeichert.
           =1: Benoetigt  man  den genannten Bereich nicht, und will man lieber
               den Bereich direkt hinter der Abspielroutine freihalten, so kann
               man dieses Bit auf 1 setzen
Bit 6   => =1: Abfrage  der  Tasten F0-F9. Normalerweise wird die Playerroutine
               nach  Druck  auf  Space abgebrochen. Wird dieses Bit gesetzt, so
               werden  die  Funktionstasten abgefragt, und zwar soviele, wie in
               einer spaeter beschriebenen Variable festgelegt werden. Die Num-
               mmer  der  gedrueckten  F-Taste steht dann in einer weiteren Va-
               riable.
Bit 7   => =1: Interrupts zulassen. Die Abspielroutine stellt einen eigenem In-
               terrupt-Handler zur Verfuegung, der eingesetzt wird, wenn dieses
               Bit  gesetzt  ist.  Pro  Frame-Fly (der jede 50stel Sekunde ein-
               tritt)  finden  6 Interrupts statt. In einer spaeter beschriebe-
               nen Tabelle muessen dann die Adressen der 6 Routinen stehen, die
               abwechselnd vom Interrupt-Handler aufgerufen werden.

Beispiele:
- CALL &3003,3 => spielt den Sound ueber Digiblaster ab. Keinerlei Zusaetze.
- CALL &3003,1+4,3 => spielt den dritten Pattern auf Kanal B des Soundchips ab.
- CALL &3003,8+32 => spielt Sound  ueber Kanal A mit Rasterbalken ab, wobei der
  Bereich von #100 bis #200 nicht gesichert wird.
- POKE &3000+12,5:CALL &3003,3+16+6:PRINT PEEK(&3000+13) => spielt  Sound ueber
  Digiblaster  mit  Farbequalizern ab und fragt dabei die ersten 5 F-Tasten ab.
  Nach Beendigung wird die gedrueckte F-Taste ausgegeben.
- CALL &3003,128,10 => spielt Sound ab Position 10 ab, wobei die Interrupts zu-
  gelassen werden.

+ 06 => Laden eines Moduls unter Maschinensprache
        HL=Adresse
-------------------------------------------------------------------------------
Wie unter Basic muss auch hier die Datei bereits geoeffnet sein.

+ 09 => Abspielen einer Moduls unter Maschinensprache
        A=Optionsbyte, B=Startposition/Patternnummer

+ 12 => Anzahl abzufragender F-Tasten
-------------------------------------------------------------------------------
Variable:  Anzahl  der Funktionstasten (1-10), die abgefragt werden, wenn Bit 6
des Optionsbyte gesetzt ist. <5> bedeutet z.B., dass die Tasten f0 bis f4 abge-
fragt werden.

+ 13 => Indirekte Nummer der gedrueckten F-Taste
        F-Taste = Byte 12 - Byte 13
-------------------------------------------------------------------------------
Nach  Rueckkehr  aus  der  Playerroutine laesst sich hiermit die Nummer der ge-
drueckten  F-Taste (falls Options-Bit 6 gesetzt war) feststellen. Wird z.B. bei
Offset  12  (Anz.  der abgezufragenden Funktionstasten) eine 5 gepoket und wird
beim Abpspielen die f3-Taste gedrueckt,so steht hier eine 2 (=5-3).

+ 14 => Escape-Byte
-------------------------------------------------------------------------------
Dieses  Byte  wird  beim  Begin des Abspielens auf 0 gesetzt. Wenn nun waehrend
das  Abspielens  sein  Wert  geaendert  wird (durch eine Interrupt-Routine), so
wird  das  Abspielen abgebrochen. Damit ist es moeglich, die Playerroutine auch
auf eine andere Art als 'Space' oder die Funktionstasten zu verlassen.

+ 15 => Pen-Nummer des Rasterbalkens. 0-15, 16 steht fuer den Border.

+ 16,17 => Farbe des Rasterbalkens und des Borders
-------------------------------------------------------------------------------
Diese muessen in codierter Form vorliegen. Im folgenden die Tabelle mit den co-
dierten Farbwerten:
00 - 84    04 - 88    08 - 77    12 - 94    16 - 71    20 - 83    24 - 74
01 - 68    05 - 93    09 - 86    13 - 64    17 - 79    21 - 90    25 - 67
02 - 85    06 - 76    10 - 70    14 - 95    18 - 82    22 - 89    26 - 75
03 - 92    07 - 69    11 - 87    15 - 78    19 - 66    23 - 91

+ 18-33 => Farbtabelle fuer Equalizer
-------------------------------------------------------------------------------
Diese  Tabelle  enthaelt  die  Farbwerte die bei den Farbequalizern durchlaufen
werden. Auch sie muessen in codierter Form vorliegen.

+ 34-45 => Adressen der Interrupt-Routine
-------------------------------------------------------------------------------
Hier folgen sechs 16 Bit-Adressen, die auf die sechs Interrupt-Routinen zeigen.
Normalerweise  haben  alle  6 Adressen den Wert #F, so dass bei eingeschalteten
Interrupts immer an die Stelle #F gesprungen wird, wo normalerweise ein RET-Be-
fehl steht.
Anmerkungen zu den Interrupt-Routinen:
- Diese  duerfen  nicht  die  Index-Register  veraendern (IX, IY). Bei Gebrauch
  muessen diese daher zwischengespeichert werden und am Ende mit den alten Wer-
  ten geladen werden.
- Die Interrupt-Routinen werden mit RET abgeschlossen.
- Die  Interrupt-Routinen duerfen an jeder beliebigen Stelle in der ersten Ram-
  Bank liegen.
- Jede  der sechs Interrupt-Routinen wird einmal in einer 50stel Sekunde aufge-
  rufen
- Fuer  Democoder  koennte noch folgendes wichtig sein: Die erste der sechs In-
  terrupt-Routinen bekommt den  Interrupt, der direkt nach dem Frame-Fly kommt.
  Die nachfolgenden Interrupts gehen dann der Reihe nach an die uebrigen Inter-
  rupts.
- Die  Interrupt-Routinen  sollten  natuerlich moeglichst kurz sein. 10 Raster-
  zeilen ist das absolute Maximum.
- Je mehr Prozessorzeit durch dir Int-Routis verschluckt wird, desto tiefer und
  langsamer wird die Soundausgabe.
- Bei  eingeschalteten  Interrupts  wird uebrigens noch der Bereich ab #100 und
  tiefer fuer den Stack-Pointer benutzt!

+ 46 => Volumeuntergrenze
-------------------------------------------------------------------------------
Ab welchem Wert sich das C-Commando wie ein Stopper verhaelt.


                      4.) AUFBAU DER MDL-DATEIEN (MODULE)
_______________________________________________________________________________

Die  Song-Module  (MDL-Files)  liegen im ASCII-Format vor und bestehen aus zwei
Bloecken:
- Der  erste  Block enthaelt den Datenkopf (Songname, Laenge, Songliste usw...)
  und die Pattern. Dieser wird immer in die erste Ram-Bank geladen.
- Der  zweite Block besteht aus den in der angegebenen Reihenfolge hintereinan-
  derliegenden Samples.

Die  ersten  beiden Bytes geben die Laenge des ersten Blockes an, Bytes 3 und 4
die Laenge des zweiten Blockes. Die Laenge des ersten laesst sich mit folgender
Formel ausrechnen:
Laenge = 512 + 9 * Patternlaenge * Patternanzahl
Die  Laenge des zweiten Blockes erhaelt man, wenn man die Laengen aller Samples
addiert.

Dahinter folgt direkt der erste Block.

1. Block: Song-Kopf und Pattern
-------------------------------

- Songkopf: Dieser ist 512 Bytes gross und folgendermassen aufgebaut:

+ 000 => Modulname (8 Bytes)
+ 008 => Namen der 16 Samples, auch jeweils 8 Bytes
+ 136 => Songliste  2*96  Bytes. Das erste Byte gibt jeweils die Patternnummer,
         das zweite die Hoehe (Transposewert in Halbtonschritten, normalerweise
         0) an
+ 328 => Sampledaten: 8*...
         - Samplelaenge (1 Word)
         - Repeatbegin (1 Word)
         - Repeatlaenge (1 Word).
+ 424 => Songlaenge (1 Byte).
+ 425 => Patternlaenge  (1 Byte) kann 1-99 sein. Normalerweise 64, gibt die An-
         zahl der Positionen innerhalb eines Pattern an
+ 426 => Loop To (1 Byte). Position in Songliste, zu der nach Songende gesprun-
         gen wird
+ 427 => Songspeed. Frames zwischen zwei Noten (normalerweise 6)
+ 428 => Songtranspose, liegt zwischen 0 und 12(in Halbtonschritten).
+ 429 => Modul-Version. 0  bedeutet,  dass die Samples in diesem Modul in 8-Bit
         vorliegen, Bei 7-Bit Samples (neue Version) steht hier eine 1.
+ 430 => Ab hier sind alle Bytes bis Offset 511 unbenutzt und daher 0. Sie sind
         fuer eventuelle Erweiterungen vorgesehen

- Pattern: Hier folgenden die Informationen fuer die belegten Pattern. Jede Po-
  sition  (normalerweise gibt es davon 64 pro Pattern) besteht aus 3*3 Bytes (3
  Bytes  fuer  jeden der drei Kanaele). Die drei Bytes pro Kanal haben folgende
  Bedeutung:
  - 1 => Note. 0 bedeutet nichts ('---'), 1-36 stellen die Noten fuer die 3 Ok-
         taven  dar (1=C-1,2= C#1,3=D-1,....35=A#3,36=B-3), 37 steht fuer einen
         Stopper ('Res')
  - 2 => Das Highnibble dieses Bytes gibt die Samplenummer an,das Lownibble die
         Effectnummer.
  - 3 => Die beiden Nibbles dieses Byte geben die genaue Spezifizierung des Ef-
         fekts an.

2. Block: Samples
-----------------

Der 2. Block, der direkt hinter dem ersten steht, enthaelt die Sampledaten. Die
Samples  liegen  in der vorgegebenen Reihenfolge hintereinander (8 Bit, Vorzei-
chenlos.
_______________________________________________________________________________

Momentan  gibt  es  fuer den Digitracker bereits weit ueber 250 Module. Wer re-
gistriert  ist, kann bei mir kostenlos die Modulliste anfordern. Die gewuensch-
ten Module kopier ich gegen Rueckporto und Disx.

DAS PROGRAMM BESTEHT AUS UEBER  1 0 0 0 0  ZEILEN ASSEMBLER QUELLTEXT.


prodatron/SYMBIOSIS, 07.10.1993

                                       A
            ________________________________________________________________
           / ______________________________________________________________/\
          / /\_____________________________________________________________\/
         / / /   / /\/ /\/ _  _  /\/ __ \  / /\/ __  /\/ ____/\/ /\/ ____/\
        / /_/_  / /_/ / / // // / / /_/ /\/ / / /\/ / / /___ \/ / / /____\/
       /___  /\/___  / / //_// / / __  / / / / / / / /___  /\/ / /___  /\
      ____/ / /\__/ / / / \ / / / /_/ / / / / /_/ / /___/ / / / /\__/ / /
     /_____/ / /___/ /_/ / /_/ /_____/ /_/ /_____/ /_____/ /_/ /   / / /
    _\_____\/__\___\/\_\/__\_\/\_____\/\_\/\_____\/\_____\/\_\/___/ / /
   /_______________________________________________________________/ /
   \_______________________________________________________________\/

                                   PRODUCTION