Grafikroutinen im C 128-ROM
Nutzung der Betriebssystemroutinen
 
Nachdem vor einiger Zeit  die Sprungtabelle  des  Kernal-Editors
behandelt wurde, geht es diesmal um  die  Hires- und Multicolor-
Grafikroutinen im C  128-ROM.  Sie  erlauben  mit  wenig Aufwand
die Programmierung faszinierender Grafiken in Assembler.


Bei der Anwendung der Routinen ist zu  beachten,  daß  diese  im
Basic-ROM von $4000-$AFFF liegen. Deshalb  muß  man  zum  Aufruf
entweder   das    JSRFAR-Unterprogramm    des    Betriebssystems
benutzen(s. "Speicherverwaltung 2: Betriebssystemroutinen") oder
man blendet das ROM mit BANK 15 in Basic bzw. LDA #$00:STA $FF00
in Maschinensprache  ein.  Dann  genügen  einfache  JSR-Befehle,
allerdings muß das aufrufende Programm dazu unterhalb  $4000  in
Bank 0 liegen. 
Die zu übergebenden Parameter sind häufig die gleichen  wie  bei
den entsprechenden Basic-Befehlen, bei evt. Unklarheiten  sollte
man  also  dort  im  C  128-Handbuch  nachsehen.   Angaben   wie
$1131/$1132 bedeuten, daß es sich um 16-Bit-Werte handelt, wobei
wie üblich in der ersten Speicherstelle das Low-, in der zweiten
das   High-Byte   abzulegen   ist.   A/X/Y   stehen   für    die
Prozessorregister. 
Die Adressen $1131-$1134 spielen bei  den  Routinen  DOT,  DRAW,
BOX, CIRCLE und RDOT eine besondere Rolle:  Sie  verhalten  sich
wie ein "Grafikcursor", d. h. sie enthalten nach der  Ausführung
den letzen angesprochenen Bildpunkt und dienen gleichzeitig  als
Anfangspunkt für den nächsten Zeichenbefehl. Daher kann man sich
häufig das Neusetzen einiger Koordinaten ersparen. 
Zur Demonstration befinden sich auf der Diskette  die  Programme
"ASS-GRAFIK.OBJ"  und  "LIGHTBIKES-OBJ"(kommentierte  Quelltexte
"ASS-GRAFIK.SRC" und "LIGHTBIKES.SRC" im Hypra-Ass-Format,  auch
in  Basic  lad-   und   listbar).   Das   erste   erzeugt   eine
Multicolor-Grafik auf dem Bildschirm, beim  zweiten  handelt  es
sich um  die  mit  einer  Länge  von  174  Bytes  wohl  kürzeste
Umsetzung   der   "Tron"-Spielidee(Linien   ziehen   und   nicht
kollidieren) aller  Zeiten.  Mit  Betätigen  eines  Feuerknopfes
beginnt man  eine  Spielrunde,  nach  einer  Kollision  ist  der
Bildschirmrahmen in der Farbe des  Verlierers.  Beide  Programme
werden mit 
 
  BANK 15:BOOT"Name" 
 
geladen und gestartet, bei "LIGHTBIKES.OBJ"  sollte  man  vorher
einen Reset durchführen. 
 
 
 
              D i e   G r a f i k r o u t i n e n  
 
 
GRAPHIC($6B6C) 
 
Setzt Anzeigemodus  und  reserviert(falls  nötig)  Speicher  für
Grafik und Video-RAM($1C00-3FFF), ein vorhandenes Basic-Programm
wird nach $4000 verschoben. Handelt es sich um einen  gemischten
Grafik/Text-Modus(2    oder    4),    so    kann     man     die
Umschaltzeile(Grafikzeile+48)  danach  in  Speicherstelle  $0A34
festlegen(Standard: 208). 
 
X: Anzeigemodus(0-5, wie in Basic) 
 
 
GRAPHICMEM($9F4F) 
 
Reserviert Speicher für Grafik, ohne diese einzuschalten. 
 
 
GRAPHICCLR($A022) 
 
Gibt für Grafik reservierten Speicherbereich frei und verschiebt
ein Basic-Programm zurück nach $1C00. Achtung: Im Gegensatz zum
entsprechenden Basic-Befehl wird die Grafik nicht ausgeschaltet,
also vorher GRAPHIC mit X=0 oder 5 verwenden! 
 
 
GCOLOR($6A5C) 
 
Legt Farben für folgende Grafikbefehle fest. Im  Multicolormodus
kann  die  Hintergrundfarbe($D021)  auch  ohne   diese   Routine
bestimmt werden. 
 
$0086: Vordergrundfarbe 
$0084: Multicolor-Farbe 1 
$0085: Multicolor-Farbe 2 
$D021: Hintergrundfarbe 
 
 
GCLEAR($6B30) 
 
Löscht  Grafik  und  setzt  Farben  gemäß  GCOLOR   für   ganzen
Bildschirm. 
 
 
SETCOL($6B39) 
 
Setzt Farben(außer Multicolor  2)  für  ganzen  Bildschirm  ohne
Löschen der Grafik. 
 
 
SETMULTI2($6B17) 
 
Setzt Multicolor-Farbe 2 für ganzen Bildschirm. 
 
 
DOT($AF75) 
 
Setzt(oder löscht) Punkt. 
 
$1131/$1132: X-Koordinate(Hires: 0-319, Multicolor: 0-159) 
$1133/$1134: Y-Koordinate(0-199) 
$0083:       Farbquelle(0/1: Löschen/Vordergrundfarbe, bei Mul-
             ticolor zusätzlich 2/3 für Multicolor-Farben 1/2) 
$116B:       Punktbreite(0: normal, 1: doppelt) 
 
 
DRAW($AF72) 
 
Zieht Linie von X1,Y1 nach X2,Y2. 
 
$1131/$1132: X1-Koordinate 
$1133/$1134: Y1-Koordinate 
$1135/$1136: X2-Koordinate 
$1137/$1138: Y2-Koordinate 
$0083:       Farbquelle(wie bei DOT) 
$116B:       Punktbreite(wie bei DOT) 
 
 
BOX($62D7) 
 
Zeichnet Rechteck mit Ecken X1,Y1 und X2,Y2. Das  Rechteck  läßt
sich drehen(Rotationswinkel) und ausfüllen. 
 
$1150/$1151: X1-Koordinate 
$1152/$1153: Y1-Koordinate 
$115C/$115D: X2-Koordinate 
$115E/$115F: Y2-Koordinate 
$1154/$1155: Rotationswinkel(in Grad) 
$0083:       Farbquelle(wie bei DOT) 
$116B:       Punktbreite(wie bei DOT) 
X:           Flag für Ausfüllen(0: nein, 1: ja) 
 
 
CIRCLE($66DF) 
 
Zeichnet um Rotationswinkel gedrehten  Kreis-/Ellipsenausschnitt
von Startwinkel bis Endwinkel. 
 
$1150/$1151: X-Koordinate des Mittelpunktes 
$1152/$1153: Y-Koordinate des Mittelpunktes 
$1154/$1155: Radius in X-Richtung 
$1156/$1157: Radius in Y-Richtung 
$115C/$115D: Startwinkel(in Grad) 
$115E/$115F: Endwinkel(in Grad) 
A/Y:         Rotationswinkel(in Grad) 
$0083:       Farbquelle(wie bei DOT) 
$116B:       Punktbreite(wie bei DOT) 
 
 
PAINT($61BD) 
 
Füllt  Bereich   um   X,Y   bis   zu   einer   Grenze   in   der
Füllfarbe(Modus=0) oder einer beliebigen Farbe(Modus=1). 
 
$1131/$1132: X-Koordinate 
$1133/$1134: Y-Koordinate 
$0083:       Farbquelle(wie bei DOT) 
X:           Modus 
 
 
RDOT($9C49) 
 
Liefert Punktfarbe an X,Y in Akku. 
 
$1131/$1132: X-Koordinate 
$1133/$1134: Y-Koordinate 
$008B:       muß 0 sein 
 
 
CHAR($68DB) 
 
Schreibt Zeichen normal oder invers in Grafik. 
 
A:     ASCII-Code des Zeichens 
X:     Zeile(0-24) 
Y:     Spalte(0-39) 
$113D: Invers-Flag(0: normal, 128: invers) 
$1168: High-Byte des Zeichensatzes($D0: Groß/Grafik, $D8:
       Groß/Klein) 
$0083: Farbquelle(wie bei DOT) 
 
 
TEXT($6866) 
 
Gibt in Bank  1  liegenden  String  auf  Grafikschirm  aus.  Mit
ASCII-Code 14 im String kann vom  standardmäßigen  Groß-/Grafik-
auf den Groß-/Klein-Zeichensatz gewechselt werden. 
 
$0024/$0025: Adresse des Strings in Bank 1 
$116E:       Länge des Strings 
$115E:       Spalte(0-39) 
$115F:       Zeile(0-24) 
$113D:       Invers-Flag(0: normal, 128: invers) 
$0083:       Farbquelle(wie bei DOT) 
 
  
Thomas Klein

Dateien:
 
ASS-GRAFIK.OBJ: Grafikdemo 
ASS-GRAFIK.SRC: Quelltext im Hypra-Ass-Format
ASS-GRAFIK.TXT: formatierter Quelltext als ASCII-File 
LIGHTBIKES.OBJ: Tron-Spiel mit Multicolor-Grafik 
LIGHTBIKES.SRC: Quelltext im Hypra-Ass-Format 
LIGHTBIKES.TXT: formatierter Quelltext als ASCII-File

  Zurück zum Index  
Home | Cat's Eye | Kimagure | Con-Bilder | Computer | NiNuM | TSP | Kontakt