PIC (Paint 256)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 14:07, 4 sie 2022
Seban (Dyskusja | wkład)
(+komentarze do kodu w Action!)
← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(offsety, długości, znaczenie)
Linia 1: Linia 1:
Format pliku programu [[Paint 256]] zawierającego obraz o rozdzielczości 80x96 bez interlace wykorzystujący efekt "PAL Blending". Format pliku programu [[Paint 256]] zawierającego obraz o rozdzielczości 80x96 bez interlace wykorzystujący efekt "PAL Blending".
-Obraz zawiera surowe dane dwóch obrazów 80x96 pikseli w trybie [[Graphics 9]] i [[Graphics 11]] umieszczonych kolejno po sobie. Każdy obraz stanowi 96 linii po 40 bajtów, czyli 3840 bajtów ($0F00), a więc łącznie 7680 bajtów ($1E00).+Obraz zawiera surowe dane dwóch obrazów 80x96 pikseli w trybie [[Graphics 11]] i [[Graphics 9]] umieszczonych kolejno po sobie. Każdy obraz stanowi 96 linii po 40 bajtów, czyli 3840 bajtów ($0F00), a więc łącznie 7680 bajtów ($1E00).
-Format pliku jest na tyle prosty że można go bez problemu obsłużyć z poziomu chociażby [[Turbo BASIC XL]], posiłkując się jedynie prostą wstawką (w kodzie maszynowym) służącą do przełączania pomiędzy trybami [[Graphics 9]]/[[Graphics 11]]. Przykładowy program ładujący i pokazujący obrazek w tym formacie może wyglądać tak:+<table border=1>
 +<tr><td>offset</td><td>długość</td><td>opis</td></tr>
 +<tr><td>$0000</td><td>$0028</td><td>linia 0 (linia skanningowa 0) w trybie [[Graphics 11]]</td></tr>
 +<tr><td>$0028</td><td>$0028</td><td>linia 1 (linia skanningowa 2) w trybie [[Graphics 11]]</td></tr>
 +<tr><td>...</td><td>...</td><td>kolejne linie w trybie [[Graphics 11]]</td></tr>
 +<tr><td>$0ED8</td><td>$0028</td><td>linia 95 (linia skanningowa 190) w trybie [[Graphics 11]]</td></tr>
 +<tr><td>$0F00</td><td>$0028</td><td>linia 0 (linia skanningowa 1) w trybie [[Graphics 9]]</td></tr>
 +<tr><td>$0F28</td><td>$0028</td><td>linia 1 (linia skanningowa 3) w trybie [[Graphics 9]]</td></tr>
 +<tr><td>...</td><td>...</td><td>kolejne linie w trybie [[Graphics 9]]</td></tr>
 +<tr><td>$1DD8</td><td>$0028</td><td>linia 95 (linia skanningowa 191) w trybie [[Graphics 9]]</td></tr>
 +</table>
 + 
 +Format pliku jest na tyle prosty że można go bez problemu obsłużyć z poziomu chociażby [[Turbo BASIC XL]], posiłkując się jedynie prostą wstawką (w kodzie maszynowym) służącą do przełączania pomiędzy trybami [[Graphics 11]]/[[Graphics 9]]. Przykładowy program ładujący i pokazujący obrazek w tym formacie może wyglądać tak:
{{grafr|Paint256_example_pic.png}} {{grafr|Paint256_example_pic.png}}
10 DIM F$(32):GOSUB 30 10 DIM F$(32):GOSUB 30
Linia 76: Linia 88:
OD OD
OD OD
 +
 +Spotykane są też rozszerzenia [[256]] oraz [[AP2]] dla tego formatu.
[[Kategoria:Atari 8-bit]] [[Kategoria:Atari 8-bit]]
[[Kategoria:Formaty plików]] [[Kategoria:Formaty plików]]

Aktualna wersja

Format pliku programu Paint 256 zawierającego obraz o rozdzielczości 80x96 bez interlace wykorzystujący efekt "PAL Blending".

Obraz zawiera surowe dane dwóch obrazów 80x96 pikseli w trybie Graphics 11 i Graphics 9 umieszczonych kolejno po sobie. Każdy obraz stanowi 96 linii po 40 bajtów, czyli 3840 bajtów ($0F00), a więc łącznie 7680 bajtów ($1E00).

offsetdługośćopis
$0000$0028linia 0 (linia skanningowa 0) w trybie Graphics 11
$0028$0028linia 1 (linia skanningowa 2) w trybie Graphics 11
......kolejne linie w trybie Graphics 11
$0ED8$0028linia 95 (linia skanningowa 190) w trybie Graphics 11
$0F00$0028linia 0 (linia skanningowa 1) w trybie Graphics 9
$0F28$0028linia 1 (linia skanningowa 3) w trybie Graphics 9
......kolejne linie w trybie Graphics 9
$1DD8$0028linia 95 (linia skanningowa 191) w trybie Graphics 9

Format pliku jest na tyle prosty że można go bez problemu obsłużyć z poziomu chociażby Turbo BASIC XL, posiłkując się jedynie prostą wstawką (w kodzie maszynowym) służącą do przełączania pomiędzy trybami Graphics 11/Graphics 9. Przykładowy program ładujący i pokazujący obrazek w tym formacie może wyglądać tak:

Grafika:Paint256_example_pic.png

10 DIM F$(32):GOSUB 30
11 GRAPHICS 0:? 
12 INPUT "ENTER FILENAME ";F$
13 TRAP 25:OPEN #1,4,0,F$
14 GRAPHICS 9
15 SCR=DPEEK(88):GOSUB 20
16 SCR=DPEEK(88)+40:GOSUB 20
17 CLOSE #1
18 X=USR(1536):POKE 764,255
19 GOTO 11
20 ------------------------------
21 FOR I=0 TO 95
22   BGET #1,SCR,40:SCR=SCR+80
23 NEXT I
24 RETURN 
25 ------------------------------
26 GRAPHICS 0:? 
27 ? "Error #";ERR;" at line #";ERL
28 END 
29 ------------------------------
30 DIM A$(128):RESTORE 35:READ A$
31 FOR I=0 TO $24
32   POKE $0600+I,DEC(A$(I*2+1,I*2+2))
33 NEXT I
34 RETURN 
35 DATA A90FCD0BD4D0FBA2C2AD6F028D0AD48D1BD049808D6F02CAD0EFAD0FD22904D0DF68606860

Wykorzystując inny język programowania, np. Action! wcale nie trzeba się uciekać od używania wstawek w kodzie maszynowym czy tez zewnętrznych procedur napisanych w asemblerze, poniższy program odczytuje z dyskietki plik "EXAMPLE.PIC" i pokazuje go ekranie:

INCLUDE "D:IO.ACT"

; Procedura wczytuje dany "pół-obraz" (dane o chrominancji lub luminancji) pod wskazany adres w pamięci

PROC READ(CARD ADR)
BYTE Y

FOR Y=0 TO 95
DO
 BGET(1,ADR,40)
 ADR==+80
OD 

RETURN

; kod startuje od tego miejsca

PROC MAIN()
CARD SCR
BYTE WSYNC=$D40A,VCOUNT=$D40B,PRIOR=$D01B

CLOSE(1) ; zamknięcie kanału IOCB#1 (może być otwarty przez runtime Action! po wywołaniu INCLUDE)
OPEN(1,"D:EXAMPLE.PIC",4,0) ; otwarcie pliku

GRAPHICS(9) ; włączamy tryb graficzny nr 9 (16 odcieni jednego koloru)

SCR=PEEKC(88)    READ(SCR) ; wczytujemy obraz zawierający dane chrominancji i umieszczamy go liniach parzystych
SCR=PEEKC(88)+40 READ(SCR) ; wczytujemy obraz zawierający dane luminancji i umieszczamy go liniach nieparzystych

CLOSE(1) ; zamykamy kanał IOCB#1

; poniższa procedura realizuje przełączanie co linię trybów GTIA (9/11)
DO         
 WHILE VCOUNT#$0F DO OD ; czekamy na linie ekranową #30 (VCOUNT zawiera licznik linii podzielony przez dwa)

 WHILE VCOUNT#112 ; wykonujemy pętlę do czasu aż VCOUNT nie osiągnie wartości 112
 DO
   WSYNC=0    ; czekamy do końca linii skaningowej
   PRIOR=$40  ; włączamy tryb 9 GTIA
   WSYNC=0    ; czekamy do końca linii skaningowej
   PRIOR=$C0  ; włączamy tryb 11 GTIA
 OD
OD

Spotykane są też rozszerzenia 256 oraz AP2 dla tego formatu.

Personal tools