sexta-feira, 11 de setembro de 2020

Você realmente conhece o formato de arquivos .TRD e suas possibilidades?

Eu fui inspirado a escrever este artigo quando estava estudando formas de trabalhar com arquivos externos em meus programas em Basic, achando no formato .TRD, uma ótima opção para carregar arquivos auxiliares (como telas, dados, etc.).
É óbvio que um programador experiente já deve pensar nisso de uma forma bem mais aprimorada, porém este não é o objetivo deste post. Quero apenas mostrar que este formato pode ser mais útil do que simplesmente uma forma diferente de carregar jogos ou aplicativos.

Primeiro, vamos entender o formato.


O formato TRD foi criado para armazenar imagens de disco Beta Disk (TR-DOS) para fins exclusivos de emulação. Ou seja, foi uma forma de reproduzir o conteúdo de um disquete inteiro (sua imagem) em apenas um arquivo.

Uma variedade de clones do Spectrum Russo (incluindo o Pentágono e o Scorpion ) usam o sistema operacional de disco TR-DOS com uma Interface de Disco Beta embutida, assim como as versões inglesas do ZX Spectrum (em uso conjunto com a interface Beta Disk) e os nossos clones nacionais TK90X e TK95 (com nossas versões da interface Beta da Arcade, CBI e Synchron). Nos países do antigo bloco soviético este formato predomina até hoje como o preferido (afinal, ainda são grandes desenvolvedores de programas) e no Brasil, já teve teve seu período áureo no início da década de 90 até meados de 2010, quando muitos brasileiros optaram pela comodidade de uma interface tipo divIDE. Entretanto, isso não atendia aos programadores brasileiros de plantão, pois esta interface no sistema original FatWare, não permitia gravação, mas apenas leitura de arquivos. Somente com a evolução das versões do sistema esxDOS (substituindo o FatWare na divIDE), que se passou a emular o TR-DOS da Beta (para a alegria dos programadores), tornando-se possível a gravação e manipulação direta de arquivos.

O formato TRD é membro do Easy Disk Image Formats. Este tipo de imagens de disco contém apenas os dados do setor despejado. Não há informações de cabeçalho, portanto a geometria do disco deve ser assumida, ou determinada a partir dos dados do sistema de arquivos colocados na imagem do disco.

Estas imagens não podem armazenar dados fora do padrão, como:

  • setores excluídos
  • faixas não formatadas de maneira uniforme
  • dados fracos do setor (algumas proteções de cópia têm o que é descrito como dados “fracos”, “aleatórios” ou “flutuantes”. Cada vez que o setor “fraco” é lido, um ou mais bytes mudam. Seu valor  pode ser aleatório entre leituras consecutivas do mesmo setor. Dados fracos só podem ser gravados usando hardware modificado, portanto, você não pode copiar facilmente esses discos. Apenas os formatos de imagem de disco Extended DSK e UDI 1.1 gravam este tipo de dados. Este sistema de proteção era muito utilizado no discos do ZX Spectrum +3.)

Estrutura do arquivo TRD

As imagens TRD podem armazenar imagens de disco de 40 ou 80 trilhas de uma ou dupla face.

Cabeçalho do Arquivo

Não há nenhum cabeçalho ou assinatura de arquivo (bytes mágicos).

Layout do setor

Setores dispostos do primeiro ao último em uma trilha:

  • Setor 1
  • Setor 2

...

  • Último setor

As trilhas seguem o esquema “alt”:

  • Lado: 0 Faixa: 0
  • Lado: 1 Faixa: 0
  • Lado: 0 Faixa: 1

...

  • Lado: 0 Faixa: 79
  • Lado: 1 faixa: 79

Comprimento do arquivo

TR-DOS usa 256 BPS e 16 SPT para discos, então um

  • O comprimento da imagem dos lados da trilha 1 é 163840 bytes (1 × 40 × 16 × 256)
  • O comprimento da imagem de 40 faixas 2 lados é 327680 bytes
  • O comprimento da imagem do lado 80 da trilha 1 é 327680 bytes
  • O comprimento da imagem de 80 faixas 2 lados é 655360 bytes

Imagens parciais

Os arquivos TRD podem terminar antes do comprimento total calculado, se os setores até o final não contiverem dados.

Por exemplo, no jogo Prince of Persia - PRINCE_P.TRD (imagem de disco de 2 lados com 80 trilhas) tem apenas 255488 bytes de comprimento, porque o último setor que contém dados é h0t31s6 (2 × 31 × 16 + 6) × 256.

O formato alternativo/compactado .SCL

O formato SCL é um formato de armazenamento alternativo para imagens do sistema de arquivos TR-DOSEm vez de uma imagem TRD, o SCL armazena apenas a estrutura do diretório e os dados dos arquivos. Eu diria que é uma forma compactada dos arquivos TRD.



Bom, agora que entendemos como funciona este formato, retornamos a motivação que me levou a escrever este artigo.

Como a maioria dos arquivos que encontramos no formato TRD utilizam o espaço máximo do disco (640k), podemos concluir que isto é o que temos para trabalhar (pelo menos em um único disco). Em termos de programação em Basic Sinclair é muita coisa! 

Se fossemos armazenar num disco apenas um banco de imagens (telas .SCR completas, por exemplo), caberiam aproximadamente 27 telas. Se fossem apenas 1 bloco de tela (lembra que o Spectrum trata a carga de imagens em 3 blocos distintos?), seriam aproximadamente 81 telas (com 1/3 do tamanho exibido).

Ok. Não preciso dizer que a carga em disco real já é bem rápida (apesar das limitações do Basic), portanto num arquivo .TRD será ainda mais veloz. Então imagine você chamando um arquivo no "disco" (.TRD) direto do teu programa em Basic... Não é uma opção interessante? Consegue ver como o padrão TRD é útil para um programador e para o desenvolvimento de programas mais complexos?

Caso tenha se interessado em experimentar programar no sistema TR-DOS, basta baixar os manuais disponíveis neste blog e aprender a utilizar os novos comandos. Não preciso dizer que a maioria dos bons emuladores já são compatíveis com este padrão de arquivos, facilitando em muito a nossa vida.


Em outro momento irei publicar um artigo com um exemplo de como buscar estes arquivos nos discos virtuais utilizando o Basic e, posteriormente, em código de máquina (que já é outro nível).
Até lá!

Erro de leitura na trilha 0, setor 9.

Ao readquirir minha interface Beta (praticamente "nova" e sem uso), deparei-me com a mensagem "erro de leitura na trilha 0, s...