GR0 in 8 Farben (4 Farbtöne*2 Helligkeiten/Zeile) - PenGoCRAZY

Moderator: Rockford

Antworten
6502
Beiträge: 24
Registriert: 29.01.2022 11:28
Has thanked: 12 times
Been thanked: 63 times
Kontaktdaten:

GR0 in 8 Farben (4 Farbtöne*2 Helligkeiten/Zeile) - PenGoCRAZY

Beitrag von 6502 »

Hallo zusammen,
es haben mich einige Anfragen erreicht, wie die Farbdarstellung im Hi-Res Text-Modus (GR0) in PenGoCRAZY realisiert ist. Ich habe deshalb einige Erläuterungen und auch ein Programm-Beispiel in ACTION vorbereitet. Ich hoffe, es wird damit für alle die selbst ein ähnliches Projekt realisieren wollen klarer, wie so eine Darstellung realisiert werden kann.

Einleitung:
PenGoCRAZY, mein Beitrag zum ABBUC SW-Contest 2025, nutzt hochauflösende Grafik mit 320×200 Pixeln in 8 Farben. Für eine optimale Darstellung empfiehlt sich PAL mit Composite- oder S-Video-Anschluss. Aber selbst mit TV-Modulator an einem alten CRT-TV ist die Darstellung immer noch gut. In Emulatoren wie ALTIRRA bewirkt das Aktivieren der Video-Option „PAL Blending/Artefacting“ eine vergleichbare Darstellung wie bei einem echten LCD/CRT Display. NTSC-Artefakte sollten vermieden werden. Daher ist bei NTSC-Geräten S-Video besser geeignet.

Funktionsweise:
Der in PenGoCRAZY verwendete Ansatz ist eigentlich ein zweilagiges Player-Missile (PM) Overlay, das durch Überlagerung zweier Player-Streifen die Auswahl von 4 Farbtönen/2 Helligkeiten pro 8 Pixel ermöglicht. Um den gesamten Bildschirm abzudecken, müssen die PM-Streifen gemultiplext werden, um die PM-Ressourcen effektiv zu verdoppeln. Die Idee dahinter war, das C64 Color RAM zu emulieren, das das Einfärben einzelner Textzeichen erlaubt. Tatsächlich ist die Farbauflösung des PM-Overlays sogar höher, da die Farbe pro 8×1 Pixel statt 8×8 Pixel gewechselt werden kann.

Ich habe in der Vergangenheit mit verschiedenen Ansätzen experimentiert und wollte das schon immer einmal in einem Programm einsetzen. Es gibt verschiedene Varianten dieses Ansatzes. Die in PenGoCRAZY verwendete ist ein 320×8 Pixel Screen-Kernel, der durch DLI synchronisiert wird, sodass er pro Textzeile durch Konfiguration des DLI in der Display List ein- oder ausgeschaltet werden kann. Der Screen-Kernel folgt dem „Beam“ (Strahl), während das Bild ausgegeben wird, und konfiguriert PM-Positionen und Farben „on the fly“. Das ist etwas knifflig, da das CPU-Timing nicht regelmäßig ist. Da ANTIC die CPU anhält, wenn eine neue Display-Adresse oder Display-Daten geholt werden, wird das Timing auf diesen Zeilen gestört. Etwas fummelig, aber machbar.

Das Ergebnis sieht auf PAL-Originalhardware, sowohl mit Composite als auch S-Video, sehr ordentlich aus. Man erhält vollflächige und satte Farben. Da die Grafikdetails „echte“ 320×200 Pixel sind, empfiehlt sich bei NTSC-Geräten S-Video, da die NTSC-Artefaktfarben bei Composite-Video die Details der Grafik verwischen. Mit S-Video sieht aber auch NTSC-Originalhardware gut aus. Ich habe es auch mit TheA400 Mini getestet, und sowohl PAL als auch NTSC werden korrekt angezeigt, ebenso wie auf original XL/XE-Hardware.
(2)ScLevel.png
(2)ScLevel.png (559.15 KiB) 226 mal betrachtet
Das ACTION-Demo:
Um die Funktionsweise besser zu verstehen, habe ich eine kurze Demo in ACTION vorbereitet. Hier sieht man vor allem den Code des Display List Interrupts (DLI), der den Farbmultiplex erzeugt. Die Lösung ist etwas anders als bei PenGoCRAZY, läuft dafür aber auch auf dem alten Atari 800 :-) In PenGoCRAZY ist das OS-ROM abgeschaltet und der Interrupt-Handler ersetzt. Das ermöglicht den Farbmultiplex nur für einzelne Textzeilen per DLI zu aktivieren. Das geht leider auf dem alten Atari 800 nicht, da das OS-ROM nicht ausgeblendet werden kann.

Technische Umsetzung des Farbmultiplex:
Die Demonstration illustriert die Funktionsweise eines Display List Interrupts (DLI), der zur Erzeugung eines Farbmultiplexes eingesetzt wird. Das zugrundeliegende Verfahren basiert auf einem zweischichtigen Overlay von Player-Missile-Grafikobjekten (PM), wodurch pro 8 Pixel die Auswahl von vier Farbtönen und zwei Helligkeitsstufen durch Überlagerung zweier Player-Streifen ermöglicht wird. Um eine vollständige Abdeckung des Bildschirms zu gewährleisten, erfolgt ein Multiplexing der PM-Streifen, wodurch die verfügbaren PM-Ressourcen effektiv verdoppelt werden.

Vergleich mit C64 Color RAM und Farbauflösung:
Das Ziel dieses Ansatzes ist die Emulation der Funktionalität des C64 Color RAM, welches die individuelle Einfärbung von Textzeichen gestattet. Die hier vorgestellte Methode bietet jedoch eine höhere Farbauflösung, da ein Farbwechsel auf einer 8×1-Pixel-Basis (statt 8×8 Pixel) realisiert werden kann.

Kernel-Architektur und Synchronisation:
Die Implementierung erfolgt mittels eines 320×8-Pixel-Screen-Kernels, der durch Display List Interrupts synchronisiert wird. Dadurch ist es möglich, den Kernel für jede Textzeile individuell zu aktivieren oder zu deaktivieren. Während der Bildausgabe folgt der Kernel dem Elektronenstrahl („Beam“) und konfiguriert die Positionen sowie die Farben der Player-Missile-Objekte in Echtzeit. Die Realisierung erfordert eine präzise Steuerung der CPU-Zeit, da der ANTIC-Chip beim Laden neuer Display-Adressen oder -Daten die CPU anhält und somit das Timing beeinflusst.

Ergebnisse und Kompatibilität:
Die resultierende Grafikdarstellung zeichnet sich auf PAL-Originalhardware sowohl bei Composite- als auch S-Video-Ausgabe durch vollflächige und gesättigte Farben aus. Aufgrund der hohen Detailtreue (echte 320×200 Pixel) empfiehlt sich bei NTSC-Systemen die Nutzung von S-Video, da bei Composite-Video NTSC-typische Artefaktfarben die Bildschärfe beeinträchtigen können. Die Kompatibilität wurde sowohl auf TheA400 Mini (PAL/NTSC) als auch auf originalen XL/XE-Systemen erfolgreich getestet.
demk800.png
demk800.png (530.22 KiB) 226 mal betrachtet
So, nun aber as Programmbsispiel für alle Atari 800/XL/XE, in ACTION. Übersetzen müsst ihr die Datei MAIN.ACT, z.B. mit C"MAIN.ACT". Die anderen Dateien werden automatisch mit INCLUDE eingebunden:
ActionGr0Demo8Colors.zip
(9.17 KiB) 7-mal heruntergeladen
Ebenso ein ausführbares XEX-File:
DEMK800.XEX
(3.46 KiB) 10-mal heruntergeladen
(User C3PU on AtariAge)

Erhard
Beiträge: 1133
Registriert: 04.11.2021 15:52
Has thanked: 136 times
Been thanked: 345 times
Kontaktdaten:

GR0 in 8 Farben (4 Farbtöne*2 Helligkeiten/Zeile) - PenGoCRAZY

Beitrag von Erhard »

Beim schnellen überfliegen Deiner Erläuterung hab ich den eigentlichen Vorgang sicher nicht ausreichend verstanden.

Da bräuchte ich Zeit, um mich richtig reinzuknien.

Aber ich finde es absolut toll, daß Du Deine Karten so weit aufdeckst und es damit anderen ermöglichst, diese Technik zu verwenden.
Jede Info, die zu Hause auf meinem Rechner liegt habe ich unterwegs nicht verfügbar.
Jede Info, die im Netz liegt finde ich nicht wieder, wenn ich sie benötige.

6502
Beiträge: 24
Registriert: 29.01.2022 11:28
Has thanked: 12 times
Been thanked: 63 times
Kontaktdaten:

Re: GR0 in 8 Farben (4 Farbtöne*2 Helligkeiten/Zeile) - PenGoCRAZY

Beitrag von 6502 »

Eine Sache habe ich oben vergessen zu erwähnen. Die vorgeschlagenen Einstellungen in Emulator haben den Hintergrund, dass bei einem PAL (Phase Alternating Line) System das rote Farbdifferenzsignal jeder zweiten Bildzeile zur vorhergehenden um 180° phasenverschoben (darum der Name) übertragen wird. Damit reduziert sich die Effektive Farbauflösung auf die Hälfte im Vergleich zum Helligkeitssignsal.
In Emulatoren wie ALTIRRA bewirkt das Aktivieren der Video-Option „PAL Blending/Artefacting“ eine vergleichbare Darstellung wie bei einem echten LCD/CRT Display. Wer also im Emulator sehen will, was auf einem „echten“ LCD/CRT Display über Composite, S-Video oder TV-Modulator zu sehen ist, sollte die Option so einschalten.
(User C3PU on AtariAge)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast