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.)