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