quarta-feira, 6 de novembro de 2019

A ULA do ZX Spectrum

A ULA é a alma do ZX Spectrum e é a cola que une a CPU, RAM e ROM. É um chipset especificamente desenhado para diminuir a contagem de chips da máquina (e diminuir o custo).

A ULA é responsável por:
  • converter os dados em RAM numa imagem TV;
  • controlar o clock da CPU;
  • gerir o acesso à memória da CPU;
  • descodificar o teclado;
  • gerir a interfaces com as cassetes;
  • controlar o altifalante.
A ULA do ZX Spectrum é um chip customizado para o ZX Spectrum da Ferranti, Uncommitted Logic Array (ULA). Foi usada pela primeira vez no ZX81, e foi melhorado o seu desenho para o ZX Spectrum, principalmente em desacoplar o Z80A do processo de geração de vídeo.

A ULA partilha os primeiros 16KB de RAM com a CPU, tendo precedência sobre o Z80.


Para produzir a imagem na TV, a ULA tem de estar sincronizada com o feixe electrónico da TV. Durante o varrimento, a ULA varre também o conteúdo da RAM nas posições de pixels/atributos e consulta a cor do border nos ciclos em que está a desenhar o border. A disposição de pixel e cores foi já objecto de um anterior artigo.

O varrimento do ecrã é efectuado 50 vezes por segundo, sendo o varrimento iniciado ao mesmo tempo que o Z80A recebe um sinal de interrupt. Quanto ao FLASH, a ULA muda-o  a uma rate de 1.56Hz, ou seja, mudando-o a cada 32 frames, ou seja a cada 0.639 segundos.

A ULA suspende a CPU, cortando temporariamente os impulsos de CLCK passados ao Z80, como referimos num artigo anterior, se este tenta aceder a RAM nos 16KB inferiores enquanto esta está a ler memória no varrimento do ecrã. (memory contention). Existe também o efeito de "snow effect".

A ULA é também responsável pela interface com a matriz do teclado.



Note-se ao ler um half-row do teclado que o porto baixo é o da ULA, e o porto alto o da tabela.

No Spectrum, a ULA é endereçada em qualquer porto par (i.e. bit 0 do address bus a 0), ou oficialmente no port $FE. O porto da ULA tem também diferente significado, conforme seja usado para leitura. ou escrita:


Existem ULAs com comportamento diferentes, e com modos de vídeo mais avançados, quer em clones, quer em emulação.

A ULA foi durante muito tempo um mistério, mas foi reverse engineered recentemente, do qual resultou um projecto de um Spectrum montado com electrónica discreta, conhecido como Harlequin.
Desse projecto, também saiu um livro bastante interessante, "The ZX Spectrum ULA: How to design a Microcomputer".

Vamos desenvolver vários dos temas tangencialmente abordados aqui, em próximos artigos.

Sem comentários:

Publicar um comentário