Adaptación de programas para ZX Spectrum a TR-DOS por medios modernos. Parte 2

En la primera parte del artículo, clasificamos el gestor de arranque de la versión original y descubrimos dónde se carga el código del juego y cómo comienza. Ahora necesita transferir los archivos al disco.


Floppy 5.25 "


Esto generalmente se hace simplemente copiando los archivos, pero hay un problema. El hecho es que el archivo original contiene la imagen y el código del juego en una pieza completa y, por lo tanto, sobrescribe el área de variables básicas y del sistema, que se encuentran inmediatamente detrás del área de la pantalla. Dicho archivo se puede descargar de la cinta, pero no se puede descargar desde un disquete. TR-DOS reserva un área de memoria determinada para sus necesidades, y si carga datos allí, todo se romperá durante el proceso de descarga.


Afortunadamente, tenemos suficiente memoria no ocupada por el juego. Por lo tanto, el juego se puede descargar a otro lugar y, al final de la descarga, moverse a donde quieras y ejecutar. En este caso, me gustaría mostrar la imagen antes del final de la descarga, para eso también es de arranque. Para hacer esto, cortaremos un archivo monolítico en dos datos de área de pantalla y datos de juego:


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

El archivo de datos del juego traducirá inmediatamente el formato hobeta. Más tarde lo necesitaremos para grabar en la imagen final. Para convertir los formatos usaremos zxspectrum-utils y trd2hob :


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

Pantalla de carga


En cuanto a la pantalla de arranque, gaste 6.75 kB en una imagen tan simple: desperdicio. Se puede comprimir correctamente con un compresor de pantalla, por ejemplo, Laser Compact 5.2 . Para hacer esto, primero debe escribir el archivo de imagen en una imagen de disquete temporal:


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

Después de eso, ejecute Laser Compact en el emulador y guarde la imagen comprimida en el mismo disquete (Pantalla del paquete → Guardar con desempacador). Al guardar, especifique el screenz.C archivo screenz.C . A continuación, debe copiar la imagen comprimida de la imagen del disquete nuevamente en el disco. Desafortunadamente, no pude encontrar la fuente de trd2hob ningún lado, así que tengo que ejecutar el binario dos desde DosBox:


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

Como resultado, obtenemos un archivo screenz.$ del formulario screenz.$ con una imagen comprimida.


Además de las utilidades nativas de Spectrum para la compresión de pantalla, existen utilidades para PC, por ejemplo, zx7b y zxsc . Aunque es más conveniente automatizar el trabajo con ellos, ambos tienen desventajas antes de Laser Compact:


  1. Ambos pierden en calidad de compresión.
  2. Al desempacar la imagen, ciertos artefactos son visibles cuando, cuando el Laser Compact llena el área de los atributos de la pantalla casi instantáneamente.
  3. zx7b no admite la creación de archivos autoextraíbles; además, debe compilar el descompresor.

Finalmente, descubrimos el tamaño del archivo comprimido. Lo necesitaremos más tarde para escribir el gestor de arranque.


 $ 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 

Como puede ver, el archivo se comprimió más de tres veces y ocupa 8 sectores en el disco.


En la siguiente parte, iremos directamente al gestor de arranque.


Enlaces relacionados:


  1. "Adaptación de programas al sistema TR-DOS" por Nikolai Rodionov.

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


All Articles