Adaptação de programas do ZX Spectrum ao TR-DOS por meios modernos. Parte 2

Na primeira parte do artigo, classificamos o gerenciador de inicialização da versão original e descobrimos onde o código do jogo é carregado e como ele é iniciado. Agora você precisa transferir os arquivos para o disco.


Disquete 5,25 "


Isso geralmente é feito simplesmente copiando os arquivos, mas há um problema. O fato é que o arquivo original contém a imagem e o código do jogo em uma peça inteira e, portanto, substitui a área de variáveis ​​básicas e do sistema, localizadas imediatamente atrás da área da tela. Esse arquivo pode ser baixado da fita, mas não pode ser baixado de um disquete. O TR-DOS reserva uma determinada área de memória para suas necessidades e, se você carregar dados, tudo será interrompido durante o processo de download.


Felizmente, temos memória suficiente não ocupada pelo jogo. Portanto, o jogo pode ser baixado para outro local e, no final do download, mova para onde você deseja e executa. Nesse caso, eu gostaria de mostrar a imagem antes do final do download - por isso também é inicializável. Para fazer isso, cortaremos um arquivo monolítico em dados de área de duas telas e dados de jogos:


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

O arquivo de dados do jogo traduzirá imediatamente o formato hobeta. Mais tarde, precisaremos dele para gravar na imagem final. Para converter os formatos, usaremos zxspectrum-utils e trd2hob :


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

Tela de carregamento


Quanto à tela de inicialização, gaste 6,75 kB em uma imagem tão simples - desperdício. Ele pode ser compactado adequadamente com um compressor de tela, por exemplo, Laser Compact 5.2 . Para fazer isso, primeiro você precisa gravar o arquivo de imagem em uma imagem de disquete temporária:


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

Depois disso, execute o Laser Compact no emulador e salve a imagem compactada no mesmo disquete (tela Pack → Salvar com despacker). Ao salvar, especifique o screenz.C arquivo screenz.C . Em seguida, você precisa copiar a imagem compactada da imagem do disquete de volta para o disco. Infelizmente, não consegui encontrar a fonte para o trd2hob em trd2hob lugar, então tenho que executar o binário dos em De DosBox:


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

Como resultado, obtemos um arquivo screenz.$ do formulário screenz.$ com uma imagem compactada.


Além dos utilitários Spectrum nativos para compactação de tela, existem utilitários para PCs, por exemplo, zx7b e zxsc . Embora seja mais conveniente automatizar o trabalho com eles, ambos têm desvantagens antes do Laser Compact:


  1. Ambos perdem na qualidade da compactação.
  2. Ao desembalar a imagem, certos artefatos ficam visíveis quando, como o Laser Compact preenche a área dos atributos da tela quase que instantaneamente.
  3. zx7b não suporta a criação de arquivos de extração automática - você precisa compilar adicionalmente o descompactador.

Finalmente, descobrimos o tamanho do arquivo compactado. Precisamos disso mais tarde para escrever o gerenciador de inicialização.


 $ 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 você pode ver, o arquivo foi compactado mais de três vezes e ocupa 8 setores no disco.


Na próxima parte, iremos diretamente para o gerenciador de inicialização.


Links relacionados:


  1. “Adaptação de programas ao sistema TR-DOS” por Nikolai Rodionov.

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


All Articles