Dynamic Publisher Screen (.PCT)
Arquivo principal do Dynamic Publisher, que armazena uma tela em preto e branco no formato da screen 6, com o tamanho de 512x704 pixels.
O arquivo possui um header com 384 bytes contendo a string "DYNAMIC PUBLISHER SCREEN", além da área de dados de tamanho variável, contendo os dados da tela compactados.
Arquivo .PCT
┌────────┬────────┐
│ Header │ Dados │
└────────┴────────┘
O ponteiro de arquivo deverá ser posicionado em &H180 (índices de 0 a N-1), para começar a ler os dados compactados.
Os dados compactados possuem dois campos para cada conjunto de dados:
- Um contador
- Os padrões de pontos na tela
Há dois tipos de padrões de pontos possíveis:
- O "padrão repetido", onde o mesmo padrão é desenhado N vezes na tela
- Os "padrões distintos", onde N padrões diferentes são desenhados na tela.
Offset |
Campo |
Tamanho |
Obs |
0 |
Contador |
1 byte |
|
1 |
Padrão Padrões |
1 byte N bytes |
se "padrão repetido" se "padrões distintos" |
Onde "N" é igual ao valor do contador mais um.
O contador indicará para o conjunto atual o tipo:
- "Padrão repetido", se o bit mais significativo do "contador" for 1.
- "Padrões distintos", se o bit mais significativo do "contador" for 0.
Passo a passo para o "padrão repetido":
- R = Contador;
- Elimine o bit mais significativo de R:
- Avance o ponteiro de arquivo 1 unidade.
- Leia o dado do arquivo, que contém o padrão a ser repetido na tela:
- Para i=1 até R+1 faça:
- Avance o ponteiro de arquivo 1 unidade.
Passo a passo para os "padrões distintos":
- R = Contador;
- Para i=1 até R+1 faça:
- Avance o ponteiro de arquivo 1 unidade.
- Leia o dado do arquivo, que contém o padrão atual a ser plotado na tela:
- Plote "D" na tela;
- Avance o ponteiro de arquivo 1 unidade.
O dado a ser plotado na tela é um valor de 8 bits, onde cada bit representa um pixel de um grupo de 8x1 pixels. Entretanto, há que realizar uma inversão nos nibbles do byte.
Exemplo: &HC8

Resultado plotado na tela do MSX, onde o bit 1 é a cor preta (ink) e o bit 0 a cor branca (paper):
■□□□■■□□
Uma observação importante é que o compactador armazena dados linha a linha, ou seja, se houver dados repetidos que comecem em um linha e terminem em outra, eles serão divididos ao chegar ao final da primeira linha.
Exemplo
O exemplo a seguir é uma imagem de duas linhas que utiliza a compactação do Dynamic Publisher:
01 08 04 BD 00 BF 00
Para o primeiro conjunto, temos:
Contador:
R = 01
Tipo:
Bit_7(R) = 0
"padrões distintos"
Assim há 2 "padrões distintos" (total = R+1):
01 08 04 BD 00 BF 00
Devemos realizar a inversão dos nibbles em cada padrão:
08 04
fica:
80 40
Temos que:
80 40
10000000 01000000
Os grupos de 8x1 pixels são dispostos lado a lado, formando uma linha, diferente do padrão do MSX 1. Assim, os padrões irão formar o seguinte desenho na tela:
■□□□□□□□□■□□□□□□
Para o segundo conjunto, temos:
Contador:
R = BD
Tipo:
Bit_7(R) = 1
"padrão repetido"
Remove bit 7:
R = RB AND &H7F
R = &H3D = 61
Assim há 62 repetições do mesmo padrão (R+1). Note que 62 é o valor de grupos de 8x1 pixels restantes da primeira linha, que possui no total 64 grupos.
01 08 04 BD 00 BF 00
O padrão repetido é o "00", que invertidos os nibbles, dá a mesma coisa. Assim, o segundo conjunto fecha a primeira linha com pontos vazios (brancos).
O terceiro conjunto é formado por "BF 00", que preenche 64 vezes a segunda linha com pontos vazios.
|