APPLICATIONSDIVERS ★ Fullscreen - der erweiterte Bildschirm ★

Fullscreen (CPC Amstrad International)Applications Divers
★ 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 ★ 

Es begann mit dem Spiel ARKANOID. Dieses Spiel benutzt (scheinbar) die gesamte Bildschirmfläche samt dem Border. Da ist einmal eine Laufschrift und dann die Spielfläche selbst, die von links nach rechts bzw. von unten nach oben bis an den Plastikrahmen des Monitors reichen. Wie so etwas möglich ist und wie man den gesamten Bildschirm auch unter BASIC nutzen kann, soll im folgenden beschrieben werden.

Die erste Vermutung war, daß der normal beschreibbare Teil des Monitors (im folgenden als Textschirm bezeichnet) um einen bestimmten Faktor vergrößert dargestellt wird, daß aber die Anzahl der senkrechten und waagerechten Punkte gleichgeblieben sei. Es stellte sich aber heraus, daß bei der Spielfläche 32 Zeilen übereinander angezeigt wurden, die je 8 Pixel hoch waren; das sind 256 Pixel in der Vertikalen. “Aha, die haben den Bildschirmspeicher vergrößert“, war die nächste Vermutung, aber der Video-Controller (VC) hat doch nur 14 Adreßleitungen und kann also auch nur 16K-Byte ansprechen. Der VC muß irgendwie erfahren, daß er bei ARKANOID plötzlich 256 Bildschirmzeilen mit Bytes aus dem Bildschirmspeicher zu versorgen hat. Ich schaute mir nun die Register des VC (das sind sozusagen seine Gedächtniszellen, in denen er sich z.B. die Anfangsadresse des Bildschirmspeichers merkt) genauer an, und siehe da, es gab da zwei sehr interessante Register:

Register 1: Der Name dieses Registers ist Horizontal Displayed, es gibt an, wieviele Zeichen pro Zeile in Mode 1 auf dem Bildschirm anzuzeigen sind. Dieses und die folgenden Register können nur beschrieben und nicht gelesen werden.

Register 6: Vertical Displayed. Es gibt an, wieviele Zeilen auf dem Bildschirm darzustellen sind. Um neue Werte in diese Register zu schreiben, muß man Folgendes wissen: Der VC ist über zwei Ports mit der CPU (das ist die sogenannte Central Processing Unit, also der Z80) verbunden, die auch aus BASIC heraus angesprochen werden können. Der eine Port hat die Portadresse &BC00. Über ihn wird die Nummer des Registers ausgewählt, das beschrieben oder gelesen werden soll. Uber den anderen Port wird nun der Wert dieses Registers gelesen oder beschrieben, er hat die Adresse &BD00. Mit der Befehlsfolge OUT &BC00,n:OUT &BD00,m wird der Wert m in das Register n des VC geschrieben. Das folgende Beispiel sollten Sie im Mode 1 eingeben: Schreiben Sie doch einmal eine 41 in das Register 1. Wie Sie sehen, ist der Textschirm um eine Spalte breiter geworden, doch gleichzeitig ist die Textdarstellung völlig durcheinander geraten: das 1. Zeichen der 2. Zeile steht nun am Ende der 1. Zeile, die ersten beiden Zeichen der 3. Zeile stehen am Ende der 2. Zeile usw.

Außerdem erscheint in der rechten unteren Ecke noch einmal das Zeichen aus der linken oberen Ecke. Die Position der linken oberen Ecke hat sich nicht verändert, der Textschirm sitzt jetzt nicht mehr in der Mitte des Monitors, sondern zu weit rechts. Bevor dieses Ergebnis erklärt wird, sollten Sie Listing 1 abtippen. Es erzeugt einen Sternenhimmel auf dem gesamten Bildschirm und eine Schrift quer über den Schirm, die 23 Zeichen in Mode 0 (in Mode 1 46 Zeichen) lang ist. In Listing 1 werden noch zwei weitere Register benutzt, die Register 2 und 7. Diese Register legen die Position der linken oberen Ecke des Textschirmes fest.

Register 2: Horizontal Sync Position. Dieses Register bestimmt die horizontale Lage der linken oberen Ecke des Textschirmes. Hier steht normalerweise eine 46. Wird der Wert um 1 vergrößert, so wandert die linke Seite des Textschirmes um ein Zeichen nach links, entsprechend bei einer Verkleinerung nach rechts.

Register 7: Vertical Sync Position. Dieses Register bestimmt analog zu Register 2 die vertikale Position der linken oberen Ecke. Eine Verkleinerung bewirkt hier eine Verschiebung nach unten. Doch zurück zu unserem ersten Versuch mit 41 Spalten. Hier ist das Zeichen aus der linken oberen Ecke in der unteren rechten Ecke noch einmal aufgetaucht. Um das zu erklären muß ich weiter ausholen: Ein Zeichen belegt in Mode 116 Bytes im Bildschirmspeicher (2*8). Bei 40 mal 25 Zeichen sind das 16000 Bytes. Der Bildschirmspeicher ist aber 16384 Bytes lang (16K), d.h., 384 Bytes=24 Zeichen bleiben unbenutzt. Zur Vereinfachung kann man sich vorstellen, daß der VC die Zeichen nacheinander aus den Bildspeicher liest und auf den Schirm bringt. Da der Bildschirmspeicher 16384 Bytes lang ist, kann der VC maximal 1024 Zeichen aus dem Speicher lesen. Er braucht bei 40 mal 25 Zeichen nur 1000 Zeichen, bei unserem Versuch mit 41 Spalten jedoch 41 mal 25 = 1025 Zeichen. Wenn der VC beim Auslesen am Ende des Bildschirmspeichers angekommen ist, beginnt er mit dem Auslesen wieder am Anfang unseres virtuellen Zeichenspeichers. Das ist der Grund, warum bei dem Programm aus Listing 1 bestimmte Sternen-konstellationen doppelt auftauchen. Das Spiel ARKANOID hat aber 32 Zeilen, und auf dem Bildschirm ist nichts doppelt! Die Lösung ist recht einfach: ARKANOID verwendet als Spielfläche einen 32 mal 32-Zeichen-Schirm, das sind genau 1024 Zeichen= 16384 Bytes. Um nun z.B. Text darzustellen und trotzdem einen Textschirm mit mehr als 1024 Zeichen zu bekommen, wie in Listing 1, muß man den Text in den Bereich legen, der nicht doppelt angezeigt wird. Zur Verdeutlichung des Zeilenaufbaus bei einem 32 mal 32-Zeichen-Textschirm dient das Programm 2 (es sind je 14 Minuszeichen). Hier wird ein 32 mal 32-Zeichen-Schirm erzeugt, in die Mitte des Monitors gebracht, und die Zeilen aus dem 40 mal 25 Schirm werden gekennzeichnet. Die nächten 24 Zeichen in der rechten unteren Ecke werden als “Mehrzeichen“ angezeigt. Man kann nun mit verschiedenen Text-schirmformaten herumspielen, indem man z.B. die Registerwerte aus Listing 1 in Listing 2 übernimmt. Jetzt sieht man, welche Zeilen doppelt sind und welche nur einmal auftauchen und so für den Text zur Verfügung stehen. Einen “übergroßen“ Textschirm (mehr als 1024 Zeichen) kann man als Zwischenbild mit kurzen, aber breiten Texten oder als Ladebild verwenden, indem man den Bereich, der nur einmal angezeigt wird, für Text benutzt und den doppelten Bereich mit Mustern (oder wie in Listing 1 mit Sternen) füllt, bei denen es nicht auffällt, daß da etwas doppelt ist. Während man bei so kurzen Texten, wie im Listing 1, die richtigen Koordinaten für den Locate-Be-fehl noch mit Hilfe von Programm 2 und den entsprechend geänderten Registerwerten für den jeweiligen Textschirm feststellen kann, wird es da bei der Verwendung von z.B. einem 32 mal 32-Zeichen-Schirm schon schwierig, wenn man z.B. Tabellen mit mehr als 25 Zeilen hat und in Mode 1 Spalteneinträge an die richtige Stelle “Locate'n“ will. Genau dazu dient Listing 3.

Das Unterprogramm “LOCATE x32,y32: PRINT text$“ macht genau das, was in der REM Zeile 410 in Listing 3 steht: Es plaziert den Text text$ an der Position x32,y32. Es gibt eine Einschränkung für text$. Der Text darf nicht über eine Zeile hinausgehen. Ist dies doch der Fall, wird es von dem Unterprogramm erkannt und eine Fehlermeldung ausgegeben. Die Unterprogramme LOCATE... und ERROR können zusammen in eigene Programme übernommen werden. Das Rahmenprogramm erzeugt in bekannter Weise einen 32 mal 32-Zeichen-Textbildschirm und erwartet daraufhin die Eingabe der X- und Y-Koordinate sowie einen String, jeweils durch Komma getrennt und mit ENTER abgeschlossen. Der String wird dann an der Position X,Y ausgegeben, und es wird eine neue Eingabe erwartet. Tritt ein Fehler auf, weil der String zu lang ist oder weil die Koordinaten so gewählt wurden, daß der String die maximale Zeichennummer 1023 überschreiten würde, so wird eine Fehlermeldung ausgegeben und auf einen Tastendruck gewartet. Das Programm wird beendet, indem als Text “Q“ (für Quit) eingegeben wird. Doch nun zu den POKEs &B28B und &B28A, die in den drei Listings Vorkommen. In diesen beiden Bytes merkt sich das Betriebssystem die rechte bzw. die untere Grenze des aktiven Textfensters.

Bitte beachten Sie: Die Pokes lauten auf dem CPC 664/6128 anders. Setzen Sie bitte für POKE &B28A, POKE &B72B und für POKE &B28B, POKE &B72C ein.

Wird bei einem PRINT-Befehl die rechte Grenze des Textfensters überschritten, so gibt das Betriebssystem die entsprechenden Steuerzeichen aus, um den Cursor an den Anfang der nächsten Zeile zu bringen. Wird dabei die untere Grenze des Fensters erreicht, so wird das Fenster gescrollt. Die rechte Fenstergrenze liegt bei Mode 1 normal bei 40 (in der Speicherstelle &B28B steht eine 39, also Grenze minus* 1). Da diese Grenze aber bei einem anderen Format des Textschirmes (z.B. 32*32) mitten in einer Zeile liegt, können wir die Steuerzeichen ganz und gar nicht gebrauchen. Deshalb teilen wir dem Betriebssystem mit dem Poke mit, daß die rechte Fenstergrenze beim 127. Zeichen liegt. Wird das erste Zeichen eines Strings so an das Ende einer Zeile plaziert, daß die folgenden Zeichen des Strings die 40-Zeichen-Grenze in Mode 1 überschreiten, so wird dennoch kein Steuerzeichen ausgegeben, da das Betriebssystem davon ausgeht, daß die Fenstergrenze erst bei Position 127 liegt. Sie können ja einmal den POKE entfernen oder ändern und schauen, was passiert.

(Dirk Michaelis/cd) , CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1988
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC Amstrad International 1988
★ AUTHOR: Dirk Michaelis

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Fullscreen    (CPC  Amstrad  International)    GERMANDATE: 2021-08-10
DL: 17 fois
TYPE: ZIP
SIZE: 4Ko
NOTE: 40 Cyls
.HFE: NON

Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Rechnung
» Applications » Umrechnung (CPC Amstrad International)
» Applications » Umsatzsteverberechnung (Schneider CPC-Welt)
» Applications » Tilgungsberechnung (CPC Amstrad International)
» Applications » Laechenberechnung (Schneider Aktiv)
» Applications » KFZ-Kostenberechnung (CPC Amstrad International)

CPCrulez[Content Management System] v8.7-desktop
Page créée en 157 millisecondes et consultée 65 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.