APPLICATIONSCREATION GRAPHIQUE ★ Trickfilm-Grafik mit der vortex-Speichererweiterung ★

Trickfilm-Grafik (CPC Magazin)Applications Creation Graphique
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

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.
Eine Bank ist jeweils in zwei "Blöcke” unterteilt: Von Adresse 0 bis 7FFFder untere Block und von Adresse 8000 bis FFFF der obere Block. Sie vermuten richtig - so ein Block ist genau der Teil des 64 K-Adressbereiches, der überblendet werden kann. So kann man nun zum Beispiel den oberen Original-Block mit dem oberen Block der Bank 1 der Speichererweiterung überblenden. Dies soll auch unser erstes kleines Beispiel sein:

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
ld sp, sstack ; und Stackpointer in eigenen Bereich zeigen lassen.

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.
ld a, 1 ; Banknummer
set 5, a ; mit gesetztem fünften Bit
out (c), a ; über den Port ausgeben.

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,
exx ; in den Zweitregistersatz umschalten.

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,
set 3, c ; oberes ROM ausschalten

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,
set 5, c ; Erweiterungs-Block endgültig
out(c),c ; einblenden,
exx ; wieder den Erstregistersatz anwählen.

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.
ld de, 8000H ; Zieladresse im eingemappten Block.

Gerhard Knapienski , CPC Magazin

★ PUBLISHER: CPC Magazin
★ YEAR: 1986
★ CONFIG: 512K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC MAGAZIN 1985 1986
★ AUTHOR: Gerhard Knapienski
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Trickfilm-Grafik    (CPC  Magazin)    GERMANDATE: 2020-05-19
DL: 185
TYPE: ZIP
SiZE: 6Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Monitor de Codigo Maquina (Type and Run)
» Applications » Basic Compiler (CPC Magazin)
» Applications » Anti-REM (CPC Magazin)
» Applications » Variablenliste (CPC Amstrad International)
» Applications » Maxam Utilities (CPC Computing)
» Applications » Call (Happy Computer)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 457 millisecondes et consultée 812 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.