sexta-feira, 20 de novembro de 2020

Emulador / debugger português em DOS - emz80

Embora não tenha sido divulgado na altura, existiu um emulador português em DOS.

O emulador / debugger começou a ser desenvolvido por volta de 1989-1990, nas horas mortas de quando o autor, Rui Ribeiro, trabalhava na Microdigital como software developer (e houve muitas devido a uma zanga de sócios, história antiga que não interessa para o caso - note-se que é MicroDigital em Portugal e não no Brasil).

Foi entregue como trabalho de uma cadeira de C no Instituto superior do Porto (1992), e alguns amigos do autor usaram-no para fazer debug em cadeiras de Z80 na FEUP. O autor usou o EMZ80 para fazer cross-desenvolvimento em DOS com o emz80 + TASM (Z80) desde inícios de 90, para fazer debugging ao kernel de emulação do WSpecem, e para fazer debugging a programas em Z80. Só recentemente em 2019, depois de escrever o QtSpecem+debugZ80, o autor deixou de o usar definitivamente.

Note-se que este emulador, embora seja um debugger de Z80, apenas implementa o ecrã do ZX Spectrum em monocromático, e não tem som nem teclado. Tem também bugs conhecidos no kernel Z80, que apenas foram corrigidos no QtSpecem, do mesmo autor. 

O kernel C do emulador emz80 em DOS, foi desenhado para ser modular, e foi portado para Windows em 32 bits (WSpecem, 1995), e para Mac/Linux em 64 bits (QtSpecem, 2019).

O debugger emz80 lê ficheiros ROM e Z80 de Spectrum 48K. Tem também uma janela de debugging com comandos e teclas similares ao Turbo Debugger, e pode correr software, se para tal for instruído.

Fica aqui o LE-ME.TXT original para as instruções:

  Emulador Z80 (c) 1990, 1992 Rui Fernando Ferreira Ribeiro


  Este programa e uma emulação COMPLETA de um Z80 (incluindo instruções não

 documentadas pela ZILOG -- para as ter imprimir o ficheiro z80iset.doc)

 a 3,5469 MHz com interrupcões, 50 vezes por segundo que executa ficheiros

 binários de Z80 (e obvio que tanto a velocidade como o tempo de interrupções

 são em tempo virtual -- ou seja para o codigo maquina de Z80 isso e o que

 acontece). Esta emulação também possui os todos os registos do Z80 (e ao con-

trário do que muita gente pensa, o contéudo do registo R definitivamente não

 é aleatório -<o que não se poderá e prever o seu estado correndo um programa

 de assembly ; no entanto com as interrupcões desligadas, inicializando-o com

 um valor poder-se-a utiliza-lo numa rotina de encriptacao/desincriptação>).

  


  Conjuntos teclas programa (validos apenas em modo 'trace'):


     F2       - marca\desmarca breakpoint na instrução corrente na janela

     F4       - pede endereço de memória para marcar breakpoint

     F5       - retira as janelas presentes no ecra ate que se

         carregue numa tecla

     F9       - corre o programa ate ser executada uma instrução HALT com as

         interrupcões desligadas, chegar a um breakpoint ou ser interrompido

         com CTRL-BREAK (voltando então ao modo 'trace').

     F10      - Permite visualizar posições de memória do Z80

     Ctrl-F10 - Permite visualizar ports    de memoria do Z80

     Alt-X    - sai do emulador


     Qualquer outra tecla em modo 'trace' provoca a execução da proxíma

    instrução apontada pelo 'Program Counter' (PC).


  Esta versão do emulador necessita no minimo para correr de 190k livres de

 memória RAM e da versão 2.0 de DOS.


               Ficheiros Emulador Z80:

               ======================


           emz80  .exe - Emulador de Z80

           z80    .tab - Ficheiro usado pelo debugger interno de

                        EmZ80 para disassemblar as instruções.

           z80iset.doc - Set de instruções completo do Z80

           le-me  .txt - Este ficheiro



Poderão descarregar aqui os ficheiros (incluindo código fonte).

3 comentários:

  1. Existe um erro factual nesta história. O código do kernel Z80 foi portado e o Wspecem escrito até Dezembro de 1994. Foi lançado ao mundo na Primavera de 1995 porque ficou a "dormir", e apenas restrito a umas poucas pessoas no Porto, à espera de ser entregue na cadeira de Projecto.

    ResponderEliminar
  2. Andei também no verão de 1989 para o emz80 a fazer testes num 48k emprestado por um amigo. Um wrapper de assembly, escrito em papel e introduzido com pokes, para testar o comportamento de vários opcodes, porque para não variar, estava sem gravador. Isto escrito no meu PC1 da Olivetti. A primeira vez que fiz uma sessão de debugging de correcção de erros, poucos meses depois, do emulador em conjunto com a edição Portuguesa do Spectrum ROM disassembly, até conseguir ver o famoso (c) 1982, e pouco depois, o pheenix, foi num AT 286 no trabalho, com placa Hercules.

    ResponderEliminar
    Respostas
    1. Thanks. Fica esclarecido mais um pouco de história :)

      Eliminar