Modos de vídeo

O BASIC do MC1000, por ser baseado no BASIC do Apple II, só oferece três opções de modos de vídeo, acessados pelos comandos TEXT, GR e HGR.

Porém, o chip MC6847 oferece outros modos de vídeo, que podem ser acessados por meio da porta de saída COL32 ($80 / 128). Essa porta acessa um latch de 8 bits, um componente eletrônico que retém um valor e cujos bits (exceto o bit 0) alimentam os pinos do MC6847 que definem o modo de vídeo:

O que nos dá os seguintes modos de vídeo (assumindo bit 0 = 1):

Amostra (vide programa)

Valor de

COL32

$01 / 1 (TEXT)

Modo

Alphanumeric Internal (CSS=0)

Alphanumeric Internal (CSS=1)

Semigraphics 4

Semigraphics 6 (CSS=0)

Semigraphics 6 (CSS=1)

Color Graphics 1 (CSS=0)

Color Graphics 1 (CSS=1)

Resolution Graphics 1 (CSS=0)

Resolution Graphics 1 (CSS=1)

Color Graphics 2 (CSS=0)

Color Graphics 2 (CSS=1)

Resolution Graphics 2 (CSS=0)

Resolution Graphics 2 (CSS=1)

Color Graphics 3 (CSS=0)

Color Graphics 3 (CSS=1)

Resolution Graphics 3 (CSS=0)

Resolution Graphics 3 (CSS=1)

Color Graphics 6 (CSS=0)

Color Graphics 6 (CSS=1)

Resolution Graphics 6 (CSS=0)

Resolution Graphics 6 (CSS=1)

Dimensões

32×16 caracteres.

Descrição

Caracteres verdes-escuros. Fundo verde. Borda preta. (*)

Caracteres vermelhos-escuros. Fundo laranja. Borda preta. (*)

O espaço de cada caracter é dividido em quatro partes (2×2). Os bits 0–3 indicam quais partes ficam acesas. Os bits 4–6 indicam a cor das partes acesas (verde, amarelo, azul, vermelho, branco, ciano, magenta, laranja). O bit 7 é ignorado. Fundo preto. Borda preta.

O espaço de cada caracter é dividido em seis partes (2×3). Os bits 0–5 indicam quais partes ficam acesas. Os bits 6–7 indicam a cor das partes acesas (verde, amarelo, azul, vermelho). Fundo preto. Borda preta.

O espaço de cada caracter é dividido em seis partes (2×3). Os bits 0–5 indicam quais partes ficam acesas. Os bits 6–7 indicam a cor das partes acesas (branco, ciano, magenta, laranja). Fundo preto. Borda preta.

Verde, amarelo, azul, vermelho. Fundo verde. Borda verde.

Branco, ciano, magenta, laranja. Fundo branco. Borda branca.

Verde-escuro, verde. Fundo verde-escuro. Borda verde.

Preto, branco. Fundo preto. Borda branca.

Verde, amarelo, azul, vermelho. Fundo verde. Borda verde.

Branco, ciano, magenta, laranja. Fundo branco. Borda branca.

Verde-escuro, verde. Fundo verde-escuro. Borda verde.

Preto, branco. Fundo preto. Borda branca.

Verde, amarelo, azul, vermelho. Fundo verde. Borda verde.

Branco, ciano, magenta, laranja. Fundo branco. Borda branca.

Verde-escuro, verde. Fundo verde-escuro. Borda verde.

Preto, branco. Fundo preto. Borda branca.

Verde, amarelo, azul, vermelho. Fundo verde. Borda verde.

Branco, ciano, magenta, laranja. Fundo branco. Borda branca.

Verde-escuro, verde. Fundo verde-escuro. Borda verde.

Preto, branco. Fundo preto. Borda branca.

(No TRS-80 Color Computer: SCREEN0,0)

32 bytes por linha × 16 linhas = 512 bytes ($8000–$81FF).

$03 / 3

32×16 caracteres.

(No TRS-80 Color Computer: SCREEN0,1)

32 bytes por linha × 16 linhas = 512 bytes ($8000–$81FF).

$41 / 65

$61 / 97

$63 / 99

$81 / 129

$83 / 131

$85 / 133

$87 / 135

$89 / 137 (GR)

$8B / 139

$8D / 141

32×16 caracteres.

64×32 "pixels".

32 bytes por linha × 16 linhas = 512 bytes ($8000–$81FF).

32×16 caracteres.

64×48 "pixels".

32 bytes por linha × 16 linhas = 512 bytes ($8000–$81FF).

32×16 caracteres.

64×48 "pixels".

32 bytes por linha × 16 linhas = 512 bytes ($8000–$81FF).

64×64 pixels.

16 bytes por linha × 64 linhas = 1024 bytes ($8000–$83FF).

64×64 pixels.

16 bytes por linha × 64 linhas = 1024 bytes ($8000–$83FF).

128×64 pixels.

16 bytes por linha × 64 linhas = 1024 bytes ($8000–$83FF).

128×64 pixels.

16 bytes por linha × 64 linhas = 1024 bytes ($8000–$83FF).

128×64 pixels.

32 bytes por linha × 64 linhas = 2048 bytes ($8000–$87FF).

128×64 pixels.

32 bytes por linha × 64 linhas = 2048 bytes ($8000–$87FF).

(No TRS-80 Color Computer: PMODE0,0: SCREEN1,0)

128×96 pixels.

16 bytes por linha × 96 linhas = 1536 bytes ($8000–$85FF).

$8F / 143

128×96 pixels.

(No TRS-80 Color Computer: PMODE0,0: SCREEN1,1)

16 bytes por linha × 96 linhas = 1536 bytes ($8000–$85FF).

$91 / 145

128×96 pixels.

(No TRS-80 Color Computer: PMODE1,0: SCREEN1,0)

32 bytes por linha × 96 linhas = 3072 bytes ($8000–$8BFF).

$93 / 147

128×96 pixels.

(No TRS-80 Color Computer: PMODE1,0: SCREEN1,1)

32 bytes por linha × 96 linhas = 3072 bytes ($8000–$8BFF).

$95 / 149

128×192 pixels.

(No TRS-80 Color Computer: PMODE2,0: SCREEN1,0)

16 bytes por linha × 192 linhas = 3072 bytes ($8000–$8BFF).

$97 / 151

128×192 pixels.

(No TRS-80 Color Computer: PMODE2,0: SCREEN1,1)

16 bytes por linha × 192 linhas = 3072 bytes ($8000–$8BFF).

$99 / 153

128×192 pixels.

(No TRS-80 Color Computer: PMODE3,0: SCREEN1,0)

32 bytes por linha × 192 linhas = 6144 bytes ($8000–$97FF).

$9B / 155

128×192 pixels.

(No TRS-80 Color Computer: PMODE3,0: SCREEN1,1)

32 bytes por linha × 192 linhas = 6144 bytes ($8000–$97FF).

$9D / 157

256×192 pixels.

(No TRS-80 Color Computer: PMODE4,0: SCREEN1,0)

32 bytes por linha × 192 linhas = 6144 bytes ($8000–$97FF).

$9F / 159 (HGR)

256×192 pixels.

(No TRS-80 Color Computer: PMODE4,0: SCREEN1,1)

32 bytes por linha × 192 linhas = 6144 bytes ($8000–$97FF).

(*) O circuito do MC1000 liga o bit 7 do byte lido da VRAM ao pino INV do MC6847. Por isso, nos modos alfanuméricos, os caracteres de código ASCII de 0 a 127 aparecem claros sobre fundo escuro, e os de 128 a 255 aparecem escuros sobre fundo claro.

No BASIC, definimos o valor de COL32 por meio da instrução OUT 128,x. E se você subtrair 1 dos valores da tabela acima, poderá ler e escrever na VRAM a partir do endereço de memória 32768 ($8000).

10  GR 20  OUT 128,130 30  FOR A = 0 TO 255 40  POKE 32768 + A,A 50  NEXT

No entanto, alguns eventos do MC1000 (intermitência do cursor, escrita de texto na tela, etc.) leem o valor da variável do sistema MODBUF ($00F5 / 245) e redefinem COL32 com esse valor, e assim podem anular algum comando OUT que você tiver emitido. É o que acontece no programa acima: ao imprimir "OK" quando o programa acaba, o MC1000 joga para a porta COL32 o conteúdo do endereço MODBUF (que é 137, que foi colocado pelo comando GR na linha 10), e a tela volta a ter a cara do modo GR.

Em tais situações, em vez de (ou além de) emitir o comando OUT 128,x, pode ser útil emitir o comando POKE 245,x.

10  TEXT : HOME 20  PRINT "VISUALIZANDO TELA DE FUNDO VERDE" 30  INPUT "PRESSIONE ENTER";X$ 40  POKE 245,3 50  PRINT "VISUALIZANDO TELA DE FUNDO VERMELHO"

Aqui nem foi preciso emitir o comando OUT, porque o PRINT da linha 50 se encarrega de fazê-lo.

Um exemplo prático útil: Quando um erro ocorre em modo gráfico você não consegue ler a mensagem de erro correspondente (porque o MC1000 continua em modo gráfico e os caracteres aparecem como pontos na tela; e se você emitir um comando TEXT ou HOME para voltar ao modo texto a tela é apagada). Nesse caso, digite POKE 245,1 para passar ao modo texto sem limpar a tela e poder ler a mensagem de erro.

10  GR 20  GOTO : REM PRODUZ "LI ERRO EM 20" RUN POKE 245,1

Outra forma de fazer o MC1000 a passar para o modo texto sem apagar a tela é dar o comando DEBUG. (Dica de Kleber Desan na revista Micro Sistemas nº 55, de abril de 1986.)