Preservação histórica do computador 'Patinho Feio' (de 1971)
por Felipe C. da S. Sanches <juca@members.fsf.org>
Maio de 2016
Introdução
Esta página contém uma compilação do emulador do Patinho Feio que estou desenvolvendo junto ao projeto MAME, compilado para bytecode de máquina virtual da linguagem Javascript usando as ferramentas do projeto Emscripten. Com isso, busco tornar estes esforços de preservação por meio da emulação mais acessíveis ao público geral, tendo também em mente o potencial educacional deste tipo de trabalho.
Funcionamento e instruções de uso
Ao pressionar a tecla F3 o emulador é reiniciado. Apesar de parecer apenas uma imagem (como um GIF animado), na realidade estas imagens são geradas pela execução de um programa "Hello World" que foi extraído do Manual do Montador do Patinho Feio (1977), sendo executado uma instrução por vez no emulador do Patinho, e gerando eventos de I/O para a TeleType ASR33, o que resulta na renderização dos ícones dos caracteres correspondentes na janela do emulador. No caso dessa compilação para javascript, a "janela" é substituída por um elemento CANVAS do HTML, inserido na página.
Problemas conhecidos
- Após executar o emulador os eventos de teclado ficarão presos no emulador. Se quiser voltar a navegar pela página talvez seja melhor clicar no ícone de "reload" do seu navegador.
- Este emulador ainda não suporta carga de arquivos de fitas perfuradas contendo programas a serem executados no computador
- A emulação se inicia incorretamente com o programa hello world já carregado na memória e com o registrador CI (contador de instruções) já apontando para o endereço /006 que é onde está a primeira instrução do programa. Ou seja, não está ainda sendo feito uso de um programa loader (até mesmo por que ainda não conseguimos resgatar por completo o loader original da década de 70).
Emulação do programa 'Hello World'
Versão mais recente
Veja aqui a versão mais atualizada do emulador!
Detalhes técnicos
Esta compilação foi feita a partir deste commit disponível no GitHub. Em particular, fiz algumas alterações "inadequadas" nesta compilação, para conseguir um aspecto visual agradável. Modifiquei a largura e a altura default da teletype para que a janela do emulador mostre apenas o cantinho onde é impresso o texto "PATINHO FEIO". A largura desta compilação está setada para 16 caracteres, enquanto a largura real da teletype ASR33 era de 72 caracteres.
A linha de comando que utilizei para esta compilação foi:
~/devel/prebuilt/emsdk_portable/emscripten/master/emmake make SUBTARGET=patinho SOURCES=src/mame/drivers/patinho_feio.cpp
Planos para o futuro
- Pretendo preparar um outro exemplo como este em breve que possa deixar mais óbvio o fato de ser um emulador e não apenas uma animação. Para isso eu teria que carregar um programa interativo, por exemplo algo que gere mensagens de texto na teletype em função das teclas pressinadas em seu teclado.
- Não consegui ainda habilitar a tela do debugger. Mas acho que é nesta tela que temos as maiores oportunidades educacionais, pois por meio dela podemos ver a listagem do código que está sendo executado e controlar sua execução passo-a-passo.
- Gostaria de experimentar com a idéia de mapear o conteúdo do elemento CANVAS em texturas de objetos tridimensionais, em um modelo 3D do Patinho Feio e seus periféricos. Ano passado fiz experimentos para uma proposta de subsistema 3D para o MAME, que pode ser vista aqui. Um outro desenvolvedor algum tempo atrás criou um ambiente similar, utilizando tecnologia Webgl, para fazer uma demonstração desta tecnologia construindo uma sala de jogos virtual com um gabinete do jogo PacMan (Come-Come) sendo executado numa compilação para javascript do emulador de pac-man oferecido como parte do projeto MAME.
Work in progress...
2016-Maio-09: preparando o layout do painel frontal
Em breve irei fazer uma atualização detalhada. Segue abaixo uma "aguinha na boca" de como está agora a emulação do painel frontal de luzes e switches do Patinho Feio no MAME: