Magic Disk 64

home to index to text: MD8911-UTILITIES-SPRITE_FENSTER_(ZEICHENFENSTER_IN_TEXTBILDSCHIRM).txt
            SPRITEFENSTER               
            

Mit SPRITEFENSTER können Sie die Grafikbefehle Ihres c 64 sinvoll erweitern.
Zu Beginn legen Sie die Speicheradresse fest, ab der SPRITEFENSTER zu liegen kommen soll. Am besten übernehmen Sie aber den vorgegebenen Wert.
Zu den Befehlen:
1 . Ausehen und Lage des Fensters auf dem Bildschirm.

FENSTERAUSEHEN:                         

SYS 49167, XExp, YExp, Farbe, AUS/ AN, PR Mit diesem Befehl ändern Sie das ausehen des Fensters. Xund Y-Expansion ( engl.
Erweiterung) können den Wert 0( Aus) und 1( An) annehmen.

FENSTER POSITIONIEREN: SYS 49164, X, Y  

Das Window wird an die, durch die Xund Y-Koordinate festgelegte Stelle ( linke, obere Ecke) gesetzt.

FENSTER LÖSCHEN: SYS 49158              

Das gesamte Fenster wird gelöscht.

FENSTER INVERTIEREN: SYS 49179          

Die gesetzten Punkte des Fensters werden gelöscht und umgekehrt.
2 . Zeichenbefehle PUNKT: SYS 49152, XK, YK, FLAG Dieser Befehl zeichnet oder löscht einen Punkt in einem Fenster. Die Parameter XK und YK geben die Koordianten des Punktes an. Der Parameter FLAG bestimmt, ob ein Punkt gesetzt ( FLAG=1) oder gelöscht ( FLAG=0) werden soll. Dies ist auch bei den folgenden Zeichenbefehlen der Fall.
PUNKT TESTEN: SYS 49176, XK, YK Dieser Befehl zeigt, ob auf einer bestimmten Stelle ein Punkt gesetzt ist oder nicht. Das Ergebnis wird in der Speicherstelle 255 festgehalten und kann mit . . .
a= peek(255) : print a . . . sichtbar gemacht werden.
Ist a=1, so ist auf diesem Feld ein Punkt gesetzt, anderenfalls ( a=0) ist kein Punkt vorhanden.
LINIE: SYS 49155, XK1, YK1, XK2, YK2, FL X1 und Y1 legen die Anfangskoordinaten und X2, Y2 die Endkoordinaten einer Linie fest.( FL siehe FLAG PUNKT) RECHTECK:

SYS 49161, XK1, YK1, XK2, YK2, FLAG     

Die Parameter X1/ Y1 und X2/ Y2 stellen die jeweils gegenüberliegenden Eckpunkte eines Rechtecks dar.
ELLIPSE: SYS 49173, XR, YR, XKM, YKM, FL Die Parameter XKM und YKM bestimmen die Mittelpunktskoordinaten, XR den Radius in X-Richtung und YR den Radius in Y-Richtung.

ERSTER SCHREIBBEFEHL:                   

SYS 49200, XK, YK," TEXT" Die Parameter XK und YK geben an, ab wo der Text oder Stringspeicher ausgedruckt werden soll. Es dürfen nur Stringspeicher verwendet werden, an die ein Anführungszeichen angehängt wurde ( z. B. : A$+ CHR$(34)) . Zahlen müssen mit der STR$- Funktion in Strings umgewandelt werden.

ZEICHENGRÖßE BEIM ERSTEN SCHREIBBEFEHL  
SYS 49215, RG, UG, OG, LG               
Ausgegangen wird von  einer  8*8  Punkte

Matrix, die beliebig verkleinert werden kann, indem Sie die äußeren Grenzen nach innen verschieben.

              OG (0-7)                  
           . . . . . . . .              
           . . . . . . . .              
           . . . . . . . .              
 LG (0-7)  . . . . . . . . RG(8-1)      
           . . . . . . . .              
           . . . . . . . .              
           . . . . . . . .              
           . . . . . . . .              

UG (8-1) Die linke und obere Grenze kann von 0 auf 7 verschoben, und die rechte und untere Grenze von 8 auf 1 verschoben werden. Die voreingestellten Werte sind 8 für die rechte/ untere Grenze, und 0 für die linke/ obere Grenze, also die gesamte 8*8 Punkte Matrix. Überschneidungen der jeweils gegenüberliegenden

Grenzen     sind     nicht      möglich.

BEISPIEL: Ein Zeichensatz sieht im Speicher folgendermaßen aus:

 0........ ........ ........ ........   
  ..****.. ..***... ...***.. ..**....   
  ..*..*.. ..*..*.. ..*..... ..*.*...   
  ..****.. ..*..*.. ..*..... ..*..*..   
  ..*..*.. ..***... ..*..... ..*..*..   
  ..*..*.. ..*..*.. ..*..... ..*.*...   
 7..*..*.. ..***... ...***.. ..**....   
  ........ ........ ........ ........   
  >>2   7<                              

Nun werden die Grenzen gesetzt, SYS 49215,7,7,0,2 und der Text " ABCD" im Fenster ausgedruckt: SYS 49200,0,0," ABCD"

 0123456789012345678901234567890123456  
0.....................................  
1****.***...***.**....................  
2*..*.*..*.*....*.*...................  
3****.*..*.*....*..*..................  
4*..*.***..*....*..*..................  
5*..*.*..*.*....*.*...................  
6*..*.***...***.**....................  

ZEICHENSATZ:
SYS 49203, ADRESSE,( GROß/ KLEIN),( REVERS) Der erste Parameter ADRESSE gibt an, von wo an die Basicerweiterung die Daten eines Zeichensatzes liest. Diese Daten können auch unter dem ROM liegen. Wird als Adresse 53248 angegeben, so wird der COMMODORE-Zeichensatz benutzt.
Tabelle für die beiden letzten Parameter P1( GROß/ KLEIN) und P2( REVERS) :

  P1 P2  Schriftart                     
  0   0  normale Großschrift            
  0   1  invertierte Großschrift        
  1   0  normale Groß-/Kleinschrift     
  1   1  invertierte Groß-/Kleinschrift 
ZWEITER SCHREIBBEFEHL:                  

SYS 49209, XKW, YKW," BUCHSTABE" Die Funktionsweise des 2 . Schreibbefehls ist ähnlich, der des 1 . Schreibbefehls, jedoch ist das Fenster in ein 8*8 Punkte Raster unterteilt, so daß nur noch X-Ko- rodinaten von 0-11 und Y-Koordinaten von 0-5 möglich sind. Bei diesem Befehl wurde auf allen Komfort verzichtet, um eine möglichst hohe Geschwindigkeit zu erreichen. Dies hat zur Folge, daß nur die Y-Koordinaten 0,1,2,3,4 sinnvoll ( da korrekt) sind.

AUSSCHNITTE KOPIEREN:                   

SYS 49221, XK1, YK1, XK2, YK2, XK3, YK3, A, B, ZS Die ersten 4 Parameter dienen dazu, ein Rechteck zu definieren. Die Parameter X3 und Y3 bestimmen die neue, linke, obere Ecke dieses Rechtecks. Je nach Wahl von A und B wird der, durch das Rechteck definierte Bereich kopiert ( siehe Tab.) .
Der letzte Parameter gibt den Spriteblock an, an den der Bereich kopiert werden soll und ändert den ersten Parameter von " SPEICHERLAGE DES FENSTERS"( näheres später) .
Tabelle für die Parameter A und B:

  A B  kopieren und ...                 
  0 0  ... löschen                      
  0 1  ... "sonst nix"                  
  1 0  ... invertieren                  
  1 1  ... füllen                       

3 . SCROLLING

SCROLLEN DES FENSTERS:                  
SYS 49185 = links scrollen              
SYS 49188 = rechts scrollen             
SYS 49194 = oben scrollen               
SYS 49197 = unten scrollen              

Das Fenster wird in eine der vier Rich- tungen gescrollt ( verschoben) . Die der Richtung des Scrollens gegenüberliegende Spalte bzw. Zeile wird dabei gelöscht.

UNTERE VIER SPRITES SCROLLEN:           

SYS 49212,( LINKS AN/ AUS),( RECHTS AN/ AUS) Dieser Befehl ermöglicht es, beim Scrollen nach links oder nach rechts, nur die obere Reihe (4 Sprites) des Fensters, oder aber das ganze Fenster zu scrollen, was einen Geschwindigkeitsvorteil und einige gute Effekte mit sich bringt.

4. SPEICHERLAGE UND KOPIEREN VON SPRITES

SPEICHERLAGE DES FENSTERS: SYS 49170, X, Y Dieser Befehl unterstützt nur den ersten 16 K Adressierungsbereich (0-16384), der wiederum in 256 Blöcke mit je 64 Bytes (= ein Sprite) unterteilt ist. Von diesen 256 Blöcken gehen 32 verloren (0-31 entspricht dem Speicherbereich von 0-2048), da dort die Zeropage und der Bildschirm zuliegen kommen. Sie sollten also die Parameter B1 und B2 auf jeden Fall größer als 31 wählen, da sonst der c 64 abstürzen könnte.
Außerdem sind die Blöcke ( Sprites)64-127 nicht auf dem Bildschirm direkt anzeigbar, da der VIC dort die Daten des Commodore Zeichensatzes liest. Das Speichern von Sprites in diesem Bereich ist aber durchaus möglich. Legen Sie also Sprites in den Blöcken 32-255 ab, so müssen Sie aufpassen, damit Sie nicht mit dem Basic-Speicher in Konflikt geraten, und so evtl. ein im Speicher vorhandenes Basic-Programm zestören.
All diese Probleme können beseitigt werden, indem Sie einfach den Basic-Anfang hochsetzen, und den so gewonnenen Speicherplatz ausnützen. Bei den Demos wurde mit Hilfe des Ladeprogramms der Basicanfang auf 3073( ursprünglich 2048) hochgestetzt. Somit wurden 1024 Bytes frei (3072-2048=1024), die nun zum Ablegen von Sprites benutzt werden können. Dieser freie Speicherplatz entspricht 16 Spriteblöcken (1026/64=16) mit Blocknummern von 32 bis 47(2048/64=32) . Nun besteht also ein Fenster aus 2 Reihen mit je 4 Sprites, also insgesamt 8 Sprites, und Sie haben somit 2 Fenster zur freien Verfügung.
Zum Ablegen von Sprites im Speicher des c 64 bieten sich die Bereiche von $ a000-$ bfff und $ e000-$ ffff hevorragend an.
Nutzen Sie diese Bereiche vollständig aus, so können Sie 32 Fenster im Speicher ablegen.
Ein Beispiel:

SYS 49170, 32, 40                       

Auf dem Bildschirm werden die Spriteblöcke 40-47 in folgender Anordnung gezeigt:

         40 41 42 43                    
         44 45 46 47                    

Gleichzeitug können die Blöcke 32-39 bearbeitet werden. Zeichnen Sie zum Beispiel ein Rechteck, wird es zwar in das 2 . Fenster ( Blocknummer 40-47) gezeichnet, ist aber nicht zu sehen.
Führen Sie nun den Befehl . . .

 SYS 49170, 40, 32                      

. . . aus, so ist das Rechteck sichtbar, das 1 . Fenster jedoch nicht mehr. Werden B1 und B2 gleich gewählt, so können Sie die Veränderungen sofort sehen.
SPRITES KOPIEREN: SYS 49206, ASB1, ZSB, ANZ Der erste Parameter gibt den Startblock der zu kopierenden Sprites an, der zweite Parameter den Spriteblock, an den kopiert werden soll. Der letzte Parameter ANZ bestimmt die Anzahl der zu kopierenden Spriteblöcke (8 Spriteblöcke sind ein Fenster) .
Bei diesem Befehl wird auf das unter dem ROM liegende RAM zugegriffen.
Beispiel:

SYS 49206, 32, 40, 8                    

Die Sprites mit den Blocknummern 32-37(1 . Fenster) werden nach Blocknummer 40-47(2 . Fenster) kopiert.

5. AUSGABEBEFEHLE                       
SPRITES SPEICHERN:                      

SYS 49182, ASB, ESB+1," NAME", GA Die Spriteblöcke vom ersten Parameter ( ASB) bis zum zweiten Parameter werden entweder auf Kassette ( GA=1) oder auf Diskette ( GA=8) abgespeichert.
Beispiel:

SYS 49182, 32, 40, "TEST", 8            

Die Sprites mit den Blocknummern 32-39 (1 . Fenster) werden unter dem Namen " TEST" auf Diskette abgespeichert.

SPRITES LADEN:                          

SYS 49218, Adresse, GA," TEST"" Adresse" gibt an, an welche Adresse ( Dezimal) das Programm " TEST" geladen werden soll. Es wird natürlich immer an das, unter dem ROM liegende, RAM geladen. Die Bereiche von 0-2048 und 49152-57344 sind zu meiden.
Beispiel:

SYS 49218, 10*4096, 8, "TEST"           

Das Programm " TEST" wird von Diskette an die Adresse 10*4096($ a000) geladen.
ACHTUNG! Wird ein LOAD oder SAVE Befehl des normalen c 64 Basics benutzt, so sollten Sie zuvor das Fenster ausschalten, da sich sonst das Diskettenlaufwerk " aufhängt" ! Sollte dies trotz- dem einmal passieren, so schalten Sie das Diskettenlaufwerk aus, und drücken Sie < RUN-STOP/ RESTORE> .
HARDCOPY: SYS 49191 Diese Routine gibt ein Hardcopy des Fensters aus, das durch den 1 . Parameter bei " SPEICHERLAGE DES FENSTERS" bestimmt wurde. Eine Hardcopy-Routine für den MPS 801 ist bereits in der Basic-Erweiterung enthalten.
Haben Sie keinen MPS 801( kompatiblen) Drucker, so können Sie eine eigene Hardcopy-Routine einbauen, indem Sie die Adresse $ c79 a abändern, und die Werte, die vor jedem Ausdruck an den Drucker übermittelt werden sollen, ab der Adresse $ cd9 a ablegen ( maximal 17) .
Beispiel für MPS 801 :

Anzahl: $c79a: 3                        
Werte : $cd9a: 27 64 8                  

Valid HTML 4.0 Transitional Valid CSS!