SPRITEFENSTER -------------
Mit SPRITEFENSTER können Sie die Grafik- befehle 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. X- und 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 X- und 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 be- stimmten 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 Eck- punkte 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 String- speicher 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 wer- den 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. Überschnei- dungen 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 ausge- druckt: 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 Sprite- block an, an den der Bereich kopiert werden soll und ändert den ersten Para- meter 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 Fen- sters, oder aber das ganze Fenster zu scrollen, was einen Geschwindigkeits- vorteil 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 16K 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 ge- raten, und so evtl. ein im Speicher vor- handenes 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 ent- spricht 16 Spriteblöcken (1026/64=16) mit Blocknummern von 32 bis 47 (2048/64=32). Nun besteht also ein Fen- ster 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 Sprite- blöcke 40-47 in folgender Anordnung gezeigt:
40 41 42 43 44 45 46 47
Gleichzeitug können die Blöcke 32-39 be- arbeitet werden. Zeichnen Sie zum Beispiel ein Rechteck, wird es zwar in das 2. Fenster (Blocknummer 40-47) ge- zeichnet, 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 Para- meter 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 ge- laden. 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 aus- schalten, da sich sonst das Disketten- laufwerk "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. Para- meter 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 $c79a abändern, und die Werte, die vor jedem Ausdruck an den Drucker übermittelt werden sollen, ab der Adresse $cd9a ablegen (maximal 17). Beispiel für MPS 801:
Anzahl: $c79a: 3 Werte : $cd9a: 27 64 8