Magic Disk 64

home to index to text: MD9401-UTILITIES-DIGI-PLAYER.txt

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.

Valid HTML 4.0 Transitional Valid CSS!