O Z80 possui um sistema de tratamento de interrupções bem interessante, sendo que o IM 2 (Interrupt Mode 2) é o mais poderoso. Este modo faz uso do registrador especial I (interrupt vector register), cujo valor tem que estar fora da faixa 64 (#40) a 127 (#7F). Se este cuidado não for tomado, ocorre a presença de artefatos na tela, conhecido como efeito snow.
Efeito snow no Bloody Paws |
A origem deste efeito é um bug na ULA que, pelo fato do Z80 colocar no barramento de endereços o conteúdo do par de registradores IR durante o refrescamento das DRAMs, acaba sendo interpretado como se a CPU estivesse tentando acessar a memória de vídeo. Uma explicação mais detalhada encontra-se no livro de Chris Smith.
Este foi um teste que ainda não foi realizado na ULA clonada, por isso criei este pequeno programa com esta finalidade:
Este foi um teste que ainda não foi realizado na ULA clonada, por isso criei este pequeno programa com esta finalidade:
10 CLEAR 29999
20 FOR n=30000 TO 30008 : READ a : POKE n,a : NEXT n
30 FOR n=32256 TO 32512 : POKE n,127 : NEXT n
40 POKE 32639,195 : POKE 32640,56 : POKE 32641,0
50 RAND USR 30000
60 DATA 243,62,126,237,71,237,94,251,201
O Z80 é colocado em IM 2 com o registrador I igual a 126, que causa o efeito snow. O leitor pode digitar o programa no seu TK90X ou TK95 para ver o efeito (não funciona em emuladores, exceto SpecEmu). Na ULA da Microdigital o resultado é mais ou menos assim:
Infelizmente é difícil registrar o efeito na minha câmera digital e, mesmo na foto acima, fica mais visível somente quando ampliada. Observam-se várias pequenas linhas horizontais que surgem e desaparecem na tela, em posições aparentemente aleatórias. A frequência com que estas linha aparecem dependem do conteúdo da tela (acima, foi feita LIST do programa duas vezes para aumentar a visibilidade).
Na ULA clonada, há o efeito snow mas um pouco diferente:
Aparecem muito mais linhas na tela e a distribuição não parece ser tão aleatória, mas formam colunas. Infelizmente a foto não dá uma ideia boa do que estou descrevendo.
Esta diferença era esperada, afinal há significativas diferenças entre as temporizações entre as ULAs. Mas o fato é que em ambas este bug está presente, bem como na "ULA mãe" que equipa os ZX Spectrums.
Com isto, acredito ter terminado o conjunto de testes mais relevantes com o clone da ULA. Se eu não encontrar mais algum outro teste a fazer, irei devolvê-lo ao Fábio Belavenuto.
Parabens Flavio por lembrar e testar algo realmente interessante para se testar na ULA clonada, eu ja havia lido sobre em alguns artigos sobre o este problema nos zx spectrums , mas nao imaginava que a ULA do tk90x tambem pudesse acontecer tal efeito, ai aproveito e pergunto, a ULA clonada por ser identica ao do tk90x e proxima ao do zx apresenta os mesmos problemas com cores nos graficos que quando se aproxima 2 graficos de cores diferentes e que nao permite utilizar mais de uma cor em uma matrix de 8x8? , afinal nao seria um bom momento para tentar corrigir estas deficiencias.
ResponderExcluirObrigado pelo comentário.
ExcluirA intenção desta ULA é ser o mais fiel possível ao original, para recolocar em funcionamento TKs que estão encostados pela falta deste componente.
Entretanto o Fábio e Victor estão com planos de fazer um TK128 com a ULAPlus incorporada, que tem modos gráficos com melhor resolução de cor.
Porém convenhamos, o que torna o Spectrum especial é o colour clash e como os programadores contornam esta deficiência. ;-)