APPLICATIONSDEPLOMBAGE ★ SCHWERTRANSPORT (HAPPY COMPUTER) ★

Schwertransport (Happy Computer)Applications Deplombage
★ 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 ★ 

Besitzer eines Schneider CPC 464, die ihren »Maschinenpark« um ein Diskettenlaufwerk erweitert haben, stehen sehr bald vor einem Problem: Wie läßt sich die vorhandene Software von Kassette auf Diskette übertragen?

Noch heute (und voraussichtlich auch in Zukunft) ist die meiste Spielsoftware ausschließlich auf Kassette erhältlich.

Programme, die Kassettensoftware auf Diskette bringen, wie zum Beispiel »Transmat«, besitzt nicht jeder. Dazu kommt, daß sie nur einen Teil der Software transferieren und das oft auch nur mit erheblichen Eingriffen des Benutzers in die kopierten Programme. Das heißt natürlich nicht, daß hier eine Anleitung für jede erdenkliche Software gegeben werden kann; dazu gibt es zu unterschiedliche Konzepte. Viele Programme haben sehr spezielle Laderoutinen, wie zum Beispiel das Flashloading (bei »Sorcery« und anderen Titeln), oder einfach ein anderes Ladeformat (zum Beispiel »Spy vs Spy«), Auf Grund der Komplexität können wir an dieser Stelle darauf nicht eingehen.

Zunächst wollen wir einen Blick auf Software werfen, die ganz »ordinär« blockweise im Standardformat (»SAVE "name",p«) gespeichert ist. Für den Transfer benötigen Sie einige Informationen über das Programm. So prüfen Sie erst einmal mit dem CAT-Befehl, in wieviele Teile sich das Programm gliedert (Laderoutine, Titelbild, Hauptprogramm, etc).

Nehmen wir beispielsweise an, das Programm besteht aus zwei Teilen: zum einen aus dem, natürlich geschützten, Basic-Programm und einem anschließenden Maschinensprache-Teil. Den »Schutz« des Basic-Programms müssen Sie aus zwei Gründen entfernen: Erstens läßt es sich nicht mit einfachem »LOAD« und anschließendem »SAVE« übertragen. Dazu kommmt, daß Sie meist kleine Eingriffe vornehmen müssen, deren Zweck Sie später erkennen werden. Den Listschutz entfernen Sie mit Hilfe eines kleinen Programms. Für den CPC 464 benötigen Sie Listing 1, für die CPC 664/6128 Listing 2. Der gelistete Basic-Teil sieht wie folgt aus: Auf den Aufbau des Titelbildes und die Farbdefinition folgt der Ladebefehl und schließlich der Aufruf des Maschinen-code-Programms mit »CALL adresse«. Von besonderem Interesse ist für uns die »Laderoutine«. Sie besteht in aller Regel nur aus der Anweisung »LOAD "!'« und lädt das auf der Kassette folgende Programm.

Wie Sie vielleicht wissen, müssen Sie das Ausrufezeichen durch einen Programmnamen ersetzen, der die Bedingungen des Disketten-Betriebssystems erfüllt (acht Zeichen, eventuell mit einer Erweiterung von drei Zeichen getrennt durch einen Punkt). So ist der Basic-Lader bereits aufbereitet und Sie speichern ihn auf Diskette.

Die Übertragung des Maschinencodes kostet ungleich mehr Mühe: Sie müssen seine Ladeadresse und Länge herausfinden. Lädt und startet der Basic-Teil das Maschinenprogramm nicht über »LOAD"!" :CALL adresse«. sondern mit »RUN"!"«, benötigen Sie noch zusätzlich die Startadresse. Hilfe finden Sie in Listing 3. Diese Hilfsroutine liest die entsprechenden Informationen aus dem sogenannten Header des jeweiligen Speicherblocks.

In unserem Beispiel ist die Ladeadresse 40000 und der Maschinencode 1500 Byte lang. Geben Sie nun folgende Basic-Zeilen ein:

10 OPENOUT "DUMMY":MEMORY 40000-1:CL0SE0UT
20 |TAPE.IN : |DISC.OUT
30 LOAD ""
40 SAVE "name",b,40000,1500

Zeile 10 richtet mit dem OPENOUT-Befehl einen Pufferbereich von 4096 Byte ein. Das ist wichtig, denn wenn der Maschinencode ab einer Adresse unterhalb 5000 beginnt, erscheint bei fehlendem Puffer und »LOAD« nur noch die Fehlermeldung »MEMORY FULL«. Der MEMORY-Befehl setzt den HIMEM-Zeiger herab und reserviert den nachfolgenden Speicherbereich für den Maschinencode. Zeile 20 kanalisiert den Datentransfer in die gewünschte Richtung. Zeile 30 lädt das nächste verfügbare Programm von der Kassette. Die Auswahl der richtigen Datei treffen Sie, indem Sie das Band vorher an die entsprechende Stelle spulen. Zeile 40 schließlich speichert das Programm auf Diskette. Mit diesem einfachen Rezept lassen sich viele der gängigen Programme auf Diskette »schaufeln«.

Schwieriger wird es, wenn der Maschinencode eines Programms einen Teil des RAM-Speichers belegt, der vom Disketten-Betriebssystem (DOS) reserviert ist (bei AMSDOS sind das 1280 Byte ab Adresse 42620). Wenn Sie ihn normal zu laden versuchen, bricht der CPC beim Überschreiben dieses reservierten Bereichs ab und meldet »BAD COMMAND«. Also müssen Sie den Maschinencode in einen niedrigeren Speicherbereich laden, um ihn dann an die ursprünglich vorgesehene Adresse zu verschieben. Den Maschinencode-Profis unter Ihnen fällt hierzu natürlich sofort das Stichwort »LDDR« ein. Der Z80-Prozessor stellt für so eine »Schiebung« nämlich zwei mächtige Maschinenbefehle zur Verfügung: »LDIR« und »LDDR«. Aus Basic sind diese Befehle jedoch nicht direkt greifbar. Deshalb müssen Sie sich mit einer Basic-Routine (Listing 4) helfen, die den notwendigen Maschinencode in den Speicher POKEt. Die erzeugte Maschinenroutine ist im Speicher frei verschiebbar. Solange noch ein paar Byte für Basic freibleiben, können Sie folglich das Maschinenprogramm so tief herunterladen, wie Sie wollen (oder müssen).

Unser zweiter fiktiver Transfer-Kandidat hat eine Länge von 40 KByte und belegt normalerweise den Speicherbereich von Adresse 3000 bis 43959. Um das DOS-RAM freizuhalten, genügt es, die neue Ladeadresse auf etwa 1500 zu verlegen. Die 28 Byte der Verschieberoutine legen wir darunter, deshalb die Befehlsfolge »OPEN-OUT "dummy"' : MEMORY 1500-28 : CLOSEOUT«. Laden Sie nun zuerst von Diskette mit »LOAD "MOVE.BIN", 1500-28«. Dann schalten Sie auf Kassette um »ITAPE.IN« (oder bei VDOS mit »ICAS.IN«) und laden mit »LOAD "name',1500« das Hauptprogramm. Der Aufruf »CALL 1500-28,1500, 40960,3000« verschiebt dann den Maschinencode auf die richtige Adresse Die Argumente zum CALL-Befehl bedeuten in der Reihenfolge von links nach rechts: Einsprung der Verschieberoutine, Basisadresse, Länge und neue Basis des zu verschiebenden Programms.

Eine weitere Steigerung des Schwierigkeitsgrades bedeutet es, wenn das Programm, das Sie kopieren wollen, den Speicherbereich von unten an belegt, in dem normalerweise die Basic-Programme residieren. So ist beispielsweise das Spiel »3D-Grand-Prix« nur ab Adresse 40 hex lauffähig. In solchen Fällen müssen Sie sich ein Transferprogramm in purem Maschinencode schreiben. Um derartige Probleme zu lösen, ist allerdings Erfahrung in der Assemblerprogrammierung und Kenntnis der Speicherbelegung des CPC nötig. Als sehr gutes Handwerkszeug haben sich zwei Bücher bewährt, die keinem »Freak« in der Sammlung fehlen sollten: das »CPC-Firmware-Handbuch« von Schneider und von Markt&Technik »ROM-Listing-CPC 464/664/6128«.

AdresseNameFunktionbenötigte Register
BC6B hexCAS-NOISYUnterdrückt Meldungen des Kassetten-Managers
(»LOADING NAME BLOCK XX«)
oder läßt sie wieder zu
A Wenn ungleich Null,
erfolgen keine Meldungen
BC77 hexCAS-IN-OPENöffnet eine Datei zum LesenB Länge des Dateinamens
HL Adresse des Namens
DE Adresse des 2-KByte-Puffers
BC83 hexCAS-IN-DIRECTLessen aus der geöffneten DateiHL Ladeadresse
BC7A hexCAS-IN-CLOSESchließen der Eingabe-DateiKeine Übergabe
BC8C hexCAS-OUT-OPENöffnet eine Datei zum SchreibenB Länge des Dateinamens
HL Adresse des Namens
DE Adresse des 2-KByte-Puffers
BC98 hexCAS-OUT-DIRECTSchreiben in die geöffnete DateiHL Anfangsadresse
DE Programmlänge in Byte
BC Einsprungadresse (Start)
A Dateityp, bei Btnär-Dateien eine 2
BC8F hexCAS-OUT-CLOSESchließen der Ausgabe-DateiKeine Übergabe
Ladden und Speichern in einem Block
BCA1 hexCAS-READLiest eine headerlose Datei
(wirkt nur bei Kassette)
HL ladeadresse
DE Dateiiänge in Byte
A Satzkennzeichen
BC9E hexCAS-WRITESchreibt eine headerlose Datei
(wirkt nur bei Kassette)
HL Anfangsadresse
DE Dateilänge in Byte
A Satzkennzeichen

Aus dem ersten erfahren Sie alles Wichtige über die Nutzung von Betriebssystem-Routinen aus Maschinensprache und zum Teil auch aus dem Basic). Das zweite Buch geht noch ein paar Schritte sefer und zeigt Ihnen auch die trick-wachsten Kniffe. Was macht man zum Beispiel, wenn ein Programm den gesamten Speicher vom Basic-Start bis hin zum DOS-RAM belegt? Wohin dann mit der Transfer-Routine? Gut, wenn -tan in so einem Fall mal eben nachschlagen kann, um festzustellen, daß öe kleine Routine auch im Puffer des Sasic-Editors bei den Adressen ACA4 Dts ADA5 hex (CPC 664 und 6128: -CAS bis AD8B hex) oder im Basic-Stack zwischen AE8B hex und B08A -ex (CPC 664 und 6128: AE6F bis 306E hex) Platz findet.

RUN an den Feind

Die nächste Problemgruppe sind Programme, deren Laderoutine bereitsaus Maschinencode besteht. Natürlich sind auch hier gegebenenfalls die Dateinamen für das Nachladen der restlichen Programmteile zu ändern. Mit einem Monitor-Programm ist das auch für weniger Geübte kein unüberwindliches Problem. Weit weniger erfreulich ist eine Eigenheit des Betriebssystems, die sich spätestens dann bemerkbar macht, wenn Sie das Programm mit »RUN "name"« zu laden versuchen: den Lader mit einem Maschinensprache-Monitor disassemblieren. Dann machen Sie sich auf die Suche nach dem genannten Aufruf. Ihm voraus geht die Zuweisung der Register mit den drei Informationen: Ladeadresse (HL), Länge (DE) und Satzkennzeichen (im Akku). Das Satzkennzeichen dient der Unterscheidung verschiedener Programme. Im Assembler-Quellcode sieht das folgendermaßen aus:

LD HL,xxxx ;Anfangsadresse
LD DE,xxxx ;Länge
LD A,xx ;Satzkennzeichen
CALL BCA1

Benutzen Sie zum Überspielen das Programm aus Listing 5. In Zeile 60 ist die Maschinencode-Routine im String a$ abgelegt. Die Zeilen 70 bis 90 fragen dann nacheinander Anfangsadresse, Länge und Satzkennzeichen ab. Sollte das übertragene Programm zu lang sein (Stichwort: DOS-ROM), lädt unsere Routine es in einen anderen Speicherbereich (denken Sie daran, es später wieder zu »liften«), Sind Bildschirm-Inhalte (beispielsweise Titelbilder) zu übertragen, müssen Sie die Abfragen in den Zeilen 130 bis 150 durch feste Angaben ersetzen, da sie sonst das Bild zerstören. Listing 6 speichert als Beispiel einen Bildschirm in einem Block, den Listing 7 wieder lädt. Durch Änderung der Werte für HL, DE und A sind sie universell für jede Binär-Datei verwendbar. Vergessen Sie aber nicht, daß diese Werte, wie beim Z80 üblich, in der Reihenfolge »niederwertiges Byte, höherwertiges Byte« zu übergeben sind.

Sie kennen nun die wichtigsten Methoden, um Kassettensoftware auf Disketten zu überspielen. Natürlich gilt auch hierfür, daß Sie Kopien nur für den Eigenbedarf anfertigen dürfen.

Matthias Rosin/Michael Straßer/ja , HC

★ PUBLISHER: Happy Computer
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: HAPPY COMPUTER-SCHNEIDER SONDERHEFT
★ AUTHOR: Michael Straßer / MS-Software
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Schwertransport    (Happy  Computer-Sonderheft)    GERMANDATE: 2021-03-10
DL: 189
TYPE: ZIP
SiZE: 5Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Anti-REM (CPC Magazin)
» Applications » Fast Basic double-height
» Applications » Phoenix Soft - Basic Compiler v1 (CPC Amstrad International)
» Applications » Find (Compute Mit)
» Applications » Strings als Basic-Kommandos
» Applications » Arnor C
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 410 millisecondes et consultée 791 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.