Obrigado a Julio Marchi pelo espaço cedido na MSX All |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Crie displays animados de tela para a screen 2 do MSX como no Graphos III. O projeto Screen 2 Show envolve tanto o MSX como o PC. No que diz respeito ao MSX, tem como objetivo o desenvolvimento de algoritmos de display de telas em linguagem de máquina. No PC, desenvolver ferramentas para adicionar o display de telas a imagens convertidas para o MSX. No presente momento, o projeto somente trabalha com imagens no formato da screen 2 do MSX 1. Porém, pode ser expansível a outros modos de tela. Funcionamento do programa Arquivo RAM RAM VRAM 10 SCREEN 2 9000 | MMMPPP | 4000 | PPPPPP | 0000 | PPPPPP | 20 BLOAD"TELA.SCR",R -> .... | CCDD | -> .... | | -> .... | | 30 GOTO 30 FFFF | | 5800 | CCCCCC | 2000 | CCCCCC |
Primeiro o programa contendo a imagem é carregado na memória RAM, a partir da posição &H9000. Ele contém:
O programa principal descompacta a imagem na região de memória RAM, a partir do endereço &H4000. A descompressão poderia ser feita diretamente na VRAM, porém os algoritmos de display seriam mais complexos.
Uma vez descompactada a imagem, o programa principal chama o algoritmo de display. Esse algoritmo é responsável por copiar os dados da RAM para a VRAM. A animação é decorrente da maneira com que os dados são copiados para essa memória. Layout do arquivo
xxxx → Endereço indefinido. Descrição do header do arquivo de tela
- → Endereço não usado. xx → Valor indefinido. Compactação da imagem A imagem é compactada para diminuir o tamanho do arquivo. O método de compactação utilizado é um dos mais simples: o RLE (Run Length). Ele funciona da seguinte forma: Seja a cadeia normal: AAABCCCDDD Contam-se as repetições sucessivas, formando-se um par de bytes. Um contém o número de repetições, outro o código da cor. Depois, acrescenta-se o valor zero para indicar fim de arquivo. Assim: - total (máximo=255) - valor do byte repetido A cadeia comprimida fica: 3A 1B 2C 3D 0 Na imagem do MSX, primeiro compacta-se a área de memória correspondente ao padrão (pattern), de 0000H a 1800H. Depois, a área de cores (color), de 2000H a 3800H. Código do programa principal em Assembly Z-80 10 ORG &HC000 20 CALL &H72 ; INIGRP (Screen 2) 30 IN A,(&HA8) ; * 40 CALL PG2 ; * Seta slots para RAM RAM RAM xxx 50 OUT (&HA8),A ; * 60 LD A,(&HFFFF) ; % 70 CPL ; % 80 LD (&H8FFF),A ; % Seta subslot da página 2 para RAM 90 CALL PG2 ; % 100 LD (&HFFFF),A ; % 110 LD HL,&H4000 ; inicio da memória para descompressão (pattern) 120 LD DE,&H9061 ; Inicio dos dados comprimidos 130 CALL LE1 ; Chama rotina de descompressão 140 INC DE ; Sobe ponteiro dos dados comprimidos (color) 150 CALL LE1 ; Chama rotina de descompressão 160 CALL TELA ; Chama rotina de cópia para a tela 170 IN A,(&HA8) ; * 180 LD B,A ; * 190 LD A,&HF0 ; * Retorna configurações originais 200 AND A ; * 210 OUT (&HA8),A ; * 220 LD A,(&H8FFF) ; % Retorna configurações originais 230 LD (&HFFFF),A ; % 240 RET ; FIM 250 PG2: LD B,A ; * 260 LD A,&B11110011 ; * 270 AND B ; * 280 LD B,A ; * 290 LD A,&B00110000 ; * Rotina de cópia: xx AA xx xx -> xx AA AA xx 300 AND B ; * 310 SRA A ; * 320 SRA A ; * 330 ADD A,B ; * 340 RET ; * 350 LE1: LD A,(DE) ; % 360 OR 0 ; % 370 JP Z,FIM ; % 380 LD B,A ; % 390 INC DE ; % Descompressão de dados. Achou 0 itens, acaba. 400 LD A,(DE) ; % 410 INC DE ; % 420 LI1: LD (HL),A ; % 430 INC HL ; % 440 DJNZ LI1 ; % 450 JP LE1 ; % 460 FIM: RET ; %
O código do programa principal deverá ser compilado a partir da posição de memória &H900B. 470 TELA: LD BC,&H1800 ; $ 480 LD DE,0 ; $ 490 LD HL,&H4000 ; $ 500 CALL &H5C ; $ Rotina particular de cópia para a tela 510 LD BC,&H1800 ; $ Neste caso, copia diretamente 520 LD DE,&H2000 ; $ 530 LD HL,&H5800 ; $ 540 CALL &H5C ; $ 550 RET ; $
O código do programa de display deverá ser compilado a partir da posição de memória lógo após a tela compactada. Nesse caso, depende do tamanho dessa tela. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||