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.