APPLICATIONSDIVERS ★ Der Kompaktor ★

Kompaktor (Computer Schau)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 ★ 

Mit diesem Programm erfüllen wir zahlreiche Leserwünsche. Immer wieder wurde die Redaktion gebeten, zu allen Maschinenprogrammen auch die entsprechenden Assemblerlistings abzudrucken und zu erläutern. Wir können dies leider nicht bei allen Programmen tun. Dies würde den Rahmen eines Heftes total sprengen und wir müßten komplette Bücher für das eine oder andere größere Programm schreiben. Den Kompaktor, der auch im Textverarbeitungsprogramm unseres ersten Schneider-Kompaktwissen-Heftes enthalten war, wollen wir aber etwas naher erläutern, da er als Utilitie (Hilfsprogramm) auch bei Ihren eigenen Programmen Einsatz finden kann.

Eigentlich sagt der Name schon, welchen Sinn das Programm hat. Irgendetwas wird kompakter gemacht also „verdichtet“. Im vorliegenden Falle geht es um im Speicher stehende Daten.

Häufig befinden sich in einem Speicher jede Menge nicht brauchbare, also redundante Bytes. Bei einer Datei oder einem Text eines Textverar-beitungsprogrammes sind dies zum Beispiel Leerstellen (Spaces). Bei einem Bildspeicher können es aber auch „Nullen“ sein. Sollen diese Daten nun auf einem externen Speichermedium (Kassette, Diskette, Microdrive usw.) „verewigt“ werden, so braucht man für diesen Vorgang mehr Platz und mehr Zeit wenn diese „Redundanzbytes“ mit abgespeichert werden. Genau hier aber wird der Sinn und Zweck des Kompaktoreinsatzes deutlich. Der Kompaktor soll Abhilfe schaffen. Der Kompaktor besteht aus drei Teilen. (Die Benennungen haben wir willkürlich gewählt.)

Der Teil A (clear) dient dazu, den Speicherbereich zu löschen.

Teil B (kompr) ist der „Packer“ der den Speicherbedarf komprimiert, also der eigentliche Kompaktor. Teil C (expan) ist der „Entpacker“ der die Daten wieder auf die ursprüngliche Speicherplatzausdehnung expandiert.

Teil A ist also eigentlich kein Bestandteil dieser Utilitie, ist aber deshalb integriert, damit man zu Beginn einen „sauberen“ Speicher besitzt. Durch diesen Teil wird (im vorliegenden Programm) der Speicher mit Leerstellen aufgefüllt.

Teil B sollte vor jedem Save-Vorgang aufgerufen werden. Von Basic aus erhält das Programm die Adressen für Speicheranfang und -ende. Das Speicherende ist im vorliegenden Falle mit „&F9“ gekennzeichnet. (Betrachten Sie die Arbeitsweise vor allem auch in Verbindung mit dem im ersten Heft abgedruckten Textverarbeitungsprogramm!) Nach dem Programmaufruf beginnt der Teil B mit der Suche nach Leerstellen (chr$(32)). Sobald dieser Code gefunden ist, schaut das Programm nach, ob mindestens noch weitere drei Leerstellen folgen. Ist dies nicht der Fall, dann geht die Suche weiter. Sind aber mehr als drei Speicherstellen hintereinander mit diesem Code belegt, dann wird komprimiert. Dazu ist als erstes die Anzahl der Leerstellen von Nöten. Diese wird zusammen mit einem „Kompressionszeichen“ (&F8) in die ersten drei Leerstellen geladen. Anschließend wird der Speicher so verschoben, daß alle Leerstellen in diesem Teil verschwinden. Sobald dies erledigt ist, springt das Programm wieder an den Anfang, und die Suche geht von neuem los. Irgendwann ist nichts mehr zum Komprimieren da, der Programmteil hat seine Schuldigkeit getan und übergibt in die Speicherstellen &160/&161 die Länge des komprimierten Speichers.

Nach einem „SAVE“ sollte sich nur unmittelbar der Lauf des dritten Programmteiles anschließen, damit der Datenspeicher wieder in den „Originalzustand“ zurückgesetzt wird. Denn sonst könnte es Vorkommen, daß durch ein Print-Kommando etwas aus dem komprimierter Speicher ausgegeben wird, was zu größter Verwirrung führt. Zum Beispiel Print chr$(4).

Um dem also vorzubeugen, regeneriert der Expansionsteil wieder den Speicher.

Von Basic aus kommen die originalen Adressen für Speicheranfang und -ende. Gesucht wird nun nach &F8. Wird das Programm fündig, so kann der Speicher wieder um die Anzahl der Leerstellen verschoben werden. Die Leerstellen werden eingefügt und &F8 verschwindet. Nachdem dieser Programmteil abgeschlossen ist, befindet sich der Speicher wieder im „Originalzustand“. Wer bisher alles mitverfolgt hat, weiß es bereits: Auch direkt nach einem „LOAD“ sollte der Aufruf zur Expansion erfolgen. Andererseits aber macht es dem Expansionsteil nichts, eine nichtkomprimierte Datei vorgesetzt zu bekommen.

Der Aufruf der Routinen ist eine Schneider-Besonderheit, die nicht mit allen Z-80-Rechnern möglich ist. Mit CALL adresse,a,b können einem Maschinenprogramm auch die Werte zweier Variablen bekannt gemacht werden. Das Register „DE“ enthält bereits die letzte Variable, in diesem Falle also den Wert von „b“. Die zweite Variable erhält man über den Zeiger „IX“, der bei „IX+2“ auf das Lowbyte von „a“ zeigt. Natürlich können auch mehr als zwei Variable an das Programm übergeben werden. Das „A“-Register enthält die Anzahl der Variablen nach dem CALL-Befehl.

Generelles zum Programm

Die Adresse &9D00 ist als Startadresse nur ein Beispiel. Der gesamte Code ist an jeder Stelle des Speichers „abrufbar“. Deshalb wurden als „Merkadressen“ auch die Speicherstellen ab &160 benutzt. Soll der Kompaktor zu Komprimierung von anderen Codefolgen (also nicht für Leerstellen) benutzt werden, so sind die entsprechenden Codes im Programm zu ändern. Hierfür sollte dann das Assemblerlisting zu Rate gezogen werden. Das Programm komprimiert in der vorliegenden Version, wenn mindestens vier Leerstellen vorhanden sind. Das kann teilweise einige Zeit in Anspruch nehmen. Wird dieser Wert z. B. auf zehn erhöht, dann kann evtl. eine wesentlich schnellere Abarbeitung erfolgen. Dies hängt aber auch vom Speicherinhalt ab. Auf
welchen Wert man die Grenze setzt, muß der Anwendungsfall entscheiden.

Damit Sie den Kompaktor auch direkt in Aktion sehen können, haben wir ein kleines Demonstrationsprogramm mit abgedruckt. Dabei wird dann der Speicher vor der Kompression, nach Kompression und dann wieder nach der Expansion dargestellt. Damit das ganze nicht zu langweilig ist, wird der Abstand zwischen den Worten des „geistreichen“ Textes mit einer Anzahl zufälliger Leerstellen gefüllt. Dadurch wird auch sichtbar, daß der Kompaktor erst bei der vorgegebenen Anzahl der Leerstellen aktiv wird. Ganz zum Schluß soll noch angemerkt werden, daß dieses Programm bei vielen Anwendungen eingesetzt werden kann. Als Beispiel sei hier nur auf den Einsatz bei einer Dateiverwaltung hingewiesen.

B. Fernhomberg/LM, ComputerSchau

★ PUBLISHER: Computer-Schau
★ YEARE: 1985 , 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ AUTHOR: B.FERNHOMBERG
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Kompaktor    (Computer  Schau)    GERMAN    LISTINGDATE: 2023-10-31
DL: 51
TYPE: PDF
SiZE: 2317Ko
NOTE: 3 pages/PDFlib v1.6

» Kompaktor    (Source-code)    (Computer  Schau)    GERMAN    LISTINGDATE: 2023-10-29
DL: 49
TYPE: PDF
SiZE: 3468Ko
NOTE: Supplied by www.acpc.me ; 4 pages/PDFlib v1.6

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

Lien(s):
» Applications » Ditacopy: Compact Copy from Disc to Tape
» Applications » Decompact Ocp
» Applications » Compact III GTi
» Applications » Disc Compactor
» Applications » Screen Compact II
» Applications » Compact (Amstar&CPC)
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 516 millisecondes et consultée 326 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.