domingo, 9 de abril de 2023

Entex Pacman2

Eu tinha guardado num armário um jogo de Pacman produzido pela Entex nos anos 80. Resvolvi comprar umas pilhas para novamente dar vida ao brinquedo. Aparentemente, pilhas C não são tão populares como outrora, mas ainda dá para encontrá-las em mercados.
Entex Pacman 2

Ele funciona em 3 modos: 1 jogador, 2 jogadores, e demonstração. O modo de 1 jogador é o jogo tradicional; no modo de dois jogadores, um dos jogadores joga como fantastma.
Abri a caixa sem ter ideia do que havia dentro e me surpreendi um pouco: um único chip no centro da placa.
Hitachi HD388A20

O processador que faz absolutamente tudo é um Hitachi HD388A20. Ele pertence a uma família HMSC40 de processadores de 4 bits que foi produziada de 1978 até 1995. Este modelo em particular tem 2K palavras de 10 bits de ROM, mas a família vai desde 512 até 4K palavras de 10 bits. Além disso, ele tem 128 palavras de dados (uma parte da ROM que pode ser lida, mas que não pode ser executada). E 80 bytes de RAM (160 dígitos de 1 nibble).
A ROM é endereçada em páginas de 64 palavras. Então, cada endereço de 11 bits tem 6 bits para a palavra e 5 para a página. Os modelos de 4K palavras têm 12 bits de endereçamento, naturalmente.
As páginas de 0 a 31 contêm o programa e as páginas 61 e 62 contêm dados. Os modelos de 4k naturalmente usam também as páginas entre 32 e 60.
A CPU opera a 100KHz e todas as operações executam em 1 ciclo, exceto uma. Para manter todas as operações atômicas, a CPU desabilita as interrupções quando está executando essa instrução de 2 ciclos. Curiosamente, se o programa não muda a página explicitamente com um pulo, a CPU fica executando as instruções daquela página circularmente. Deve ser bom para montar loops.
A instrução de dois ciclos é a que carrega dados da ROM (os "padrões de bits" que estão nas páginas 61 e 62).
Como os registradores são de 4 bits e as instruções de 10, muitas instruções já incluem os parâmetros, embora algumas instruções tenham 2 palavras. Enão, a instrução para adicionar uma constante ao acumulador A (tem acumuladores A e B), tem a forma "1 0 1 0 0 0 i3 i2 i1 i0" sendo "i3 i2 i1 i0" a constante que será adicionada (endereçamento imediato). Já a instrução para adicionar A à memória tem duas palavras, a segunda sendo o endereço da memória que será alterado.
Além dos acumuladores A e B, há registradores usados para auxiliar no endereçamento: X, Y, SPX, e SPY. As versões de 4K ainda têm um registrador W com apenas 2 bits para ajudar a tornar tudo ainda mais estranho. Lembra um pouco o 6502 e para reforçar isso, há um modo de endereçamento de página 0 (presume-se que os endereços sendo referenciados estão na página 0).
O chip tem um monte pinos de IO desenhados justamente para alimentar telas de LCD como as do jogo.
Tela de LCD

A tal instrução de dois ciclos para carregar dados pode alimentar tanto os acumuladores, como os pinos de IO. Suspeito que sejam úteis para montar a tela rapidamente.
A CPU possui instruções de pulo para subrotina, mas a pilha só tem 4 posições. Não dá para rodar Java, com certeza.
O brinquedo ainda funciona. Depois de 40 anos, o único defeito é um mau contato dos controles devido ao uso. Munido com o manual da Hitachi, vou tentar uma engenharia reversa da ROM, porque o programador que trabalhou com essa CPU bizarra merece ser reconhecido.