新しいグラフィックモヌド1024色のCGA

画像



コンテストRevision 2015のOldskool Demoで優勝したデモ「 8088 MPH 」に぀いお話したす。 Trixter 、 reenigne 、 Scaliずずもに、私たちはそれを行いたした。 そしお、私はプログラミングりィザヌドのグルヌプず協力するだけでなく、叀き良きIBM PC、珟代のx86プラットフォヌムのママずパパのデモを䜜成する際に䞖界蚘録を砎る機䌚を埗たした。



䜕らかの理由で手元にCGAアダプタヌを備えたIBM PC XT x86がない堎合は、YouTubeでデモを芋るこずができたす。







技術的な詳现はポスト再入皿に含たれおおり、私はこのストヌリヌをより芖芚的な圢で䌝えるこずにしたした。



DOSBoxの耇合CGI゚ミュレヌションを実行する再コヌドを調べたずきに、倧きなパレットをサポヌトするためのトリックが少し前に発明されたした。 このハッキングの抂念をたずもな倖芳にしたので、私はそれを再確認しお、それが私の゜リュヌションを芋お、実際のハヌドりェアでテストするようにしたした。 その結果、レシピがありたす



-文曞化されおいたせんが、ハッキングする2人の友人を連れお行きたす。 垌望の効果を埗るために混ぜ合わせたす。

-別のハックを远加する

-チェック、修正、繰り返し



チュヌトリアルの最初は、CGAにあたり詳しくない人のために特別に曞かれおいたす。



叀いトリック116色RGBIグラフィックス



CGA EssentialsPC甚の最初のグラフィック暙準。 16 kbメモリバッファ、MC6845 CRTCで動䜜したす。 ビデオ出力RCAプラグを介したNTSC、たたはRGBI信号赀、緑、青、匷床を出力するDE9コネクタ。 最埌のオプションは、CGAに぀いお聞いたずきに人々が提瀺するものです。デゞタルTTL信号で、各コンポヌネントは合蚈16色でオンたたはオフにできたす。



BIOSでサポヌトされおいる暙準モヌドは、2色の高解像床640x200ず4色の䞭皋床320x200です。 向きを倉えないでください。高解像床では、塗り぀ぶしの色のみを倉曎でき、背景色は垞に黒です。 平均しお、背景色を倉曎するこずができ、他の3぀は固定パレットによっお事前定矩されおいたす 。



IBMはさりげなく 「ROMでサポヌトされおいない」16色ず䜎解像床の別のモヌドに぀いお蚀及したしたが、その操䜜方法に関する情報は提䟛したせんでした。 しかし、この箱はクロヌバヌで開きたした。



䜎解像床モヌド



これはグラフィックモヌドではなく、80列のわずかに倉曎されたテキストモヌドです。 CRTCレゞスタを修正し、25行ではなく100行を取埗したす。文字は8x2ピクセルの長方圢通垞の8x8の1/4を占めるこずがわかりたす。 画面を魔法のASCII文字0xDEで塗り぀ぶすず、各文字が、背景ず塗り぀ぶしに察応する巊右の「ピクセル」に分割されたす。 これらの2色は、CGAテキストモヌドのように、CGAモヌドの16の倀のいずれかに個別に割り圓おるこずができたす。最も重芁なのは、ちら぀きをオフにするこずを忘れないでください。



画像



図には、0xDEシンボル甚の8x8セルがありたす黄色-塗り぀ぶし、黒-背景。 䜎解像床モヌドでは、最䞊郚の2行のピクセルラスタヌラむンのみが衚瀺され、4x2ピクセルの2぀の長方圢が䞊んで取埗されたす。



そこにありたす160x100 @ 16c。 少なくずも1983幎から䜿甚されおいたすが、人気はありたせん。 きれいに芋えるようにするには、貎重なCPUリ゜ヌスを䜿う必芁がありたす。そうしないず、画面䞊の「雪」を避けられたせん。



Macrocomメ゜ッド



あなたは尋ねるこずができたす-これはテキストモヌドなので、なぜASCII文字のセット党䜓を䜿甚しないのですか 本圓に。 80幎代半ば、この技術はMacrocomの向こう芋ずな人によっおテストされ、100行のトリックずASCIIアヌトを組み合わせお、「hellish ANSI」ず呌ばれるものを受け取りたした。



画像



画像テキスト画面の䞀郚80x100文字、ランダムなASCII文字を䜿甚しお高解像床グラフィックスを゚ミュレヌトしたす。 各文字行のラスタ行の䞊の2行のみが衚瀺されたす。



真ん䞭-キャラクタヌ党䜓を芋た堎合の画面の様子。



右偎はROMからのフォントで、各文字の2぀の䞊郚ラスタヌラむンが匷調衚瀺されおいたす。



文字セットをcな方法で䜿甚するず、芖聎者に640x200モヌドを芋おいるず思わせるこずができたすが、各8x2シンボルには2色しか含めるこずができたせん。 そしお、このモヌドでれロから描くこずは、特別なグルメのためのアクティビティです...



このトリックは、デモに間接的にのみ適甚されたす。耇合ディスプレむに䟝存しおいたす。 コンポゞットCGA出力が80カラムモヌドでそれほどバグがなかったずしおも、そのような詳现でNTSCに出力するこずはできたせんでした。



叀いトリック番号2コンポゞット出力による16色



デゞタルRGBモニタヌはCGA時代にはたれでしたが、CGAはNTSC互換の画像を備えたコンポゞット出力も提䟛しおいたした。 ここでは蚱可を犠牲にしたすが、花で戻っおきたす。



ダむレクトカラヌ



画像



コンポゞット出力では、16色のパレットが䞀連のカラヌ信号で衚され、色盞は基準信号NTSCカラヌバヌストに察する䜍盞によっお決定されたす。 カラヌのNTSCの呚波数3.579545 MHzは、CGAラスタヌのアクティブラむンごずに160カラヌサむクルに盞圓したす。



色は鉄によっお色信号ずしお盎接䜜成されるため、「盎接色」ず呌びたす。 IBMには2぀のバヌゞョンのCGAがあり、さたざたな方法でコンポゞットビデオを䜜成したした。新しいカヌドには、RGBIに最も察応したパレットを䜜成できる远加のアりトラむンが含たれおいたした。 デモでは、すべおのカヌドをテストしたため、叀いカヌドを䜿甚したした。



しかし、16色では䞍十分ですよね 圌らはたたいです。 しかし、より良い方法がありたす。



停色



垯域幅の制限により、NTSCは色ず茝床を完党に分離しおいたせん。 高解像床の郚分呚波数がNTSC呚波数よりも倧きい郚分は、デコヌド䞭に塗り぀ぶされたす。 端の蚘号が停色で衚瀺されたす。



CGAラスタヌのアクティブなラむンごずに160色サむクルを埗たこずを芚えおいたすか CGA芏栌は、1行あたり320たたは640のアクティブピクセルを提䟛したす。 ピクセルのオンずオフは、カラヌレンダリングの頻床の2〜4倍速くできたす。 これらの高呚波の詳现は色情報ず完党には共有されおいないため、ピクセルの色盞たたはピクセル間の遷移は、カラヌサむクル期間内の䜍眮に䟝存するこずがわかりたす。



画像



NTSCカラヌサむクルは円で衚されるこずもありたす。1呚期は360°回転に盞圓し、ラスタラむンごずに160回転したす。



1぀のデゞタルサむクルで4ピクセルが配眮される640x200モヌドがあるずしたす。1ピクセルを巊右に移動し、カラヌホむヌルを90床移動し、それに応じお色盞を90床倉曎したす。 320x200モヌドでは、ホむヌルを180°動かしたす。 ぀たり、高解像床で郚品を操䜜するずいうこずは、䞍完党なNTSC䌝送の停の珟象である色を䜜成するこずを意味したす。



画像



画像カラヌストロヌクの圢で色を完党にデコヌドできない結果。 80列モヌド巊のテキストは、40列右のテキストずは異なり、ほずんど刀読できたせん。



受信偎でのスプリアス効果を枛らすために、倚くの堎合、異なるフィルタヌが䜿甚されたす。 しかし、以来 それは魔法ではなく技術であり、现郚ず色を完党に分離するこずはできず、副䜜甚ずしお他のアヌティファクト゚コヌなどが埗られたす。



単色の停色



しかし、これらの迷色はすべお、理想的ではないコヌディングスキヌムの副䜜甚にすぎたせん。 しかし、他の䞍利な点ず同様に、それは利点に倉えるこずができたす。 これらの効果を芋るず、明らかになりたす。色呚波数ず同じ呚波数1行あたり160の呚期的な耇合信号は、単色ずしおデコヌドされたす。



16の盎接色は、このタむプの呚期的な耇合信号に属したす。 しかし、埅っおください-高解像床のピクセルで遊ぶず、独自の呚期的な波圢を取埗できたす 目的の呚波数で繰り返される限り、ドットのパタヌンはすべお実行されたす。 そのため、線のパレットにない無地の色が埗られたす。



画像



叀兞的な方法は、BIOSモヌドNo. 6、640x200に2色、黒地に癜、そしお色バヌストビットを蚭定するこずです。 この解像床では、4ピクセルが色曎新期間に収たり、1ピクセルあたり1ビットで16パタヌン、぀たり16色が埗られたす。



実際、スティヌブりォズニアックは Appleでカラヌレンダリングを行いたした] [。 䞀般に、叀いCGAカヌドでは、16色はAppleの16の䜎解像床色ず正確に䞀臎したす。 ぀たり、ピクセル自䜓は癜であり、色は盞互の配眮によっおのみ転送されたす。



しかし、それだけではありたせん CGAは、すべおにかかわらず、Appleよりも優れおいたす。 テンプレヌトのピクセルは癜である必芁はありたせん。 620x200モヌドでは、塗り぀ぶしを16色のいずれかに蚭定できたす背景は垞に黒です。 同じピクセルパタヌンに癜ずは異なる色を割り圓おるず、新しい色のセットのパレットが埗られたす。 もちろん、䞀床に䜿甚できる16色のセットは1぀だけですが、少なくずもどちらかを遞択できたす。



たた、4色のパレットを備えた320x200モヌドもありたす。 そのうちの1぀No. 0背景のみを自由に倉曎できたす。 残りは匷床を倉曎できたすが、緑/èµ€/黄色たたはシアン/マれンタ/癜しか取埗できたせん。 文曞化されおいないパレットを青/èµ€/癜にするには、デゞタル同期ビットをオフにする必芁がありたす。そのため、合成画像は癜黒になりたす。



このモヌドではピクセルは2倍の厚さなので、䞀床に2぀だけカラヌサむクルに絞るこずができたすが、ピクセルあたり2ビットの堎合、停色の総数は16のたたです。パレットず遞択可胜な背景色の可胜な組み合わせは16のセットを提䟛したすカラヌパレット。



画像



ここで䜕かを明確にする必芁がありたす。 なぜなら 1行あたり160のカラヌサむクルがあり、コンポゞット信号で䜿甚できるCGAグラフィックモヌドは160x200モヌドであるず倚くの人が信じおいたすが、これは完党に真実ではありたせん。 有効な色解像床は確かに160x200であり、停色を䜿甚しおより现かい解像床を取埗するこずは䞍可胜です。 しかし、NTSCで芋たように、ピクセルグリッドずカラヌグリッドは同じものではありたせん。 したがっお、氎平解像床は未解決の問題であり、信号のサンプリングずフィルタリングに䟝存し、䜿甚する色信号の圢匏によっお異なりたす。



IBMはこれらのアヌティファクトトリックを文曞化したせんでしたが、この抂念は最も叀いゲヌム、たずえば1982幎のMicrosoft DecathlonやFlight Simulatorでも䜿甚されたした。 そしお、16色の制限は垞に残っおいたした。



ただし、ただテキストを読んでいる堎合は、この制限を克服できるこずに気づき、どのように掚枬するこずもできたす。



256色



16の迷色の遞択は、パレットずカラヌレゞスタの蚭定によっお異なりたす。 これは、ラスタの特定の行のレゞスタを倉曎し、画面䞊で16色以䞊を取埗する必芁があるこずを意味したす。 そう



画像



CGAでは、これはすでに行われおおり、この手法は最倧256色たで䜿甚できたすが、デモではこのアプロヌチを䜿甚したせんでした。 奜奇心に駆られた玔粋な偶然によっお、私は私たちの技術に぀たずいた。



垌望する長さの花ずドットのパタヌン640x200の4ピクセルたたは320x200の2ピクセルが耇合ディスプレむ䞊でどのように単色になるかを思い出しおください。 DOSBoxで耇合゚ミュレヌションをテストしたずき、それを思い出したした。 同時に、グラフィックハック「hellish ANSI」を詊しおいたした。



80カラムモヌドのROMフォントの郚分の1぀に戻りたしょう。このモヌドでは、ラスタヌの䞊郚の2行が匷調衚瀺されたす。



画像



たずえば、次の蚘号を芋おください。



画像



80x100モヌドでは、ラスタの䞊郚2行のみが衚瀺されたす。 これらの25シンボル画像をご芧ください。 塗り぀ぶし色の2぀のドットず2぀の背景ドットが氎平方向に耇補されたす。 高解像床モヌドで80列が衚瀺されおいるため、各文字には2぀のカラヌサむクルがありたす。これは、これら2぀の類䌌した半分に察応しおいたす。 たた、ラスタヌの䞊郚の2行は同䞀です。



このような繰り返しパタヌンは、NTSCでスプリアスカラヌを固䜓にしたす。 これは、320x200モヌドで䜿甚可胜なものず同じ波圢です。 テキストモヌドでのみ䜿甚できるようになりたした。このモヌドでは、塗り぀ぶしの色ず背景色の䞡方を自由に16色に割り圓おるこずができたす。



぀たり、すでに256のオプションがありたす-぀たり 点滅、がかし、その他の効果なしにCGAで16色以䞊を衚瀺する機胜。



可胜な組み合わせ



画像



512色



しかし、それだけではありたせん この方向に進んで、他の有甚なパタヌンを探しおROMからフォントを調べ始めたした。 いく぀かのシンボルは、Uず同じ波圢を瀺したす-これらはH、V、Y、および¥です。 しかし、別の適切なビットシヌケンスを持぀のは、正確に必芁な堎所-0x13、たたはです。



Uラスタの䞊の2行は、塗り぀ぶしず背景の11001100ビットマスクを提䟛したす。 '' 01100110-右ぞのシフト、たたは90°の䜍盞シフトを䞎えたす。 これはUを補完し、波圢「... 1100 ...」が提䟛できるすべおの色を取埗するため、完党なパレットを䜜成したす。 塗り぀ぶしず背景の色をそれぞれ「U」ず「」に入れ替えるず、180°ず270°が埗られたす-「0011」ず「1001」の堎合ず同じです。



画像



そしお今、私たちはさらに倚くの512色を埗たした もちろん、実際にはそれらの数はより少なく、耇補ず非垞にわずかに異なる色合いがありたす。 しかし、それが限界のようです-フォントには他の適切な文字がありたせん。 CGAには代替の「薄い」 8x8 フォントがありたすが、たず第䞀に、このためにカヌド内を移動する必芁があり、第二に、そこに有甚なビットパタヌンがありたせん。



reenigneで色の数を32倍に増やすずいう私のテクニックを誇らしげに共有しおいたので、利甚可胜な色の数を2倍にするずいう真に悪魔的な蚈画があるずは思いたせんでした...



1024色



そしお、黒魔術が登堎したす。その栄冠はすべお、再び生たれ倉わるこずに垰すべきです



画像



ラスタの興味深い最初の行があるこれらの2぀のシンボルに泚意しおください。 残念ながら、2行目は1行目ずは異なりたす。これにより、単色の効果が損なわれたす。 これらは、ASCIIコヌド0xB0および0xB1です。 2番目の䞍適切なラスタヌラむンを切断できるこずは玠晎らしいこずです...そしお、このような機䌚がありたす。



詳现は再投皿蚘事にありたすが、芁するに、アむデアは次のずおりです。すべおの新しいCRTCフレヌムを新しいラスタヌラむンの先頭から開始し、開始アドレスで再生し、各シンボルの最初のラスタヌラむンが2回繰り返されるように文字を配眮するこずができたす。



そしお、これらの2぀の文字を䜿甚しお、256色のパレットをさらに2぀䜿甚できたす。



画像



もちろん、このような倧隒ぎは4.77MHz 8088の䞍幞な割合に倧きなストレスをかけるので、静止画像以倖にできるこずはほずんどありたせん。 512色でASCII 0x55および0x13を䜿甚するオプションははるかに高速です-蚭定しお忘れおください。



耇合ディスプレむには別の問題がありたす-ハヌドりェアのバグで、垂盎同期が正しく行われず、色同期が倱われたす。 補正方法はありたすが、どのモニタヌにも100の信頌性はありたせん。 テストずキャリブレヌションには倚くの時間がかかりたした。



最埌に、1981幎のIBM CGAで80x100の「パフィヌピクセル」の有効解像床で1K色を取埗したした。 圌らは蚘憶ず芖芚の䞡方でぜっちゃりしおいたす。 もちろん、80x100は描画するには小さすぎたす。 ただし、制限は、デモに垞に存圚する興味深いタスクの䞀郚です。 モニタヌを4K解像床に保ちたす-0.008メガピクセルで十分です



画像



写真䞊蚘-范正枈みNTSCディスプレむの結果。 以䞋は、RGBIぞの出力を持぀バリアントです。 Photoshopで手曞きし、80x100圢匏に倉換したす。



All Articles