Obrigado a Julio Marchi pelo espaço cedido na MSX All
 

Padrões e Cores do MSX 1

  O modo de tela utilizado nos editores gráficos do MSX 1 é a screen 2.
  Para esse modo de tela, o padrão de caracteres e cores divide a tela em blocos de 8x8 pixels, conforme mostra a ilustração a seguir.

0                                 31
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘ 23


  A ordenação dos blocos, de acordo com o layout da tela, é apresentada no diagrama a seguir.

 +-----------------------------+
 | 000 001 002 003 ... 030 031 |
 | 032 033 034 035 ... 062 063 |
 | ...                         |
 | 736 737 738 739 ... 766 767 |
 +-----------------------------+

  Obs: valores em decimal.

  Cada bloco é composto de 8x8 pixels da tela, onde cada linha é representada por um byte na VRAM. Assim, cada bloco ocupa 8 bytes. Observe a ilustração abaixo.

┌─┬─┬─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │ │ │ Linha 0
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 1
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 2
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 3
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 4
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 5
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 6
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ Linha 7
└─┴─┴─┴─┴─┴─┴─┴─┘


  A screen 2 é formada de 32x24 blocos de 8x8 pixels. Entretanto, podemos criar figuras para esse modo de tela com dimensões variadas, mas sempre baseada na idéia de blocos de 8x8 pixels e o layout da screen 2.


  Graphos III

  Os shapes do Graphos III podem variar de 1x1 a 30x22 blocos, ou seja, de 8x8 a 240x176 pixels.

  Exemplo para uma figura de 5x4 blocos:

 Tela        Numeração dos
                Blocos
0    5 
┌┬┬┬┬┐      00 01 02 03 04
├┼┼┼┼┤      05 06 07 08 09
├┼┼┼┼┤      10 11 12 13 14
├┼┼┼┼┤      15 16 17 18 19
└┴┴┴┴┘ 4



  Print-Master

  Um arquivo ".PM?" do Print-Master tem dimensões de 512x192 pixels. Assim, o mapa de caracteres dele terá 64x24 blocos.


  Pseudo-algoritmo para ler/gravar um arquivo de tela

variáveis: 
  p, x, y : inteiro;
  altura, largura, D, linha : inteiro;
  salvar : booleano;

inicio
  p ← 7;
  salvar ← falso;

  para y ← 0 até altura passo 8 faça
  inicio
    para x ← 0 até largura passo 8 faça
    inicio
      para linha ← 0 até 7 faça
      inicio
        se (salvar = verdadeiro) então
        inicio
          D ← val(p);
          altera_linha(D);
        senão
          D ← le_linha();
          val(p) ← D;
        fim_se
        p ← p + 1;
      fim_para
    fim_para
  fim_para

fim_programa

  Onde as variáveis "altura" e "largura" são valores múltiplos de 8.


  Representação dos dados

  Cada linha de um bloco de 8x8 pixels se utiliza de duas tabelas para guardar as informações: a tabela de caracteres e a tabela de cores. A tabela de cores armazena a cor de frente e de fundo para cada linha de 8x1 pixels. A tabela de caracteres tem como objetivo armazenar o padrão do pixels de cada linha, se é cor de frente ou cor de fundo.
  Assim temos para cada tabela:

Tabela de caracteres: 
bit 0 = cor de fundo
bit 1 = cor de frente

Tabela de cores:
4 bits mais significativos = cor de frente
4 bits menos significativos = cor de fundo


  Cálculo do endereço inicial de um bloco BL na VRAM:

10 EP = 8*BL        ' Tabela de caracteres
20 EC = 8192 + 8*BL ' Tabela de cores


  Assim, para criar um padrão alternado de cores ciano e magenta na linha 2 do bloco 4, fazemos:

10 SCREEN 2
20 BL=4
30 EP = 8*BL        ' Tabela de caracteres
40 EC = 8192 + 8*BL ' Tabela de cores
50 L=2
60 VPOKE EP+L,&B10101010 ' Padrão: 10101010
70 VPOKE EC+L,&B01111101 ' Frente:7, Fundo:13


  Configuração dos pixels para desenhos em preto e branco

  O Graphos III e o Page-Maker adotam a cor de frente (ink) igual a 1 e a cor de fundo (paper) igual a 15. Assim, a tabela de cores de uma imagem desses aplicativos é repleta de valores &H1F.
  A tabela de caracteres utiliza o valor 0 para representar a cor branca e o valor 1 para representar a cor preta.


Marcelo Silveira
Engenheiro de Sistemas e Computação
Especialista em Processamento de Imagens e Inteligência Artificial
© MarMSX 1999-2020