★ APPLICATIONS ★ DEPLOMBAGE ★ SCHWERTRANSPORT (HAPPY COMPUTER) ★![]() |
| Schwertransport (Happy Computer) | Applications Deplombage |
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 Lade befehl 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:CL0SE0UTZeile 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«. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Adresse | Name | Funktion | benötigte Register |
| BC6B hex | CAS-NOISY | Unterdrückt Meldungen des Kassetten-Managers (»LOADING NAME BLOCK XX«) oder läßt sie wieder zu | A Wenn ungleich Null, erfolgen keine Meldungen |
| BC77 hex | CAS-IN-OPEN | öffnet eine Datei zum Lesen | B Länge des Dateinamens HL Adresse des Namens DE Adresse des 2-KByte-Puffers |
| BC83 hex | CAS-IN-DIRECT | Lessen aus der geöffneten Datei | HL Ladeadresse |
| BC7A hex | CAS-IN-CLOSE | Schließen der Eingabe-Datei | Keine Übergabe |
| BC8C hex | CAS-OUT-OPEN | öffnet eine Datei zum Schreiben | B Länge des Dateinamens HL Adresse des Namens DE Adresse des 2-KByte-Puffers |
| BC98 hex | CAS-OUT-DIRECT | Schreiben in die geöffnete Datei | HL Anfangsadresse DE Programmlänge in Byte BC Einsprungadresse (Start) A Dateityp, bei Btnär-Dateien eine 2 |
| BC8F hex | CAS-OUT-CLOSE | Schließen der Ausgabe-Datei | Keine Übergabe |
| Ladden und Speichern in einem Block | |||
| BCA1 hex | CAS-READ | Liest eine headerlose Datei (wirkt nur bei Kassette) | HL ladeadresse DE Dateiiänge in Byte A Satzkennzeichen |
| BC9E hex | CAS-WRITE | Schreibt 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:
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
| ![]() |
|