Magic Disk 64

home to index to html: MD9401-UTILITIES-DIGI-PLAYER.html
             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.              
Valid HTML 4.0 Transitional Valid CSS!