Plama 256
From Atariki
Wersja z dnia 22:25, 31 lip 2022 Mono (Dyskusja | wkład) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Format pliku PLM) |
||
Linia 1: | Linia 1: | ||
- | Program graficzny, napisany w pierwszej połowie lat 90. XX w. przez AB-Soft czyli Adama Budziarka z Gdańska. | + | {{grafr|Plama_prg.png}} |
- | Wykorzystywał pełną dostępną paletę Atari w trybie graficznym, którego zasady są takie same jak w edytorze [[Paint_256]]. | + | 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. Użyty tryb graficzny i zasady rysowania są podobne do tych stosowanych w edytorze [[Paint 256]], "Plama 256" tak samo jak "Paint 256" nie wykorzystuje techniki [[interlace]] (tak jak np. [[Digi-Paint]]), stąd pionowa rozdzielczość obrazka to tylko 96 pikseli. |
+ | == Technikalia == | ||
- | == Link == | + | 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 [https://pl.wikipedia.org/wiki/PAL 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 ([https://pl.wikipedia.org/wiki/Luminancja luminancja]), a druga z sąsiadujących linii będzie zawierała informację o barwach ([https://pl.wikipedia.org/wiki/Chrominancja 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 tryb 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 == | ||
+ | |||
+ | Program przechowuje obrazki w plikach .PLM, [[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: | ||
+ | {{ImgFrm2|http://atariki.krap.pl/images/f/f2/Plama256_small.png|http://atariki.krap.pl/images/e/e6/Plama256.png|Przykładowe grafiki dołączone do programu}} | ||
+ | 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 | ||
+ | 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 #2 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 == | ||
+ | * [[PLM|Format danych PLM]] | ||
* [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]] |
Aktualna wersja
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. Użyty tryb graficzny i zasady rysowania są podobne do tych stosowanych w edytorze Paint 256, "Plama 256" tak samo jak "Paint 256" nie wykorzystuje techniki interlace (tak jak np. Digi-Paint), 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 tryb 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 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 #2 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