APPLICATIONSDIVERS ★ Hardcopy-Programm für Schneider CPC ★

CPC-Datagenerator (Computer Technik)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 ★ 

Vom Binär-File zum relokalisierbaren Hexcode in DATA-Zeilen

Binärcode in DATA-Zeilen zu transferieren, ist nicht nur für Redakteure interessant, die ihren ‘assemblerfreien' Lesern ein bequemes Eintippen ermöglichen möchten. Mit dem hier vorgestellten Programm erhält man zusätzlich einen einfachen aber nützlichen Relokalisator, so daß man die immer wieder auftretenden Speicherkollisionen von Maschinenprogrammen vermeiden kann.

Zunächst muß man das zu bearbeitende Binär-File an die Originalstelle laden und dem Generator-Programm Start-und Endadresse sowie den Dateinamen für die DATA-Zeilen mitteilen. Das Programm holt sich dann Byte für Byte aus dem Speicher und legt sie als zweistellige Hexzahlen in DATA-Zeilen ab. Stößt es dabei auf zwei aufeinanderfolgende Bytes, die eine zu verschiebende Adresse darstellen könnten, so hält es an und ‘ruft' um Hilfe.

Etwas Hand- beziehungsweise Kopfarbeit verbleibt nämlich beim Benutzer, da es dem Programm noch an der Intelligenz mangelt, mit hundertprozentiger Sicherheit alle zu verschiebenden Adressen zu erkennen. Insbesondere wenn Adressen in Tabellen stehen (wie bei den RSX-Befehlen). kommt es - wie wohl die meisten anderen Relokator-Programme auch - in Bedrängnis. Daher fragt es bei jeder vermeintlichen Adresse, die innerhalb des angegebenen Speicherbereichs liegt, ob es sich hier wirklich um eine zu reloka-lisierende Adresse handelt oder nicht.

Als Hilfestellung werden neben der fraglichen Adresse die beiden vorausgehenden Bytes angezeigt. Das Unterprogramm ab Zeile 380 prüft außerdem, ob es sich bei dem vorausgehenden Opcode um einen Z80-Befehl handeln könnte, zu dem eine absolute Adresse gehört. Unter Umständen muß es auch testen, ob das davorliegende Byte ein &ED ist (Vier-Byte-Befehl).

Opcode suchen

Da die Z80-Befehle zum Teil einen systematischen Aufbau besitzen. muß die Routine nicht in einer Tabelle alle in Frage kommenden Opcodes durchsuchen. Vielmehr läßt sich mit Hilfe einer Bil-Maske über den AND-Befehl jeweils eine Gruppe von Befehlen gemeinsam erfassen, beispielsweise die bedingten Sprünge (JP CC), deren Opcodes die Bitstruktur 11lxxx010O haben.

Gehört der untersuchte Opcode zu einer dieser Gruppen, wird das dem Benutzer angezeigt, der nun noch prüfen muß. ob die Übereinstimmung nicht eventuell zufälliger Natur ist. Natürlieh kann hierbei ein Assembler-listing am meisten weiterhelfen.

Manche besonders trickreichen Maschinenprogramme behandeln Hi- und Low-Byte von Adressen getrennt. In diesem Fall bleibt einem nichts anderes übrig, als das Relokalisieren ‘von Hand' vorzunehmen oder aber das Maschinenprogramm zu ändern.

Alle Adressen die später vom Hex-Lader zu relokalisieren sind, werden als vierstellige Hex-Zahlen (Hi-Byte. Low-Byte) in ein DATA-Statement geschrieben. Zur besseren Übersicht erhalten sie zusätzlich ein vorweg. Das Generator-Programm schreibt die erzeugten DATA-Zeilen ab Zeilennummer 10001 in die angegebene sequentielle Datei, also auf Kassette oder Disk. Zeile 10000 folgt zum Schluß, da sie neben der Start- und Endadresse auch die Prüfsumme mitaufnimmt. Alle anderen DATA-Zeilen (eventuell bis auf die letzte) beherbergen jeweils acht Bytes beziehungsweise Adressen.

Ankoppeln

Jede so erzeugte DATA-Zeilen-Datei läßt sich dann per MERGE' an den Hexlader ankoppeln. der aus den DATA-Zeilen den Maschinencode an beliebiger Adreßlage (hoffentlich lauflahig) ablegen kann. Sollte sich aber nach einem CALL oder RSX-Aufruf ein Absturz oder ähnlich 'Merkwürdiges' zeigen, so hat man sicherlich die eine oder andere Adresse zuviel oder zuwenig markiert. Hiervon kann man sich überzeugen, wenn man dem Hex-Lader die Originaladresse des Binär-Files angibt. Hier muß der erzeugte Code auf jeden Fall lauffähig sein, wenn man sich nicht in der Start- oder Endadresse geirrt hat.

Der Hexlader gibt bei seiner Ladearbeit übrigens auch die Zwischenprüfsummen (alle acht DATA-Zeilen) aus und vergleicht zum Schluß die Gesamt-Prüfsumme mit dem abgespeicherten Wert in der ersten DATA-Zeile. Das ist zwar hauptsächlich wie eingangs beschrieben mehr für die hex-code-eintippenden Leser gedacht, doch kann es auch nicht schaden, eine zusätzliche Kontrolle über die Richtigkeit der Daten zu erhalten.

C'T 8608

★ PUBLISHER: Computer Technik (c't)
★ YEAR: 1985
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ AUTHOR: Andreas STILLER
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» CPC-Datagenerator    (Computer  Technik)    GERMAN    LISTINGDATE: 2024-03-07
DL: 19
TYPE: PDF
SiZE: 292Ko
NOTE: Supplied by archive.org ; 1 page/PDFlib v1.6

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

Lien(s):
» Applications » CPC-Fehlerroutine (CPC Magazin)
» Applications » Nullstellenprogramm mit Errarbearbeitung fuer CPC 464 (Happy Computer)
» Applications » Cherry-Paint (CPC Revue n°10 -> 15)
» Applications » Transfert d'Images
» Applications » Symbol-0/Symbol-1
» Applications » File Interrogator (CPC Computing)
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 504 millisecondes et consultée 87 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.