quinta-feira, 5 de dezembro de 2019

ULA - varrimento do ecrã no ZX Spectrum

No ZX Spectrum 48K, como já mencionado em artigos anteriores, a ULA controla que o relógio do Z80, quer a geração de vídeo no ecrã/TV.

É a ULA que varre a memória do ecrã e atributos para gerar o video externo. Quer pelo estudo de interacções na arquitectura (floating bus), efeitos multicor, snow effect, quer por engenharia reversa, ao longo do tempo foi-se melhorando o conhecimento dos timings do varrimento do ecrã. O que permitiu desenvolver hardware e software que emulam fielmente os efeitos de ecrã.

A ULA é alimentada por um cristal de 14MHz, que divide em 2, para varrer a memória do ecrã a 7MHz, e divide novamente a metade para fornecer o impulso de CLK ao Z80.

O varrimento é feito em linhas horizontais. e é iniciado ao mesmo tempo que a ULA envia um sinal de interrupt (INTR), ao Z80. Note-se que os timings em questão são para a geração de sinais PAL.

O ecrã tem 16 linhas de Hsync + 305 linhas visíveis, cada uma sendo varrida em 224T ciclos de Z80.

Numa linha:
  • os primeiros 48T são para sincronização;
  •  logo em seguida, 24T para a geração da linha da borda esquerda;
  • 128T para o varrimento de pixels/atributos;
  • e por fim 24T, para a geração da linha da borda direita.
Na zona dos 128T, estando nas linhas que têm pixels / atributos, o varrimento do ecrã, é byte pixels / byte+1 / atributo / atributo+1 / PAUSA / PAUSA / PAUSA / PAUSA / byte+2 / byte+3 / atributo+2 / atributo+3 /.... (a ULA lê words da àrea do video i.e. 2 bytes de cada vez).

O varrimento da memória/linhas é feito de tal maneira pela ordem que elas são apresentadas no ecrã (lembrar que é o varrimento da imagem).

O fenómeno conhecido como contenção de memória apenas acontece (a partir do issue 3). Ou seja, quando o Z80 tenta aceder a RAM nos primeiros 16KB, e a ULA está a aceder a pixels ou atributos (i.e. o CLK do Z80 deixa de ser fornecido). Estando a ULA a varrer o border ou depois de acabar atributos e não ter passado ao próximo bytes de pixels, não existe contenção de RAM.



Note-se que o conhecimento destes tempos, podem ser (ab)usados para criar efeitos / lógica de tratamento de video de  em jogos, e para diagnósticos de Spectrum.

As variações de cor de border no carregamento de cassetes, tem também a ver com variar a cor do border em timings que implica que no rendering das diferentes linhas que compõe o ecrã, o border esteja com cores diferentes.

Este artigo não pretende entrar em mais profundidade nos efeitos visíveis do varrimento do ecrã. No próximo artigo descreveremos o efeito de floating bus no Spectrum 48K, que é um artefacto do desenho da arquitectura do ZX Spectrum em conjunto com estes timings.

Ver: Spectrum Timings e Contended memory

Sem comentários:

Publicar um comentário