terça-feira, 13 de abril de 2021

Pirata (III) - Pirate64 e Pirate128

Na sequência do artigo sobre o a análise do Pirata original, e a optimização do programa original no segundo artigo, desta vez tentámos criar um copiador inspirado no Pirata que seja capaz de usar mais memória. Para tal, usa-se paginação, sendo que os binários resultantes apenas funcionam em modelos posteriores ao ZX Spectrum 48K.

Inicialmente tentou-se uma aproximação com os métodos de paginação dos modelos Sinclair pós-Amstrad a partir do +2A, mas os modelos de paginação destes revelaram-se limitativos. Ficou no entanto a experiência em se conseguir carregar blocos maiores de 48KB, ao usar um modo especial de paginação posterior ao +2A, que fornece 64KB de RAM. Fica o link em:

https://github.com/ruyrybeyro/pirate128/tree/main/pirate64 

Em seguida, usou-se a paginação  original do 128KB, que já obriga a gerir paginação, para conseguir tirar partir de toda a memória. Neste caso o maior bloco é quase 64KB, sendo que permite carregar quase 128KB (menos o espaço usado pelo código máquina). As sources, o .tap e .tzx estão em:

https://github.com/ruyrybeyro/pirate128/tree/main/pirate128

Note-se que, quer no Pirate64, e mais concretamente, no Pirate 128, dado a necessidade de controlar a paginação a cada byte novo introduzido, as rotinas da ROM de LOAD e SAVE não são, nem podem ser usadas. Foram criadas rotinas equivalentes. Os blocos são tratados como uma stream de bytes puro, que entram e saem da mesma forma, não havendo noção de flag de bloco ou checksum.

O código source ASM do pirate128 está em:

https://github.com/ruyrybeyro/pirate128/blob/main/pirate128/pirate_128.asm

Sem comentários:

Enviar um comentário