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