Anpassung von Programmen für ZX Spectrum an TR-DOS mit modernen Mitteln. Teil 2

Im ersten Teil des Artikels haben wir den Bootloader der Originalversion sortiert und herausgefunden, wo der Spielcode geladen ist und wie er startet. Jetzt müssen Sie die Dateien auf die Festplatte übertragen.


Diskette 5,25 "


Dies geschieht normalerweise durch einfaches Kopieren der Dateien, es gibt jedoch ein Problem. Tatsache ist, dass die Originaldatei das Bild und den Spielcode in einem ganzen Stück enthält und daher den Bereich der Basis- und Systemvariablen überschreibt, die sich unmittelbar hinter dem Bildschirmbereich befinden. Eine solche Datei kann vom Band heruntergeladen werden, aber nicht von einer Diskette. TR-DOS reserviert einen bestimmten Speicherbereich für Ihre Anforderungen. Wenn Sie dort Daten laden, wird während des Downloadvorgangs alles unterbrochen.


Glücklicherweise haben wir genug Speicher, der nicht vom Spiel belegt ist. Daher kann das Spiel an einen anderen Ort heruntergeladen werden und am Ende des Downloads an den gewünschten Ort verschoben und ausgeführt werden. In diesem Fall möchte ich das Bild vor dem Ende des Downloads zeigen - dafür ist es auch bootfähig. Zu diesem Zweck schneiden wir eine monolithische Datei in zwei Bereiche: Bildschirmbereichsdaten und Spieldaten:


$ head -c 6912 headless.bin > screen.bin $ tail -c +6913 headless.bin > data.bin 

Die Spieldatendatei übersetzt sofort das Hobeta-Format. Später werden wir es für die Aufnahme im endgültigen Bild benötigen. Um die Formate zu konvertieren, verwenden wir zxspectrum-utils und trd2hob :


 $ binto0 data.bin 3 $ 0tohob data.000 #   data.$C 

Bildschirm laden


Geben Sie für den Startbildschirm 6,75 kB für eine so einfache Bildverschwendung aus. Es kann mit einem Bildschirmkompressor, z. B. Laser Compact 5.2 , ordnungsgemäß komprimiert werden. Dazu müssen Sie zuerst die Image-Datei auf ein temporäres Disketten-Image schreiben:


 $ binto0 screen.bin 3 $ 0tohob screen.000 $ createtrd tmp.trd $ hobeta2trd screen.\$C tmp.trd 

Führen Sie anschließend Laser Compact im Emulator aus und speichern Sie das komprimierte Bild auf derselben Diskette (Pack-Bildschirm → Mit Depacker speichern). screenz.C beim screenz.C Dateinamen screenz.C . Als Nächstes müssen Sie das komprimierte Image vom Disketten-Image zurück auf die Diskette kopieren. Leider konnte ich die Quelle für trd2hob nirgendwo finden, daher muss ich die dos-Binärdatei unter DosBox ausführen:


 $ dosbox -c "mount C $PWD" -c "C:" -c "trd2hob.exe screen.trd" -c exit 

Als Ergebnis erhalten wir eine Hobeta-Datei der Form screenz.$ mit einem komprimierten Bild.


Neben nativen Spectrum-Dienstprogrammen für die Bildschirmkomprimierung gibt es Dienstprogramme für PCs, z. B. zx7b und zxsc . Obwohl es bequemer ist, die Arbeit mit ihnen zu automatisieren, haben beide vor Laser Compact Nachteile:


  1. Beide verlieren an Kompressionsqualität.
  2. Beim Auspacken des Bildes sind bestimmte Artefakte sichtbar, wenn der Laser Compact den Bereich der Bildschirmattribute fast sofort ausfüllt.
  3. zx7b unterstützt die Erstellung selbstextrahierender Archive nicht - Sie müssen zusätzlich den Dekomprimierer kompilieren.

Schließlich ermitteln wir die Größe der komprimierten Datei. Wir werden es später brauchen, um den Bootloader zu schreiben.


 $ lstrd tmp.trd 80 Tracks, Double Side, capacity 640kB Number of files/deleted: 2/0 Free sectors/bytes: 2509/642304 First free sector/track: 3/3 FILENAME TYPE SECTORS ADDRESS LENGTH TRACK SECTOR -------------------------------------------------------------- screen <C> CODE (BYTES) 27 16384 6912 1 0 screenz <C> CODE (BYTES) 8 40000 1812 2 11 

Wie Sie sehen können, wurde die Datei mehr als dreifach komprimiert und belegt 8 Sektoren auf der Festplatte.


Im nächsten Teil gehen wir direkt zum Bootloader.


Verwandte Links:


  1. "Anpassung von Programmen an das TR-DOS-System" von Nikolai Rodionov.

Source: https://habr.com/ru/post/de452542/


All Articles