The Digi-Player
Mit dem " Digi-Player" kann man seine
Meisterwerke abspielen. Eine Besonderheit dieses Programmes ist seine freie
Verschiebbarkeit. Es paßt sich nach
einem Aufruf automatisch an den jeweiligen Speicherbereich an. An zwei
Stellen im Speicher funktioniert der
Player nicht: In der Zeropage
($0000-$01 FF) und unter den Ein-/ Ausgabebausteinen ($ D000-$ DFFF) . Sinnvollerweise sollte er auch nicht in dem
Bereich untergebracht werden, der für
Sampledaten, Songund 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 Abspielmodi ein. Das obere Nibble ( Bit
4-7) bestimmt direkt das Highnibble von
Register $ D011( Bildschrimmode) . Hier
kann man also auswählen, ob der Bildschirm beim Abspielen anoder
ausgeschaltet wird, ob Loresoder
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 Bildschirmund 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
$0 d 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 $0 e
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 Sprachund
Musikausgabe möglich.
Für Assembler-Freaks sind sicher die vom
Player benutzten Adressen interessant.
Er benötigt in der Zeropage die
Speicherstellen $57-$6 E und $ F9-$ FE.
Diese Adressen darf man in eigenen
Programmen nicht benutzen.