★ APPLICATIONS ★ CREATION GRAPHIQUE ★ Trickfilm-Grafik mit der vortex-Speichererweiterung ★ |
Trickfilm-Grafik (CPC Magazin) | Applications Creation Graphique |
Dieses Programm stellt vier neue Befehle zur Verfügung, mit denen Sie bis zu 32 Screens in den Speicher laden können. Mit dem abgedruckten Programm stehen Ihnen vier neue RSX-Befehle zur Verfügung, die es erlauben, bis zu 32 komplette Bildschirminhalte in der vortex-Speichererweiterung abzulegen und extrem schnell wieder sichtbar zu machen. Geschickt genutzt kann damit ein kurzer "Trickfilm” ablaufen. Dies wird auch anhand unseres Beispielprogrammes gezeigt. Vorerst aber ein bißchen Theorie. Wie funktioniert die Speilohererweiterung von vortex überhaupt? DerZ80-Prozessor im CPC kann eigentlich nur 64 KByte direkt verwalten, und schon die Entwickler dieses Rechners benötigten mehr Speicher (der CPC hat insgesamt 96 KByte RAM und ROM). Sie lösten das Problem mittels "Memory-Mapping", d. h., es werden Teile der vom Z 80 adressierten 64 KByte durc,h anderen Speicher ausgetauscht. Genau die gleiche Met hode verwendet vortex. Neben der 64 KByte-RAM-Bank, die in jedem CPC 464 vorhanden ist, kommen bis zu 8 '^eitere 64 KByte-RAM-Bänke dazu. Diese liegen dann sozusagen parallel nebeneinander, und der Programmierer kann nun Teile des internen RAMs der Speichererweiterung überblenden. 1. Maschinensprache-Programm zum Einblenden des oberen Blocks der Speichererweiterungs-Bank 1 und Sichern des Inhalts des Speicherbereiches von 4000H bis 7FFFH in diesem Block: org 3800H 2. Das Programm und der Stackpointer müssen unterhalb von 8000H liegen. Andernfalls würde das eingemappte RAM das Programm und/oder den Stackpointer überlagern, so daß sie für den Z 80 nicht mehr vorhanden wären (System-Absturz!): map: ld (sstack), sp ; alten Wert des ; Stackpointers sichern 3. Nun muß man über den Z80-Port OFBBDH die Bank "vorselektieren”, von der ein Block eingeblendet werden soll. Dabei wird die Portadresse in das BC-Register geladen und die Banknummer (hier im Akku) mit gesetztem fünften Bit mittels dem Befehl OUT (C), A übergeben. Wenn man z. B. die Bank 1 selektieren will, wird der binäre Wert 00100001 übergeben: ld bc, 0FBBDH ; Portadresse der Speichererweiterung. 4. Über das Gate-Array und dessen Port wird nun ein Block angewählt und eingeblendet. Während dieser Zeit muß der Interrupt unterdrückt sein, da er sonst möglicherweise fehlgeleitet wird, und es einen Absturz des Rechners gibt: di ; Interrupt unterdrücken, 5. Das BC-Register beinhaltet den Gate-Array-Status und über dieses Register werden wir auch mappen. Um den Original-Zustand des Rechners wieder herstellen zu können, muß dieses Doppelregister gesichert werden: push bc ;BC auf dem Stapel sichern, out (c), c ; (siehe Firmware-Handbuch). 6. Wird nun im C-Register Bit 6 gesetzt, so wählt man den oberen Block an. Ist dieses Bit nicht gesetzt, so wird später der untere Block eingeblendet. Erst das Setzen von Bit 5 des C-Registers löst nun das Einblenden des vorselektierten Blockes der vorselektierten Bank aus: set 6, c ; oberen Block selektieren, 7. Jetzt steht im Bereich von 8000H bis FFFFH nicht mehr wie früher zum Beispiel der Bildschirmspeicher (C000H), sondern ausschließlich für Sie verfügbares RAM der Speichererweiterung Bank 1. Man kann nun z. B. Daten in diesem Block sichern. Wir speichern wie oben erwähnt einfach den Bereich von 4000H bis 7FFFH ab: ld bc, 4000H ; Länge des zu kopierenden Speichers. Gerhard Knapienski , CPC Magazin
|