Curso de Basic
Blink


  Blink é um recurso do MSX 2 na screen 0 com 80 colunas que faz determinados caracteres da VRAM piscarem, alternando a cor de frente e fundo padrão com outras cores de frente e fundo.
  O blink de cada caractere é controlado individualmente, onde cada bit da tabela de blink corresponde a um caractere na tela. O valor 1 ativa o blink, enquanto que o valor 0 desativa o blink.
  A tabela de blink se localiza a partir da posição 2048 da VRAM.

  Ajustes:   Para os VDPs 7 e 13, os 4 bits de mais ordem definem a cor de frente, enquanto que os bits restantes definem a cor de fundo. Exemplo:
VDP(7) = &HF1
  Cor de frente é 15 (&HF) e cor de fundo é 1.

  Para o VDP 14, os 4 bits de mais ordem definem o tempo de exibição da cor do blink, enquanto que os 4 bits de menor ordem definem o tempo de exibição da cor original. O período de tempo é definido em unidades de 1/6 segundos. Exemplo:
VDP(14) = &H24
  Define um tempo de 1/3 segundos para a cor do blink e 2/3 segundos para a cor original.

  Visto que a tabela de blink começa na posição 2048 e que cada bit controla um caractere da tela, temos:
Tela
+---------------------------------
|00 01 02 03 04 05 06 07 08 09 ...
|80 81 82 ...


VRAM
     |  7  6  5  4  3  2  1  0 - bits
------------------------------
2048 | 00 01 02 03 04 05 06 07 
2049 | 08 09 10 11 12 13 14 15
...

  Assim, para ativarmos o blink no caractere 00 da tela, fazemos:
VPOKE 2048,&B10000000

  Para ativarmos o blink no caractere 01 da tela, fazemos:
VPOKE 2048,&B01000000

  Para ativarmos o blink nos caracteres 01 e 02 da tela, fazemos:
VPOKE 2048,&B01100000

  A tabela de blink inicialmente está "suja". Dessa forma, é necessário limpá-la antes de começar uma aplicação. Caso isso não seja feito, poderemos ter diversos caracteres piscando na tela aleatoriamente.
  Rotina para limpar a tabela de blink.
10 FOR E=2048 TO 2287
20 VPOKE E,0
30 NEXT E

  Exemplo de como criar o efeito de blink.
10 SCREEN 0 : WIDTH 80
20 PRINT "Esse texto vai piscar"
30 VDP(7)=&HF1
40 VDP(13)=&H4F
50 VDP(14)=&H22
60 VPOKE 2048,&HFF
70 VPOKE 2049,&HFF
80 VPOKE 2050,&HF8
  Saída na tela:

 

  O comando "VDP(14)=0" pára o efeito de blink para toda a tela.

  Para calcular o endereço da tabela de blink a partir de uma coordenada X,Y da tela, variando X de 0 a 79 e Y de 0 a 23, fazemos:
E = 2048 + (Y*80 + X) / 8

  Deve-se lembrar que cada endereço da tabela de blink controla 8 caracteres. Para alterar o caractere desejado, devemos fazer:
B = 2^(7 - X MOD 8)
VPOKE E, VPEEK(E) OR B

  Programa completo para calcular o endereço do VDP a partir de uma coordenada X,Y:
10 SCREEN 0:WIDTH 80
20 VDP(7)=&HF1
30 VDP(13)=&H1F
40 VDP(14)=&H22
50 X=1 : Y=2
60 E = 2048 + (Y*80+X)/8
70 B = 2 ^ (7 - X MOD 8)
80 VPOKE E, VPEEK(E) OR B

  Podemos criar um menu de barras na screen 0 e width 80 utilizando o blink. Para isso, definimos o tempo de exibição da cor original como 0 e da cor do blink um valor diferente de zero. Experimente trocar a linha 50 do programa do efeito de blink em um texto por:
50 VDP(14)=&H10

  O programa a seguir cria um menu de barras, de forma a ilustrar a criação desse tipo de menu utilizando o blink.
  Observe que ao teclar ENTER, a barra sobre a opção passa a piscar, confirmando a escolha.
10 SCREEN 0:WIDTH 80
15 FOR E=2048 TO 2287: VPOKE E,0: NEXT
20 PRINT"Menu"
30 PRINT"----"
40 PRINT"Novo"
50 PRINT"Carregar"
60 PRINT"Salvar"
70 PRINT"Exportar"
80 VDP(7)=&HF1
90 VDP(13)=&H1F
100 VDP(14)=&H10
110 OP=1:E=2048+((OP+1)*80)/8
120 VPOKE E,0
130 E=2048+((OP+1)*80)/8
140 VPOKE E,255
150 A$=INKEY$: IF A$="" THEN 150
160 A=ASC(A$)
170 IF A=31 THEN OP=OP+1 : IF OP>4 THEN OP=1
180 IF A=30 THEN OP=OP-1 : IF OP<1 THEN OP=4
190 IF A=13 THEN VDP(14)=&H11 : GOTO 210
200 GOTO 120
210 FOR T=1 TO 1000 : NEXT
220 CLS : WIDTH 40



  Referências:

  [1]- MSX2 Technical Handbook, ASCII corporation, 1987.


<< Anterior Basic Próxima >>


/MARMSX/CURSOS/Basic