Adaptation de programmes pour ZX Spectrum à TR-DOS par des moyens modernes. 2e partie

Dans la première partie de l'article, nous avons trié le chargeur de démarrage de la version d'origine et découvert où le code du jeu est chargé et comment il démarre. Vous devez maintenant transférer les fichiers sur le disque.


Floppy 5.25 "


Cela se fait généralement en copiant simplement les fichiers, mais il y a un problème. Le fait est que le fichier d'origine contient l'image et le code du jeu dans une pièce entière et, par conséquent, écrase la zone des variables de base et du système, qui sont situées immédiatement derrière la zone d'écran. Un tel fichier peut être téléchargé à partir d'une bande, mais ne peut pas être téléchargé à partir d'une disquette. TR-DOS réserve une certaine zone de mémoire pour vos besoins, et si vous y chargez des données, tout se cassera pendant le processus de téléchargement.


Heureusement, nous avons suffisamment de mémoire non occupée par le jeu. Par conséquent, le jeu peut être téléchargé à un autre endroit, et à la fin du téléchargement, déplacez-vous là où vous le souhaitez et exécutez. Dans ce cas, je voudrais montrer l'image avant la fin du téléchargement - pour cela, elle est également amorçable. Pour ce faire, nous allons couper un fichier monolithique en deux parties de données d'écran et de données de jeu:


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

Le fichier de données du jeu traduira immédiatement le format hobeta. Plus tard, nous en aurons besoin pour l'enregistrement dans l'image finale. Pour convertir les formats, nous utiliserons zxspectrum-utils et trd2hob :


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

Écran de chargement


Quant à l'écran de démarrage, dépensez 6,75 ko pour une image aussi simple - gaspillage. Il peut être correctement compressé avec un compresseur d'écran, par exemple, Laser Compact 5.2 . Pour ce faire, vous devez d'abord écrire le fichier image sur une image de disquette temporaire:


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

Ensuite, exécutez Laser Compact dans l'émulateur et enregistrez l'image compressée sur la même disquette (écran Pack → Enregistrer avec le dépackeur). Lors de l'enregistrement, spécifiez le screenz.C fichier screenz.C . Ensuite, vous devez copier l'image compressée de l'image de la disquette sur le disque. Malheureusement, je n'ai pu trouver la source de trd2hob nulle part, je dois donc exécuter le binaire dos sous DosBox:


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

En conséquence, nous obtenons un fichier hobeta de la forme screenz.$ avec une image compressée.


Outre les utilitaires natifs Spectrum pour la compression d'écran, il existe des utilitaires pour PC, par exemple zx7b et zxsc . Bien qu'il soit plus pratique d'automatiser le travail avec eux, les deux présentent des inconvénients avant Laser Compact:


  1. Les deux perdent en qualité de compression.
  2. Lors du déballage de l'image, certains artefacts sont visibles lorsque, lorsque le Laser Compact remplit la zone des attributs de l'écran presque instantanément.
  3. zx7b ne prend pas en charge la création d'archives auto-extractibles - vous devez en outre compiler le décompresseur.

Enfin, nous découvrons la taille du fichier compressé. Nous en aurons besoin plus tard pour écrire le chargeur de démarrage.


 $ 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 

Comme vous pouvez le voir, le fichier a été compressé plus de trois fois et occupe 8 secteurs sur le disque.


Dans la partie suivante, nous irons directement au bootloader.


Liens connexes:


  1. «Adaptation des programmes au système TR-DOS» par Nikolai Rodionov.

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


All Articles