
カラーテレビインターフェースアダプタ[ 1 ](CTIA)とその後継であるグラフィックテレビインターフェースアダプタ[ 1 ](GTIA)は、Atari 8ビットコンピュータとAtari 5200家庭用ビデオゲームコンソールで使用されるカスタムチップです。これらのシステムでは、CTIAまたはGTIAチップがANTICと連携してビデオディスプレイを生成します。ANTICはプレイフィールドグラフィックス(テキストとビットマップ)を生成し、CTIA/GTIAはプレイフィールドの色を提供し、プレイヤー/ミサイルグラフィックス(スプライト)と呼ばれるオーバーレイオブジェクトを追加します。CTIA/GTIAチップは、 Jay Minerの指揮の下、George McLeodがSteve Smithの技術支援を受けて設計しました。[ 2 ] [ 3 ] [ 4 ]
カラーテレビインターフェースアダプタとグラフィックテレビインターフェースアダプタは、 Atariのフィールドサービスマニュアルに記載されているチップの名前です。[ 1 ]さまざまな出版物では、チップの名前が異なり、代替スペルのAdapter [ 5 ] [ 6 ]やGraphics [ 3 ]を使用したり、「CTIA」の「C」はColleen/Candy [ 5 ]、「GTIA」の「G」はGeorge [ 3 ] [ 5 ] [ 6 ] [ 7 ]の略だと主張したりしています。
Atari はAtari 2600コンソールの一部として、初のディスプレイ ドライバ チップである Television Interface Adaptor (TIA) を開発しました。[ 8 ] TIA ディスプレイは、「プレイフィールド」の背景上に 4 つの主要な移動オブジェクト(2 つの「プレイヤー」と 2 つの「ミサイル」) を生成します。1 ラインのすべてのアイテムは、メモリ レジスタ内の単純なデータから生成され、デジタル - アナログ コンバータとRF モジュレータによってテレビ ディスプレイ ラインに変換できるタイミング付きデジタル信号を生成します。ライン間 (ビデオ ビームの水平フライバック中)、2600 の 6507 マイクロプロセッサは、レジスタを更新することによって次のラインの内容を変更することができました。この方式により、1970 年代半ばのRAM技術と価格では高価すぎたビデオ フレーム バッファの使用を回避しました。時間が経つにつれて、2600 プログラマは、ライン中にレジスタを更新して同じハードウェア スプライトを繰り返すことで、より多くのスプライトを表示する技術を開発しました。
アタリは1976年に2600を設計した当初、その市場寿命は3年と短いと見積もっており、1979年までに新しい設計が必要になると考えていた。[ 8 ]最初は、改良された同様の基本設計をベースにした、2600のようなゲーム機のアップデート版となる予定だった。CTIAとなるものの開発は1977年に始まり、画面解像度を2倍にし、色数を2倍にすることを目指した。さらに、プレイフィールドの色数を変化させることで、水平方向に最大320ピクセルというはるかに高い解像度をサポートすることができた。プレイヤーとミサイルもアップデートされ、8ビットのプレイヤー4人と2ビットのミサイル4つに加え、4つのミサイルを組み合わせて5人目のプレイヤーにするモードも追加された。
設計が始まって間もなく、1977 年後半に、家庭用コンピュータ革命が本格的に始まった。これに対応して、アタリは新しいマシンの 2 つのバージョンをリリースすることにした。ゲーム コンソールとしての低価格モデルと、家庭用コンピュータとしての高価格モデルである。[ 8 ] 2600 のビーム レースは、低コスト設計の予期せぬが歓迎すべき結果であり、同社は新しいマシンも同様に柔軟であることを望んでいた。[ 9 ]どちらのモデルでも、コンピュータの役割でキャラクター グラフィックスをサポートする、より複雑なプレイ フィールドが必要だった。この時点で CTIA の設計はかなり進んでいたため、再設計の代わりに、2600 のマイクロ プロセッサが実行していたビーム レースのプロセスを効果的に自動化する 2 番目のチップが追加された。マイクロ プロセッサが割り込みタイミングに基づいて CTIA のレジスタを更新する代わりに、新しいANTICチップは、フレーム バッファからビデオ データを読み取り、それをオンザフライで CTIA に書き込むことでこの作業を処理する。
これらの変更により、新しいチップはTIAチップに比べてグラフィックモードの数と選択肢が大幅に向上しました。解像度20ビットまたは40ビットの単一のプレイフィールドモードではなく、CTIA/ANTICペアは、さまざまな解像度と色深度で6つのテキストモードと8つのグラフィックモードを表示できます。これにより、プログラマは表示における解像度、色、メモリ使用量のバランスを自由に選択できます。


CTIAチップのオリジナル設計には、通常のグラフィックモードの3つの追加カラー解釈も含まれていました。この機能は、ANTICの高解像度グラフィックモードの代替表現を提供します。1ピクセルあたり1ビット、2色、ハーフカラークロック幅のピクセルを、1ピクセルあたり4ビット、最大16色、2色クロック幅のピクセルとして表示します。この機能は、1979年11月のコンピュータ発売前に準備されていましたが、開発サイクルで大幅に遅れたため、Atariは既にグラフィックモードが欠落した約10万個のCTIAチップを発注していました。既に製造されたチップを廃棄したくなかった同社は、米国市場向けのAtari 400および800モデルの初期リリースでそれらを使用することに決定しました。 CTIA搭載のコンピュータは、3つの追加カラーモードが欠けており、1981年10月~11月まで出荷された。[ 5 ] [ 6 ]この時点から、すべての新しいAtariユニットには、新しいカラー解釈モードをサポートする新しいチップ(現在はGTIAと呼ばれている)が搭載された。[ 6 ] [ 10 ]
オリジナルの Atari 800/400オペレーティングシステムは、最初から GTIA 代替カラー解釈モードをサポートしており、[ 10 ] GTIA が準備でき次第、CTIA を簡単に交換することができました。Atari 認定サービスセンターは、保証期間内のコンピュータに CTIA 搭載コンピュータに GTIA チップを無料でインストールしましたが、そうでない場合は交換に 62.52 ドルかかりました。[ 6 ] [ 7 ]
GTIAは、後期のAtari XLおよびXEコンピュータ、そしてAtari 5200コンソールにも搭載された。
以下のリストは、CTIA/GTIAの本来のハードウェア機能、つまりハードウェア自体の意図された機能について説明しています。CPUが処理する割り込みや、頻繁なレジスタ変更を引き起こすディスプレイカーネルによって達成される結果は含まれません。
CTIA/GTIAは、以下の機能を備えたテレビインターフェースデバイスです。
by part number
Atari, Inc. intended to combine functions of the ANTIC and GTIA chips in one integrated circuit to reduce production costs of Atari computers and 5200 consoles. Two such prototype circuits were being developed, however none of them entered production.

The Atari 8-bit computers map CTIA/GTIA to the $D0xxhex page and the Atari 5200 console maps it to the $C0xxhex page.
CTIA/GTIA provides 54 Read/Write registers controlling Player/Missile graphics, Playfield colors, joystick triggers, and console keys. Many CTIA/GTIA register addresses have dual purposes performing different functions as a Read vs a Write register. Therefore, no code should read Hardware registers expecting to retrieve the previously written value.
This problem is solved for many write registers by Operating System Shadow registers implemented in regular RAM as places to store the last value written to registers. Operating System Shadow registers are copied from RAM to the hardware registers during the vertical blank. Therefore, any write to hardware registers which have corresponding shadow registers will be overwritten by the value of the Shadow registers during the next vertical blank.
Some Write registers do not have corresponding Shadow registers. They can be safely written by an application without the value being overwritten during the vertical blank. If the application needs to know the last state of the register then it is the responsibility of the application to remember what it wrote.
Operating System Shadow registers also exist for some Read registers where reading the value directly from hardware at an unknown stage in the display cycle may return inconsistent results.
In the individual register listings below the following legend applies:
These registers specify the horizontal position in color clocks of the left edge (the high bit of the GRAF* byte patterns) of Player/Missile objects. Coordinates are always based on the display hardware's color clock engine, NOT simply the current Playfield display mode. This also means Player/Missile objects can be moved into overscan areas beyond the current Playfield mode.
ミサイルオブジェクトのビットパターンは表示ピクセル( GRAFM )に対して同じバイトを共有しますが、各ミサイルは個別に配置できることに注意してください。「5番目のプレイヤー」オプションが有効になっている場合(PRIOR/GPRIORレジスタを参照)、4つのミサイルが1つの「プレイヤー」となり、ミサイルは関連付けられたプレイヤーオブジェクトの色を表示する代わりにCOLPF3の値を表示します。新しい「プレイヤー」の画面上の位置は、各ミサイルの位置を個別に指定することによって設定する必要があります。
プレイヤー/ミサイルのピクセルは、GTIA のピクセル エンジンの表示領域内でのみレンダリングされます。プレイヤー/ミサイル オブジェクトは、水平ブランクまたは垂直ブランクの間はレンダリングされません。ただし、オブジェクトが水平ブランク内に部分的に存在する場合があります。水平ブランクの外側にあるオブジェクトのピクセルは、ディスプレイの表示領域内にあり、衝突を検知することができます。表示可能なカラー クロックの水平位置範囲は、$22 hex /34 decから $DD hex /221 decです。
プレイヤー/ミサイルオブジェクトを可視表示領域から削除するには、水平位置 (左) 0 および (右) $DE hex /222 dec (またはそれ以上) を指定すると、プレイヤー/ミサイルオブジェクトのサイズに関係なくピクセルがレンダリングされないため、意図しない衝突がフラグ付けされることはありません。
プレイヤー0の水平位置
プレイヤー1の水平位置
プレイヤー2の水平位置
プレイヤー3の水平位置
ミサイルの水平位置 0
ミサイル1の水平位置
ミサイル2の水平位置
ミサイル3の水平位置
以下は、プレイフィールドの可能なサイズの左右の端の色座標です。プレイヤー/ミサイルオブジェクトをプレイフィールドコンポーネントに合わせる際に役立ちます。
サイズは、標準、2倍、4倍の3種類から選択できます。左端(水平座標を参照)は固定されており、サイズ調整を行うと、いずれの場合もプレイヤーまたはミサイルが右方向に拡大されます。
クワッドサイズでは、プレイヤー/ミサイルの1ピクセルは、Antic Mode 2のテキスト文字と同じ幅であることに注意してください。プレイヤー/ミサイルの優先度選択とクワッド幅のプレイヤー/ミサイルグラフィックを組み合わせることで、モード行ごとに複数のテキストカラーを作成できます。
各プレイヤーは独自のサイズ制御レジスタを持っています。
プレイヤーサイズ 0
プレイヤー1のサイズ
プレイヤー2のサイズ
プレイヤー3のサイズ
プレイヤーサイズコントロール:
価値観:
ミサイルのサイズはすべて1つのレジスタで制御されますが、各ミサイルのサイズは他のミサイルとは独立して設定できます。「5番目のプレイヤー」オプションが有効になっている場合(PRIOR/GPRIORレジスタを参照)、4つのミサイルが1つの「プレイヤー」として扱われますが、幅は各ミサイルのサイズを個別に指定することで設定されます。
価値観:
各プレイヤーオブジェクトは、それぞれ8ビットのパターンレジスタを持ちます。ミサイルオブジェクトは、ミサイル1つにつき2ビットのレジスタを共有します。値が設定されると、各スキャンラインにその値が表示され続けます。CPUやANTIC DMAによる値の更新が行われないため、結果としてオーバースキャン領域を含め、画面の高さ全体にわたる垂直ストライプパターンが表示されます。この動作モードでは、コンピュータにCPUやDMAの負荷はかかりません。画面領域を区切る交互の色の境界線や垂直線を表示するのに便利です。
プレイヤー0のグラフィックパターン
プレイヤー1のグラフィックパターン
プレイヤー2のグラフィックパターン
プレイヤー3のグラフィックパターン
各プレイヤーは8ビット(ピクセル)幅です。ビットが設定されている場合、プレイヤーに関連付けられたカラーレジスタに割り当てられた色でピクセルが表示されます。ビットが設定されていない場合、プレイヤーオブジェクトは透明になり、プレイヤー、ミサイル、プレイフィールドのピクセル、または背景色が表示されます。ピクセル出力は、プレイヤーのHPOS値で指定された水平位置から始まり、最も高いビットが最初に出力されます。
すべてのミサイルのグラフィックパターン
各ミサイルは2ビット(ピクセル)幅です。ビットが設定されている場合、そのミサイルに関連付けられたプレイヤーのカラーレジスタに割り当てられた色でピクセルが表示されます。5人目のプレイヤーが有効になっている場合(PRIOR/GPRIORを参照)、ミサイルのピクセルはすべてCOLPF3を表示します。ビットが設定されていない場合、ミサイルオブジェクトは透明になり、プレイヤー、ミサイル、プレイフィールドのピクセル、または背景色が表示されます。ピクセル出力は、ミサイルのHPOS値で指定された水平位置から始まり、最も高いビットが最初に出力されます。
ミサイル値:
CTIA/GTIAは60ビットを備え、プレイヤー、ミサイル、プレイフィールドのピクセルが交差した際に衝突を自動的に検出します。1ビットは、プレイヤー/ミサイルオブジェクトのゼロ以外のピクセルが特定のカラーレジスタのピクセルと交差したことを示します。背景色レジスタ/値を使用してレンダリングされたピクセルについては、衝突は記録されません。このシステムは、バウンディングボックスや画像ビットマップのマスキングといった高負荷なCPU処理を必要とせず、瞬時にピクセル単位で正確な重なり比較を実現します。
オブジェクトの実際の色値は考慮されません。プレイヤー、ミサイル、プレイフィールド、背景の色レジスタがすべて同じ値で、オブジェクトが実質的に「見えない」状態であっても、オブジェクト同士の交差は衝突を検出します。これは、隠されたオブジェクトや秘密のオブジェクト、壁を作成する際に役立ちます。
隠れた交差部分も衝突として検出されます。プレイヤーオブジェクトの優先度がプレイフィールドのカラーレジスタの背後にあり、別のプレイヤーオブジェクトの優先度がプレイフィールドよりも高い(前景)場合、前景のプレイヤーピクセルがプレイフィールドとプレイフィールドの背後にあるプレイヤーオブジェクトの両方を隠してしまうと、プレイフィールドと背景および前景のプレイヤーオブジェクト間の衝突に加え、前景と背景のプレイヤーオブジェクト間の衝突も検出されます。
ミサイル同士の衝突は発生しないことに注意してください。
プレイヤーとミサイルの衝突は、プレイヤーまたはミサイルのオブジェクトのピクセルがディスプレイの表示領域内にある場合にのみ発生します。プレイヤーまたはミサイルのオブジェクトは、水平方向の空白領域または垂直方向の空白領域ではレンダリングされません。表示可能なカラークロックの範囲は34~221で、表示可能な走査線の範囲は8行目から247行目までです。これらの座標外にあるプレイヤーまたはミサイルのデータはレンダリングされず、衝突も検出されません。オブジェクトは水平方向の空白領域内に部分的に存在することができます。水平方向の空白領域外にあるオブジェクトのピクセルは、ディスプレイの表示領域内にあるため、衝突を検出できます。
プレイヤー/ミサイルオブジェクトを可視表示領域から削除するには、水平位置(左)0、(右)222(以上)を指定すると、プレイヤー/ミサイルオブジェクトのサイズに関係なくピクセルがレンダリングされないため、意図しない衝突が検出されることはありません。
最後に、プレイヤー、ミサイル、プレイフィールドの各オブジェクトの衝突検出はリアルタイムで行われ、画像ピクセルがマージされてディスプレイに出力される際に衝突が記録されます。CTIA/GTIAによってオブジェクトがレンダリングされる前にオブジェクトの衝突ビットを確認しても、衝突は検出されません。
一度設定された衝突は、 HITCLRレジスタへの書き込みによって解除されるまで有効です。効果的な衝突応答ルーチンは、対象オブジェクトが表示された後、またはフレームの終了時、もしくは垂直ブランク中に実行され、衝突に対応して次のフレームが始まる前に衝突を解除する必要があります。
衝突は1ビットしか持たないため、衝突は明らかに加算的なものではありません。1フレーム内でピクセル間の衝突が何回、どの場所で発生しても、衝突があったことを示すビットは1つだけです。衝突ビットが設定されると、プログラムは関連するオブジェクトを調べて衝突位置を特定し、各位置に対してどのように反応するかを決定できます。
HITCLRと衝突検出はリアルタイムであるため、ディスプレイリスト割り込みを使用すると、ディスプレイをセクションに分割し、各セクションの開始時にHITCLRを使用し、各セクションの終了時に衝突評価を個別に行うことができます。
「5人目のプレイヤー」オプションが有効になっている場合(PRIOR/GPRIORレジスタを参照)、変更点はミサイル0~3の表示が、関連付けられたプレイヤーオブジェクトの色からCOLPF3の値に切り替わることのみです。新しい「プレイヤー」の衝突は、個々のミサイルに対して引き続き報告されます。
各ビットは、プレイヤー/ミサイルオブジェクトのピクセルが、指定されたプレイフィールドカラーオブジェクトのピクセルと交差したことを示します。背景色については、衝突は記録されません。
遮蔽された交差部分も衝突を検出します。プレイヤー/ミサイルオブジェクトの優先度がプレイフィールドのカラーレジスタの背後にあり、別のプレイヤー/ミサイルオブジェクトの優先度がプレイフィールドよりも高い(前景)場合、前景のプレイヤー/ミサイルのピクセルがプレイフィールドとプレイフィールドの背後にあるプレイヤー/ミサイルオブジェクトの両方を遮蔽すると、プレイフィールドと背景および前景のプレイヤー/ミサイルオブジェクトとの間の衝突が検出されます。
高解像度、1/2 カラークロック ピクセル モード ( ANTICモード 2、3、および F) は、異なる方法で処理されます。ピクセル値が 0 の場合にCOLPF2としてレンダリングされる「背景」カラーは、衝突を検出しません。高解像度ピクセルは、COLPF1の輝度値としてレンダリングされます。ピクセルは、カラークロック幅のペア (ピクセル 0 と 1、ピクセル 2 と 3、ピクセル 318 と 319 まで) にグループ化されます。ペアのいずれかのピクセルが 1 の場合、プレイヤーまたはミサイルのピクセルとプレイフィールド カラーCOLPF2との間で衝突が検出されます。
GTIAモード9と11では、プレイフィールドの衝突は処理されません。GTIAモード10では、プレイフィールドの衝突は、プレイフィールドのピクセルがCOLPF0からCOLPF3を使用する場所で記録されます。
ミサイル0とプレイフィールドの衝突
ミサイル1とプレイフィールドの衝突
ミサイル2とプレイフィールドの衝突
ミサイル3がプレイフィールドに衝突
プレイヤー0とプレイフィールドの衝突
プレイヤー1とプレイフィールドの衝突
プレイヤー2とプレイフィールドの衝突
プレイヤー3とプレイフィールドの衝突
ミサイルはプレイヤーやプレイフィールドに衝突します。ミサイル同士の衝突はありません。
ミサイル0とプレイヤーの衝突
ミサイル1とプレイヤーの衝突
ミサイル2とプレイヤーの衝突
ミサイル3とプレイヤーの衝突
2人のプレイヤーが衝突すると、両方のプレイヤーの衝突レジスタにある衝突ビットが設定されます。プレイヤー0とプレイヤー1が衝突すると、プレイヤー0のプレイヤー1に対する衝突ビットが設定され、プレイヤー1のプレイヤー0に対する衝突ビットも設定されます。
プレイヤーは自分自身と衝突することはできないため、そのビットは常に0です。
プレイヤー0とプレイヤー間の衝突
プレイヤー1とプレイヤー間の衝突
プレイヤー2とプレイヤー間の衝突
プレイヤー3とプレイヤー間の衝突
デフォルトのCTIA/GTIAカラー解釈モードでは、すべてのプレイヤー/ミサイルオブジェクトのピクセルとすべてのプレイフィールドピクセルは、間接参照を使用して色を指定します。間接参照とは、ピクセルデータの値が色を直接指定するのではなく、色の情報源を別のソースに参照することを意味します。CTIA/GTIAには、色に使用される値を設定するハードウェアレジスタが含まれており、ピクセルの情報はこれらのレジスタを参照します。Atariのパレットは、16色の8つの輝度レベルで、合計128色です。色の間接参照の柔軟性により、プログラムは画面の色をプログラムの表示目的に合わせて調整できます。
すべてのハードウェアカラーレジスタには、対応するシャドウレジスタがあります。
影: PCOLOR0 $02C0
プレイヤーとミサイル0の色/輝度。
GTIA 9色モードが有効になっている場合(PRIOR/GPRIOR値$80)、このレジスタはCOLBKではなく、境界線と背景(プレイフィールドピクセル値0)に使用されます。
シャドウ: PCOLOR1 $02C1
プレイヤーとミサイル1の色/輝度。
シャドウ: PCOLOR2 $02C2
プレイヤーとミサイル2の色/輝度。
シャドウ: PCOLOR3 $02C3
プレイヤーとミサイル3の色/輝度。
シャドウ:カラー0 $02C4
プレイフィールドの色/輝度 0。
シャドウ:カラー1 $02C5
プレイフィールド1の色/輝度。
このレジスタは、ANTICテキストモード2および3、ならびにマップモードFにおける設定ピクセル(値1)に使用されます。輝度部分のみが使用され、COLPF2の色値とOR演算されます。その他の文字モードおよびマップモードでは、このレジスタはピクセルの期待される色と輝度を提供します。
シャドウ:カラー2 $02C6
プレイフィールド2の色/輝度。
このレジスタは、ANTICテキストモード2および3、ならびにマップモードFのプレイフィールドの背景色に使用されます。つまり、ピクセル値0が使用される場合です。その他の文字モードおよびマップモードでは、このレジスタはピクセルの期待される色と輝度を提供します。
シャドウ:カラー3 $02C7
プレイフィールド3の色/輝度
COLPF3は、いくつかの特別な状況下で利用可能です。
シャドウ:カラー4 $02C8
プレイフィールドの背景色/輝度。
背景色は、オーバースキャン表示領域全体において、他のピクセルが存在しない場所に表示されます。背景色には以下の例外があります。
カラーレジスタのビット:
カラーレジスタの上位ニブルは、16色($00、$10、$20...$F0)のうちの1つを指定します。
レジスタの下位4ビットは、16個の輝度値($00、$01、$02...$0F)のうちの1つを指定します。
通常の色解釈モードでは、最下位ビットは有効ではなく、8つの輝度値($00、$02、$04、$06、$08、$0A、$0C、$0E)のみが使用可能であるため、完全なカラーパレットは128の色値となります。
GTIAカラー解釈モード$4(輝度のみモード)では、プレイフィールドピクセルに対して16ビットの輝度値が使用可能となり、256色のカラーパレットが提供されます。このモードで表示されるプレイヤー/ミサイルオブジェクトは、間接的な色付けによって着色され、128色のカラーパレットが使用されます。
通常の色解釈モードでは、ピクセル値は$0から$3の範囲で、それぞれカラーレジスタCOLBK、COLPF0、COLPF1、COLPF2を指します。カラーテキストモードでは、特定の文字値の範囲でCOLPF3を使用するオプションも用意されています。詳細については、ANTICのグラフィックモードを参照してください。
プレイヤー/ミサイルのグラフィックパターンが有効になり、グラフィックパターンビットが設定されている場合、表示される色はオブジェクトに割り当てられたレジスタから取得されます。
色生成と表示に関しては例外があります。
ANTIC文字モードごとのカラーレジスタの使用:
ANTICマップモードごとのカラーレジスターの使用方法:
GTIAモードごとのカラーレジスタの使用状況(ANTIC F):
プレイヤー/ミサイルの色は、すべてのモードでプレイヤー/ミサイルオブジェクトに対して常に利用可能ですが、特別なGTIAモード(16色/16色)が有効になっている場合は、色が変更されることがあります。
SHADOW: GPRIOR $026F
このレジスタは、CTIA/GTIAカラーマネジメントのいくつかの機能を制御します。具体的には、GTIAプレイフィールドカラー解釈モード、マルチカラープレイヤーオブジェクト、第5プレイヤー、およびプレイヤー/ミサイル/プレイフィールドの優先順位です。
CTIA には、ANTIC プレイフィールド データ ストリーム用のデフォルトのカラー解釈モードが 1 つだけ含まれています。特に明記されていない限り、これがANTICと CTIA/GTIA に関する議論の大部分で想定される基本的な機能です。GTIA には、プレイフィールド データ用の代替カラー解釈モードが 3 つ含まれています。これらのモードは、ANTIC からの隣接するカラー クロックをペアにすることで機能するため、GTIA によって出力されるピクセルは常に 2 つのカラー クロック幅になります。これらのモードは、任意の ANTIC プレイフィールド モードを表示している間でも有効にできますが、これらの GTIA カラー処理オプションで可能なフル カラー パレットは、1 / 2カラー クロック ピクセルに基づく ANTIC モード (ANTIC モード 2、3、F) でのみ実現されます。これらの GTIA オプションは、モード F ディスプレイで最もよく使用されます。特別な GTIA カラー処理モードは、さまざまな方法でプレーヤー/ミサイル グラフィックの表示または動作も変更します。
色解釈制御は、画面全体に影響を与えるGTIAのグローバル機能です。GTIAは、さまざまなGTIA色解釈モードと、ほとんどのANTICプレイフィールドに必要なデフォルトのCTIAモードを1つのディスプレイ上で混在させる機能は本来備えていません。色解釈モードを混在させるには、ディスプレイ生成時(通常はディスプレイリスト割り込みによって)にPRIORレジスタにソフトウェアで書き込む必要があります。
PRIORビット7と6は、色の解釈モードを指定する4つの値を提供します。
このモードでは、COLBKレジスタを使用して背景色を指定します。間接参照を使用する代わりに、ピクセル値が輝度を直接表します。このモードでは、Atariカラーパレットの4つの輝度ビットすべてを使用できるため、256色を表示できます。
このモードでは、プレイヤー/ミサイルのグラフィック(5人目のプレイヤーオプションなし)は正しく表示されますが、プレイフィールドとの衝突検出は無効になります。プレイフィールドの優先順位は常に下です。ミサイルを5人目のプレイヤーとして切り替えると、ミサイルオブジェクトがプレイフィールドと重なる部分で、ミサイルのピクセル輝度がプレイフィールドのピクセル輝度値と融合します。
他の2つのGTIA特殊モードとは異なり、このモードは完全にカラー間接表示によって制御されます。9つのカラーレジスタすべてが、ピクセル値0~8に対してディスプレイ上で動作します。残りの7つのピクセル値は、前のカラーレジスタを繰り返します。
出力時にピクセルは1カラークロック(GTIAモードのピクセルの半分)だけ遅延します。このオフセットにより、興味深い効果が得られます。例えば、このモードと別のGTIAモードを高速でページ切り替えすると、解像度が高く、より多くの色数を表示しているように見えるディスプレイになります。
このモードは、 COLBKではなく、境界線と背景(プレイフィールド0の値のピクセル)にカラーレジスタCOLPM0を使用するという点で独特です。
プレイヤー/ミサイルのグラフィックは正しく表示されますが、プレイヤー/ミサイル0は背景ピクセルと同じカラーレジスタCOLPM0を使用しているため、背景ピクセルと区別できません。プレイヤー/ミサイルの色を使用するプレイフィールドのピクセルは、プレイヤー/ミサイルオブジェクトであるかのように優先度設定によって変更されるため、プレイヤー/ミサイルの表示に影響を与える可能性があります。(プレイヤー/ミサイル/プレイフィールドの優先度については後述します)。
プレイヤー/ミサイルの色を使用しているプレイフィールドのピクセルは、プレイヤー/ミサイルオブジェクトが重なっても衝突をトリガーしません。ただし、プレイヤー/ミサイルのグラフィックがプレイフィールドの色COLPF0~COLPF3と重なると、想定どおりの衝突が発生します。
このモードでは、COLBK レジスタを使用して、すべてのプレイフィールド ピクセルの輝度 (1 hex / 1 decから F hex / 15 decまでの値) を指定します。輝度値の最下位ビットは無視されるため、標準/CTIA 8 輝度値 ( $0、$2、$4、$6、$8、$A、$C、$E ) のみが使用可能です。さらに、背景自体には、COLBK レジスタで設定された色コンポーネントのみが使用されます。背景の輝度値は 0 に強制されます。輝度モードと同様に、間接参照は無効になり、ピクセル値が直接色を表します。
背景のカラー成分は、プレイフィールドのピクセルと融合することに注意してください。背景に黒以外の色を使用すると、このモードで表示される色の総数が減少します。
このモードでは、プレイヤー/ミサイルのグラフィック(5人目のプレイヤーオプションなし)は正しく表示されますが、プレイフィールドとの衝突検出は無効になります。プレイフィールドの優先順位は常に下です。ミサイルが5人目のプレイヤーとして動作するように切り替えられると、ミサイルオブジェクトがプレイフィールドと重なる部分では、ミサイルのピクセルがプレイフィールドのピクセルの色値を継承します。
PRIORビット5、値20 (16進数/10進数)は、マルチカラープレイヤーオブジェクトを有効にします。2つのプレイヤー/ミサイルオブジェクトのピクセルが重なる箇所には、3つ目の色が表示されます。これは、プレイヤー/ミサイルオブジェクトのペア間の優先処理を排除することで実現され、CTIA/GTIAは2つの色の付いたピクセルに対してビットごとのOR演算を実行して新しい色を出力します。
例: 色値が 98 hex / 152 dec (青)のプレイヤーピクセルが、色値が 46 hex / 70 dec (赤) のプレイヤーピクセルと重なると、ピクセルの色は DE hex / 228 dec (薄緑/黄) になります。
マルチカラー出力が可能なプレイヤー/ミサイルペア:
PRIORビット4、値$10 (16進数/16進数)により、ミサイルが5番目のプレイヤーになります。ミサイルの色処理以外に、ミサイルの機能的な変更はありません。通常、ミサイルは関連付けられたプレイヤーの色を使用して表示されます。5番目のプレイヤーが有効になると、すべてのミサイルはプレイフィールド3(COLPF3)の色を表示します。水平位置、サイズ、垂直遅延、およびプレイヤー/ミサイルの衝突はすべて同じように動作します。プレイヤーオブジェクトのピクセル交差に対する5番目のプレイヤーの優先順位はCOLPF3ですが、5番目のプレイヤーのピクセルはすべてのプレイフィールドの色よりも優先されます。
色処理の変更により、GTIAの代替カラーモードにおけるミサイルの表示にもいくつかの例外が生じます。
5人目のプレイヤーは、優先度値$8(ビット1000)に対して例外を設けます(優先度に関する説明は下記を参照)。
PRIORビット3~0は、プレイヤー/ミサイルとプレイフィールドの優先度値を4つ提供し、プレイヤー/ミサイルオブジェクトのピクセルとプレイフィールドのピクセルが交差したときにどのピクセル値が表示されるかを決定します。4つの値は、以下の優先度チャートに記載されている特定のオプションを提供します。「PM」は、5人目のプレイヤーなしの通常のプレイヤー/ミサイル実装を意味します。5人目のプレイヤー「P5」は、有効になっている場合にその優先度が発生する場所に表示されます。
このチャートは、デフォルトの(CTIA)カラー解釈モードを使用するANTICプレイフィールドのキャラクターモードとマップモードに対して正確です。GTIAカラー解釈モード、および高解像度1/2カラークロックピクセルに基づくANTICモードでは動作が異なります(後述)。
複数のビットが設定されている場合、競合が発生する箇所で CTIA/GTIA は黒ピクセルを出力します。ここでいう黒とは、単なる背景色 COLBK ではなく、実際の黒を意味します。
5 番目のプレイヤーは COLPF3 の値で表示されますが、その優先順位はすべてのプレイフィールドの色よりも高くなります。これにより、優先順位値 $8 (ビット 1000) に例外が発生します。このモードでは、プレイフィールド 0 と 1 はプレイヤーよりも優先順位が高く、プレイヤーはプレイフィールド 2 と 3 よりも優先順位が高くなります。プレイフィールド 0 または 1 のピクセルがプレイヤーのピクセルと交差する場合、表示される結果はプレイフィールドのピクセルになります。ただし、5 番目のプレイヤーも同じ場所と交差する場合、その値がプレイフィールドの上に表示され、プレイフィールド 3 が最も高い優先順位を持っているように見えます。プレイフィールド 0 または 1 のピクセルがこの交差部分から削除されると、5 番目のプレイヤーのピクセルは上書きするプレイフィールドのピクセルがなくなり、プレイヤーのピクセルよりも優先順位が低くなります。
優先度ビットがすべて 0 の場合、異なる効果が発生します。プレイヤーとプレイフィールドのピクセルは、マルチカラープレイヤー機能と同様の方法で論理 OR で結合されます。この場合、プレイヤー 0 と 1 のピクセルはプレイフィールド 0 と 1 のピクセルと混合でき、プレイヤー 2 と 3 のピクセルはプレイフィールド 2 と 3 のピクセルと混合できます。さらに、マルチカラープレイヤーオプションを使用すると、結果として結合されたプレイヤーの色もプレイフィールドと混合され、より多くの色が生成されます。すべての色の混合の可能性を考慮すると、CTIA/GTIA ハードウェアはスキャンラインごとに 23 色を出力できます。背景色を最初の色として、残りの 22 色と色の混合が可能です。
優先度ビットがすべて0の場合、ミサイルの色は、上記で説明した対応するプレイヤーと同じように機能します。5人目のプレイヤーが有効になっている場合、ミサイルのピクセルは、上記の表のCOLPF3(色19~22)に示されているのと同じ色の融合を引き起こします。
高解像度の1/2カラークロックピクセルを使用する文字モードとマップモード(ANTICモード2、3、F)では、優先順位の結果が異なります。これらの優先順位処理の違いを利用することで、従来「モノクロ」と考えられていたこれらのモードで、カラーのテキストやグラフィックを作成できます。
これらのANTICモードでは、COLPF2がプレイフィールドの「背景」として出力され、COLBKがプレイフィールドの周囲の境界線として出力されます。グラフィックまたはグリフのピクセルは、COLPF1の輝度成分と背景(通常はCOLPF2)の色成分を混合して出力されます。
プレイヤー/ミサイルとCOLPF2の優先順位関係は、以下の優先順位表に従って機能します。優先順位の高いプレイヤー/ミサイルのピクセルがCOLPF2を置き換えて「背景」色になります。COLPF1は常に最も高い優先順位を持ち、プレイヤーやミサイルによって隠されることはありません。グリフ/グラフィックのピクセルは、最も優先順位の高い色(プレイフィールド、プレイヤー、またはミサイル)の色成分とCOLPF1の輝度成分を使用します。プレイヤー/ミサイルの優先順位の競合によって「背景」が真の黒になる場合も、この動作は一貫していることに注意してください。実際には、CTIA/GTIAが最終的に「背景」色に使用する色値が、COLPF1の前景グリフ/グラフィックのピクセルに「色付け」されます。
垂直遅延P/Mグラフィックス
このレジスタは、ANTICのDMACTLレジスタでダブルラインプレイヤー/ミサイル解像度が有効になっている場合に、単一スキャンラインの移動を実現するために使用されます。これは、偶数スキャンライン上のGRAF*レジスタへのANTIC DMA更新をマスクすることで、グラフィックパターンを1スキャンライン下に移動させることによって機能します。
シングルライン解像度では各スキャンラインで ANTIC DMA の更新が必要であり、VDELAY は偶数スキャンラインの更新をマスクするため、このビットはシングルラインのプレイヤー/ミサイル解像度をダブルラインに低下させます。
グラフィック制御
GRACTLは、CTIA/GTIAがANTICからPlayer/Missile DMAデータを受信するかどうかを制御し、ジョイスティックトリガー入力のモードを切り替えます。
プレイヤー/ミサイルDMAデータを受信するには、CTIA/GTIAがデータを受信するように構成されている必要があります。これは、GRACTLレジスタのビットペアと、ANTICのDMACTLレジスタのビットペアを一致させることで実現されます。DMACTLレジスタは、ANTICにプレイヤーデータとミサイルデータを送信するように指示します。GRACTLのビット0はDMACTLのビット2に対応し、ミサイルデータの転送を有効にします。GRACTLのビット1はDMACTLのビット3に対応し、プレイヤーデータの転送を有効にします。GTIAがDMA経由でANTICからプレイヤー/ミサイルデータを受信するには、これらのビットを設定する必要があります。プレイヤー/ミサイルグラフィックスがCPUによって直接操作されている場合は、これらのビットはオフにする必要があります。
ジョイスティックのトリガーレジスタは、押下状態をリアルタイムで報告します。プログラムの入力ポーリング頻度が、ジョイスティックボタンの瞬間的な押下を捉えるのに十分な頻度でない場合、トリガーをロックして、ボタンが離された後もその状態を維持するように設定できます。GRACTLビット2を設定すると、すべてのトリガーがラッチされます。このビットをクリアすると、トリガーはラッチされていないリアルタイム動作に戻ります。
明確な衝突
このレジスタへの書き込みは、プレイヤーとミサイルの衝突検出ビットをすべてクリアします。
SHADOW: STRIG0 $0284
ジョイスティック 0 トリガー
SHADOW: STRIG1 $0285
ジョイスティック1のトリガー。
SHADOW: STRIG2 $0286
ジョイスティック2のトリガー。
SHADOW: STRIG3 $0287
ジョイスティック3トリガー
ビット7~1は常に0です。ビット0はジョイスティックのトリガーの状態を示します。値1はトリガーが押されていないことを示し、値0はトリガーが押されていることを示します。
トリガーはボタンの押下をリアルタイムで検知します。ボタンが離されると、押下状態は即座に解除されます。
トリガーは、押下状態をラッチ(ロック)するように構成でき、明示的に解除されるまでその状態を維持します。GRACTL ビット2を有効にすると、すべてのトリガーでラッチ動作が有効になります。GRACTLビット2を解除すると、すべてのトリガーがリアルタイム動作に戻ります。
PALの国旗。
このレジスタは、システムの表示規格を示します。ビット3~0が1に設定されている場合(16進数$f / 10進数$ f)、システムはNTSC方式で動作しています。ビットが0の場合、システムはPAL方式で動作しています。
コンソールスピーカー
Bit3はAtari 800/400の内蔵スピーカーを制御します。後のモデルでは本体スピーカーが取り外され、通常のPOKEYオーディオ信号とミックスされてモニターポートとRFアダプタに出力されます。Atari OSは本体スピーカーを使用してキーボードのクリック音とベル/ブザー音を出力します。
オペレーティングシステムは、垂直ブランクルーチン中にスピーカービットを設定します。このビットに0を繰り返し書き込むと、垂直ブランクによって値がリセットされる際に60Hzのブザー音が鳴ります。6502コードを 使用すれば、実質的に5番目のオーディオチャンネルを追加して、有用なトーンを生成できます。ただし、このチャンネルはオーディオトーンを維持するためにCPU時間を必要とします。
コンソールキー
コンソールの特殊キー(スタート、セレクト、オプション)の状態を報告するためにビットが割り当てられています。ビット値0はキーが押されていることを示し、1はキーが押されていないことを示します。キー/ビット値:
ハードウェアの「スプライト」システムはCTIA/GTIAによって処理されます。このスプライトシステムのATARIにおける正式名称は「プレイヤー/ミサイルグラフィックス」です。これは、シューティングゲームにおける「プレイヤー」やその武器である「ミサイル」など、高速で移動するオブジェクトの表示メモリを操作する必要性を減らすために設計されたためです。
プレイヤーは基本的に幅 8 ピクセル、高さ 256 TV ラインのグリフで、背景 (透明) (0グリフ内) と前景 ( 1) の 2 つの色があります。ミサイル オブジェクトも同様ですが、幅は 2 ピクセルのみです。CTIA/GTIA は、優先順位に従って、プレイヤー/ミサイル オブジェクトのピクセルをプレイフィールド ピクセルと組み合わせます。透明 ( 0) のプレイヤー ピクセルはプレイフィールドに影響を与えず、プレイフィールド ピクセルまたは背景ピクセルのいずれかをそのまま表示します。すべてのプレイヤー/ミサイル オブジェクトの通常のピクセル幅は 1 カラー クロックです。レジスタ値によって、プレイヤーまたはミサイル ピクセルの幅を 1、2、または 4 カラー クロック幅に設定できます。
CTIA/GTIA のプレイヤー/ミサイル実装はTIAのものと似ています。プレイヤーは、指定された水平位置にある 8 ビット値またはパターンで、各スキャンラインごとに、またはレジスタ内のパターンが変更されるまで自動的に繰り返されます。ミサイルは 2 ビット幅で、1 つのパターン レジスタを共有するため、4 つの 2 ビット幅の値が 8 ビット幅のパターン レジスタを占有しますが、各ミサイルは独立した水平位置とサイズを持ちます。プレイヤー/ミサイル オブジェクトは、画面の境界を含め、ディスプレイの高さまで拡張されます。つまり、CTIA/GTIA のプレイヤー/ミサイル グラフィックスのデフォルトの実装は、画面を縦に走るストライプです。この方法は一見制限されているように見えますが、ディスプレイ上の代替色の垂直境界または区切り線としてプレイヤー/ミサイル グラフィックスを使用することを容易にし、優先度値を設定してプレイヤー/ミサイル ピクセルをプレイフィールド ピクセルの後ろに配置すると、ディスプレイに追加の色を追加するために使用できます。最大幅に設定され、横に並べられたすべてのプレイヤーとミサイルは、通常の幅のプレイフィールド全体を覆うことができます。
CTIA/GTIA は、プレイヤー/ミサイルの色を制御するいくつかのオプションをサポートしています。PRIOR /GPRIORレジスタの値によって、4 つのミサイルの色表示オプションを切り替えることができます。各ミサイル (0 ~ 3) は、関連付けられたプレイヤー オブジェクト (0 ~ 3) の色を表すか、すべてのミサイルがレジスタCOLPF3/COLOR3の色を表示します。ミサイルが同じ色の場合、5 番目のプレイヤーとして扱うことができますが、画面上で正しく配置するには、4 つのミサイル水平位置レジスタすべてに値を格納する必要があります。PRIOR /GPRIOR は、2 つのプレイヤーの重なり合うピクセルが 3 つ目の色を生成する機能も制御します。これにより、使用可能なオブジェクトの数を減らす代わりに、複数の色のプレイヤー オブジェクトを使用できます。最後に、PRIOR/GPRIOR を使用すると、プレイヤー/ミサイル ピクセルとプレイフィールド ピクセルの前景/背景レイヤー (「優先度」と呼ばれます) を変更でき、表示される色に予測可能な影響を与える優先度の競合を引き起こす可能性があります。
縦方向に変化する画像/パターンを持つスプライトという従来の概念は、Player/Missileグラフィックスシステムにも組み込まれています。ANTICチップには、ディスプレイ生成時に新しいピクセルパターンをCTIA/GTIAに自動的に供給するDMA機能が搭載されています。これは各スキャンラインごと、または2スキャンラインごとに実行でき、Player/Missileピクセルは1スキャンラインまたは2スキャンラインの高さになります。このようにして、Player/Missileオブジェクトは、ディスプレイの高さに比例する、幅8ビット/ピクセルのフォントで表現された非常に背の高い文字とみなすことができます。
プレイヤー/ミサイル オブジェクトを水平方向に移動するのは、CTIA/GTIA のレジスタを変更するだけで簡単です (Atari BASIC では、POKE ステートメント 1 つでプレイヤーまたはミサイルを水平方向に移動できます)。オブジェクトを垂直方向に移動するには、グリフの定義をプレイヤーまたはミサイル ビットマップ内の新しい場所にブロック移動するか、プレイヤー/ミサイル ビットマップ全体 (128 バイトまたは 256 バイト) を回転させます。6502マシン語では、8080 にあるブロック移動命令がないにもかかわらず、ビットマップ全体の最悪のケースの回転でもかなり高速です。スプライトは正確に 128 バイトまたは 256 バイトの長さなので、インデックスは 6502 のバイト幅レジスタに簡単に収めることができます。Atari BASIC には高速メモリ移動コマンドがなく、BASIC のPEEK() と POKE()を使用してメモリを移動すると非常に遅くなります。 Player/Missileグラフィックスを使用するAtari BASICプログラムには、高速メモリ移動を実行するための他の方法もあります。1つの方法は、USR()関数を介して短いマシン語ルーチンを呼び出し、メモリ移動を実行することです。もう1つの方法は、Player/Missileのメモリマップとして大きな文字列を使用し、文字列コピーコマンドを実行することで、マシン語の速度でメモリ移動を実現することです。
プレイヤー/ミサイルのグラフィックスをAtariハードウェアの他のグラフィックス機能と慎重に組み合わせることで、グラフィックスプログラミング、特にゲーム開発を大幅に簡素化できる。
GTIA チップはCTIA と下位互換性があり、14 種類の「通常」の ANTIC プレイフィールド グラフィック モードに 3 種類のカラー解釈を追加します。CTIA チップの通常のカラー解釈は、特別なプログラミング技術を使用しない限り、スキャンラインごとにマップ モードでは最大 4 色、テキスト モードでは 5 色 (プレイヤー/ミサイル グラフィック用に 4 色を追加) に制限されています。GTIA の 3 つの新しいカラー解釈により、理論上は合計 56 種類のグラフィック モード (14 種類の ANTIC モードに 4 つのカラー解釈を掛けたもの) が利用可能になります。ただし、高解像度の 1/2 カラー クロック ピクセルに基づくグラフィック モード (Antic テキスト モード 2、3、およびグラフィック モード F) のみが、これら3つの新しいカラー解釈のカラー パレットを完全に表現できます。追加された 3 つのカラー解釈は、2 つのカラー クロック (4 ビット) の情報を使用して、16 種類のカラー値のいずれかでピクセルを生成します。これにより、モードFディスプレイは、1ピクセルあたり2色、水平方向320ピクセル、モードラインあたり1走査線から、16色、水平方向80ピクセルに変更されます。追加された色解釈により、以下のことが可能になります。
これらのモードの中でも、Atari BASIC Graphics 9は特に注目に値します。このモードでは、Atariでグレースケールのデジタル写真を表示することができ、解像度は低いものの、当時としては非常に印象的なものでした。さらに、他のグラフィックモードでは8段階の階調しか使用できないのに対し、このモードでは16段階の階調を使用できるため、Atariが表示できる色の数が128色から256色に増加しました。残念ながら、この機能はこのモードでのみ使用可能であり、解像度が低いため広く利用されることはありませんでした。
Antic 2 および 3 テキスト モードは、GTIA の代替カラー解釈を使用すると、モード F グラフィックスと同じカラー範囲を表示できます。ただし、ピクセル削減も適用され、8 ピクセル幅の 2 色のテキストが 2 ピクセル幅の 16 色のブロックに変換されるため、これらのモードは実際のテキストには適しておらず、デモ以外ではこれらのグラフィックス モードは人気がありません。テキスト モードと GTIA カラー解釈機能を効果的に使用するには、文字をピクセルとして扱うように慎重に構築された文字セットが必要です。この方法により、通常 8K の RAM を占有する GTIA の「高解像度」グラフィックス モードを、約 2K (文字セットに 1K、画面 RAM と表示リストに 1K) のみで表示できます。
GTIAでは、CTIAの「半カラークロック」分のグラフィックのずれを引き起こすエラーも修正されました。この修正の副作用として、高解像度モノクロモードでカラーアーティファクトに依存するプログラムでは、異なる色のペアが表示されるようになりました。 [ 5 ] [ 16 ]
Atariのユーザーは、 BASICコマンドを実行することで、自分のマシンにCTIAチップが搭載されているかGTIAチップが搭載されているかを確認できますPOKE 623,64。コマンド実行後に画面が黒くなった場合は、マシンには新しいGTIAチップが搭載されています。画面が青色のままの場合は、CTIAチップが搭載されています。
東欧市場向けに製造された最後のアタリXEコンピュータは中国で製造されました。その多く、あるいは全てに、バグのあるPAL GTIAチップが搭載されています。Graphics 9以降の輝度値に問題があり、縞模様が表示されます。チップを交換すれば問題は解決します。また、外部回路を用いて不具合のあるGTIAチップを修復しようとする試みも行われています。