The following article was printed in issue 6/89 of the magazine „PC AMSTRAD INTERNATIONAL".
A program to compress the Joyce screen.

Bilder zum Spartarif

Den Bildschirm des JOYCE komprimieren

Bildschirm-Kompressoren, also Programme, die den Inhalt des Bildschirmspeichers in komprimierter Form auf Diskette speichern und diese komprimierten 'Screens' auch wieder laden können, gibt es mittlerweile für fast jeden Computer. Aufgabe dieser Programme ist es, den enormen Speicherplatzbedarf eines kompletten Bildes auf der Diskette so weit wie möglich zu reduzieren. Die zirka 23 kByte dagegen, die ein kompletter Bildschirm des JOYCE (PCW 8256/8512) normalerweise beim Speichern auf der Diskette belegt, ermutigen nicht gerade dazu, Titelbilder, Grafiken oder Texte im Bildschirmformat abzuspeichern.

Mit dem Programm-Modul SCRKOMP.BAS (siehe Listing 1) können nun auch die Bilder des JOYCE in komprimierter Form gespeichert und wieder geladen werden. Die hierbei angewandte Technik ist etwas ungewöhnlich, kommt aber der Grundkonzeption der PCW-Rechner entgegen. SCRKOMP wandelt nämlich den Inhalt des Bildschirmspeichers zurück in ASCII-Zeichen, sofern für die einzelnen Zeichenmatrizen ein entsprechendes Zeichen vorhanden ist.

Auf diese Art lassen sich dann auch ungewöhnlich hohe Kompressionsraten erzielen, denn je nach Grafikanteil kann ein kompletter Bildschirm bis hinunter auf 3 kByte komprimiert werden. Dies entspräche einer Kompression von bis zu 87%. Abbildung 1 zeigt die Hardcopy eines Bildschirms mit einer Kombination von Text und Grafik, die auf 12 kByte, also ungefähr 50%, komprimiert werden konnte. Wie weit ein 'Screen' komprimiert werden kann, hängt, wie schon angedeutet, vom Grafikanteil des Bildes ab, das heißt, von der Anzahl der Zeichenmatrizen, für die kein entsprechendes ASCII-Zeichen gefunden werden kann. Ist eine Umwandlung nicht möglich, werden die acht Bytes einer Zeichenmatrix unverändert abgespeichert.
Abbildung 1: Dieses Bild belegt nur 12 kByte auf der Diskette

Beispiele

SCRKOMP besteht neben dem DATA-Lader, der das Maschinenprogramm in den Speicher 'poked', aus drei Unterprogrammen, die vom Hauptprogramm wie folgt aufgerufen werden:

1. Initialisieren
Dieses Unterprogramm muß unbedingt aufgerufen werden, bevor Sie versuchen, die anderen Unterprogramme auszuführen, denn hier wird das Maschinenprogramm geladen und die benötigten Adressenvariablen initialisiert. Der Aufruf erfolgt mit
GOSUB 10030
und sollte nach Möglichkeit zu Beginn Ihres Programmes erfolgen.

2. Bildschirm speichern
Dieses Unterprogramm wird mit
GOSUB 10090
aufgerufen und speichert den aktuellen Inhalt des Bildschirmspeichers in komprimierter Form auf Diskette ab.

3. Bildschirm laden
Der Aufruf erfolgt mit
GOSUB 10170
und die entsprechende Datei wird dann in den Bildschirmspeicher geladen. Für die Unterprogramme 'Bildschirm speichern' und 'Bildschirm laden' müssen zwei Parameter übergeben werden: 'scrfile%' enthält die Dateinummer, und 'scrname$' enthält den Namen der gewünschten Bildschirmdatei. Listing 2 zeigt Ihnen, wie Sie SCRKOMP in Ihr eigenes Programm einbauen und ansprechen können, dabei ist natürlich auch eine andere Einbindung als die hier gezeigte möglich. Sie können SCRKOMP zum Beispiel auch direkt mit
MERGE "SCRKOMP"
an Ihr Programm 'anhängen' und haben dann die gezeigten Möglichkeiten zur Verfügung. Eine Initialisierung ist aber auf jeden Fall notwendig. Die Beispielaufrufe zum Speichern und Laden des Bildschirms sind als separate Unterprogramme programmiert, so daß Sie diese direkt in Ihr Programm übernehmen können. Für 'Bildschirm speichern' wird automatisch eine Datei mit Namen "SCREEN.nbr" erzeugt, wobei 'nbr' jeweils auf den nächsten verfügbaren Zahlenwert gesetzt wird. Damit wird ein Überschreiben schon vorhandener SCREEN-Dateien verhindert. Für das Beispiel 'Bildschirm laden' müssen Sie den gewünschten Dateinamen eingeben.

Hinweise

Zum System:
Für die Programmierung des Maschinenteils wurden aus Platzgründen einige Systemroutinen des CP/M-Betriebssystems benutzt, darum ist diese Programm nur unter CP/M-3 Version 1.4 (Systemfile J14GCPM3.EMS) lauffähig. Falls Sie eine andere Version benutzen, müssen die Adressen dieser Routinen eventuell angepaßt werden.

(Norbert Finke/rs)
Diese Programme sind in Mallard-BASIC geschrieben. Nach dem Eingeben sollte zuerst mit SAVE"SCRKOMP.BAS" <RETURN> und durch SAVE"SCRBEISP.BAS" <RETURN> abgespeichert werden. Später können Sie die Programme dann wie im Text beschrieben starten.
Auf der Databox steht neben den zwei Programmen noch das dokumentierte Assemblerlisting und ein Demo-Bild zur Verfügung.

[Listing "Spartarif"]
[Sample listing]
[Assembler listing]

Scanned by Werner Cirsovius
August 2004
© DMV-Verlag