Wie erhalten Sie 1024 Farben in CGA? Und gibt es wirklich 1024?

Die 2015 gestartete Übersetzung „Neuer Grafikmodus: CGA in 1024 Farben“ hat mich sehr beeindruckt, aber ich habe immer noch nicht verstanden, wie dieser Trick funktioniert, da der Artikel von einem Fachmann auf dem Gebiet der Retro-Computergrafik geschrieben wurde und vorschlägt dass der Leser bereits einige Kenntnisse auf diesem Gebiet hat. Obwohl mein erster Computer ( "Search" war ein sowjetischer Klon von IBM PC / XT) CGA hatte, fand ich keine Monitore mit einem zusammengesetzten Eingang, also musste ich ihn googeln und herausfinden, wie das zusammengesetzte Video funktioniert. Für diejenigen, die sich auch für die „Insider“ -Technologien von 1981 interessieren, bei denen 2015 unerwartete undokumentierte Möglichkeiten entdeckt wurden, habe ich das gefundene Material zusammengestellt.

1. Native CGA-Funktionen


Für einen Laien ist CGA normalerweise mit 320x200-Grafiken und einer Vierfarbenpalette mit säurehaltigen Farben verbunden, wie in den Spielen Alley Cat , J-Bird , Lode Runner und Tapper von 1983 :




Das Limit von 320x200x2bpp wird jedoch nur durch die Menge des auf dem Adapter verfügbaren Videospeichers (16 KB) festgelegt. Tatsächlich ist es in der Lage, ein Bild von 640 x 200 x 4 bpp zu erzeugen - mit Pixeln, die vertikal stark verlängert sind.Dies wird beispielsweise im 80x25-Textmodus mit 16-farbigen Zeichen und einem Hintergrund sowie einer Zeichenmatrix von 8x8 Pixel verwendet. (Es kann berechnet werden, dass der Bildschirmpuffer in diesem Fall nur 80 x 25 x 2 = 4000 Byte benötigt.) Wenn die Grafiken jedoch in dieser „hohen Auflösung“ von 640 x 200 ausgegeben werden, reichen 16 KB Videospeicher nur für ein Schwarzweißbild aus. Ein solcher Grafikmodus wurde beispielsweise von Windows bis einschließlich Version 3.0 unterstützt:



Am Ausgang erzeugte der CGA ein digitales Signal, für das die RGBI- Schnittstelle speziell erfunden wurde: Zwei Synchronisationsleitungen signalisieren den Beginn des Rahmens und den Beginn der Abtastzeile, und vier Zeilen des Videosignals übertragen die Vier-Bit-Farbe des aktuellen Pixels. Monitore, die am Eingang ein digitales RGBI-Signal empfangen konnten, waren 1981 jedoch selten. IBM selbst begann erst 1983 mit der Produktion solcher digitaler Monitore. Für Privatanwender hatte CGA eine zweite Schlussfolgerung - das sehr zusammengesetzte Videosignal, mit dem die Meister der Demoszene zauberten. Es könnte über einen HF-Modulator an den Antenneneingang eines herkömmlichen amerikanischen Fernsehgeräts angeschlossen werden, und einige Fernseher hatten einen speziellen Composite-Eingang (zum Anschließen beispielsweise eines Videorecorders), mit dem Sie ein Videosignal unter Umgehung des Tuners eingeben und unnötige Modulation / Demodulation vermeiden können.



Der Teil der Videoadapter-Umreifung, der das zusammengesetzte NTSC- Signal vom digitalen Ausgang bildet (dies ist der amerikanische Standard für Farbfernsehen), war nur für die Übergangsphase vorgesehen, bis alle PC-Benutzer digitale Monitore erhielten. Der nächste Videoadapter von IBM - EGA (1984) - unterstützte nur digitale (bereits 6-Bit-) Ausgaben unter Verwendung eines Paares zuvor nicht verwendeter Kontakte in der RGBI-Schnittstelle. Darüber hinaus wurden die Modi mit hoher Auflösung für die Verwendung mit Composite-Video-Ausgaben nicht empfohlen, da 640 Pixel in der Scanlinie die Funktionen von NTSC übertrafen. Im nächsten Abschnitt wird erklärt, warum; und Wikipedia zeigt, wie Text im 80-Spalten-CGA-Modus auf einem zusammengesetzten Eingabemonitor unscharf wurde:




2. TV-Funktionen


Schwarzweißfernsehen wurde auf sehr einfache Weise angeordnet: Ein Elektronenstrahl umgeht den Bildschirm Zeile für Zeile, und der Videosignalpegel steuert direkt die Leistung des Strahls. Während des Rücklaufs zwischen den Linien und zwischen den Bildern wird der Strahl ausgeschaltet und das Videosignal sendet Synchronisationsimpulse. Da das Signal vollständig analog ist, ist seine horizontale Auflösung nicht definiert: Die Helligkeit kann sich über die gesamte Linie gleichmäßig ändern. Andererseits ist die vertikale Auflösung durch die horizontale Abtastfrequenz (243 Zeilen für NTSC) fest eingestellt.

Die in MS Paint sorgfältig gezeichnete Abbildung zeigt, wie das Videosignal für einen Rahmen aussieht, der aus zwei vertikalen Streifen besteht: breit dunkel und schmal hell. Oben ist schematisch ein Signal für eine Zeile dargestellt, unten ein Signal für eine Folge von Zeilen. Vor jeder Leitung wird ein Synchronisationsimpuls gesendet , der „schwärzer als schwarz“ ist. Bei der Erstellung des Farbfernsehens war es wichtig, dass vorhandene Schwarzweißfernseher akzeptable Farbvideos akzeptieren. Die Amerikaner haben sich folgenden Trick ausgedacht: Farbinformationen werden von einem harmonischen Signal des Unterträgers übertragen



zum Luminanzsignal hinzugefügt. Dann hebt ein Schwarzweißfernseher, der nicht weiß, wie die Unterträgerharmonische isoliert und analysiert werden soll, jedes Pixel mit einer Helligkeit hervor, die dem durchschnittlichen Signalwert während der Pixelübertragungszeit entspricht. Wenn die Unterträgerfrequenz groß genug ist, beeinflusst das zusätzliche Signal den Durchschnittswert nicht, d.h. auf die angezeigte Helligkeit. Nun stimmen wir zu, dass die Phasenverschiebung des Unterträgers dem Farbton der Farbe entspricht und seine Amplitude der Sättigung entspricht; Die Aufteilung der Farbe in Helligkeit, Farbton und Sättigung entspricht dem YIQ- Farbmodell .

Die zweite Abbildung zeigt schematisch das Videosignal für eine Linie des Rahmens, die aus farbigen vertikalen Streifen besteht. Ein zusätzlicher Farbburst wird zwischen der Uhr und dem Zeilenanfang übertragen.Hiermit wird der Empfänger auf die Phase eingestellt, von der aus der Unterträger verschoben wird. Nun entsprechen die flachen Abschnitte des Signals (d. H. Mit der Amplitude Null des Unterträgers) den grauen Balken (Sättigung Null); Bereiche, in denen der Unterträger in der Farbburstphase gelben Bändern mit zwei unterschiedlichen Sättigungswerten in Abhängigkeit von der Unterträgeramplitude entspricht; Diagramm, in dem sich der Unterträger gegenphasig zum Farbausbruch befindet - der blaue Balken. Da der durchschnittliche Signalpegel in allen Bereichen gleich ist, zeigt ein Schwarzweiß-Fernsehempfänger alle Bänder mit dem gleichen Grauton an. NTSC verlangt, dass das Hilfssignal sinusförmig ist, aber das ist nicht so wichtig: die in der Abbildung gezeigte Rechteckwelle ( Mäander)


) besteht aus Harmonischen mit der gewünschten Frequenz und Phase sowie aus höherfrequenten Additiven, die vom Fernsehempfänger ignoriert werden. Die Amplitude dieser Harmonischen ist größer als die Mäanderamplitude in4/πZeiten, aber da der Fernseher die Amplitude des Unterträgers nicht als absoluten Wert verwendet, sondern in Bezug auf die aus dem Farbburst extrahierte Amplitude, wird die Farbanzeige nicht durch das Ersetzen eines sinusförmigen Additivs durch ein rechteckiges Additiv beeinflusst. CGA und andere primitive digitale Geräte erzeugen genau Rechteckwellen.

Um die Trennung des Hauptsignals (Helligkeit) und des Zusatzsignals (Farbe) zu vereinfachen, standardisierte NTSC die Unterträgerfrequenz, die 227,5-mal höher als die Horizontalfrequenz ist - d. H. Für jede Zeile gibt es zusammen mit dem Abstand zwischen den Zeilen 227,5 Unterträgerperioden. Somit hat der amerikanische Farbfernseher eine bestimmte horizontale Auflösung: Die Helligkeit kann sich in der gesamten Linie noch gleichmäßig ändern, aber die Frequenz des Farbtons wird durch die Unterträgerfrequenz begrenzt. Wenn der Fernseher ein Videosignal mit einer horizontalen Auflösung von 640 Pixeln empfängt, entspricht ungefähr ein Drittel der Unterträgerperiode jedem Pixel, und ein primitiver Hardwarefilter hat keine Zeit, die Phasenverschiebung und Amplitude des Unterträgers aus dem Signal für jedes Pixel korrekt zu identifizieren. Dies führt zu unerwarteten Ergebnissen - durch Unschärfe,wie im obigen Beispiel gezeigt, vor dem Erstellen"Artefakt" -Farben , die mit dem Videoadapter nicht erreicht werden können. (Ich mag den verwendeten Namen "falsche Farben" wirklich nichtSLY_Gin Übersetzung eines Artikels über 1024 Farben; Die Hauptbedeutung des englischen Wortes Artefakt - "künstlich hergestellt, künstlich erstellt" - kontrastiert diese Farben mit dem "natürlichen" für CGA und hat nichts mit Parasitismus zu tun.)

Genau mit der horizontalen Auflösung wurde ein Hardwarefehler in CGA verbunden: in 640x200-Modi (d. H. h. in 80-spaltigem Text) stellte sich heraus, dass das Bild auf dem zusammengesetzten Monitor schwarzweiß war. Die Problemumgehung für diesen Fehler war bekannt: Sie müssen einen braunen Rahmen um das Bild setzen. Tatsache ist, dass die Umreifung, die die Taktsignale bildet, ihre Dauer in Taktzyklen des Videoadapters festlegt; In den Modi 640 x 200 sind diese Takte halb so lang wie in den Modi 320 x 200, sodass der Takt zwischen den Zeilen des Rahmens auch doppelt so kurz ist, wie es NTSC erfordert. Infolgedessen hat der Farbburst einfach keine Zeit zum Übertragen. Wenn sich jedoch ein brauner Rahmen um das Bild befindet (Braun hat eine Phasenverschiebung von nahezu Null, eine geringe Helligkeit und eine Sättigung entspricht einer ungefähren Amplitude für den Farbburst), nimmt der Monitor die linke Seite des Rahmens als Farbburst, zeichnet sie nicht auf dem Bildschirm und ist korrekt eingestellt Farbunterträgerphase.



3. CGA-Composite-Signalgerät


Obwohl das von CGA erzeugte digitale Videosignal eine horizontale Auflösung von bis zu 640 Pixeln haben kann (dh 640 Änderungen der Pegel digitaler Signale in einer Zeile), kann davon ausgegangen werden , dass ein zusammengesetztes Videosignal unabhängig vom verwendeten Videomodus eine Auflösung von 1280 "Subpixeln" hat, d. H. Für jedes Pixel in den Modi 640 x 200 gibt es zwei Subpixel in den Modi 320 x 200 - vier. Der vom Videoadapter für das aktuelle Subpixel ausgegebene Signalpegel (in Volt) wird nach der Formel berechnetU=0.41+I0.3+C0.75wobei das Bit I (Intensität) direkt aus der Farbe des aktuellen Pixels entnommen wird und das Signal C (Chroma) vom Multiplexer in Abhängigkeit von den anderen drei Bits der Farbe ( R, G, B ) ausgewählt wird:
R.GB.C.Farbe
00000000000…das Schwarze
00100001111…blau (~ 180 °)
01011100001…grün (~ 45 °)
01111000011…Türkis (~ 90 °)
10000111100…rot (~ 270 °)
10100011110…Magenta (~ 225 °)
11011110000…gelb (~ 0 °)
11111111111…Weiß
Chromatische Farben entsprechen einem Chroma-Signal mit einer Periode von acht Subpixeln und einer Phasenverschiebung nahe einem Vielfachen von 45 °, d.h. auf eine ganzzahlige Anzahl von Subpixeln. Dank der ausgeklügelten Verzögerungsschemata in CGA unterscheiden sich die Phasenverschiebungen der Farben geringfügig (innerhalb von ± 10 °) von den Vielfachen von 45 °, um näher an den Standard-NTSC-Farben zu sein .

Somit befinden sich von 227,5 Unterträgerperioden in einer Zeile 160 im Ausgabebild und der Rest im Intervall zwischen den Zeilen (Takt, Farbburst und Rahmen um das Bild). Es ist wichtig, dass eine nicht ganzzahlige Anzahl von Unterträgerperioden vom Farbburst zum ersten Pixel der Linie übergeht: Das erste Pixel beginnt bei 45 ° zu übertragen. Wenn die Linie also mit vier gelben Pixeln beginnt, nimmt das Chroma-Signal während der Übertragung der entsprechenden acht Unterpixel Werte an 11100001.

Pixelhelligkeit (Luma), d.h. den Durchschnittswert des Signalpegels für die Periode des Unterträgers erhaltenL=0.72Cavg+0.28Iwo Cavg=RGB+RGB2: 0,5 für chromatische Farben, 0 für Schwarz und 1 für Weiß. Dies bedeutet, dass auf einem Schwarz-Weiß-Composite-Monitor das erste CGA-Modell (1981) nur sechs Graustufen anzeigen konnte. In späteren CGA-Modellen (seit 1983) begann die nichtperiodische Hinzufügung zum Unterträger von allen vier Farbbits abzuhängen, so dass die Helligkeit einer komplexeren Formel entsprachL=0.29Cavg+0.1R+0.22G+0.07B+0.32IDies ermöglichte es uns, für jeden der 16 Farbwerte unseren eigenen Grauton auf einem Schwarzweißmonitor anzuzeigen. Infolge dieser Verfeinerung wurden auch Farben, die sich in der Helligkeit unterscheiden und näher an den auf dem digitalen angezeigt werden, auf dem Farbverbundmonitor angezeigt: Hardwarefehler und Fehler im Kabelbaum, die das zusammengesetzte Signal vom digitalen Ausgang bilden, weisen darauf hin, dass die CGA-Entwickler nicht allzu besorgt über seine Verwendung waren mit einem Composite-Monitor und noch weniger besorgt darüber, wie die Modi mit hoher Auflösung auf dem Composite-Monitor angezeigt werden. Es war jedoch diese nicht unterstützte Kombination, die es den Demoszenenmeistern ermöglichte, das Unvorstellbare aus der CGA herauszuholen!






4. Unerwartete CGA-Funktionen ...


4a) ... im Grafikmodus


Wie oben erläutert, verwandelt sich der einfarbig schattierte Teil der Linie im zusammengesetzten Videosignal in einen Mäander mit einer Periode von acht Subpixeln. Das Gegenteil ist auch der Fall: Jedes zusammengesetzte Signal, das sich mit einer Periode von acht Subpixeln wiederholt, wird als einfarbiger Teil der Linie angezeigt, da der daraus extrahierte harmonische Subträger eine konstante Phasenverschiebung und konstante Amplitude aufweist. Was genau die Phasenverschiebung verwendet wird, ist schwieriger vorherzusagen; Der Artikel über 1024 Farben zeigt das Ergebnis ohne Erklärung: Die Nybble-Spalte zeigt eine sich wiederholende Sequenz von vier Pixeln im 640x200x1bpp-Modus, d. H. von acht Subpixeln. Zwei dieser Sequenzen ( und



01011010) entsprechen Mäandern mit einer Periode von vier Subpixeln: In einer solchen Welle gibt es überhaupt keinen harmonischen Subträger, daher ist die resultierende Farbe grau. Vier weitere Sequenzen ( 0011, 0110, 1001, 1100) entsprechen reinen Unterträgerwellen - mit einer Verschiebung von 135 °, 225 °, 45 ° bzw. 315 °. Zwei dieser Wellen setzen die Standardfarben Lila und Grün, die restlichen zwei - Blau und Orange -, die mit regulären CGA-Mitteln nicht erreichbar sind. Signal Füllung bei 75% (Sequenz0111, 1011, 1101, 1110) entspricht einer Phasenunterträgerverschiebung um ein halbes Pixel, d.h. auf einem Subpixel; Das Ergebnis stimmt jedoch nicht genau mit der Phase der Standardfarben überein - aufgrund der Verzögerungsschemata, die Standard-CGA-Farben zu Standard-NTSC-Farben „ziehen“. So werden Farbtöne mit einer leichten Verschiebung erhalten: Türkisblau, grünliches Türkis, Rotbraun, Purpurrot. Eine Füllung von 75% erhöht den durchschnittlichen Signalpegel, d.h. Farbhelligkeit; Dies wirkt sich jedoch nicht auf die Sättigung aus, da die breiteren „Kanten“ des Mäanders durch vom Fernsehempfänger ignorierte Hochfrequenzoberwellen erzeugt werden. Schließlich entspricht ein Signal mit einer Füllung von 25% den gleichen Farbtönen wie für 75%, jedoch mit geringerer Helligkeit.

Es ist noch schwieriger vorherzusagen, welche Farbe sich herausstellen wird, wenn die Sequenz nicht aus schwarzen und weißen Pixeln, sondern aus farbigen Pixeln wiederholt wird. Im 640x200x1bpp-Modus ist die Hintergrundfarbe immer schwarz, aber die zweite Farbe kann aus einer der 16 Standardfarben ausgewählt werden. Im 320x200x2bpp-Modus hingegen kann die Hintergrundfarbe aus einer der 16 Standardfarben ausgewählt werden, und die anderen drei Farben werden durch die aus vier Optionen ausgewählte Palette bestimmt. Der Artikel über 1024 Farben zeigt zwei solche Kombinationen, ebenfalls ohne Erklärung. Ich bat direkt um Kommentare, um sie neu zu signieren , verantwortlich für den technischen Teil der Videoausgabe in 8088 MPH sowie für die Implementierung der CGA-Emulation in DOSBox. und er riet mir cgaart- von ihm geschriebener autonomer CGA-Emulator, der im Batch-Modus arbeiten kann. Durch Hinzufügen einer einfachen Python-Bindung zu cgaart habe ich eine Tabelle aus allen möglichen 16-Farben-Sätzen von „Artefaktfarben“ generiert:

Voller Tisch

Der Code für jeden Satz besteht aus der Nummer des Grafikmodus ( 1Afür 640 0Ax 200 x 1 bpp, für 320 x 200 x 2 bpp), der Nummer der Palette ( 0–3) und der Anzahl der frei wählbaren Farben ( 0–F). Jede Zeile der Tabelle besteht aus 16 Quadraten, die einer sich wiederholenden Folge von Pixeln entsprechen. Jedes Quadrat besteht aus fünf Bändern - digitaler Ausgang, zusammengesetzter Signalpegel und Ausgang auf dem zusammengesetzten Monitor mit dem ersten CGA-Modell, Ausgang auf dem zusammengesetzten Monitor und zusammengesetzter Signalpegel mit dem korrigierten CGA-Modell. Der zusammengesetzte Signalpegel wird als Durchschnitt für zwei Subpixel angezeigt - cgaart berechnet ihn nur mit dieser Genauigkeit. Lassen Sie uns die Linien, die den beiden im Artikel gezeigten Sätzen über 1024 Farben entsprechen, genauer betrachten - dies sind Sätze 1A0Cund0A01;; Betrachten Sie jedoch vorher eine einfachere Menge 1A04:



Eine Menge 1A04- rote Pixel auf schwarzem Hintergrund - entspricht einem Signal mit einer Füllung von 50% und einer Verschiebung von 270 °, das durch eine periodische Folge von vier Pixeln moduliert wird. Der hohe Pegel des Signals fällt in die ersten drei Pixelsequenzen, so dass das vierte Bit die resultierende Farbe nicht beeinflusst: zum Beispiel 000xund wird 001xzu reinem Schwarz und 111x- zu reinem Rot. Sequenzen, die das erste Pixel ( 010xund 011x) auf Null setzen, entsprechen der Phasenverschiebung um ein Subpixel, d.h. -45 ° zu Magenta; Zurücksetzbares zweites Pixel ( 100xund 101x) - Verschiebung von 45 ° nach Orange.

einstellen1A0C- Hellrote Pixel auf schwarzem Hintergrund - entspricht demselben Signal, jedoch mit einer nicht periodischen Addition, sodass der niedrige Pegel jetzt höher als der von Schwarz ist. Als Ergebnis dieser Sequenz 0001, 0010, 0011sind mit den gleichen Farben umgewandelt (grün, türkis, blau und biryuzovato blau) , wie im Fall von weißen Pixeln, nun aber mit einer viel geringeren Helligkeit, weil eine geringe Signalquelle eine Rolle mit hohem Pegel für den resultierende spielt. Die verbleibenden Sequenzen behalten einen hohen Pegel des ursprünglichen Signals bei, und die entsprechenden Farbtöne werden nahe am Satz erhalten 1A04, obwohl die Helligkeit jetzt aufgrund eines höheren Durchschnittspegels höher ist.

Endlich eingestellt0A01- Ein blauer Hintergrund, eine grün-rot-braune Palette, vier Subpixel in jedem Pixel, zwei Pixel in einer sich wiederholenden Sequenz - enthält vier Standardfarben (Sequenzen 00, 11, 22, 33verursachen keine Artefakte) und ihre paarweisen Mischungen: Wenn Sie zwei Mäander hinzufügen, verschiebt sich der harmonische Unterträger im resultierenden Signal wird in der Mitte zwischen den Verschiebungen der Begriffe sein. Die Helligkeit und Sättigung des Ergebnisses hängen jedoch von der Reihenfolge der Begriffe ab: Beispielsweise hat Rot einen hohen Anteil an Subpixeln 1–4, Grün einen Wert von 6–1, sodass die Sequenz 12den hohen Wert des roten Ausdrucks vollständig abschneidet, und halb Grün ;; während die Reihenfolge21behält vollständig ein hohes Niveau des roten Ausdrucks und halbgrün bei. Der Farbton wird in beiden Fällen gelb, aber für die Sequenz 12- gesättigt und sehr dunkel, während für 21- ungesättigt und sehr hell.

Es stehen also 80 Sätze mit 16 gleichzeitig verfügbaren Farben zur Verfügung. Was ist die tatsächliche Auflösung? Die Farbe kann nur zwischen Blöcken mit 8 Subpixeln geändert werden, d.h. 160 mal pro Zeile; Die Helligkeit wird jedoch für jedes Pixel unabhängig eingestellt. Ein Artikel über 1024 Farben warnt davor, dass diese Modi nicht als "16-Farben 160x200" bezeichnet werden können, da "die horizontale Auflösung eine offene Frage ist, die von der Abtastung und Filterung des Signals abhängt und je nach den Formen des verwendeten Farbsignals variiert" ( TransferSLY_G) Trotzdem kann leicht sichergestellt werden, dass der Composite-Monitor auch bei konstantem Farbton keine Helligkeitsschwankungen innerhalb von 8 Subpixel-Blöcken anzeigt. Achten Sie beispielsweise auf den Satz 0A0Ain der vollständigen Tabelle und darin auf die Sequenzen 01und die 10entsprechenden grünen Pixel für das Licht grüner Hintergrund. Sowohl die Helligkeit als auch der Farbton der Farbe werden Block für Block mit dem zusammengesetzten Monitor analysiert, sodass anstelle alternierender grüner Pixel mit zwei Helligkeitsstufen monotone Pixel mit einer durchschnittlichen Helligkeitsstufe erhalten werden. Bei einer Sequenz ist das 10Ergebnis weniger gesättigt als die Terme, da diese Sequenz den niedrigen Pegel des dunkelgrünen Terms abschneidet. Daher gibt es meiner Meinung nach bei der Verwendung von Artefaktfarben allen Grund, 160 x 200 als tatsächliche Auflösung zu betrachten.

4a) ... im Textmodus


Wie eingangs erwähnt, unterstützt CGA einen 16-Farben-Textmodus von 80 x 25 mit einer 8 x 8-Pixel-Zeichenmatrix, und in diesem Modus wird nur ein Viertel des Videospeichers verwendet. Handwerker fanden einen undokumentierten WegSchalten Sie die Ausgabe alle zwei Pixelzeilen auf eine neue Textzeile um, d. h. Von jedem Zeichen werden nur die beiden obersten Pixelzeilen ausgegeben. Im resultierenden 100-Zeilen-Halbtextmodus werden alle 16 KB Videospeicher verwendet, und das Bild ist 16-farbig mit einer Auflösung von 640 x 200 Pixel. Im Vergleich zu Grafikmodi gibt es im Halbtext jedoch recht strenge Einschränkungen: Erstens können bei jeder Vertrautheit von 8 x 2 Pixel nur zwei verschiedene Farben verwendet werden. zweitens sollte die Folge von "Haupt" - und "Hintergrund" -Pixeln in jeder Vertrautheit den zwei oberen Zeilen eines von 256 Zeichen entsprechen, die im CGA-ROM geflasht sind. Selbst mit diesen Einschränkungen, die die Unannehmlichkeiten von Pixelkunst und Textpseudografiken kombinieren, schaffen es die Assistenten, unglaubliche 16-Farben-Zeichnungen zu erstellen:



(In dem Artikel über 1024 Farben wird nur ein Viertel dieses Bildes gezeigt, aber seine Vollversion wurde separat veröffentlicht - direkt in Form eines Videospeicherauszugs.)

Ohne einen 100-Zeilen-Hack - d.h. Wenn die Matrix jedes Zeichens vollständig gerendert wäre, würde der mittlere Teil des Bildes folgendermaßen aussehen:



Auf der rechten Seite befindet sich eine im ROM zusammengefügte Zeichentabelle, in der die beiden oberen Zeilen jedes Zeichens, die für die Verwendung im Halbtextmodus verfügbar sind, gelb hervorgehoben sind.

Zum ersten Mal entschied sich Macrocom, einen 100-Zeilen-Hack und Text-Pseudo-Grafiken zu kombinieren, und veröffentlichte 1984 das Spiel "ICON: Die Suche nach dem Ring" mit einer Auflösung von 320 x 200 x 4 bpp, die für CGA unglaublich schien. Allerdings auch statische BildschirmschonerMacrocom wurde viel schlechter gezeichnet als VileR; und während des Spiels wurden die Grafiken noch primitiver verwendet.




(Das Paradoxe ist, dass, obwohl dies ein Textmodus ist, das Anzeigen von Text darin nicht trivial ist: Sie müssen jedes Zeichen aus den „Fetzen“ der Firmware im ROM sammeln.)

Eine weitere wesentliche Einschränkung des Halbtextmodus besteht darin, dass das Bild auf dem zusammengesetzten Monitor zu einem ziemlich hässlichen Erscheinungsbild unscharf wird . Eine VileR-Zeichnung würde beispielsweise folgendermaßen aussehen:



Sie können jedoch von dieser Unschärfe profitieren - um im Halbtextmodus eine große Anzahl von Artefaktfarben zu erzeugen! Wie im vorherigen Abschnitt erläutert, wird jede sich wiederholende Folge von Pixeln mit einer Periode von 8 Subpixeln zu einer festen Artefaktfarbe die Hälfte der Zeichenbreite im 80-Spalten-Modus. Dies bedeutet, dass im Halbtextmodus - wenn sowohl die Haupt- als auch die Hintergrundfarbe für jedes Zeichen beliebig aus 16 Standardfarben ausgewählt werden können - zum Erstellen von Artefaktfarben Zeichen benötigt werden, die vorhanden sind

  1. Die beiden oberen Pixelreihen sind gleich.
  2. Die linke und rechte Hälfte dieser beiden Linien sind gleich.

Das CGA-ROM hat Zeichen gefunden, die für zwei periodische Sequenzen geeignet sind - 1100und 0110. Die erste Sequenz ermöglicht es Ihnen, Artefaktfarben zu erhalten, die zwei sich wiederholenden Pixeln im 320x200-Modus entsprechen, d. H. alle Farben aus den Zeilen 0Axxin der vollständigen Tabelle; Das zweite sind die Farben aus den Quadraten Nr. 6 und Nr. 9 in den Zeilen 1A0x, wenn die Sequenz 0110mit farbigen Symbolen auf schwarzem Hintergrund bzw. schwarzen Symbolen auf farbigem Hintergrund angezeigt wird. In diesem Fall beträgt die tatsächliche Auflösung 80 x 100: Der Mindestbereich, für den Sie die Farbe einstellen können, entspricht der "beschnittenen" Vertrautheit.

Wie viele Artefaktfarben können also gleichzeitig im Halbtextmodus angezeigt werden? Alle Kombinationen von 16 Primärfarben, 16 Hintergrundfarben und zwei übereinstimmenden Zeichen sind verfügbar. Der Autor dieses Tricks ruft aus: „512 Farben! Natürlich gibt es tatsächlich weniger davon, es gibt Duplikate und sehr leicht unterschiedliche Farbtöne. “ Wenn die Haupt- und Hintergrundfarben zusammenfallen, ist es offensichtlich, dass bei jedem Symbol das Ergebnis das gleiche ist. Daher haben wir am digitalen Ausgang 496 verschiedene periodische Sequenzen von acht Pixeln. Die Umwandlung dieses Ausgangs in Composite führt dazu, dass einige Sequenzen in dasselbe Videosignal umgewandelt werden. Beispiel: 0110Grau auf Schwarz, Grau auf Lila und Hellgrün auf Lila - verwandeln Sie sich in denselben dunklen Fliederfarbton:



Im Vergleich zur vollständigen Tabelle sind hier die Quadrate aus Gründen der Übersichtlichkeit verdoppelt, sodass wir den Wert jedes Streifens innerhalb der Quadrate direkt im Diagramm signieren konnten. Es ist zu sehen, dass die Sequenz 0110den hohen Pegel des magentafarbenen Hintergrunds vollständig abschneidet, so dass der Hintergrund nicht mehr von Schwarz zu unterscheiden ist. Die grüne Farbe unterscheidet sich in der Phase von Magenta um 180 °, sodass diese Sequenz auf die gleiche Weise ein hohes Maß an grünen Zeichen abschneidet und hellgrüne Zeichen nicht mehr von grauen zu unterscheiden sind. Auf der FarbkarteIn dem Artikel über 1024 Farben können Sie sehen, dass die Linien Nr. 0 und Nr. 5, die dem schwarzen und violetten Hintergrund entsprechen, fast nicht zu unterscheiden sind; Die Spalten 8 und 10, die grauen und hellgrünen Symbolen entsprechen, sind ebenfalls kaum zu unterscheiden. Nach cgaart-Berechnungen stimmen dunkle Fliederfarben, die den drei genannten Parameterkombinationen entsprechen, vollständig überein; Beim korrigierten CGA-Modell sind diese drei Schattierungen unterschiedlich, wie am unteren Rand der Quadrate im Diagramm zu sehen ist.

Zusätzlich zu diesen drei Kombinationen zeigt das erste CGA-Modell die Sequenz in 0110Schwarz in Hellmagenta und Grau an. Grau in hellem Magenta ergibt das Standardgrau und Schwarz in Magenta ergibt das Standardschwarz. Schließlich, wie auf der rechten Seite des Diagramms gezeigt, die Reihenfolge1100Grau auf Hellrot ergibt den gleichen - fast normalen - Grauton wie die Sequenz 0110hellgrün in hellviolett. Insgesamt stehen beim ersten CGA-Modell 490 verschiedene Farben zur Verfügung, bei der korrigierten jedoch alle 496.

Der Höhepunkt des Artikels über 1024 Farben ist die erfundene Neuausrichtung, um im Halbtextmodus nur eine obere Pixelreihe für jedes Zeichen anzuzeigen, diese Zeile jedoch zweimal zu wiederholen. Es ist schwer , eine „neue Grafiken zu nennen Modus”, Da eine konstante Änderung der CGA-Einstellungen - zu Beginn jeder Scanzeile - erforderlich ist, die den 8088-Prozessor vollständig belegt und keine Möglichkeit bietet, parallel zur Anzeige eines 1024-Farben-Bilds etwas anderes zu tun, um beispielsweise eine Animation vorzubereiten. Aber dank diesem Trick wird es möglich, den Einsatz Sequenzen 0010und 0101zusätzlich zu den beiden oben gezeigt. Unter Verwendung von vier verschiedenen Symbolen ist es möglich, 976 verschiedene periodische Sequenzen von acht Pixeln am digitalen Ausgang zu erhalten. Und wie viele verschiedene Farben werden nach der Umwandlung in ein zusammengesetztes Videosignal erhalten? Ich zählte 950 mit dem ersten CGA und 973 mit einem festen.

Abschließend gebe ich eine Tabelle aller Farben an, die im Halbtextmodus erhalten werden können. VileR hat eine ähnliche Tabelle, aber gruppiert nach Monitortyp und nicht nach der Ausgabesequenz von Pixeln, wie bei mir. Sein Tisch ist praktisch für einen Künstler, der mit einem bestimmten Gerät arbeitet. meins ist für den Theoretiker, der verstehen will, wie diese oder jene Farbe auf dem Monitor erscheint.

Voller Tisch

All Articles