Magic Disk 64

home to index to html: MD9005-KURSE-GRAFIKKURS_TEIL_6-4.html
MD9005-KURSE-GRAFIKKURS_TEIL_6-4.koala.png
         Grafikkurs Teil 6.4            
Wie Sie sehen, kann man  den  Bildschirm
nun  mit  Hilfe dieser 3 Bits der beiden
Steuerregister um jeweils 8 Pixel in der
Vertikalen und in der Horizontalen  ver-
schieben. Probieren Sie doch einmal aus,
was  geschieht,  wenn  Sie  verschiedene
Werte in diese unteren  3  Bits  hinein-
schreiben. Der Rest des Registers sollte
natürlich  unverändert bleiben, um unan-
genehme  Nebenwirkungen  auszuschließen.
Diese  Bits können ja dezimale Werte von
0 bis 7  annehmen.  Bei  jedem  weiteren
Wert,  wird der Bildschirm um wiederum 4
Pixel verschoben.  Wenn  Sie  hier  also
Werte  hineinschreiben,  so addieren Sie
am Besten zu dem dezimalen  Wert  der  3
Bits  den  Wert der restlichen Bits, die
gesetzt sein  sollen  direkt  dazu  (man
nennt das auch absolutes POKEn).        
Und  nun  zur  Anwendung des ganzen! Man
kann nämlich mit Hilfe der nun kennenge-
lernten  Bits zur Bildschirmmanipulation
einen sogenannten "SoftScroll" realisie-
ren.  Dies  ist  das weiche Schieben des
Bildschirms  nach  links,  rechts,  oben
oder unten, wie Sie es aus manchen Spie-
len  kennen  (klassisches  Beispiel  ist
wohl  der  schon  uralte  Megahit  "Uri-
dium"). Dies funktioniert  denkbar  ein-
fach:  zunächst  wird  der Bildschirm in
der entsprechenden  Scrollrichtung  ver-
kleinert.  Als  Beispiel  nehme ich hier
einmal einen Softscroll nach links. Dem-
nach  müssen wir die Spaltenzahl verkür-
zen auf 38 Spalten pro Zeile.  Nun  sind
die  erste  Spalte  links  und die erste
Spalte rechts nicht mehr  sichtbar.  Wir
schreiben  nun  eine 7 in Steuerregister
2, damit der linke Rand wieder  sichtbar
wird, jetzt jedoch 2 Spalten des rechten
Randes  verschwinden. Dort schreiben wir
nun ein Zeichen hin und  zählen  den  X-
Offset  von 7 auf 0 herunter. Somit wäre
das nicht-sichtbare Zeichen in den Bild-
schirm  "hereingelaufen".  Als  nächstes
wird es eine Spalte vorkopiert  und  das
Steuerregister  2  wieder auf 7 gesetzt.
Das Zeichen befindet  sich  nun  in  der
letzten  auf  dem  Bildschirm sichtbaren
Spalte. Nun beginnt der  nächste  Durch-
gang, das nächste Zeichen wird wieder in
die erste unsichtbare Spalte geschrieben
und  durchgescrollt... Ein Softscrolling
ist entstanden!                         
Leider ist es jedoch in Basic nicht  mö-
glich einen solchen Scroll auch wirklich
ruckelfrei  zu realisieren. Das Umkopie-
ren der Zeichen dauert zu lange, so  daß
der  Scroll "zittert". So etwas ist wir-
klich sauber nur in Maschinensprache  zu
machen,  oder  Sie  versuchen einmal Ihr
BASIC-Programm   durch   einen    BASIC-
Compiler  zu  beschleunigen, es kann gut
sein, daß hierbei auch noch einigermaßen
gute Ergebnisse zu erzielen sind.       
Eine  in  BASIC sicher realisierbare An-
wendung, die einen guten Effekt  liefert
wäre ein sogenanntes Bildschirmwackeln. 
Angenommen,  bei  Ihrem  nächsten  Spiel
explodiert ein Raumschiff, wenn  es  ge-
troffen  wird.  Wie  wäre  es denn, wenn
hierzu der Bildschirm so anständig  wak-
keln  würde?  Nichts  einfacher als das,
wir müssen lediglich ein  paar  Zufalls-
werte    in   die   Bildschirmoffsetbits
schreiben, um ein chaotisches Wackeln zu
erzeugen. Schauen Sie  zu  diesem  Zweck
einfach nocheinmal in das Programm "ZEI-
CHENDEMO" der Rückseite dieser MD,  auch
zu  diesem  Thema  gibt es da einige De-
monstationen.                           
Nun noch ein paar  Worte  zum  Speicher-
handling des VIC. Wie ich Ihnen ja schon
im  Grafikkurs  Teil 5 erzählte kann der
VIC lediglich 16 KByte  Speicher  adres-
siere. Im Normalfall belegt er den Spei-
cher von Adresse 0 bis  16383,  was  zur
Folge  hatte,  daß wir Grafikdaten immer
nur in diesem Bereich untergebracht  ha-
ben.  Dies brachte jedoch häufig Schwie-
rigkeiten mit  sich,  zumal  wir  manche
Speicherbereiche  nicht unbedingt direkt
nutzen konnten und  zunächst  immer  ir-
gendwelche   Vorsichtsmaßnahmen  treffen
mußten, bevor  wir  überhaupt  Daten  in
einem  Bereich  ablegen konnten. Deshalb
gibt es aber auch  die  Möglichkeit  den
Speicherbereich  des VIC zu verschieben.
Dies wird durch Adresse 56576 gesteuert.
Diese Adresse liegt in  dem  Speicherbe-
reich   eines   weiteren  Bausteins  des
64ers, dem CIA, mit dem wir  uns  jedoch
nicht  weiter befassen werden, da dieser
nur in Maschinensprache von Nutzen  ist.
Die  Bits 0 und 1 dieses Registers geben
die möglichen Basisadressen des VIC  an.
Diese sind aufgeteilt in folgende Kombi-
nationen:                               
Bitmuster Speicherbereich               
-------------------------               
  11             0-16383                
  10         16384-32767                
  01         32768-49151                
  00         49152-65535                
Schreiben  Sie also diese Bitkombinatio-
nen in die Bits  0  und  1  der  Adresse
56576,  so  wird der Speicherbereich des
VIC verschoben. Wie Sie sehen  geschieht
dies in Abschnitten von 16 KB, wobei der
ganze Speicher des VIC quasi "abgedeckt"
werden kann. Doch Vorsicht! Die normalen
Basisadressen  von verschiedenen Grafik-
funktionen verschieben sich  somit  näm-
lich  ebenfalls  um  16 KB! Das heißt im
Klartext, daß beispielsweise  der  Bild-
schirmspeicher   jetzt  nicht  mehr  bei
Adresse 1024  anfängt,  sondern  jeweils
16384  Bytes  weiter!  Ebenso ist es mit
der Bitmap einer Grafikseite. Diese kann
ja normalerweise  bei  Adresse  0,  oder
wahlweise bei Adresse 8192 des Speichers
liegen.  Schalten wir den Bildschirm auf
den 2 Bereich der obigen Liste, so  lie-
gen  die  möglichen Grafikbereiche jetzt
bei 0+16384=16384 und 8192+16384=24576! 
Nun  noch  zu einem Thema, das uns eben-
falls  aus   Speicherplatzgründen   sehr
nützlich  ist.  Es gibt nämlich auch die
Möglichkeit, die Basisadresse des  Bild-
schirmspeichers   innerhalb   des  16KB-
Bereichs des VIC zu verschieben. Das hat
den Vorteil, daß man sehr  schnell  zwi-
schen  2 Bildschirmen hin- und herschal-
ten kann, oder aber auch,  daß  man  die
Farbdaten  einer Grafik an einer anderen
Stelle ablegen kann, wenn man den norma-
len  Bildschirmspeicher für andere Dinge
nutzen möchte. Dies ist ein denkbar ein-
facher  Vorgang.  Die Bits 4-7 aus Regi-
ster 24 sind dafür zuständig.  Schreiben
Sie  die nun folgenden Bitkombinationen,
so wird der  Bildschirmspeicher  an  die
angegeben Adresse verschoben:           
0000               0-999                
0001           1024-2023                
0010           2048-3047                
0011           3072-4071                
0100           4096-5095                
0101           5120-6119                
0110           6144-7143                
0111           7168-8167                
1000           8192-9191                
1001          9216-10215                
1010         10240-11239                
1011         11264-12263                
1100         12288-13287                
1101         13312-14311                
1110         14336-15335                
1111         15360-16359                
Schreiben  Sie  also eines der angegeben
Bitmuster in die Bits 4-7 des  Registers
24  des  VIC, so beginnt für den VIC der
Bildschirmspeicher bei  der  angegebenen
Adresse. Sie sehen nun den Inhalt dieses
RAMs  auf  dem  Monitor,  jedoch ist der
Cursor verschwunden!  Das  liegt  daran,
daß  das  Betriebssystem des 64ers eben-
falls wissen muß, wo sich der neue Bild-
schirmspeicher  befindet,  und jetzt den
Cursor noch an der alten Adresse blinken
läßt. Doch auch dies läßt sich  beheben,
nämlich  indem  Sie schlichtweg die neue
Registeradresse dividiert durch  256  in
die  Adesse  648 schreiben. Dies ist ein
Byte,  das  vom  Betriebssystem  benutzt
wird,  und wo es feststellt, wo sich der
momentane  Bildschirmspeicher  befindet.
Diese  Adresse  ist  übrigens  auch sehr
wichtig, wenn Sie den VIC in einen ande-
ren  16K-Bereich  verschieben.  Bedenken
Sie, daß Sie ja auch den Bildschirmspei-
cher  absolut mitverschoben haben! Somit
muß beim Verlegen des VIC-Bereichs  auch
die  neue  Bildschirmadresse  in  dieser
Adresse mit angegeben werden.           
Desweiteren  ist noch zu sagen, daß sich
mit dem Bildschirmspeicher ebenfalls die
Spriteblockregister      mitverschieben.
Spriteblockregister 0 liegt ja normaler-
weise bei 2040.  Verschieben  Sie  jetzt
den   Bildschirmspeicher  beispielsweise
nach 3072, so müssen Sie  bedenken,  daß
das neue Spriteblockregister 0 jetzt bei
2040-1024=1016 liegt!                   
So.  Das  wars  dann endgültig in Sachen
Grafik. Ich hoffe, es hat Ihnen ein  we-
nig  Spaß  gemacht und daß jetzt der VIC
in Ihrem 64er heißlaufen wird. In  näch-
ster Zukunft ist für mich hier kein Kurs
mehr  geplant,  deshalb verabschiede ich
mich bis auf weiteres von Ihnen - Servus
Ihr Uli Basters                         
Valid HTML 4.0 Transitional Valid CSS!