Ano 1 · Ano 2 · Ano 3 · Ano 4 · Ano 5 · Ano 6 · Ano 7 · Ano 8 · Ano 9
Tópicos › Sétimo ano › Recuperação da ROM do Pense Bem
Felipe "Juca" Sanches e Erin Pinheiro transcreveram, com o maskromtool, as ROMs do Zilog Z8 do Pense Bem a partir de fotos do die. Felipe corrigiu os bits errados com a ajuda de L. e do disassembler de Z8 do MAME. Em seguida, o código foi analisado e cruzado com o esquemático da placa, e houve sessões abertas no Garoa Hacker Clube.
Sétimo ano: novembro de 2023 a outubro de 2024
Felipe lembrou que o desembaralhamento dos bits da ROM seguia sem solução. Com as novas versões do maskromtool, identificou o desembaralhamento z86x1 e transcreveu a ROM A; Erin transcreveu a ROM B, com o microcódigo do Z8. Instruções ilegais serviram para localizar colunas com bits errados.
Felipe lembrou que Travis Goodspeed fez o decapping do chip do PenseBem, mas que o desembaralhamento dos bits da ROM continua sem solução. Sugeriu testar permutações e descartar as que geram opcodes inválidos, com a ressalva de que enumerar as possibilidades não é trivial e de que permutações erradas podem gerar só opcodes válidos.
L. avisou das novas versões do maskromtool, de Travis Goodspeed, agora com disassembly; Felipe confirmou que a ferramenta usa o unidasm do MAME, e L. que ele suporta Z8. Felipe compartilhou o arquivo do projeto (smartstart.zip) e passou a revisar os bits detectados pela ferramenta (66 colunas), corrigindo à mão os erros. Ele identificou que o desembaralhamento é o z86x1 e que as duas primeiras fileiras formam a ROM de teste de fábrica do Z8, quase idêntica à do sintetizador Wersi DX10.
Felipe começou a revisão visual de cerca de 16 kbits, perdeu parte do trabalho numa falha do programa e passou a salvar com frequência e usar testes de regressão. Publicou um disassembly e um binário preliminares, e com L. usou as instruções ilegais para localizar colunas com bits errados. Um CALL para fora da faixa de endereços da ROM foi corrigido, e o opcode 5F foi identificado no manual da Zilog como WDT, instrução que o disassembler de Z8 do MAME não reconhecia.
Erin transcreveu em meia hora a ROM B (54x120 bits, com o microcódigo do Z8). Também enviou uma imagem em PNG de maior resolução da ROM A, com a dica de conferir cada coluna no momento de marcá-la. Felipe recomeçou a transcrição com essa imagem, terminou a extração dos bits em poucas horas e publicou o disassembly e o binário corrigidos.
Felipe confirmou o ponto de entrada (00C), localizou a rotina do IRQ4, que configura o timer 0, e parte da fonte do display; L. mapeou 39 rotinas chamadas por CALL. Felipe publicou um disassembly comentado. Um trecho no bloco de dados que desmonta como loop infinito ficou em discussão.
As instruções "Illegal" restantes eram um bloco de dados depois do IRET em 73C, e Felipe localizou os ponteiros para essa área e a rotina do IRQ4. L. mapeou 39 rotinas chamadas por CALL, várias terminando em fallthrough, possivelmente os jogos. O grupo discutiu como a fonte do display (7 dígitos, um de 14 segmentos, multiplexados como 8) estaria codificada. Felipe confirmou que o ponto de entrada é 00C e publicou a ROM de teste interna, e L. compartilhou fotos antigas do Garoa com o Pense Bem desmontado.
Ao revisar trechos confusos, Felipe encontrou mais bits transcritos errado, ligados, por exemplo, ao vetor do IRQ5 e a um JR que caía num operando. Depois das correções, a inicialização configura o timer 0 em modo single pass, o que parecia estranho. Após L. responder com uma imagem, Felipe verificou que a rotina do IRQ4, chamada pelo timer 0, faz essa configuração logo antes do IRET.
Felipe pegou três Pense Bem no Garoa e abriu um para inspecionar a PCB. Ele localizou na ROM parte da fonte do display de 7 segmentos (o restante possivelmente a partir de 7D5) e publicou uma versão comentada do disassembly.
Felipe descreveu um enigma: entre uma tabela de saltos e a fonte do display há bytes que desmontam como um loop infinito e são alvo de um jump relativo no boot, mas que outra rotina lê como uma tabela de 21 bytes. As hipóteses foram dados que coincidem com código, código morto e espera por interrupção. Felipe disse que o código foi escrito diretamente em assembly, por volta de 1987, para 2 KB de ROM. RicBit observou que o trecho seguinte, em 7CD, parece alinhado, o que sugere que os bytes têm uso.
Felipe retomou esquemáticos começados 11 anos antes e mapeou as portas que controlam o display, além das que provavelmente leem o teclado e acionam o buzzer. Indicou uma possível combinação de easter egg e ofereceu um Pense Bem a quem desenhasse o esquemático no KiCad.
Felipe retomou os esquemáticos começados 11 anos antes e mapeou as portas: bits de P0 e P3 selecionam o dígito ativo do display, P1 define os segmentos e, por estar ligada à matriz do teclado, deve também ler as teclas, e P2 bit 5 parece acionar o buzzer. Ele notou que o Pense Bem de 2017, com AVR8, usa um esquema semelhante de multiplexação e supôs que o layout de I/O foi copiado. No código, levantou a hipótese de que a fonte é lida a partir de 7CBh e de que o conteúdo do display fica em 5Fh–66h. Ao executar passo a passo no MAME, entendeu como o register pointer dá acesso aos registradores especiais na inicialização. Por causa desse trabalho, foi convidado a um servidor de Discord sobre VTech, onde o Smart Start constava como não dumpado.
Participantes se reuniram no Garoa Hacker Clube no que Shideravan chamou de primeiro encontro brasileiro extraoficial de desenvolvimento do MAME. Felipe "Juca" Sanches disse que já houve encontros assim no Calango Hacker Clube, em Brasília. Perguntado sobre a combinação de um possível easter egg do Pense Bem, ele indicou as teclas "5" + "operação" logo após o boot, com a ressalva de que poderia ter interpretado errado o código ou levantado errado o pinout do Z8. Ele também ofereceu um Pense Bem a quem desenhar o esquemático da placa no KiCad.
Felipe divulgou uma atividade aberta em 23/05/2024 para levantar o esquemático e ler o código do Z8. L. marcou depois, com Felipe, uma sessão de domingo para trabalhar na emulação do Pense Bem no MAME.
Felipe pediu a Hugo exemplares do Pense Bem para reinspecionar a PCB e escrever o driver no MAME. Também divulgou uma atividade aberta no Garoa Hacker Clube em 23/05/2024 para levantar o esquemático e ler o código do Z8. Erin indicou a digitalização que fez do livro do Pense Bem com Sonic para o Sonic Retro, que tem um erro de impressão na página 31.
L. avisou que viria ao Brasil e marcou uma sessão de domingo no Garoa Hacker Clube, com Felipe, para trabalhar na emulação do Pense Bem original (Z8) no MAME, aberta a quem quisesse participar.