Historické okienko – ZX Spectrum a farby

Napísal mi Jirka, že odkaz na článok vo Fife v zápiskoch z Foreveru 2018 nestojí zaveľa, pretože text je ťažko čitateľný a zle sa lúšti. Pomohol mi tým, že článok vlastnoručne oskenoval a zOCRkoval. Ja som už len opravil zopár preklepov a pridal tapky z listingov a nimi vygenerované obrázky.

Prosím berte do úvahy, že článok vznikol niekde na prelome rokov 1991/92, keď som mal Deltu síce už tri roky, ale farebný televízor ani nie pol, takže farbičky boli pre mňa úplne nepreskúmaná oblasť 🙂


FIFO 16, strana 6

ZX SPECTRUM A FARBY


Ako to s tými farbami vlastne je? Túto otázku si kladie takmer každý Spectrista. Je totiž všeobecne známe, že Spectrum to nemá s farbami také jednoduché.

Problémy robí nielen ich usporiadanie do atribútových štvorcov, ale aj ich obmedzená paleta.

Skúsme sa teda spoločne pozrieť na jadro veci.

Ako každý začiatočník, aj ja som si myslel, že farieb na Spectre je osem. Potom som sa však skamarátil s funkciou BRIGHT a počet farieb sa rázom zdvojnásobil. Ale čierna farba s BRIGHTom zodpovedá normálnej čiernej. Takže som zistil, že farieb je 2*8-1 -15 farieb. Toto si môžete skontrolovať, ak prepíšete do počítača program podľa listingu 1.

Existuje však spôsob, ako na obrazovku dostať aj väčšie množstvo farebných kombinácií. Pokiaľ si do Spectra nahráte hru BLOOD BROTHERS, zistíte, že v úvodnom screene (v prvom po spustení hry) sa nachádza aj akási šedá farba. Keď som ju po prvý krát uvidel, tak ma to trochu zaskoälo a začal som uvažovať, ako sa tam mohla dostať. Po chvíľke mi to došlo. Zistil som. že to nie je vôbec žiadny problém a odvodil som veľmi jednoduchú teóriu:

Ak dvom susediacim bodom pridelíme rozličnú farbu, výsledný efekt bude taký. že na obrazovke uvidíme iba farbu jednu, ktorá bude namiešaná z farieb jednotlivých bodov. Táto vlastnosť vyplýva z pomerne nekvalitného zobrazenia na bežnom farebnom televízore (ale tiež z dynamickej činnosti obvodu ULA) a na listingu č. 2 je program, ktorý túto vlastnosť využíva.

Pomocou neho si môžete vyskúšať všetky dosiahnuteľné farebné kombinácie. Teoreticky vychádza, že miešaním by sme mohli zobraziť až 2*(8*8-8) – 112 farieb (pričom číslo 2 vo vzťahu vyjadruje možnosť použiť normálny alebo zvýšený jas. 8*8 je počet farieb pri kombinácii a -8 vyjadruje neprípustnosť miešať rovnaký INK a PAPER).

Ak k tomu prirátame 16 základných farieb, dopracujeme sa k výsledku 128. Čo je už celkom slušný počet Keď som odladil program, ktorý naraz nakreslil všetky tieto farby na obrazovku (listing 3), sám som užasol nad výsledkom. Spamätal som sa tak asi po piatich minútach a začal som racionálne rozmýšľať o tom, kde sa to vlastne bude dať využiť.

Jednoznačné by bolo využitie pri nepohyblivej grafike, hlavne pri tehličkovkách. Určité problémy by nastali pri animácii, rolovaní a podobne. Tiež by nebolo jednoduché vkladať do plôch vyplnených týmito farbami grafiku alebo text, ale nie je to nemožné (čitateľnosť príp. zreteľnosť závisí od toho aké farby miešame). Plochy, ktoré môžu tieto farby zapĺňať by mali byť štvorcové alebo v tvare obdĺžnika, príp. štvorcovo alebo obdĺžnikovo členité.

Teraz si ešte vyskúšajte program podľa listingu 4. Pomocou neho sa dá jeden atribútový štvorec vyfarbiť až tromi namiešanými farbami. Výsledok však nie je veľmi presvedčivý.

V programe môžete zmeniť jednotlivé farby na týchto adresách:

40009 – pre hornú tretinu atribútového štvorca (AŠ)
40014 – pre strednú 1/3 AŠ
40019 – pre spodnú 1/3 AŠ

Hodnotu atribútu si vyrátate podľa vzorca: a=p*8+i,

kde „a“ je výsledok, „p“ je číslo farby papiera, „i“ je číslo farby pera. Ďalšie experimentovanie už prenechám na vás. Snáď sa niekomu z vás podarí prinútiť naše staré dobré Spectrum, aby zobrazilo aspoň tých 4096 farieb ako AMIGA

Ak na niečo prídete, nenechajte si to pre seba, ale pošlite to do redakcie FIFA. Pri prípadných nejasnostiach alebo problémoch (ohľadom článku alebo programov) sa môžete prostredníctvom redakcie obrátiť na autora

Chcel by som ešte dodať, že programy boli odladené na ZX Spectre+ a FTVP Rubín-Tesla C392D. Verím, že budú rovnako fungovať na všetkých počítačoch a TVP.

– ikon –

Obsah listingov v TAP

LISTING 1:

5 BORDER 6
10 CLS: LET A$ = "                ": REM 16 MEDZIER
20 FOR N = 0 TO 6
30 FOR M = 0 TO 2
40 FOR B = 0 TO 1
50 PRINT PAPER N; BRIGHT B; A$;
60 NEXT B
70 NEXT M
80 NEXT N
90 PRINT AT 21,0; PAPER 7; A$; BRIGHT 1; A$
100 PRINT #1; PAPER 7; A$; BRIGHT 1; A$
110 PRINT #1 ;AT 0,0; PAPER 7; A$; BRIGHT 1; A$
120 PAUSE 0

LISTING 2:

5 BORDER 0: PAPER 0: INK 0: CLS
10 FOR N = 0 TO 7: READ A: POKE USR "A"+N,A: NEXT N
20 DATA 170,85,170,85,170,85,170,85
30 LET A$= "           ": REM 11 MEDZIER
40 LET B$ = "AAAAAAAAAA": REM 10 * GRAFICKE A
50 LET P=4: LET I=0: LET B=0
60 PRINT INK I; PAPER P; BRIGHT B; B$; BRIGHT 0; A$; BRIGHT 1; A$
70 INPUT "INK "; I: INPUT "     PAPER "; P: INPUT "BRIGHT "; B
80 GO TO 60

LISTING 3:

1 FOR N = 0 TO 7: READ A: POKE USR "A"+N,A: NEXT N
5 DATA 170,85,170,85,170,85,170,85
10 BORDER 0: PAPER 0: CLS
20 FOR N = 0 TO 7
30 FOR M = 0 TO 7
35 FOR B = 0 TO 1
40 PRINT BRIGHT B; PAPER N; INK M;"AAA": REM 3 * GRAFICKE A
45 NEXT B
50 NEXT M
60 NEXT N

LISTING 4:

5 REM MIESANIE FARBY STROJAK
10 PAPER 0: BORDER 0: INK 7: CLEAR 39999
15 LET S = 0
20 FOR N = 40000 TO 40043
30 READ A: POKE N,A
40 LET S = S + A
50 NEXT N
60 IF S<>4777 THEN PRINT " CHYBA V DATACH ": STOP
70 DATA 251,118,205,92,156,33,0,88,54,30,205,103,156,54,47
71 DATA 205,103,156,54,48,58,8,92,254,32,32,230,201
75 REM ^ HLAVNY PROGRAM
80 DATA 6,20,197,6,48,16,254,193,16,248,201
85 REM ^ CAKACI CYKLUS 1
90 DATA 6,30,16,254,201
95 REM ^ CAKACI CYKLUS 2
100 FOR N = 0 TO 7: READ A: POKE USR "A"+N,A: NEXT N
110 DATA 170,85,170,85
120 DATA 170,85,170,85
130 RANDOMIZE USR 4E4
140 PRINT AT 0,0; OVER 1;"A": REM GRAFICKE A
150 POKE 23560,0: GO TO 130


Toľko pôvodný článok a teraz aktualizácia k PP01: Ak už máte stiahnutý najnovší emulátor od Romana Bórika, môžete si spustiť tento PTA súbor prípadne preťukať listing do reálnej mašiny:

5 SETCHAR 1 170,85,170,85,170,85,170,85
10 PAPER 0: INK 7: CLEAR
15 FOR B = 0 TO 3
20 FOR N = 0 TO 7
30 FOR M = 0 TO 7
35 PAPER N: INK M
40 PRINT CHR$(1);CHR$(1);CHR$(1);
50 NEXT M
60 NEXT N
70 NEXT B
100 INK 0

A výsledok  sa dostaví…

2 komentáre pri “Historické okienko – ZX Spectrum a farby

  1. Problémem tohoto přístupu bylo a je, že ZX Spectrum nemá čistý RGB výstup, takže se to na obrazovce různě slívá a vytváří další pohyblivé odstíny a vzorce často mimo původní záměr. Stejně je chybou, že nejen Spectrum ale i C-64 neměly selektivní barevnou paletu jako např. Atari 800. Nemyslím si, že by to představovalo až takový problém nebo ano?

  2. V časoch, keď pôvodný článok vznikal som nemal na TV ani len videovstup, takže počítač bol pripojený cez anténu. Tam sa už do dvakrát skonvertovaného obrazu zanáša omnoho viac rušenia. Hoci mierne rozmazaný výsledok, ale o to pôsobivejší. Myslím, že selektívna paleta by situáciu veľmi nezlepšila, iba by posunula namiešané farby k iným odtieňom.
    Dnes v dobe ostrého RGB obrazu na pôvodných mašinách alebo ešte ostrejšieho na emulátoroch stráca pôvodný elaborát svoje opodstatnenie. Zaradil som ho sem hlavne z nostalgie 🙂

Pridaj komentár