sábado, 23 de março de 2013

Mais investigações sobre o "efeito Rodland"

Fiz mais algumas investigações sobre o bug detectado na ULA clonada.


Na tela acima, observa-se uma linha vertical clara logo à direita da fadinha ruiva (fica mais visível sob ampliação). Deixando todos os atributos em branco e preto (PAPER 7 e INK 0), o resultado é:


A parte superior da tela, onde as fadas estão desenhadas, o fundo é feito basicamente com a cor do INK, enquanto na parte inferior, com uma mensagem, o fundo é da cor do PAPER. O que se pode notar é que a referida linha é vista ao lado da parte em que o INK (preto) predomina.

Analisando agora os atributos, na figura abaixo isolou-se somente as cores do PAPER:


Se olhar a primeira figura com atenção, pode-se notar que a linha espúria tem partes brancas e vermelha. As cores dessa linha parecem se encaixar com os valores de PAPER do lado direito da tela acima.

Se repetirmos a análise para INK, verifica-se que no lado direito só há cor preta. Não parece capaz de interferir na cor da borda.


Surge então uma hipótese: logo ao lado da extremidade direita da tela, no primeiro pixel da borda, é exibida a cor do atributo PAPER do quadro de 8×8 pixels imediatamente vizinho. Resta então testar a hipótese, que pode ser feito com o programa abaixo:

  10 DIM a$(704): FOR n=257 TO 512: LET a$(n)=CHR$ 143: NEXT n
  20 LET i=0: LET p=0: LET b=0: LET f=0: LET o=0
  30 CLS
  50 INK i: PAPER p: BRIGHT b: FLASH f: POKE 23624,PEEK 23693: OUT 254,o
  60 PRINT AT 0,0;a$
  70 PRINT #0;AT 0,0,,,, INK 9;AT 0,3;"ink=";i;" paper=";p
  80 LET i$=INKEY$: IF i$="" THEN GO TO 80
  90 IF i$="i" THEN LET i=i+1: IF i=8 THEN LET i=0
 100 IF i$="p" THEN LET p=p+1: IF p=8 THEN LET p=0
 110 IF i$="o" THEN LET o=o+1: IF o=8 THEN LET o=0
 120 IF i$="b" THEN LET b=NOT b
 130 IF i$="f" THEN LET f=NOT f
 140 BEEP .05,30: GO TO 50

O programa imprime um padrão na tela, sendo o terço central da tela com predomínio de INK e o restante de PAPER. A tecla 'i' muda o valor de INK, 'p' muda valor de PAPER, 'b' alterna o BRIGHT, 'f' alterna o FLASH e 'o' muda a cor da borda. Observando as várias combinações possíveis, parece mesmo que a linha reflete a cor do PAPER, mas que isto se torna visível com certas combinação de cores, devido ao contraste.

Para testar se a linha visível é o último pixel da tela ou o primeiro pixel da borda, fiz o seguinte programa:

  10 INPUT "ink=";i'"paper=";p
  20 INK i: PAPER p: BORDER i: CLS
  30 FOR n=255 TO 0 STEP -1: PAUSE 0: PLOT n,0: DRAW 0,175: NEXT n

Repetindo o teste várias vezes, concluí que a linha é formada pelos primeiros pixels da borda. Devo alertar que tem que dedicar muita atenção nas observações durante os testes, pois é fácil ser enganado por ilusão de ótica.

Como era esperado, ao repetir o teste com a ULA da Microdigital, nenhuma vez foi observado o "efeito Rodland".

Com base nos testes realizados, minha conclusão é que o clone da ULA exibe no primeiro pixel da borda direita, a cor do PAPER do último atributo da tela, ao invés da cor da borda (aquela definida por OUT 254,x). Espero que estes resultados ajudem o Fábio Belavenuto a encontrar uma forma de remover este bug.

4 comentários:

  1. Prof. Flávio, mais uma vez um belo artigo, e com a teoria pronta!!

    A correção para o bug é um acerto na temporização na hora da mudança entre tela e borda. O CPLD é muito mais rápido que os TTLs convencionais, causando esses bugs quando eu e o Victor usamos o circuito do Chris baseado em TTL.

    Quando montar outro protótipo já faço os testes.

    Obrigado.

    ResponderExcluir
    Respostas
    1. Foi bom saber que você já vislumbra uma solução. Boa sorte.

      Excluir
    2. Consegui resolver esse BUG, agora está 100%

      Excluir
    3. Ótima notícia, Fábio. Estamos próximo de uma produção em escala do clone e é bom que foi debugado. Valeu!

      Excluir

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.