C128 z monitorem monochromatycznym...

Miejsce gdzie śmiało możemy porozmawiać o wszystkim, co dotyczy młodszego brata Commodore 64.
Wiadomość
Autor
Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

C128 z monitorem monochromatycznym...

#1 Post autor: yovish »

Ostatnio intensywnie zgłębiam zagadnienie wyświetlania obrazów w różnych trybach C128 i można podłączyć
monochromatyczny monitor do C128 na kilka sposobów:
C128 RGBI&AV, Neptun 156 AV.png
C128 RGBI&AV, Neptun 156 AV.png (13.32 KiB) Przejrzano 2580 razy
1. W trybie 40-kolumn, z C128 można wysłać sygnały ze złącza AV: Monochrome Video, Audio Out i GND, bezpośrednio do
wejścia monitora. Uzyskamy obraz monochromatyczny we wszystkich odcieniach szarości (monochromatyczności).

2. W trybie 80-kolumn, z C128 możemy wysłać ze złącza RGBI sygnał Composite Video i GND oraz ze złącza AV Audio
Out, bezpośrednio do wejścia monitora. Masy (GND) ze złącz AV i RGBI z C128 trzeba połączyć przed wysłaniem do
monitora. Jest to bardziej skomplikowane, ale mamy wyższą rozdzielczość, niestety tylko 3 poziomy
szarości/monochromatyczności (brak poziomu, średni i maksymalny). Tu tracimy trochę danych obrazu, ale do wielu
rodzajów pracy wystarczy.

3. Teoretycznie istnieje jeszcze jeden sposób na podłączenie w trybie 80-kolumn i uzyskanie większej ilości poziomów szarości/monochromatyczności, jeśli to komuś potrzebne.
Na wyjściu RGBI są sygnały HSYNC, VSYNC i GND oraz R, G, B i I. Na wyjściu AV w C128 można wykorzystać sygnały: Audio Out, GND i +5V (jeśli tam jest, a najczęściej powinien tam być).
Masy (GND) łączymy i wysyłamy do monitora, sygnał audio też. Zasilanie użyjemy do układu scalonego 74LS86, do spreparowania scalonego sygnału synchronizacji, a z sygnałów R, G, B i I, za pomocą rezystorów można przetworzyć 4 sygnały TTL, na różne poziomy napięcia, symulując różne odcienie szarości/monochromatyczności i odpowiednio połączyć ze scaloną synchronizacją, uzyskując scalony sygnał wideo, tyle że monochromatyczny.
Synał Monochromatyczny.png
Synał Monochromatyczny.png (2.35 KiB) Przejrzano 2580 razy
Jasność (luminancję/odcień "szarości") można obliczyć:
Y = 0.3 R + 0.59 G + 0.11 B

Jak wprowadzimy jeszcze rozróżnienie, że każdy z 8 kolorów bazowych (tylko R, G, B i ich kombinacje) może mieć 2 intensywności, np. 100% i 66% (albo 100% i 50%), można opracować ścisły matematyczny wzór na jasność wyjściową.
Jasność kolorów RGBI (z odcieniem szarości).png
Jasność kolorów RGBI (z odcieniem szarości).png (13.5 KiB) Przejrzano 2580 razy
Ta tabela, to tylko przykład, ale obrazujący, jak to można zrobić.

Przyjąłem 100% jasności (255) i 66,66% (170), wyjątek dla ciemnego szarego (jasnego czarnego), 33,33% (85).

Wzór na liczenie odczienia szarości, użyty w tabeli:
Y=[(R/255)x0,3+(G/255)x0,59+(B/255)x0,11]x255

Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

Re: C128 z monitorem monochromatycznym...

#2 Post autor: yovish »

Pokaże Wam jeszcze inny pomysł, do wyświetlania obrazu z C128 na monitorze monochromatycznym. Pomysł przyszedł mi do głowy, po dyskusji na discordzie RetroGralni.

Tutaj popatrzymy na dane wyjściowe TTL z informacją jakie składowe są wyświetlane i czy podbijamy jasność (R=Red, G=Green, B=Blue, I=Intensity). Sygnały są cyfrowe, a odpowiednio ułożone, można potraktować jak dane z 4-bitowego licznika. Testowałem różne przypisania wag (8, 4, 2 i 1) dla poszczególnych sygnałów, ale najlepiej wychodzi z przypisaniami: I=8 (2^3 = 2 do potęgi 3), G=4 (2^2), R=2 (2^1), B=1 (2^0). Wydaje się to dość oczywiste i intuicyjne (?!?), bo intensywność najmocniej podbija jasność zdefiniowanego przez sygnały RGB koloru, a jeśli pamiętacie współczynniki jasności barw podstawowych, to układają się właśnie z kolejnością: G=0,59, R=0,30 i B=0,11. Mamy więc po kolei uszeregowane wartości jasności, a dane z RGBI traktujemy jak licznik ("RGBI TTL"). Wartości w polu "VICE", to jasność barw składowych dla odpowiednich kolorów w palecie z emulatora VICE (C128), tak dla przykładu reprezentatywnego kolorów. Pole "Jasność", to wyliczona jasność koloru, ze wzoru ze współczynnikami jasności, a pole "Licznik", to jasność, która odpowiada jasności wygenerowanej przez nasz teoretyczny licznik "RGBI TTL". Wzór tej jasności to: Licznik/15x255 (z zaokrągleniem). Może trochę kontrowersyjny sposób, ale bardzo prosty do realizacji, a dodatkowo równomiernie rozkłada jasności, które będziemy oglądać na monitorze, co może pozwolić lepiej odróżniać "wirtualne barwy" od siebie.
Jasność RGBI (Licznikowa).jpg
Jasność RGBI (Licznikowa).jpg (194.8 KiB) Przejrzano 2542 razy
To przypisane Licznik->Jasność, jest liniowe, najbardziej równomierne, ale można jeszcze rozważyć przejście wykładnicze lub logarytmiczne, ale to chyba zbędne...

ytm
Posty: 13
Rejestracja: 08 sie 2021, 22:06

Re: C128 z monitorem monochromatycznym...

#3 Post autor: ytm »

Ad2. To jest lepsze tylko niż nic. Do niektórych zastosowań (BASIC, CP/M czy GEOS128) wystarczy i interface można zrobić bardzo łatwo. Zwykłe gniazdo CINCH do obudowy idealnie pasuje do otworu na kabel standardowej obudowy DB9:
c128mono.jpg
c128mono.jpg (37.39 KiB) Przejrzano 2521 razy
GND nie trzeba ciągnąć ze złącza A/V - na złączu RGBI jest dokładnie ta sama masa.

Później jednak zlewanie się kolorów będzie przeszkadzać - lepiej mieć 16 poziomów jasności w ten czy inny sposób.

Jedyna kontrowersja jaką widzę to kolor brązowy zamiast ciemnego-żółtego :)

Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

Re: C128 z monitorem monochromatycznym...

#4 Post autor: yovish »

Może uściślę pewne kwestie.

Tak wygląda obraz kolorowy przez złącze RGBI, uzyskany przez prostą kombinację rezystorów:
RGBI - Color (Full).jpg
RGBI - Color (Full).jpg (1.49 MiB) Przejrzano 2511 razy
Tak pewnie mógłby wyglądać, przez przystawkę dla monitora monochromatycznego (symulacja):
RGBI - Mono (Symulacja).jpg
RGBI - Mono (Symulacja).jpg (1.19 MiB) Przejrzano 2511 razy
A tak wygląda obraz w trybie 80-kolumn mono, z takiej przejściówki, jaka pokazał ytm:
RGBI - Mono.jpg
RGBI - Mono.jpg (1.17 MiB) Przejrzano 2511 razy

Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

Re: C128 z monitorem monochromatycznym...

#5 Post autor: yovish »

Oto nowe fakty z wyliczeń.

Poniższa tabela przygotowana została na podstawie palety CGA i nowego algorytmu "licznikowego".
Co do palety CGA, to odsyłam do wikipedii, a teraz opiszę zmodyfikowany algorytm "licznikowy".

Wartości dla I=0, wyliczane są tak: Jasność=((Gx4+Rx2+Bx1)/7)x170.

Wartości dla I=1, wyliczane są tak: Jasność=((Gx4+Rx2+Bx1)/7)x85+170.

Jasność przyjmuje wartości od 0 do 255, 170=(2/3)x255, 85=(1/3)x255.
Jasność kolorów RGBI (z odcieniem szarości) - Poprawione 2.jpg
Jasność kolorów RGBI (z odcieniem szarości) - Poprawione 2.jpg (129.17 KiB) Przejrzano 2473 razy
Prawie idealnie, ale "prawie" robi różnicę.
Trzeba pamiętać, że ta paleta CGA, to ta, która podmienia ciemny żółty na brąz, ale gdyby tego nie robić, to wyglądałoby to tak:
Jasność kolorów RGBI (z odcieniem szarości) - Poprawione 3.jpg
Jasność kolorów RGBI (z odcieniem szarości) - Poprawione 3.jpg (193.79 KiB) Przejrzano 2473 razy
To już jest TO!
W takim razie wydaje się, że wystarczy tylko 1 paleta szarości, ta matematyczno/teoretyczna.

Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

Re: C128 z monitorem monochromatycznym...

#6 Post autor: yovish »

A teraz pokażę Wam, jak wygląda samodzielnie wygenerowany obraz monochromatyczny z C128 w trybie 80-kolum (RGBI).
Ten obraz generowany jest przez dekoder zrobiony z GALa 16v8, który przekształca sygnały RGBI oraz tworzy scaloną synchronizację, a następnie przez odpowiednie dzielniki napięć (taki przetwornik C/A 6-bitowy) składany jest w scalony sygnał wideo (Composite Video) bez kodowania kolorów, tylko poziomy jasności.

To jest obraz przechwycony z mojego C128, przez wejście Composite Video mojej karty TV w PC.
C128-RGBI-Mono (6bits DA).jpg
C128-RGBI-Mono (6bits DA).jpg (146.63 KiB) Przejrzano 2413 razy

Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

Re: C128 z monitorem monochromatycznym...

#7 Post autor: yovish »

No i najważniejsze. Podłączenie do monitora Neptun 156, bo przecież to było sedno tego projektu.

Obraz wygenerowany przez mój adapter i przesłany do monitora.
Neptun 156 - Adapter C128_80toMONO.jpg
Neptun 156 - Adapter C128_80toMONO.jpg (532.15 KiB) Przejrzano 863 razy


Tak wygląda orientacyjny schemat.
Schemat orientacyjny C128_80toMONO.jpg
Schemat orientacyjny C128_80toMONO.jpg (60.92 KiB) Przejrzano 863 razy

Mówiłem, że to prosty przetwornik cyfrowo-analogowy 6-bitowy, ale jest 7 rezystorów. Ten 7 odpowiada na tzw. poziom czerni, poniżej którego pojawiają się tylko sygnały synchronizacji, a powyżej odcienie jasności.

Awatar użytkownika
yovish
Posty: 64
Rejestracja: 30 mar 2010, 00:23

Re: C128 z monitorem monochromatycznym...

#8 Post autor: yovish »

Oto krzywa rozkładu ocieni jasności.
Oś X-to jakby numery "kolorów" (16-odcieni);
Oś Y-poziom jasności w 6-bitowym przetworniku C/A.
RGBI MONO - Krzywe jasności (mój algorytm).png
RGBI MONO - Krzywe jasności (mój algorytm).png (2.6 KiB) Przejrzano 722 razy

Jestem z wykształcenia matematykiem, więc podszedłem "naukowo" do zagadnienia. W rejonach małej i dużej jasności rozróżniamy mniej szczegółów, więc odcienie mocniej się od siebie odróżniają, a w strefie średniej już jest liniowo.
Tak wygląda to, jak naniesiemy wyświetlane odcienie, na tle 64 możliwych wartości.
RGBI MONO - Paleta odcieni - Algorytm (2).png
RGBI MONO - Paleta odcieni - Algorytm (2).png (5.96 KiB) Przejrzano 722 razy

ODPOWIEDZ