Magic Disk 64

home to index to html: MD8911-UTILITIES-SPRITE_FENSTER_(ZEICHENFENSTER_IN_TEXTBILDSCHIRM).html
            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                  



Valid HTML 4.0 Transitional Valid CSS!