The Digi-Player
Mit dem "Digi-Player" kann man seine
Meisterwerke abspielen. Eine Besonder-
heit dieses Programmes ist seine freie
Verschiebbarkeit. Es paßt sich nach
einem Aufruf automatisch an den jewei-
ligen Speicherbereich an. An zwei
Stellen im Speicher funktioniert der
Player nicht: In der Zeropage
($0000-$01FF) und unter den Ein-/Aus-
gabebausteinen ($D000-$DFFF). Sinn-
vollerweise sollte er auch nicht in dem
Bereich untergebracht werden, der für
Sampledaten, Song- und Patternliste
vorgesehen ist (Speicherbereich, den man
in der Final-Save-Funktion angegeben
hat).
Der "Digi-Player" kann von Basic oder
von Assembler aus angesprochen werden.
Beginnen wir mit letzterem.
Am Besten erklärt sich die Funktions-
weise an einem beispiel. Unter Final-
Song liegt im Speicher von $2000-BD00.
Die Abspielroutine befindet sich ab
$C000. Zunächst braucht der Player die
Startadresse des Songs. Dazu laden wir
den Akku mit dem Low-Byte und das X-
Register mit dem High-Byte der
Startadresse. Die 8 Bits des Y-
Registers stellen unterschiedliche Ab-
spielmodi ein. Das obere Nibble (Bit
4-7) bestimmt direkt das Highnibble von
Register $D011 (Bildschrimmode). Hier
kann man also auswählen, ob der Bild-
schirm beim Abspielen an- oder
ausgeschaltet wird, ob Lores- oder
Hiresschreen dargestellt wird. Ist kein
Bit gesetzt: Bildschirm aus, Bit 4
gesetzt: Loresscreen, Bit 4 und 5
gesetzt: Hiresscreen. Die 4 Bits des
unteren Nibble haben folgende Bedeutung:
Bit 0: SID-Version (0=alt, 1=neu)
Bit 1: Abfrage SPACE-Taste (0=Abbruch
des SOngs mit SPACE möglich,
1=keine Abfrage)
Bit 2: Wiederholung (0=Endlos Play,
1=Song nur einmal spielen)
Bit 3: Nicht benutzt
Der Aufruf des "Digi-Players" von
Assembler aus geschieht also wie folgt:
LDA #$00 ;Lowbyte Startadresse Song
LDX #$20 ;Highbyte Startadresse Song
LDY #$00 ;Bildschirm aus, alter SID,
endlos spielen, Abbruch
mit SPACE-Taste
JSR $C000 ;Player starten
In BASIC ist der Aufruf ebenso einfach:
10 POKE 780,0 :REM Lowbyte Song-Start-
adresse ins Akku
20 POKE 781,32:REM Highbyte ins X-Regis.
30 POKE 782,0 :REM Bildschirm- und
Abspielmodus ins Y-Regis.
40 SYS 49152 :REM Player starten
Für diejenigen, die in einem Song
mehrere Musikstücke unterbringen wollen,
ein kleiner Tip: Man kann seinen Song
auch so aufteilen, daß z.B. von
Songposition $00 bis $07 ein
eigenständiger Take läuft, von $08 bis
$0d ein weiterer und so fort. Alle
Stücke greifen natürlich auf die
gleichen Samples szurück. Beim Absaven
des Final-Song werden Songposition und -
länge auf den ersten Take eingestellt.
"Digi-Player" spielt diesen dann auch
ab. Will man nun auf die anderen Takes
zurückgreifen, muß man einfach die
Zeiger für Songposition und -länge neu
setzen. Die erforderlichen Werte poked
man in folgende Speicherstellen:
Song-Start + 3 ; Zeiger auf Songposi.
Song-Srtrt + 4 ; Zeiger auf Songlänge
Song-Start + 5 ; Zeiger auf Songspeed
Letzter Wert interessiert natürlich nur,
wenn in einem Song Takes mit
unterschiedlicher Taktrate vorkommen.
Umbeim oberen Beispiel den zweiten Take
zu erreichen, muß also (bei $2000 als
Startadresse des Songmoduls) in $2003
der Wert $08 und in $2004 der Wert $0e
hineingeschrieben werden. Ruft man den
Player danach auf, werden die Werte
übernommen.
In Basic sollte man als Programmierer
darauf achten, den Basic-Speicher zu
begrenzen, damit die Digi-Daten nicht
von Variablen o.ä. überschrieben werden.
Mit der oben beschriebenen Methode des
Änderns der Song-Zeiger sind auch von
Basic aus Programme mit Sprach- und
Musikausgabe möglich.
Für Assembler-Freaks sind sicher die vom
Player benutzten Adressen interessant.
Er benötigt in der Zeropage die
Speicherstellen $57-$6E und $F9-$FE.
Diese Adressen darf man in eigenen
Programmen nicht benutzen.