Temporização de vídeo do TK90X (parte 2)
Eletrônica

Temporização de vídeo do TK90X (parte 2)


Em continuação à postagem anterior, darei instruções de uso do programa de teste e alguns resultados que obtive. 


Instruções

Após carregamento, o próprio programa fornece algumas instruções de uso. Para sair dessa tela, basta pressionar alguma tecla. Será então pedida a frequência de clock do computador sob teste. Entre o valor 3.575611 para o TK90X, 3.5 para ZX Spectrum de 16 ou 48 kB e Pentagon e 3.54690 para Spectrum de 128 kB.

O programa entrará na tela com a rotina de temporização propriamente dito. Como já foi explicado, a rotina aguarda por uma interrupção mascarável com a instrução HALT, define a cor da borda como vermelha e aguarda um intervalo de tempo antes de mudar a borda para ciano. A aparência ficaria como na tela abaixo, tirado do emulador Fuse.


Counter refere-se ao número de instruções NOP empregados para definir a pausa. Seu valor pode ser aumentado em diferentes passos através das teclas Q, W e E, ou diminuído apertando A, S e D. Delay é o intervalo de tempo entre as duas instruções OUT que definem a cor da borda, isto é, o período em que a borda permanece vermelha. O delay é medido em número de estados T (recíproco da frequência de clock do Z80) e em microssegundos (µs, milionésimos de segundo).

Ou aumento do delay faz com que a parte vermelha da borda aumente, exceto quando ultrapassa o período das interrupções (16667 µs para TK90X, 20000 µs para Spectrum) em que ocorrerá forte cintilação (quem tem predisposição à epilepsia deve tomar cuidado!).

Alguns resultados
Teste 1: zona oculta do topo da tela

Há um tempo inicial durante a geração do quadro de imagem que não é visível na tela da TV. Para medir este tempo, o melhor é ir diminuindo o delay para fazer o vermelho da borda diminuir, até sobrar a menor parte visível. No emulador, sobra somente um pedaço vermelho no canto superior esquerdo (emulação do Spectrum 48):


Entretanto na vida real a coisa não é tão simples assim, pois o tubo de TV apresenta uma geometria curva:

Uma leve linha vermelha meio cintilante aparecia na imagem, porém não consegui registrar com a minha câmera fotográfica (puxa, agora que eu vi que aparece o reflexo da luz entrando pela sacada). Eu acredito que o tamanho dessa zona oculta dependa do televisor empregado. A propósito, o meu é um Philco TP-1454 com tubo CRT de 16 14 polegadas.
A tabela abaixo sumariza os resultados obtidos no emulador e no TK90X real:


Spectrum 48 (Fuse)
Spectrum 48 NTSC (Fuse)
Spectrum 128 (Fuse)
Pentagon 128 (Fuse)
TK90X
Clock/MHz
3.5
3.5
3.5469
3.5
3.575611
Counter
2006
662
1966
2897
1398
Delay/T-states
8043
2667
7883
11607
5611
Delay/µs
2298.0
762.0
2222.5
3316.3
1569.2

Teste 2: última posição da borda acima da tela principal
Neste teste ajustou-se o delay na última posição à direita visível. Um aumento pequeno no delay após esta posição não é visível, pois ultrapassa o limite da margem direita. A figura do emulador e a foto da tela do TK90X seguem abaixo.


Fica evidente que o espaço acima da área principal da tela é bem pequena no TK90X, portanto acaba inviabilizando o funcionamento do programa como o Rotatrix, que a usa para exibir efeitos.


Os resultados obtidos estão sumarizados na tabela abaixo.

Spectrum 48 (Fuse)
Spectrum 48 NTSC (Fuse)
Spectrum 128 (Fuse)
Pentagon 128 (Fuse)
TK90X
Clock/MHz
3.5
3.5
3.5469
3.5
3.575611
Counter
3333
1989
3316
4224
1939
Delay/T-states
13351
7975
13283
16915
7775
Delay/µs
3814.6
2278.6
3745.0
4832.9
2174.5

O TK90X gasta 2164 T ou 605,3 µs desde a primeira parte visível do topo da tela, até chegar a esta última posição.

Teste 3: primeira posição visível à esquerda da tela.
A varredura da tela é feita da esquerda para a direita. Entre a última posição horizontal da linha (situado na margem direita) e a primeira posição da próxima linha, existe um período de tempo em que nada é exibido (retraço horizontal). Para ter uma estimativa deste tempo, foi medido o delay em que aparece um traço vermelho à esquerda:


Na figura acima, com emulador, o pequeno traço ficou visível. No TK90X, apesar de não ter ficado nítido na foto, foi possível perceber claramente um traço que ficava piscando entre vermelho e ciano:



Os resultados obtidos estão sumarizados na tabela abaixo.

Spectrum 48 (Fuse)
Spectrum 48 NTSC (Fuse)
Spectrum 128 (Fuse)
Pentagon 128 (Fuse)
TK90X
Clock/MHz
3.5
3.5
3.5469
3.5
3.575611
Counter
3350
2006
3335
4241
1956
Delay/T-states
13419
8043
13359
16983
7843
Delay/µs
3834.0
2298.0
3766.4
4852.3
2193.5

O período de retraço no TK90X gira ao redor de 68 T ou 19,0 µs.


Existe uma imprecisão nas medidas de tempo porque só se pode variar o delay em múltiplos de 4 T. Existem alguns outros fatores que também diminuem a precisão. A lista dos fatores que consigo imaginar são:
  1. Já foi citado que o uso de NOP para definir o delay cria uma granularidade de 4 T. Para obter a menor granularidade possível (1 T), dever-se-iam empregar instruções com 5, 6 e 7 T de ciclo. Não é  muito difícil de implementar, mas dá mais trabalho.
  2. Eventual colisão de acesso ao barramento de dados entre Z80 e ULA. Penso ter minimizado ao máximo esta possibilidade, pois a rotina fica toda na RAM alta e não há modificação na área de vídeo durante a medição de tempo. Talvez ocorra somente nas duas instruções OUT e talvez logo após aceitação de interrupção por HALT. 
  3. A instrução OUT não é executada logo após o HALT, pois executa-se antes a rotina em 56 (#38). Eu acho que se não se pressionar nenhuma tecla, o tempo gasto pela referida rotina será reprodutível. Entretanto o ideal seria criar uma rotina de interrupção própria, a ser usada no Modo de Interrupção 2, pois seria possível saber todas as temporizações envolvidas com maior exatidão.

Por outro lado é necessário investigar a reprodutibilidade dos resultados entre um computador e outro e entre diferentes aparelhos de televisão. Toda ajuda será bem vinda, agradeço àqueles que puderem fazer os testes e relatar aqui na seção dos comentários. Também seria interessante a ajuda de alguém que conheça bem o funcionamento de televisores, pois meus conhecimentos são bem superficiais.

Com certeza este assunto merecerá mais postagens no futuro.



loading...

- Modelo De Temporização Do Tk90x Em 60 Hz
Com os dados anteriormente coletados, apesar das incertezas das medidas, é possível propor um modelo de temporização para o TK90X. O que estarei expondo aqui é fortemente baseado no livro de Chris Smith. Estarei centrando a análise no modo 60 Hz...

- Problema Com Comando Tracer
Eu tenho adaptados jogos com som para a interface Explorer, sendo que desta vez estava trabalhando no Commando Tracer. Parecia que ia ser fácil, pois era um carregador baseado simplesmente em blocos headerless.  Consegui em pouco tempo, no emulador...

- Temporização De Vídeo Do Tk90x (interlúdio)
Einar Saukas conseguiu aperfeiçoar meu programa de medição de temporização do vídeo do TK90X e disponibilizou o arquivo e o código fonte. Não pude testar por estar ocupado em um outro projeto (ainda é segredo...), mas espero em breve retomar...

- Temporização De Vídeo Do Tk90x (parte 3)
Prosseguindo esta série de postagens, divulgo mais resultados obtidos com o programa apresentado anteriormente. Mas antes quero informar que Einar Saukas me forneceu algumas sugestões e códigos assembly, por isso futuramente vou fazer uma versão 2...

- Temporização De Vídeo Do Tk90x (parte 1)
Programas como Rotatrix, que dependem fortemente de sincronização com o vídeo, são extremamente sensíveis às diferenças de temporizações entre o TK90X e os diferentes modelos de ZX Spectrum. Enquanto o computador britânico tem as suas temporizações...



Eletrônica








.