Przeglądarka plików GRF
W paczkach zawierających różne pliki graficzne natknąłem się na takie z rozszerzeniem GRF. Ponieważ rozmiar plików był niewielki postanowiłem podejrzeć ich zawartość, a ta okazała się być danymi obrazu w rozdzielczości 256×192 punkty co idealnie pokrywa się z trybem graficznym 8 i znaną procesorowi Antic szerokością ekranu (32 bajty). Poniżej wprawka z ładowania obrazu GRF, który jako rzecze internet zawiera obrazy HI-RES z mikrokomputera Tandy Radio Shack TRS-80.
Zwrócę uwagę na konstrukcję systemowego programu DISPLAYLIST dla trybu graficznego 8. Pamięć ekranu podzielona jest na dwa obszary ułożone w taki sposób, że tworzą w pamięci jeden długi blok. Natomiast logicznie obszar ten podzielony jest na 40 bajtowe bloki z danymi dla poszczególnych linii ekranu. W przypadku ekranu o szerokości 32 bajtów w tym trybie początek drugiego bloku przesunięty jest o 3760 bajtów względem początku pamięci ekranu.
Jak przy poprzednich przeglądarkach można zautomatyzować podgląd plików GRF dodając w pliku RUNEXT.CFG wpis w stylu:
RUNEXT.CFG:
GRF,A:\DOS\VIEWGRF.COM
;GRF Viewer, AtariFan, 230101
;TRS-80 256X192
Byte
DMACTLS=$22F, COLPF1S=$2C5, COLPF2S=$2C6, COLBAKS=$2C8, KBCODES=$2FC,
ICCMD2 =$362, ICCMD6 =$3A2, ICAX1_2=$36A, ICAX2_2=$36B, ICAX1_6=$3AA,
ICAX2_6=$3AB
Card
X, Y, BUF=$A, EKR=$58, ICBUFA2=$364, ICBUFL2=$368, ICBUFA6=$3A4
Char array
P=0, DEVS=[’S’:$9B]
Proc CIO=$E456(BYTE AKU, XREG)
Proc EDIT=$F6BC()
Proc GRF_VIEWER()
ICCMD6=$C CIO(0,$60) ;zamknij kanal 6
ICCMD6=3 ICBUFA6=DEVS ICAX1_6=12 ICAX2_6=8 CIO(0,$60) ;otworz ekran graficzny
DMACTLS=0 ;wylacz ekran
COLPF1S=$BF COLPF2S=$B2 ;ustaw kolory
;obrobka wiersza polecen
X=BUF+$3F
DO X==+1 IF P(X)=$20 THEN EXIT FI OD
P(X)=’: X==-1 P(X)=’D
ICCMD2=$C CIO(0,$20) ;zamknij kanal
ICCMD2 =$3 ICBUFA2=X ICAX1_2=4 ICAX2_2=0 CIO(0,$20) ;otworz plik
ICCMD2=7 ICBUFA2=EKR ICBUFL2=5 CIO(0,$20) ;naglowek pliku
ICBUFA2=EKR ICBUFL2=3008 CIO(0,$20) ;94 linie * 32 bajty
ICBUFA2=EKR+3760 ICBUFL2=3136 CIO(0,$20) ;98 linii * 32 bajty
ICCMD2=$C CIO(0,$20) ;zamknij kanał
KBCODES=255
Y=0 ;obraz w pozytywie
DMACTLS=33 ;wlacz waski ekran
DO
X=KBCODES
IF X=35 THEN KBCODES=255
IF Y=0 THEN Y=1 COLPF1S=$B2 COLPF2S=$BF
ELSEIF Y=1 THEN Y=0 COLPF1S=$BF COLPF2S=$B2 FI
ELSEIF X<255 THEN EXIT FI
FI
OD
ICCMD6=$C CIO(0,$60) ;CLOSE(6) ;zamknij ekran graficzny
EDIT() KBCODES=255
[$6C$A$0] ;powrot do SDX
Biblioteka: