quinta-feira, 19 de julho de 2012

TZX Show

Na série sobre adaptação de programas de fita para disco Beta 48, foram discutida as vantagens de usar o emulador no PC. Dentre os formatos empregados para representar o conteúdo de fita cassete no PC, TZX é o preferido por ser o mais completo e versátil. Embora seja possível inserir arquivo TZX no emulador e operar como no TK90X real, a possibilidade de trabalhar nativamente no PC aumenta a produtividade. Como não existem muitos utilitários para o Linux, sistema operacional que tenho adotado, resolvi escrever o TZX Show que roda com interpretador Ruby. Esta linguagem foi empregada no TXDOS também.

Fonte: Wikipédia
Atualização: o World of Spectrum acabou de aceitar este programa em seu repositório.

Depois de um longo tempo de desenvolvimento, o TZX Show pode ser considerado pronto para o lançamento. O arquivo pode ser baixado do Google Drive ou do 4 Shared, instalado no disco do seu PC e usado com o Ruby na interface de linha de comando (shell):

ruby tzx_show.rb <arquivo_tzx>

Serão exibidas informações sobre o conteúdo do arquivo TZX. Se for um bloco salvo pelo BASIC, mostrará dados relevantes como tipo (BASIC, CODE ou DATA), comprimento, etc. Como exemplo, no TZX do Rogue Trooper, a saída produzida é:

$ tzx_show.rb 1986/RogueTrooper/Rogue\ Trooper.tzx
Block 1: header
    Saved name: "Rogue     "
    Type: BASIC program
    Auto-start line: 0
    Program size without variables: 374
    Total length: 381
Block 2: data bytes
    Length: 381
Block 3: non-standard length for a header (48511 bytes), trying to analyze as a header anyway.
    Saved name: "{00}{00}{00}{00}{00}{00}{00}{00}{00}{00}"
    Type: BASIC program
    Auto-start line: 0
    Program size without variables: 0
    Total length: 0
    Warning: checksum error! Block may be corrupted.


O bloco 1 é o cabeçalho do programa BASIC de nome "Rogue". Note que o tamanho total (381 bytes) é maior do que o tamanho sem variáveis (374 bytes); isto ocorre porque junto é salva uma variável (ah). O bloco 2 é o programa propriamente dito, que é carregado na RAM.

As mensagens de erro não significa que há algum problema no arquivo, pode ser que tenha sido produzida devido aos esquemas de proteção das fitas. No exemplo acima, o bloco 3 acusa erro de checksum por não ser um bloco de cabeçalho, apesar do byte leader ser 0. Na verdade este bloco é o código de máquina do jogo, em formato headerless.

2 comentários:

  1. Meus parabéns, venho acompanhado sua série de artigos sobre o tema Beta 48, e gostaria de dizer que é uma trabalho fenomenal o que esta a fazer pela divulgação do TK90X.

    ResponderExcluir
    Respostas
    1. Valeu, Ciro! Tem várias pessoas da comunidade que gostam do TK90X e mantém esse computador vivo ainda hoje.

      Excluir

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.