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.

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

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:
- Ambos perdem na qualidade da compactação.
- Ao desembalar a imagem, certos artefatos ficam visíveis quando, como o Laser Compact preenche a área dos atributos da tela quase que instantaneamente.
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:
- “Adaptação de programas ao sistema TR-DOS” por Nikolai Rodionov.