terça-feira, 30 de março de 2021

Pirata (I) - disassembly

Quase todos na comunidade Portuguesa de Spectrum usamos o Pirata para copiar cassetes. 

Aposto que muitos de nós, sempre se perguntaram como o Pirata funciona(va). Tinha também um amigo, que se queixava que em sessões de maior volume de cópias, a cópia ficava estragada e, dado a fiabilidade das cassetes, nunca fiquei muito convencido do que ele dizia.

Segue aqui neste artigo, o link para uma análise ao código assembly do Pirata de 1984:

https://spectrumcomputing.co.uk/entry/36321/ZX-Spectrum/Pirata .co.uk/entry/36321/ZX-Spectrum/Pirata

Note-se que, embora seja mencionado falhas no programa, o Pirata marca uma era na qual em Portugal havia um vazio legal na legislação de cópia, sendo um feito ter sido desenvolvido em assembly, e quando a tecnologia de turbo-loaders ainda não estava divulgada.

De notar que o programa em si, é relativamente e intencionalmente curto para poupar recursos, de forma a ter livre o máximo de bytes possíveis em RAM, num ZX Spectrum 48K. O programa é também curto, porque tira proveito de rotinas da ROM.

Notavelmente, é bastante inteligente o (ab)uso da rotina de carregamento da ROM, para carregar blocos com identificação de bloco diferente de 0, e de passar como argumento o valor máximo de bloco e fazer a diferença aos bytes carregados, de forma a determinar o tamanho do bloco. O facto de usar a ROM, por sua vez, cria também algumas limitações. Seria possível estender o programa, para não ser possível fazer  LOAD por cima do código máquina do mesmo, mas isso implicaria o uso de mais RAM e transcrever as rotinas de ROM para RAM ; os checksum  dos blocos também são recalculados.

Infelizmente, existem também algumas incongruências e bugs, que são discutidas na listagem assembly, e que causam corrupção de dados, quer ao nível do código máquina, quer ao nível dos dados carregados. Estas limitações serão endereçadas na parte II deste artigo.

Link para o disassembly comentado do Pirata:

https://raw.githubusercontent.com/ruyrybeyro/pirate128/main/pirata1984/pirata.asm


Parte II deste artigo: ASM, TAP, TZX e ROM do Pirata MOD2021 com bugs corrigidos

7 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderEliminar
  2. sou do Brasil... usei muito esse programinha, usava tbm o Mr copy, transtuctor ...

    ResponderEliminar
    Respostas
    1. é o que eu uso sempre :)

      Eliminar
    2. Também usava bastante, até escrever o pirate128 e aprender a dar a volta aos bugs do ZX-Blockeditor. Agora só se aparecer um TAP/TZX com mais erros.

      Eliminar
  3. Curiosamente eu quando disse à minha mãe para botas as minhas cassetes todas ao lixo ,perdi o mesmo e encontrei mais tarde num site brasileiro numa coletânea que dizia cassetes do Sr.Edison e consegui extrair o mesmo através de comandos do dos no pc.gostava que a Paula Silva partilhasse a versão que ela disse que converte para Rom do mesmo.

    ResponderEliminar
    Respostas
    1. Boa noite Sr. "RAMparts", caso esteja interessado no Piratita (o Pirata alterado por mim), entre em contacto comigo ou com o Consultório da Paula via PM. :-)

      Eliminar
    2. Encontra uma ROM actualizada sem bugs sérios na parte II deste artigo, e no github tém vários formatos; terá também a versão 128 na parte III que aceita na realidade blocos >= 48K.

      A ROM com patches pode ser obtida desde já em https://github.com/ruyrybeyro/pirate128/blob/main/pirata2021ROM/Pirata2021_USR14446.rom

      Eliminar