ZX7
Eletrônica

ZX7


Eu tenho usado o Lerm Code Compressor 1 para comprimir os blocos de bytes quando necessário, nas minhas adaptações de programas para Beta 48/128. O algoritmo usado é bem rudimentar, pois só comprime sequências de bytes de valores repetidos. Eu já sabia que este programa estava longe de ter um bom fator de compressão, mas estava usando assim mesmo por ser suficiente para meus propósitos. 

Fonte: Wikipédia

Recentemente Einar Saukas, programador brasileiro bastante ativo no mundo do TK90X, desenvolveu o ZX7 que seria o melhor compressor de dados baseado no algoritmo LZ77. Como eu já conhecia o Einar e os excelentes trabalhos que ele tem feito, resolvi experimentar a sua mais nova produção. 

O ZX7 consiste no programa que é executado no próprio PC, cuja função é comprimir os dados contidos num arquivo, e numa rotina em assembly Z80 para descomprimir dados no TK90X. Os arquivos do ZX7 encontram-se no World of Spectrum.

No fórum de discussão do World of Spectrum encontra-se um longo thread sobre este compressor (em inglês). 

Compressão de dados

Apesar de existir um executável do compressor para o Windows, pelo fato de eu usar somente Linux, tive que baixar o código fonte (arquivo ZX7_SourceCode.zip) e fazer a compilação.

Ao descomprimir o pacote ZIP, os subdiretórios asm e compress são gravados no disco do PC. Para gerar o executável,  basta digitar no shell

$ cd compress
$ gcc -o zx7 zx7.c compress.c optimize.c

A compilação é feita e o arquivo executável zx7 é gravado no diretório corrente, o qual poderá ser movido para outro subdiretório (usualmente /usr/local/bin). Para que a compilação seja bem sucedida, é necessário que os pacotes do compilador C (usualmente o GCC) estejam devidamente instalados no seu PC.

Os dados a serem comprimidos devem estar salvos no disco do PC (no emulador Fuse, pode-se usar a opção do menu File > Save binary data...). Para realizar a compressão de um arquivo, o seguinte comando é digitado no shell:

$ zx7 <nome do arquivo>

Será gerado no disco uma versão comprimida do arquivo, cujo nome virá acrescido do sufixo .zx7. O binário comprimido poderá ser inserido na RAM do ZX Spectrum emulado pelo Fuse, através da opção do menu File > Load binary data... .


Para ter uma ideia da eficiência do ZX7, estão listados os resultados obtidos com o bloco de bytes principal do jogo Hard Drivin' que foi recentemente adaptado para disco Beta:
  • sem compressão: 41400 bytes;
  • Lerm CC1:  37067 bytes;
  • ZX7:  26399 bytes
Como se pode ver, a diferença é bem grande.

Descompressão de dados

Uma vez que o bloco de dados comprimido é carregado de alguma forma na RAM do TK90X (por exemplo, através da fita cassete ou do disco), terá de ser descompactado. Existem 3 versões do descompactador DZX7:
  • standard, ocupa apenas 69 bytes;
  • turbo, ocupa 90 bytes e é 25% mais rápido;
  • mega, ocupa 244 bytes e é 30% mais rápido.
Os códigos fontes assembly dos descompactadores encontram-se no subdiretório asm. Portanto, antes de usar, deve-se montar o código de máquina a partir de programa assembly que deverá ser algo como:

    ORG <início da rotina>
    LD HL,<endereço do bloco comprimido>
    LD DE,<endereço de destino>
    CALL dzx7
    RET
    INCLUDE 'dzx7_standard.asm'
    END

O argumento da pseudo-instrução INCLUDE permite selecionar a versão do descompressor que se deseja usar. Se o arquivo fonte do descompressor não estiver no subdiretório corrente, deve-se especificar seu caminho (path) completo.

Para usar o descompactador, este deve ser introduzido na RAM e chamado através de USR do BASIC ou CALL do Assembly.



loading...

- Reclaim
Experimente digitar o seguinte programa no seu TK90X: Pode ser que a listagem não fique clara na imagem, portanto estou repetindo abaixo:    10 FOR n=50000 TO 50009: READ a: POKE n,a: NEXT n   20 RAND USR 50000   30 DATA 237,91,83,92,42,75,92,195,229,25...

- Gotobasic48.asm
Existem certos programas que não são compatíveis com o modo 128 BASIC do ZX Spectrum 128, ou TK90X e a TKMEM-128 com a ROM 128 ativada. Um exemplo é o Lerm Code Compressor 1 que utilizo muito nas minhas adaptações para a interface de drive Beta....

- Thundercats V. 2 Para Basic 128
Mal acabei de lançar uma adaptação do Thundercats para Beta e TKMEM-128 e estou com a versão 2. A versão anterior tinha um problema: não consegue carregar a partir do BASIC 128, portanto tinha que dar um 'USR 0' antes. Na versão 2 não...

- 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...

- Lsd Megademo (pentagram)
Mais um demo para TK90X com Explorer foi adaptado para a interface de drive padrão Beta 48, o LSD Megademo do grupo Pentagram. Uma dificuldade adicional  na adaptação foi a presença de código de máquina dentro de linha BASIC, prática que...



Eletrônica








.