Plama 256

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 08:18, 3 sie 2022
Seban (Dyskusja | wkład)
(+przykładowe grafiki z dyskietki z programem + trochę więcej info)
← Previous diff
Wersja z dnia 13:27, 3 sie 2022
Seban (Dyskusja | wkład)
(-stub, +opis formatu danych , przykładowe programy w TBXL umożliwiające podgląd plików)
Next diff →
Linia 12: Linia 12:
Pierwszym znanym programem wykorzystującym ten trym było prawdopodobnie "demo technologiczne" [http://www.atarimania.com/demo-atari-400-800-xl-xe-technicolor-dream-demo_30478.html Technicolor Dream] wydane już w 1986 roku przez RedRat Software. Wydaje się że RedRat software opublikowało kilka dyskietek zawierających różne zestawy obrazków, przykładową kolekcję składającą się z obrazów trzech dyskietek możemy znaleźć w kolekcji [[Fandal|Fandal-a]]: [https://a8.fandal.cz/detail.php?files_id=3722 Technicolor Dream] Pierwszym znanym programem wykorzystującym ten trym było prawdopodobnie "demo technologiczne" [http://www.atarimania.com/demo-atari-400-800-xl-xe-technicolor-dream-demo_30478.html Technicolor Dream] wydane już w 1986 roku przez RedRat Software. Wydaje się że RedRat software opublikowało kilka dyskietek zawierających różne zestawy obrazków, przykładową kolekcję składającą się z obrazów trzech dyskietek możemy znaleźć w kolekcji [[Fandal|Fandal-a]]: [https://a8.fandal.cz/detail.php?files_id=3722 Technicolor Dream]
 +== Format pliku PLM ==
-== Link ==+Program przechowuje obrazki w plikach .PLM, format danych jest niezwykle prosty, plik .PLM zawiera dane obrazu zgrane bezpośrednio z pamięci ekranu, zatem plik przechowujący obrazek w rozdzielczości 80x192 o głębi bitowej 4 bity/piksel zajmuje dokładnie 7680 bajtów ($1E00). Żadne dane o palecie czy rejestrach kolorów nie są przechowane, ponieważ program nie umożliwia manipulacji rejestrami kolorów, a paleta barw jest ściśle określona z góry możliwościami trybu [[Graphics 11]]. Dane obrazu zawierają naprzemiennie dane linii zawierających luminancję i chrominancję (po 40 bajtów na linię). Prostota formatu umożliwia bardzo proste wyświetlanie obrazków w tymże formacie nawet z użyciem BASIC-a. Wszystkie operacje I/O bez problemu można obsłużyć z języku wyższego poziomu, natomiast procedura naprzemiennie zmieniająca tryby GTIA pomiędzy [[Graphics 9]] a Graphics 11 może zostać napisana w assemblerze.
 + 
 +Przykładowy program napisany w [[Turbo BASIC XL]] wyświetlający wszystkie pliki *.PLM znalezione na dysku może wyglądać tak:
 + 100 ------------------------------
 + 110 REM PLAMA256 viewer v.1.1
 + 120 REM done by Seban/SLT, (p) 1995
 + 130 ------------------------------
 + 140 DIM D$(32),N$(32),F$(32)
 + 150 GOSUB 340
 + 160 D$="D:"
 + 170 N$=D$:N$(LEN(D$)+1)="*.PLM"
 + 180 OPEN #1,6,0,N$:TRAP 320
 + 190 INPUT #1,N$
 + 200 F$=D$:I=LEN(F$)+1:J=3
 + 210 FOR J=3 TO 10
 + 220 IF N$(J,J)=" " THEN EXIT
 + 230 F$(I,I)=N$(J,J)
 + 240 I=I+1:NEXT J
 + 250 F$(LEN(F$)+1)=".PLM"
 + 260 OPEN #2,4,0,F$
 + 270 GRAPHICS 9
 + 280 BGET #2,DPEEK(88),$1E00
 + 290 CLOSE #2
 + 300 X=USR(1536)
 + 310 GOTO 190
 + 320 ? :GRAPHICS 0:? "END OF FILES? (";ERR;")"
 + 330 END
 + 340 ------------------------------
 + 350 DIM A$(128):RESTORE 400:READ A$
 + 360 FOR I=0 TO $24
 + 370 POKE $0600+I,DEC(A$(I*2+1,I*2+2))
 + 380 NEXT I
 + 390 RETURN
 + 400 DATA A90FCD0BD4D0FBA2C2AD6F028D0AD48D1BD049808D6F02CAD0EFAD0FD22904D0DF68606860
 + 
 +Program czyta katalog dysku w poszukiwaniu plików *.PLM, a następnie podejmuje próbę otwarcia, wczytania i wyświetlenia każdego z tych plików. Program do zmiany trybów (9/11) w każdej linii wykorzystuje prostą procedurę napisaną w asemblerze a następnie zakodowaną jako ciąg liczb szesnastkowych umieszczonych w linii nr 400. Procedura nie wykorzystuje przerwań [[DLI]], bazuje jedynie na rejestrach [[Rejestry_ANTIC-a|VCOUNT/WSYNC]] aby odczekać odpowiedni okres czasu w zmienić tryb pracy GTIA na końcu każdej z linii obrazu tworzonej przez tandem [[ANTIC_(układ)|ANTIC]] oraz [[GTIA]].
 + 
 +Procedura owa wygląda tak:
 + W0 LDA #$0F ; będziemy czekać na 30-tą linię skaningową
 + W1 CMP VCOUNT ; porównujemy z zawartością licznika linii VCOUNT
 + BNE W1 ; czekamy do czasu aż rej. VCOUNT nie przyjmie ustalonej wartości
 + LDX #$C2 ; rej. X posłuży jako licznik pętli (w tym wypadku liczba linii)
 + W2 LDA GPRIOR ; ładujemy aktualną wartość rej. cienia określającego tryb pracy GTIA
 + STA WSYNC ; odczekujemy do końca linii ekranowej
 + STA PRIOR ; zapisujemy otrzymaną wartość bezpośrednio do układu GTIA
 + EOR #$80 ; zmieniamy tryb GTIA
 + STA GPRIOR ; zapisujemy otrzymaną wartość do rej. cienia
 + DEX ; zmniejszamy rej. X (w tym wypadku licznik pętli)
 + BNE W2 ; czy to już koniec? (rej X=0 ?)
 + LDA SKSTAT ; odczytujemy rej. POKEY zawierający informację o stanie klawiatury
 + AND #$04 ; czy wciśnięto jakiś klawisz? (bit #4 informuje o wciśnięciu klawisza)
 + BNE W0 ; jeżeli nie wciśnięto nic, powtarzamy pętlę
 + PLA ; zdejmujemy ze stosu ilość parametrów przekazaną przez BASIC
 + RTS ; wracamy!
 + 
 +Najprostszy program wyświetlający pojedynczy plik *.PLM o podanej nazwie może wyglądać tak:
 + 10 DIM F$(32):GOSUB 21
 + 11 GRAPHICS 0:?
 + 12 INPUT "ENTER FILENAME ";F$
 + 13 TRAP 19:OPEN #1,4,0,F$
 + 14 GRAPHICS 9
 + 15 BGET #1,DPEEK(88),$1E00
 + 16 CLOSE #1
 + 17 X=USR(1536):POKE 764,255
 + 18 GOTO 11
 + 19 GRAPHICS 0:? :? "ERROR #";ERR
 + 20 END
 + 21 ------------------------------
 + 22 DIM A$(128):RESTORE 27:READ A$
 + 23 FOR I=0 TO $24
 + 24 POKE $0600+I,DEC(A$(I*2+1,I*2+2))
 + 25 NEXT I
 + 26 RETURN
 + 27 DATA A90FCD0BD4D0FBA2C2AD6F028D0AD48D1BD049808D6F02CAD0EFAD0FD22904D0DF68606860
 + 
 +== Linki ==
* [http://atarionline.pl/utils/2.%20Grafika/Plama%20256/Plama%20256.atr Download] * [http://atarionline.pl/utils/2.%20Grafika/Plama%20256/Plama%20256.atr Download]
-{{stub}} 
[[Kategoria:Oprogramowanie Atari 8-bit]] [[Kategoria:Oprogramowanie Atari 8-bit]]
[[Kategoria:Programy użytkowe]] [[Kategoria:Programy użytkowe]]
[[Kategoria:Programy graficzne]] [[Kategoria:Programy graficzne]]

Wersja z dnia 13:27, 3 sie 2022

Plama256_small.png
Przykładowe grafiki dołączone do programu


Program graficzny, napisany w pierwszej połowie lat 90. XX w. przez AB-Soft. Wykorzystywał pełną dostępną paletę Atari (256 kolorów) w trybie graficznym o rozdzielczości 80x96. Wykorzystany tryb graficzny i zasady rysowania są podobne do tych stosowanych w edytorze Paint 256, jednak "Plama 256" nie wykorzystuje techniki interlace stąd pionowa rozdzielczość obrazka to tylko 96 pikseli.

Spis treści

Technikalia

W trybie graficznym w którym pracuje program, linie parzyste określają jasność piksela, natomiast w liniach nieparzystych określane są kolory pikseli. Działanie tego trybu graficznego wykorzystuje specyfikę systemu telewizyjnego PAL, w którym to rozdzielczość pionowa koloru jest dwa razy niższa niż w przypadku jasności. Zatem gdy jedna linia obrazu będzie zawierała informację tylko o jasnościach (luminancja), a druga z sąsiadujących linii będzie zawierała informację o barwach (chrominancję) nastąpi efekt mieszania się zawartości dwóch linii obrazu i nastąpi tzw. "PAL Blending" (efekt nazwany właśnie od standardu kodowania sygnału wizji w którym on występuje). To właśnie dzięki temu "efektowi ubocznemu" występującemu w systemie PAL możliwe jest uzyskanie tego typu trybów graficznych. Efekt ten występuje również w systemie NTSC jednak mieszanie kolorów występuje w znacznie mniejszej skali, przez co ten tryb na komputerach pracujących w systemie NTSC będzie wyglądał dość mało atrakcyjnie (obraz będzie blady i "wyprany" z kolorów").

Ciekawostki

Pierwszym znanym programem wykorzystującym ten trym było prawdopodobnie "demo technologiczne" Technicolor Dream wydane już w 1986 roku przez RedRat Software. Wydaje się że RedRat software opublikowało kilka dyskietek zawierających różne zestawy obrazków, przykładową kolekcję składającą się z obrazów trzech dyskietek możemy znaleźć w kolekcji Fandal-a: Technicolor Dream

Format pliku PLM

Program przechowuje obrazki w plikach .PLM, format danych jest niezwykle prosty, plik .PLM zawiera dane obrazu zgrane bezpośrednio z pamięci ekranu, zatem plik przechowujący obrazek w rozdzielczości 80x192 o głębi bitowej 4 bity/piksel zajmuje dokładnie 7680 bajtów ($1E00). Żadne dane o palecie czy rejestrach kolorów nie są przechowane, ponieważ program nie umożliwia manipulacji rejestrami kolorów, a paleta barw jest ściśle określona z góry możliwościami trybu Graphics 11. Dane obrazu zawierają naprzemiennie dane linii zawierających luminancję i chrominancję (po 40 bajtów na linię). Prostota formatu umożliwia bardzo proste wyświetlanie obrazków w tymże formacie nawet z użyciem BASIC-a. Wszystkie operacje I/O bez problemu można obsłużyć z języku wyższego poziomu, natomiast procedura naprzemiennie zmieniająca tryby GTIA pomiędzy Graphics 9 a Graphics 11 może zostać napisana w assemblerze.

Przykładowy program napisany w Turbo BASIC XL wyświetlający wszystkie pliki *.PLM znalezione na dysku może wyglądać tak:

100 ------------------------------
110 REM PLAMA256 viewer v.1.1
120 REM done by Seban/SLT, (p) 1995
130 ------------------------------
140 DIM D$(32),N$(32),F$(32)
150 GOSUB 340
160 D$="D:"
170 N$=D$:N$(LEN(D$)+1)="*.PLM"
180 OPEN #1,6,0,N$:TRAP 320
190 INPUT #1,N$
200 F$=D$:I=LEN(F$)+1:J=3
210 FOR J=3 TO 10
220   IF N$(J,J)=" " THEN EXIT 
230   F$(I,I)=N$(J,J)
240   I=I+1:NEXT J
250 F$(LEN(F$)+1)=".PLM"
260 OPEN #2,4,0,F$
270 GRAPHICS 9
280 BGET #2,DPEEK(88),$1E00
290 CLOSE #2
300 X=USR(1536)
310 GOTO 190
320 ? :GRAPHICS 0:? "END OF FILES? (";ERR;")"
330 END 
340 ------------------------------
350 DIM A$(128):RESTORE 400:READ A$
360 FOR I=0 TO $24
370   POKE $0600+I,DEC(A$(I*2+1,I*2+2))
380 NEXT I
390 RETURN 
400 DATA A90FCD0BD4D0FBA2C2AD6F028D0AD48D1BD049808D6F02CAD0EFAD0FD22904D0DF68606860

Program czyta katalog dysku w poszukiwaniu plików *.PLM, a następnie podejmuje próbę otwarcia, wczytania i wyświetlenia każdego z tych plików. Program do zmiany trybów (9/11) w każdej linii wykorzystuje prostą procedurę napisaną w asemblerze a następnie zakodowaną jako ciąg liczb szesnastkowych umieszczonych w linii nr 400. Procedura nie wykorzystuje przerwań DLI, bazuje jedynie na rejestrach VCOUNT/WSYNC aby odczekać odpowiedni okres czasu w zmienić tryb pracy GTIA na końcu każdej z linii obrazu tworzonej przez tandem ANTIC oraz GTIA.

Procedura owa wygląda tak:

W0 LDA #$0F		; będziemy czekać na 30-tą linię skaningową
W1 CMP VCOUNT	        ; porównujemy z zawartością licznika linii VCOUNT
   BNE W1		; czekamy do czasu aż rej. VCOUNT nie przyjmie ustalonej wartości
   LDX #$C2		; rej. X posłuży jako licznik pętli (w tym wypadku liczba linii)
W2 LDA GPRIOR	        ; ładujemy aktualną wartość rej. cienia określającego tryb pracy GTIA
   STA WSYNC	        ; odczekujemy do końca linii ekranowej
   STA PRIOR	        ; zapisujemy otrzymaną wartość bezpośrednio do układu GTIA
   EOR #$80		; zmieniamy tryb GTIA
   STA GPRIOR	        ; zapisujemy otrzymaną wartość do rej. cienia
   DEX			; zmniejszamy rej. X (w tym wypadku licznik pętli)
   BNE W2		; czy to już koniec? (rej X=0 ?)
   LDA SKSTAT	        ; odczytujemy rej. POKEY zawierający informację o stanie klawiatury
   AND #$04		; czy wciśnięto jakiś klawisz? (bit #4 informuje o wciśnięciu klawisza)
   BNE W0		; jeżeli nie wciśnięto nic, powtarzamy pętlę
   PLA			; zdejmujemy ze stosu ilość parametrów przekazaną przez BASIC
   RTS			; wracamy!

Najprostszy program wyświetlający pojedynczy plik *.PLM o podanej nazwie może wyglądać tak:

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

Linki

Personal tools