1

Temat: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Witam.
Tak jak obiecałem wrzucam oscylogram z moich badań nad kodowaniem koloru.

Plik calalinia.jpg to jest ogólny widok jednej linii ekranu.
Kolor Zielony - sygnał chroma na pinie GTIA. Kolor jasno brązowy sygnał PAL wejście do GTIA - czyli podnośna koloru 4,43Mhz.
W spakowanym pliku dla zainteresowanych są powiększone fragmenty opisane jako Linia1, Linia2, Burst1, Burst2. Oraz cały oscylogram w pliku WFM (można oglądać programem wfm_view).

Podnośna koloru jest synchronizowana z zegarem atari w stosunku 4:5, wykonuje to układ zbudowany na U21, Y2 i Q6 (wg. schematu 65XE PAL). Ma to na celu zapewnieni prawidłowego koloru w każdym punkcie ekranu, ułatwia modulację itd. Dlatego też Atari w wersji PAL taktowane jest innym zegarem (ale to nie jest tajemnicą).

Ciekawostki i dziwactwa zaczynają się jenak nieco dalej.

W pliku calalinia widać oscylogram całej jednej linii obrazu, oraz początek następnej. (za początek przyjąłęm początek burstu)
Obrazem był pusty ekran atari basic bez znaków i kursora na ekranie, żadnych zmian w rejestrach kolorów itd.

1. Dziwactwo, sygnał burst w naprzemiemmnnych liniach jest nieco przesunięty w fazie.
2. W naprzemiennych liniach wg standardu PAL, sygnał chroma powinien być przesunięty o 180°  ale wgląda to tak, że do tych 180° dodało się jeszcze jakieś niewielkie opóźnienie bramki odwracającej sygnał... cóż inżynierowie Atari na NTSC się wychowali :D a PAL znali pewnie głównie z dokumentacji. Tłumaczy to różnicę w kolorach w naprzemiennych liniach.
3. hue 1 i hue 15 (kolor 31 i 255)w naprzemiennych liniach jest kodowane albo IDENTYCZNIE, albo różnie. W efekcie na ekranie tej różnicy wogóle nie widać. Nie wiem czy o wina mojego egzemplarza GTIA, czy tak jest i już. NA emulatorze też nie zauważyłem różnicy.

Z pomiarów wynika że kolejne stopnie linii opóżniającej kodującej kolor mają opóźnienie ca. 16ns. (ca. 20ns dla NTSC wg. dostepnej dokumentacji)

Z powyższego można również wyciągnąć wnioski, że tor kodowania koloru PAL z stosunku do NTSC do którego jest dostępny schemat, różni się tym że są prawdopodobnie dwa różne tory przebiegu podnośnej koloru przed docelowym koderem. Wnioskuję to po drobnej różnicy fazowej sygnału burst. Drugi tor dodatkowo posiada inverter, który po sygnale burst zmienia fazę sygnału ... i wprowadza dodatkowe, drobne opóźnienie, objawiające się różnicą kolorów w parzystych i nieparzystych liniach.

Badanie działania GTIA najlepiej przeprowadzać, podając na wejście PAL nie sygnał podnośnej koloru, a sygnał OSC ;) (analogicznie do pierwowozoru NTSC).

Badania przeprowadzałem w trybie GR.15 tło czarne, i narysowane 3 pixle, 0,0 i 2,0 z hue=0 (wartośc koloru 31) oraz pixel 1,0 z hue = 15 (wartość koloru 255). (plik hue1-15-1.jpg) - nie ma różnicy mięczy pixelami. żółty OSC, niebieski wyjście chroma GTIA, na wejście PAL podany sygnał OSC.

Następnie te same pixele narysowane linię niżej :) (brak pliku)

Niestety skasowałem większość oscylogramów z badań nad kolorem bo uznałem je za nieprzydatne, przeprowadzałem je w innym celu i wtedy nie widziałem w nich niczego wartościowego. W raze konieczności można je łatwo powtórzyć.

Mam nadzieję że się to komuś przyda :)
Pozdrawim
Willy.

Post's attachments

calalinia.jpg 38.49 kb, liczba pobrań: 18 (od 2013-01-17) 

hue-1-15-1.jpg 28.68 kb, liczba pobrań: 9 (od 2013-01-17) 

hue-1-2-1.jpg 28.89 kb, liczba pobrań: 4 (od 2013-01-17) 

opr.rar 394.7 kb, liczba pobrań: 20 (od 2013-01-17) 

Tylko zalogowani mogą pobierać załączniki.
"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

2

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Ciekawe badania. Czyli GTIA PAL ma jednobitowy licznik linii. Ciekawe, czy można go oszukać metodą Rybagsa?

willy napisał/a:

3. hue 1 i hue 15 (kolor 31 i 255)w naprzemiennych liniach jest kodowane albo IDENTYCZNIE, albo różnie. W efekcie na ekranie tej różnicy wogóle nie widać.

Nie zrozumiałem.

https://www.youtube.com/watch?v=jofNR_WkoCE

3

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Już wyjaśniam.

Niestety te oscylogramy skasowałem ...

Więc tak (nazwa linie parzyste i nieparzyste jest umowna, raczej należało by mówić o liniach zwykłych i przesuniętych fazowo)
W lini "nieparzystej", jeżeli są obok siebie pixele o hue równym odpowiednio 1,15,1 - to na oscylogramie wygląda to jakby nie było żadnej różnicy !! 3 identyczne kolory, a powinna być różnica około 16ns.
W linii  "parzystej" róznica w kodowaniu jest bardzo widoczna. Jednak na ekranie nadal różnicy nie widać.

hue = 1 to około 12 stopni
hue = 15 to 360-12 stopni

W każdym razie powinna między nimi być różnica około 16ns a w liniach parzystych ( nieodwróconych ) nie widać na oscyloskopie różnicy.
Niestety nie mam pewności czy to wina mojego egzemplarza GTIA, czy wszystkie tak mają. Jak dostanę GTIA w wersji NTSC to powtórzę badania i porównam obserwacje.

Co do licznika linii w GTIAi jego oszukiwania, myślę że jest on przełączanyg dzieś  na gdy ANTIC zaczyna lub kończy wysyłać info o Hsync. Z drugiej strony oszukanie jego spowoduje bądź odwrócenie kolorów (w fazie o 180stopni) dądź całowitą utratę informacji o kolorze, ale skłaniam się przy tym pierwszym.

Zauważ że na oscylogramie kilkadziesiąt ns za burstem i kilkadzisiąt ns przed pierwszym pixelem widać wyraźne glitche !!
Mogą to być artefakty pochodzące z zakłóceń generowanych przez logikę PAL (licznik linii i ogwracacz fazy)

Któregoś razu jak wkońcu wylutuję GTIA zrobię jej zdjęcie rentgenowskie, będzie można chociaż porównać kształt jądra i ew bonding z NTSC. Sprzęt go którego mam dostęp na więcej nie pozwala.

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

4

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Dziękuję za udostępnienie wyników.

willy napisał/a:

Witam.
1. Dziwactwo, sygnał burst w naprzemiemmnnych liniach jest nieco przesunięty w fazie.

Żadne dziwactwo - z tego co wiem, w PAL faza bursta w liniach z "odwróconą fazą" jest o 90° opóźniona w stosunku do linii "zwykłych" - tylko dzięki temu odbiornik odróżnia linie zwykłe od "odwróconych".

willy napisał/a:

2. W naprzemiennych liniach wg standardu PAL, sygnał chroma powinien być przesunięty o 180°

Niezupełnie. W liniach PAL faza chromy jest nie przesunięta o 180°, lecz "odwrócona w czasie" -  w sensie takim, że jej przesunięcie powoduje zmianę barwy w "odwrotną" stronę niż w liniach zwykłych.

willy napisał/a:

Z pomiarów wynika że kolejne stopnie linii opóżniającej kodującej kolor mają opóźnienie ca. 16ns. (ca. 20ns dla NTSC wg. dostepnej dokumentacji)

To nie tak. Opóźnienie jest zależne od napięcia przyłożonego do nóżki DEL, a w konsekwencji - od ustawienia potencjometru regulacji koloru. Przy czym w service manualach do komputerów NTSC można wyczytać, że prawidłowym ustawieniem jest takie, w którym kolory 1 i 15 są identyczne. Odpowiada to opóźnieniu ok. 19,95ns pomiędzy każdymi dwoma kolejnymi kolorami.

W PAL jest tak samo - potencjometrem reguluje się opóźnienie. Tylko że zależności są bardziej skomplikowane; w szczególności nożka DEL daje różne opóźnienia dla kolorów w liniach parzystych i nieparzystych. Algorytm będący zgrubnym przybliżeniem rzeczywistości wrzuciłem w tym poście (Altirra fazy kolorów wylicza bardzo podobnie).

Domyślam się, że podczas swoich badań nie dotykałeś się do potencjometru koloru. Szkoda, bo byłoby to dla nas niezwykle pouczające.

Skoro piszesz, że w razie potrzeby możesz powtórzyć analizę, to mam do Ciebie prośbę: tutaj taki oto programik, który wyświetla 2 linie (parzystą i nieparzystą), w każdej wyświetla wszystkie 15 chrominancji. Czy mógłbyś zrobić z tych 2 linii oscylogram taki jak wcześniej załączyłeś? Ale nie jeden, tylko wiele, każdy przy innym ustawieniu potencjometru koloru - od jednego ustawienia krańcowego do drugiego. Pozwoli mi to być może na odtworzenie dokładnego algorytmu generowania kolorów. W NTSC to zostało już zrobione dawno, w PAL jeszcze nie.

10 GRAPHICS 11
20 FOR I=0 TO 14:COLOR I+1
30 PLOT I*5,0:DRAWTO I*5+3,0
40 PLOT I*5,1:DRAWTO I*5+3,1
50 NEXT I
60 GOTO 60
willy napisał/a:

Badanie działania GTIA najlepiej przeprowadzać, podając na wejście PAL nie sygnał podnośnej koloru, a sygnał OSC ;) (analogicznie do pierwowozoru NTSC).

Dlaczego tak jest najlepiej?

A8CAS - narzędzie do 100% archiwizacji kaset Atari

5

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Jakoś nie po drodze mi było do oscyloskopu ostatnio, więc dopiero dzisiaj poknułem nieco.

Dlaczego napisałem że badać najlepiej poprzez podanie sygnału OSC na wejście PAL - lepiej widać zaleźności fazowe, które są i tak zawiłe. Po drugie to GTIA była projektowana pod NTSC a potem zaadaptowana do PAL (TIA -> CTIA -> GTIA ->). Po trzecie mnie interesowały zależności czasowe na poziomie pixela. (color127.png)

Faktycznie źle zinterpretowałem fazę sygnału burst. W kolejnych liniach powinno to być 135 i 225 stopni, czyli jak Napisałeś 90 stopni różnicy między kolejnymi liniami.


Z dzisiejszych obserwacji na szybko wynika że:

Faza sygnału BURST jest także zależna od napięcia na nóżce DEL.  (Przy taktowaniu częstotliwością PAL nie ma innej opcji) A że przesunięcie fazy jest uzyskiwane z linii opóźniającej (!) to nie da się uzyskać ani dobrej fazy, ani dobrego wypełnienia. (!)
Dlatego kolor w kolejnych liniach będzie się różnił, i ciężko to będzie wyeliminować.

Rozwiązaniem było by pewnie użycie kwarcu o freq=4*PAL=17.734475 lub przynajmniej 2*PAL. Ten pierwszy był użyty w C64, ale samych szczegółów twożenia obrazu nie znam.

Dlatego uważam, co napisałem powyżej, że GTIA została zaadaptowana do PAL, z niezłym efektem, TANIO, przez niewielką modyfikację - jednak nie bezbłędnie.


W załączeniu 12 oscylogramów do powyższego programiku, opisanych kolejno:

5v-pal-1

1 Liczba - napięcie na nóżce DEL tu 5V
pal - przebieg referencyjny tutaj pal lub osc - aby wyznaczyć granicę pixli. Idealne było by użycie 3 kanałów, ale nie posiadam takiego w domu.
ostatnia liczba to numer linii 1 lub 2. pamięć oscyloskopu nie pozwala zapamiętać więcej przy zachowaniu przyzwoitej rozdzielczości przy której coś widać.

Mam nadzieję że ktoś z tego zrobi użytek :)
Pozdrawiam
Willy.

Post's attachments

15chroma i linie.rar 94.57 kb, liczba pobrań: 25 (od 2013-01-23) 

color127.jpg 28.21 kb, liczba pobrań: 7 (od 2013-01-23) 

Tylko zalogowani mogą pobierać załączniki.
"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

6

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Wielkie dzięki! Za parę dni zabiorę się za analizę, i wtedy powiem coś konstruktywnego.

Póki co zwrócę tylko uwagę, że coś chyba pomieszałeś z plikami - 7v-pal-1 i 9v-pal-1 są identyczne.

9 woltów? GTIA.PDF mówi, że napięcie na DEL powinno być od 3 do 8. Albo źle rozumiem, albo coś sobie spalisz :-)

A8CAS - narzędzie do 100% archiwizacji kaset Atari

7

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Jest to możliwe że pliki są identyczne, to jest 7v-pal-1 - przy 9v-pal-1 mam notatke że może być z nim coś nie tak, i jak widać jest.
Jeżeli jest niezbędny to daj znać powtórzę operację.

9 woltów? GTIA.PDF mówi, że napięcie na DEL powinno być od 3 do 8. Albo źle rozumiem, albo coś sobie spalisz :-)

Wg. datasheeta tak rzeczywiście jest. Podwajacza napięcia (q1, cr2, cr3 i wszystko wokoło) daje ca. 9V. I tyle tam jest przy skrajnym położeniu potencjometru. Więc raczej nic sobie nie powinienem spalić :) A z tego co mi wiadomo od kręcenia tym jeszcze nikt nie spalił GTIA.

Ostatnio edytowany przez willy (2013-01-24 19:17:23)

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

8

Odp: Kodowanie koloru PAL w Atari. (PAL GTIA Reverse engineering)

Trochę się zeszło, ale w końcu przerobiłem temat. Musiałem samemu oprogramować obsługę formatu WFM.

Tematem było obliczenie przesunięć fazowych na nóżce COL względem podnośnej koloru doprowadzonej na nóżkę PAL. Podnośna ma częstotliwość 4433618,75 Hz (ok. 4,43 MHz). Do analizy wykorzystałem pliki:
5v-pal-2.wfm - zrzut sygnałów PAL i COL z linii 32
5v-pal-1.wfm - zrzut sygnałów PAL i COL z linii 33
7v-pal-1.wfm - zrzut sygnałów PAL i COL z linii 32
7v-pal-2.wfm - zrzut sygnałów PAL i COL z linii 33
9v-osc-1.wfm - zrzut sygnałów OSC i COL z linii 32
9v-pal-2.wfm - zrzut sygnałów PAL i COL z linii 33

Po pierwsze, nazwy plików 5v-* były zamienione. Po drugie, brakowało prawidłowego pliku 9v-pal-1.wfm. Na szczęście plik 9v-osc-1.wfm na końcu zawiera zrzut colorbursta z następnej linii - pozwoliło mi to odtworzyć brakujące przesunięcia fazowe.

Oto poglądowy wykres obrazujący jak PAL GTIA opóźnia sygnał PAL:
Opóźnienia PAL GTIA

Oś pozioma to poszczególne chrominancje: e1, e2, ..., eF - chrominancje $1..$f w linii parzystej; o1, o2, ..., oF - chrominancje w linii nieparzystej. Oś pionowa to opóźnienie; jednostką jest tutaj długość pełnego cyklu podnośnej koloru, czyli 1/(4,43 MHz) = ok. 255,55 ns.

Np. wartość 0,6 w kolumnie e7 oznacza, że sygnał na nóżce COL dla chrominancji $7 w liniach parzystych przy napięciu 7V na nóżce DEL jest opóźniony w stosunku do sygnału na nóżce PAL o 0,6/(4,43 MHz) = ok. 135,77 ns.

Na wykresie nie widać, ale opóźnienie sygnału colorbursta jest równe opóźnieniu chrominancji $1: e1 w liniach parzystych, o1 w nieparzystych.

Od razu widać, że GTIA różnie opóźnia sygnały dla tej samej chrominancji w liniach parzystych i nieparzystych. Nie dziwota, tak ma być w systemie PAL.

Ogólny wzór na opóźnienie jest następujący:
PAL_DELAY(hue) = 95,2 ns + ADD(hue)*100,7 ns + MULT(hue)*X
gdzie
ADD(hue) może być 0 lub 1,
MULT(hue) może być 0, 1, 2, ..., 7,
X zależy od napięcia na nóżce DEL.

Przyporządkowanie parametrów ADD i MULT jest z grubsza dowolne - inaczej niż w NTSC, gdzie wzór na opóźnienie wygląda mniej więcej tak:
NTSC_DELAY(hue) = 150 ns + hue*X

Zależność między napięciem na nóżce DEL a opóźnieniem X jest nieliniowa - dla danych punktów pomiarowych wynosi ok.:
17.37 ns dla 5V,
10.60 ns dla 7V,
7.44 ns dla 9V.
Może jest to zależność logarytmiczna, może kwadratowa - nie wiem, elektronikiem nie jestem, nie znam się. Może ktoś z Was kto się zna na tranzystorach, wie, jak takie opóźnienie jest fizycznie zrealizowane, i mi podpowie.

Wygląda to tak, jakby układ miał 7-elementową linię opóźniającą (regulowaną napięciem na DEL) i jeszcze dodatkowy element, który opóźnia sygnał o 100,7 ns (albo o 1/(4,43 MHz) - 100,7 ns; trudno powiedzieć które opóźnienie jest bazowe względem którego). Ciekawostka - na oscylogramach widać, że kształt fali dla chrominancji, które "przechodzą" przez ten dodatkowy element opóźniający, jest inny niż dla pozostałych chrominancji - wygląda jakby był odwrócony w pionie.

Widać że w implementacji kodowania PAL panowie poszli na łatwiznę. Według standardu przesunięcie fazowe między colorburstami w liniach parzystych i nieparzystych powinno być dokładnie 90°. W GTIA zależy ono od napięcia na nóżce DEL. Niesie to za sobą interesujące konsekwencje:
1. Telewizor w każdej linii odtwarza oryginalną podnośną koloru poprzez zsumowanie colorburstów z ostatnich dwóch linii (parzystej i nieparzystej). Jak pamiętamy z matematyki ;-) sumowanie dwóch sinusoid o tej samej częstotliwości i amplitudzie lecz o różnych fazach daje w wyniku sinusoidę, której amplituda jest zależna od przesunięcia fazowego między składowymi sinusoidami. Ponieważ amplituda podnośnej jest używana jako punkt odniesienia dla nasycenia kolorów, efekt jest taki że regulując napięcie na nóżce DEL zmieniamy nie tylko wewnętrzne opóźnienia, ale też nasycenie kolorów.

2. Dając odpowiednio niskie napięcie na DEL (niższe niż 5V) możemy doprowadzić do tego, że przesunięcie fazowe między colorburstami "parzystymi" i "nieparzystymi" wyniesie nawet 180°. W takiej sytuacji telewizor nie potrafi już odróżnić linii parzystych od nieparzystych - mój odbiornik wtedy przestaje w ogóle interpretować sygnał koloru i wyświetla obraz czarno-biały.

3. Dając jeszcze niższe napięcie możemy doprowadzić do przesunięcia między colorburstami większego niż 180°. Wtedy telewizor zaczyna interpretować kolory "odwrotnie" - linie nieparzyste traktuje jak parzyste i na odwrót.

W każdym razie - analiza pozwoliła dokładnie odtworzyć sposób generowania koloru przez PAL-owski GTIA. Implementacja trafiła właśnie do Atari800. Wyżej wymienione 3 "interesujące konsekwencje" zostały zaimplementowane, ale jednej rzeczy wciąż brakuje - paleta emulatora ma nadal tylko 256 kolorów, uśrednionych na podstawie wyliczeń dla linii parzystych i nieparzystych. Nie da się wyświetlić więcej niż 256 kolorów tak jak potrafi to prawdziwe GTIA. Taka zmiana wymagać będzie poważniejszego przeorania emulatora - nie wiadomo ile to zajmie.

Wielkie dzięki dla Willy'ego!

Ostatnio edytowany przez Krótki (2013-04-07 09:29:25)

Post's attachments

PAL GTIA-wykres.png 20.21 kb, liczba pobrań: 3 (od 2013-04-07) 

Tylko zalogowani mogą pobierać załączniki.
A8CAS - narzędzie do 100% archiwizacji kaset Atari