RETRODREAMSAMIGA & SPECTRUM
Menu

← Todos os chips

z80n.chip

BGA-324 · XC7A15T · desenho, não fotografia

Zilog Z80SpecNext (núcleo em FPGA)

2017

Z80N (Spectrum Next)

Um Z80 feito de lógica programável, com instruções novas e quatro velocidades, até 28 MHz.

O Z80N é o processador do ZX Spectrum Next: não é um chip, é um núcleo descrito em VHDL e carregado numa FPGA. Corre o código do Z80 e acrescenta instruções próprias, como multiplicação e cópias com transparência, a 3,5, 7, 14 ou 28 MHz.

bits por dentro
8
bits de bus
8
MHz no máximo
28
endereçáveis
64 KB

Um Z80 sem Z80

O Next começou em 2010 no Brasil, como variante do TK95, um clone do Spectrum. Em 2016, Victor Trucco e Fabio Belavenuto apresentaram o TBBlue, uma placa para entusiastas; com Henrique Olifiers, o projeto veio para o Reino Unido e juntou Rick Dickinson, o desenhador das caixas originais.

A ideia inicial era usar um Z80 verdadeiro, mas o desenho passou para uma FPGA Xilinx Spartan-6, para caberem sprites por hardware, scroll e outras novidades dentro da própria máquina. Uma FPGA é um chip cheio de blocos lógicos que se ligam entre si conforme um ficheiro carregado ao arrancar: descreve-se o circuito, e o chip passa a ser esse circuito. Não é emulação por software.

As máquinas do primeiro Kickstarter usam a Spartan-6 XC6SLX16; as do segundo, uma Artix-7 XC7A15T; as do terceiro, uma Artix-7 XC7A35T, maior. O Z80N é o mesmo em todas.

De onde vem o código

O Z80N parte do T80, um núcleo compatível com o Z80 escrito em VHDL por Daniel Wallner entre 2001 e 2002 e publicado no OpenCores, usado em muitas recriações de computadores e máquinas de arcada.

O cabeçalho do ficheiro t80n.vhd, no código do Next, diz quem fez o quê: Fabio Belavenuto corrigiu parte de um erro nos estados de espera, Victor Trucco, Fabio Belavenuto e Garry Lancaster acrescentaram as instruções novas, e Charlie Ingley corrigiu por completo a lógica de espera. Garry Lancaster é também o autor do NextZXOS e do NextBASIC.

A descrição do hardware da FPGA está publicada no GitLab, com licença GPL3. O resto do projeto (esquemas, placa, caixa) não é aberto.

As instruções novas

As instruções do Z80N usam o prefixo ED, em códigos que o Z80 da Zilog não documentava. Algumas fazem o que os programadores de Spectrum passaram anos a escrever à mão: MUL D,E multiplica dois números de 8 bits e deixa o resultado de 16 bits em DE (o Z80 original não tem multiplicação), SWAPNIB troca as duas metades de 4 bits do acumulador, MIRROR A inverte a ordem dos bits, ADD HL,A soma o acumulador a um par de registos, e PUSH nn põe um valor fixo na pilha.

Outras são para gráficos. LDIX e LDIRX copiam memória como LDI e LDIR, mas saltam os bytes iguais ao acumulador: é a transparência de um sprite numa só instrução. LDPIRX enche uma área com um padrão de 8 bytes, e LDWS copia na vertical para o ecrã Layer 2. PIXELAD calcula o endereço de um píxel no ecrã do Spectrum a partir das coordenadas, e PIXELDN desce uma linha; quem já fez essa conta no ecrã entrelaçado do Spectrum sabe quanto código isto poupa.

Há ainda NEXTREG, que escreve diretamente nos registos de configuração do Next sem passar pelas portas, OUTINB, TEST, JP (C), e as rotações e deslocamentos de vários bits de uma vez (BSLA, BSRA, BSRL, BSRF, BRLC), que só existem a partir da versão 2 do núcleo.

Quatro velocidades

A velocidade escolhe-se no registo 0x07 do Next: 3,5, 7, 14 ou 28 MHz. Os 28 MHz só funcionam a partir da versão 3.0 do núcleo. Depois de um reset o processador volta aos 3,5 MHz, a velocidade do Spectrum original, e é a essa velocidade que o software antigo, com os seus truques de temporização, se comporta como deve.

Os 28 MHz não são exatamente oito vezes mais rápidos: segundo a documentação do Next, a partir do núcleo 3.0.5 cada leitura de instrução e de memória leva um estado de espera extra, e um NOP passa de 4 para 5 ciclos. E quando o bus de expansão está ativo, a velocidade fica limitada a 3,5 MHz, para os periféricos antigos continuarem a funcionar.

A memória do Next (1 ou 2 MB nas primeiras máquinas) é muito maior do que os 64 KB que o Z80N vê de cada vez; entra na janela do processador em blocos de 8 KB.

Sabias que…

  1. TBBlue vem das iniciais dos criadores, Trucco e Belavenuto, e da cor azul da máscara de solda da placa.

  2. PUSH nn é a única instrução em que o número vem escrito com o byte mais significativo primeiro, ao contrário de todas as outras do Z80.

  3. O MUL do Z80N não é compatível com as multiplicações de outros descendentes do Z80, como o R800, o Z180 ou o eZ80: é só do Next.

  4. JP (C) lê uma porta e salta para um de 256 blocos de 64 bytes, pensado para correr código que chega em fluxo de um disco.

  5. Versões antigas do núcleo tinham um MIRROR DE, que foi retirado.

  6. Aos 28 MHz o Z80N trabalha a oito vezes o relógio do Spectrum de 1982.

  7. A FPGA pode deixar de ser um Spectrum: há núcleos alternativos, não oficiais, que a transformam noutras máquinas, como o BBC Micro ou o Sinclair QL.

Onde está