Interlace DIN by Kaz 2010-12-26 15:21:19

Tydzień temu rozpocząłem prezentację artykułów Roberta "Synthpopalooza" Clarka na temat programowych trybów znakowych. Przedstawione zostały tryby Super IRG, Super IRG 2, Super 0. Warto się z nimi zapoznać przed przeczytaniem dzisiejszego odcinka o trybie DIN. Warto też pamiętać, że Bobby pracuje na komputerach NTSC, które w zakresie omawianych w artykule kolorów i artefaktów różnią się od komputerów PAL.

autor cyklu - Bobby Clark




Robert "Synthpopalooza" Clark napisał:

Tryb DIN

W trakcie eksperymentów z trybami znakowymi zaintrygowało mnie kolejne pytanie. Co by się stało, gdybym co przerwanie VBLANK przełączał obraz między trybami ANTIC 2 (GRAPHICS 0) i ANTIC 4 (GRAPHICS 12)? Rezultaty okazały się interesujące.

Pierwszy problem, jaki musiałem przezwyciężyć przy realizacji takiego trybu było wymyślenie sposobu, jak przełączać ANTIC 2 i ANTIC 4 co każde przerwanie VBLANK. Kluczem do rozwiązania jest wskaźnik początku Display List, mieszczący się w komórkach 560 i 561. Jak wiadomo, Display List (DL) jest serią instrukcji mówiącą Atari, jak ma wyglądać obraz w każdej linii ekranu, gdzie w pamięci mieszczą się dane obrazu, etc. Kiedy używasz komendy GRAPHICS, na przykład żeby włączyć tryb GRAPHICS 0, system operacyjny automatycznie utworzy odpowiednią Display List dla GRAPHICS 0, a wskaźnik (560, 561) będzie ją wskazywał.

Aby przełączać się między trybami co każde przerwanie VBLANK potrzebujemy dwóch Display List, które będą przechowywane w pamięci. - jedną dla trybu GRAPHICS 0 i drugą dla GRAPHICS 12 (ANTIC 4), a wskaźnik początku Display List musi być zmieniany co VBLANK. W moim przykładzie na końcu tego artykułu przechowuję Display List na końcu strony 6 (1536), która nie jest używana przez system operacyjny. W komórce 561 ustawiłem 6 (strona 6), a procedura VBI przełącza w komórce 560 początek każdej Display List co przerwanie VBLANK. Ponieważ tryb ten działa na zasadzie interlejsu nazwałem go DIN (od Display Interlace).

Znak w trybie DIN jest bardzo interesujący. Mamy zwykły znak GRAPHICS 0 (siatka 8 na 8 pikseli w dwóch kolorach) z nałożonym znakiem ANTIC 4 (siatka 4x8 w czterech kolorach i jednym dodatkowym kolorem po inwersji). Oznacza to, że na każdy pojedynczy piksel ANTIC 4 wpływa jeden z dwóch kolorów pikseli trybu GRAPHICS 0 (piksele mogą być włączone lub wyłączone) oraz że każde dwa piksele trybu GRAPHICS 0 nadadzą nowy kolor pikselowi znaku w trybie ANTIC 4. Następujący rysunek wyjaśni jak to działa:



Można spojrzeć też inaczej – dostajemy 8 kolorów w rozdzielczości GRAPHICS 0 plus alternatywne dwa kolory jeżeli użyjemy inwersji wideo – łącznie 10 kolorów. Jeżeli dorzucimy artefakty jak w trybie Super 0 to możemy otrzymać do 20 kolorów, a znaki projektujemy używając pary bitów, podobnie jak w trybie Super IRG 2.



Trzeba pokonać pewne trudności, żeby poprawnie wyświetlić obraz w trybie DIN. Największym problemem jest to, że rejestr tła w GRAPHICS 0 jest ustawiany w komórce 710, podczas gdy w ANTIC 4 w komórce 712. Aby zapobiec nadmiarowemu mruganiu ekranu należy w obu rejestrach ustawić ten sam kolor tła, ale jednocześnie zapobiec wyświetlaniu koloru z rejestru 710 w trybie ANTIC 4 (jako, że jest to w tym trybie rejestr jednego z kolorów grafiki, a nie tła). Tak więc procedura VBI musi przełączać co każde przerwanie VBLANK kolor w rejestrze 710 - między kolorem tła i kolorem, który używasz w ANTIC 4.

Podobny problem występuje w rejestrze 709. W trybie GRAPHICS 0 jest on używany do kontroli jasności tekstu, a w ANTIC 4 zawiera jeden z kolorów grafiki. Dlatego procedura VBI musi zmieniać zawartość także tego rejestru, aby oba kolory były od siebie niezależne.

Ostatnim problemem jest inwersja wideo. W tym trybie znaki GRAPHICS 0 w inwersji wyglądałyby okropnie, a dodatkowo utracilibyśmy możliwość korzystania z piątego koloru w ANTIC 4. Rozwiązaniem tego problemu jest dodanie w procedurze VBI przełączania rejestru CHACT (755) między 0 i 2 – tak, aby wyłączyć inwersję wideo w GRAPHICS 0, a włączyć w ANTIC 4, aby chcemy uzyskać piąty kolor.

Przy projektowaniu miłego dla oka obrazu składającego się z kolorów trybu ANTIC 4 oraz artefaktów w GRAPHICS 0 należy pamiętać, że Atari i emulatory inaczej wyświetlają artefakty i przez to końcowy efekt może być różny. Załączam listing programu (PROGRAM7.BAS), który zapisze zestaw fontów na dysk oraz programu (DIN.BAS), który wyświetla ekran w trybie DIN - oba w Atari Basic.





Opis programu

Linie 1020 do 1070 ustawiają dwie Display List (dla ANTIC 2 i ANTIC 4) i przechowują obie na szóstej stronie pamięci. Dzięki takiemu rozwiązaniu wystarczy modyfikować zawartość komórki 560 (młodszy bajt wskaźnika miejsca początku Display Lisy), aby przełączać się między trybem ANTIC 2 i ANTIC 4 co przerwanie VBLANK i otrzymać pożądaną Display List. Następujące rejestry są modyfikowane przez procedurę VBI do uzyskania prawidłowych kolorów:
Dodatkowo – modyfikowany jest rejestr CHACT, aby wyłączyć inwersję wideo, gdy wyświetlany jest tryb ANTIC 2. Redukuje to migotanie obrazu i czyni wyraźniejszym piąty kolor w trybie ANTIC 4 (tutaj: żółty), co poprawia obraz.

Jako piątego koloru ANTIC 4 użyłem jasnego żółtego, a odcieni niebieskiego dla innych rejestrów PF. Te kolory dobrze mieszają się z zielonymi i fioletowymi artefaktami trybu ANTIC 2. Można także wybrać na piąty kolor fioletowy i odcienie zieleni w ANTIC 4, które w połączeniu z artefaktami w ANTIC 2 dadzą bardzo delikatne przejścia kolorów. Jak widać w przykładzie, dzięki artefaktom naprawdę można uzyskać bardzo subtelne kombinacje kolorów i gradienty. Trzeba jednak pamiętać o tym, że różne modele Atari wyświetlają artefakty w różny sposób, więc efekt czasem może być nieprzewidywalny. Wygląda na to, że także emulatory mają problemy z prawidłowym odtworzeniem tego efektu.



Co następne?

To co przeczytaliście dotychczas to dopiero początek podróży w świat nowych programowych trybów znakowych na 8-bitowym Atari. Następnym razem wyjaśnię sposób użycia trybów znakowych GTIA w trybie GRAPHICS 0, aby uzyskać 16 kolorów na piksel w znaku. Zaprezentuję również 6 nowych trybów znakowych opartych na GTIA, które pozwalają wyświetlić do 256 kolorów na ekranie na raz.
Kaz 2010-12-26 16:00:20

Przypomne tez, ze trwa konkurs na gre:

http://atarionline.pl/v01/index.php?subaction=showfull&id=1289763601&archive=&start_from=20&ucat=1&ct=nowinki

Zostaly jeszcze trzy tygodnie - moze ktos pokusi sie o skorzystanie w grze z trybow znakowych pokazanych w artkach Synthpopaloozy?

adv 2010-12-26 20:02:11

Cykl Bobby Clarka to dobra robota. Ostatni akapit tego artykułu to kolejna dobra wiadomość na koniec 2010 roku.

Synthpopalooza 2010-12-27 05:23:25

Thanks for the comments. The article on the GTIA text modes is nearly finished, I just have to work up some demos. It will be in the January issue of AtariUser. February, will be part three, text modes based on the CIN bitmap mode (ANTIC 4 mixed with a GTIA text mode).

homek 2010-12-27 06:49:52

No, a jak który będzie mieć weselicho, to kolega chętnie nabrzdąka "Majteczki w kropeczki" albo inną popularną pieśń weselną. :PP

The Fender 2010-12-27 11:20:09

O to lubię, wykwintne towarzystwo klawiatur muzycznych :)

@Synthpopalooza: I see many keyboards around U. The main looks like Yamaha SY, rest I can't recognize. Maybe write something about this stuff :)

Kaz 2010-12-27 12:00:35

A w tle chyba symbol Linux-a :)

Synthpopalooza 2010-12-27 12:52:08

Ahh. I am a musician (synthpop music) ... the keyboards are: Yamaha DX-100, Kawai K1-ii, Korg Poly 800 II, and I still use an Atari ST when composing music. My website is http://www.synthetikfm.com and I have an album on iTunes and other digital places.

And yes I have always liked penguins :)

The Fender 2010-12-27 13:23:37

Heh, I'm musican too and synthpop is one of my favourities. I listened demo from Your site - nice music, really :)
Listen to one of my compositions - was done for HalfLight (DM like polish band) rmx competition - 4 fun and not 4 win ;). Below link
http://sndlab.com/#I3A6MzA7Y2lkOjIwMzc=
Greetz

The Fender 2010-12-27 13:40:43

alternative link:
http://www.box.net/shared/ez0g4bxfst
-------- ---- - - -
sorry za offtop koledzy, jak chcecie też posłuchajcie będzie mi miło :) (chociaż nie jest to mój najlepszy kawałek i nie atarowski)

Kaz 2010-12-27 13:50:26

TheFender - ladne! Komercyjne czy mozna wykorzystac np. jako podklad do filmiku z grami Atari na YT? :)

The Fender 2010-12-27 14:10:20

Kaz niestety, ale pomimo wielkiej rozbieżności co do oryginału (proponuję posłuchać płytę tego zespołu - jest dostępna w Empik) ten utwór akurat nie za bardzo można Kaz. Są tam użyte sample oraz sam tytuł które należą do HalfLight, ja jestem autorem remixa na konkurs. Gdybyś jednak potrzebował jakiś podkład pod UT coś się wymyśli autorskiego tym razem (w ramach posiadanego czasu oczywiście).

Kaz 2010-12-27 14:16:37

TheFender - dzieki! Akurat nie chce zawracac Ci glowy robieniem czegos specjalnie, bo potrzebuje tylko na szybko podkladu do pewnego prostego filmiku - Twoja praca bylaby niewspolmiernym wkladem w stosunku do filmiku. Dlatego myslalem o skorzystaniu z czegos gotowego.

miska1 2010-12-31 17:48:09

dali byście szampana na główną

miska1 2010-12-31 22:11:21

gdzie ten szampan Kaz

psz 2011-01-01 00:44:04

Wszystkiego dobrego w nowym roku! :)

Kaz 2011-01-01 15:26:54

Miska - pojawil sie :).