
カラーテレビインタフェースアダプタ[1](CTIA)とその後継のグラフィックテレビインタフェースアダプタ[1](GTIA)は、Atari 8ビットコンピュータとAtari 5200 家庭用ビデオゲームコンソールで使用されるカスタムチップです。これらのシステムでは、CTIAまたはGTIAチップがANTICと連携してビデオディスプレイを生成します。ANTICはプレイフィールドグラフィックス(テキストとビットマップ)を生成し、CTIA/GTIAはプレイフィールドの色を提供し、プレイヤー/ミサイルグラフィックス(スプライト)と呼ばれるオーバーレイオブジェクトを追加します。Jay Minerの指示の下、CTIA/GTIAチップはGeorge McLeodによって設計され、Steve Smithの技術支援を受けました。[2] [3] [4]
カラーテレビインターフェースアダプタとグラフィックテレビインターフェースアダプタは、アタリの現場サービスマニュアルに記載されているチップの名前です。[1]さまざまな出版物ではチップに異なる名前を付けており、アダプタ[5] [6]やグラフィックス[3]などの別の綴りを使用したり、「CTIA」の「C」はコリーン/キャンディ[5] 、「GTIA」の「G」はジョージ[3 ]を表していると主張したりしました。 [ 5] [6] [7]
歴史
2600とTIA
Atari は、最初のディスプレイ ドライバ チップであるTelevision Interface Adaptor (一般に TIA と呼ばれている)をAtari 2600コンソールの一部として構築しました。[8] TIA ディスプレイは、論理的には、移動するオブジェクトを表す「プレーヤー」と「ミサイル」、およびアクションが発生する静的な背景画像を表す「プレイフィールド」という 2 つの主要なオブジェクト セットで構成されていました。チップは、メモリ レジスタのデータを使用してデジタル信号を生成し、デジタル アナログ コンバータとRF モジュレータを介してリアルタイムで変換してテレビ ディスプレイを生成しました。
プレイフィールドを描画する従来の方法は、フレーム バッファに保持されたビットマップを使用することです。フレーム バッファ内の各メモリ位置は、画面上の 1 つ以上の位置を表します。通常 160x192 ピクセルの解像度を使用する 2600 の場合、フレーム バッファには少なくとも 160x192/8 = 3840 バイトのメモリが必要です。RAM が非常に高価だった時代に構築されたTIAには、このソリューションを用意する余裕がありませんでした。
代わりに、システムは、画面の右半分にコピーまたはミラーリングして実質的に 40 ビット表示を作成できる単一の 20 ビットメモリ レジスタを使用する表示システムを実装しました。各位置は、128 色のパレットから 4 色のいずれかで表示できます。TIA には、「プレーヤー」と「ミサイル」という他のいくつかの表示オブジェクトも含まれていました。これらは、「プレーヤー」と呼ばれる 2 つの 8 ビット幅のオブジェクト、「ボール」と呼ばれる単一の 1 ビット オブジェクト、および 2 つの 1 ビットの「ミサイル」で構成されていました。これらのオブジェクトはすべて、他のレジスタの設定を介して任意の水平位置に移動できました。
TIA システムと 2600 の低価格の鍵は、システムがディスプレイの 1 行を描画するのに十分なメモリのみを実装し、そのメモリがすべてレジスタに保持されていたことです。画面全体のデータを描画するには、ユーザー コードはテレビ ディスプレイが画面の右側に到達するまで待機し、プレイフィールドとプレーヤー/ミサイルのレジスタを更新して、ディスプレイの次の行を正しく反映します。この方式では、ROM カートリッジのプログラム コードから 1 行ずつ画面を描画します。この手法は「レース ザ ビーム」として知られています。
CTIA
アタリは1976年に2600を設計した当初、その市場寿命は3年と短いと見積もっていたため、1979年までに新設計が必要になることを意味していた。[8]当初、この新設計は単に2600に似たゲームコンソールをアップデートしたもので、同様の基本設計を単純にアップデートしたものに基づいて構築された。CTIAとなるものの開発は1977年に開始され、解像度と色数を2倍にしたシステムの提供を目指した。さらに、プレイフィールドの色数を変えることで、水平方向に最大320ピクセルというはるかに高い解像度をサポートできるようになった。プレイヤーとミサイルもアップデートされ、8ビットプレイヤー4体と2ビットミサイル4体が含まれるようになったが、4つのミサイルを組み合わせて5番目のプレイヤーにする追加モードも可能になった。
設計が始まって間もなく、1977年後半にホームコンピュータ革命が本格的に始まりました。これに対応して、Atariは新しいマシンの2つのバージョン、ゲームコンソールとしてのローエンドモデルとホームコンピュータとしてのハイエンドバージョンをリリースすることを決定しました。 [8]どちらの役割でも、より複雑なプレイフィールドが必要になり、特にコンピュータの役割ではキャラクターグラフィックのサポートが必要になりました。CTIAの設計はこの時点でかなり進んでいたため、再設計の代わりに、ビームレースのプロセスを効果的に自動化する2番目のチップを追加するという巧妙な解決策が提供されました。割り込みタイミングに基づいてCTIAのレジスタを更新するユーザープログラミングの代わりに、新しいANTICがこの作業を処理し、フレームバッファからデータを読み取り、それをCTIAにオンザフライで送ります。
これらの変更の結果、新しいチップでは、TIA に比べてグラフィック モードの数と選択肢が大幅に向上しました。20 ビットまたは 40 ビットの解像度を持つ単一のプレイフィールド モードの代わりに、CTIA/ANTIC ペアは、さまざまな解像度と色深度を持つ 6 つのテキスト モードと 8 つのグラフィック モードを表示できるため、プログラマーはディスプレイの解像度、色、メモリ使用量のバランスを選択できます。
CTIA 対 GTIA


CTIA チップの元の設計には、通常のグラフィック モードの 3 つの追加カラー解釈も含まれていました。この機能は、1 ビット/ピクセル、2 色、1/2 カラー クロック幅のピクセルを 4 ビット/ピクセル、最大 16 色、2 色クロック幅のピクセルとして表現する ANTIC の高解像度グラフィック モードの代替表現を提供します。この機能は、コンピューターが 1979 年 11 月に発売される前に準備が整っていましたが、開発サイクルで大幅に遅れたため、Atari はグラフィック モードのない CTIA チップをすでに約 100,000 個注文していました。すでに生産されたチップを捨てたくないという理由で、同社は米国市場での Atari 400 および 800 モデルの最初のリリースでそれらを使用することを決定しました。 CTIAを搭載したコンピュータは、3つの追加カラーモードを欠いていましたが、1981年10月から11月まで出荷されました。[5] [6]この時点から、すべての新しいAtariユニットには、新しい色解釈モードをサポートする新しいチップ(現在はGTIAと呼ばれる)が搭載されました。[6] [9]
オリジナルのAtari 800/400オペレーティングシステムは最初からGTIA代替色解釈モードをサポートしていたため[9] 、 CTIAが準備できればGTIAに簡単に置き換えることができました。Atari認定サービスセンターでは、CTIA搭載のコンピュータが保証期間内であればGTIAチップを無料でインストールしていましたが、そうでない場合は交換に62.52ドルかかりました。[6] [7]
GTIA は、その後のすべての Atari XL および XE コンピューターと Atari 5200 コンソールにも搭載されました。
特徴
以下のリストは、CTIA/GTIA の固有のハードウェア機能について説明しています。これは、CPU が処理する割り込みや頻繁なレジスタ変更を実行するディスプレイ カーネルによって達成される結果を除いた、ハードウェア自体の意図された機能を意味します。
CTIA/GTIA は、次の機能を備えたテレビ インターフェース デバイスです。
- ANTICからの Playfield グラフィック データ ストリームを解釈して、ディスプレイに色を適用します。
- 4 つのプレーヤーと 4 つのミサイル オーバーレイ オブジェクト (別名スプライト) を ANTIC のプレイフィールド グラフィックスと結合します。プレーヤー/ミサイルの機能には次のものが含まれます。
- プレイヤー/ミサイルのピクセル配置はプレイフィールドとは独立しています。
- プレイヤー/ミサイル オブジェクトは、表示されたプレイフィールドを超えた垂直および水平のオーバースキャン領域では正常に機能します。
- プレイヤー/ミサイル オブジェクトは、ANTIC プレイフィールドがなくても正常に機能します。
- 8 ビット幅の Player オブジェクトと 2 ビット幅の Missile オブジェクト。各ビットは 1 つの表示ピクセルを表します。
- 可変ピクセル幅(1、2、または4カラークロック幅)
- 各プレイヤー/ミサイル オブジェクトは、垂直方向に画面全体の高さになります。
- データが ANTIC DMAによって供給される場合の可変ピクセル高さ(データごとに 1 行または 2 行のスキャン ライン)
- データごとに 2 つのスキャン ラインで操作する場合、各 P/M オブジェクトを 1 つのスキャン ラインずつ垂直方向に独立してシフトする機能。
- 各プレイヤーとそれに関連付けられたミサイルには、プレイフィールドの色とは別に専用のカラー レジスタがあります。
- グラフィック レイヤーの順序に関する複数の優先順位スキーム (P/M グラフィック vs プレイフィールド)
- プレーヤーとプレイフィールド間のカラーの結合により、追加のカラーが生成されます。
- プレーヤーのペア間で色を結合して、マルチカラーのプレーヤーを生成します。
- ミサイルは、別のカラーレジスタを使用する 5 番目のプレーヤーにグループ化できます。
- プレイヤー、ミサイル、プレイフィールド グラフィック間の衝突検出。
- プレイヤー/ミサイルのピクセル配置はプレイフィールドとは独立しています。
- 通常 (CTIA) の色解釈モードには固定色はありません。すべての色は、9 つの色レジスタを介した間接参照によって生成されます。(プレーヤー/ミサイル グラフィックス用に 4 つ、プレイフィールド用に 4 つ、プレイフィールドと 5 番目のプレーヤー機能間で共有される 1 つ)。
- 通常の色解釈モードでは、128 色のパレット (16 色とそれぞれ 8 つの輝度値) から色を選択できます。
- GTIA カラー解釈モードでは、色ごとに 16 の輝度を生成し、256 色のパレットを提供できます。
- チップの GTIA バージョンでは、Playfield グラフィックスに 3 つの代替カラー解釈モードが追加されます。
- Atari パレットの 16 色から1 つの色相の 16 の色合い。これは、Atari BASICのGraphics 9 としてアクセスできます。
- 1 つの色調/輝度値と背景の 15 色。これは、Atari BASIC の Graphics 11 として利用できます。
- プレイフィールド カラー用のすべてのプレーヤー/ミサイルおよびプレイフィールド カラー レジスタを使用して、パレットの任意の色相と輝度の 9 色を実現します。これは、Atari BASIC の Graphics 10 で利用できます。
- ジョイスティックトリガーの状態を読み取ります(Atari 5200 コントローラーの場合は下部のボタンのみ)。
- システムに応じてさまざまな方法で使用される 4 つの入力/出力ピンが含まれています。
- Atari 8 ビット コンピュータでは、3 つのピンがコンソール キー (Start/Select/Option) の状態を読み取るために使用されます。
- 4 番目のピンは、Atari 400/800 に内蔵されたスピーカーを制御して、キーボードのクリック音を生成します。それ以降のモデルにはスピーカーはありませんが、キーのクリック音は GTIA によって生成され、通常のオーディオ出力とミックスされます。
- Atari 5200 では、ピンはコントローラーのキーボードを読み取るプロセスの一部として使用されます。
バージョン
部品番号別
- C012295 — NTSC CTIA [10] [11]
- C014805 — NTSC GTIA [12]
- C014889 —パルGTIA [12]
- C020120 — フランスSECAM GTIA (FGTIA) [12]
Atari 社は、ANTIC チップと GTIA チップの機能を 1 つの集積回路に統合して、Atari コンピュータと 5200 コンソールの生産コストを削減しようと考えました。そのようなプロトタイプ回路が 2 つ開発されていましたが、いずれも生産には至りませんでした。
- C020577 — CGIA [12]
- C021737 — ケリ[12] [13] [14]
ピン配置
_pin-out.svg/500px-Atari_GTIA_(CO14805)_pin-out.svg.png)
レジスター
Atari 8 ビット コンピューターは CTIA/GTIA を $D0xx 16 進ページにマップし、Atari 5200 コンソールはそれを $C0xx 16 進ページにマップします。
CTIA/GTIA は、プレーヤー/ミサイル グラフィック、プレイフィールドの色、ジョイスティック トリガー、およびコンソール キーを制御する 54 個の読み取り/書き込みレジスタを提供します。多くの CTIA/GTIA レジスタ アドレスには、読み取りレジスタと書き込みレジスタとして異なる機能を実行するという 2 つの目的があります。したがって、以前に書き込まれた値を取得することを期待してハードウェア レジスタを読み取るコードは使用しないでください。
この問題は、レジスタに最後に書き込まれた値を保存する場所として通常の RAM に実装されたオペレーティング システム シャドウ レジスタによって、多くの書き込みレジスタで解決されます。オペレーティング システム シャドウ レジスタは、垂直ブランク中に RAM からハードウェア レジスタにコピーされます。したがって、対応するシャドウ レジスタを持つハードウェア レジスタへの書き込みは、次の垂直ブランク中にシャドウ レジスタの値によって上書きされます。
一部の書き込みレジスタには、対応するシャドウ レジスタがありません。これらのレジスタは、垂直ブランク中に値が上書きされることなく、アプリケーションによって安全に書き込むことができます。アプリケーションがレジスタの最後の状態を知る必要がある場合は、書き込んだ内容を記憶しておくことがアプリケーションの責任となります。
一部の読み取りレジスタにはオペレーティング システム シャドウ レジスタも存在し、表示サイクルの不明な段階でハードウェアから直接値を読み取ると、一貫性のない結果が返される可能性があります。
以下の個々のレジスターリストには、次の凡例が適用されます。
プレイヤー/ミサイルの水平座標
これらのレジスタは、Player/Missile オブジェクトの左端 (GRAF* バイト パターンの上位ビット) のカラー クロックの水平位置を指定します。座標は、現在の Playfield 表示モードだけではなく、常にディスプレイ ハードウェアのカラー クロック エンジンに基づきます。これは、Player/Missile オブジェクトを現在の Playfield モードを超えてオーバースキャン領域に移動できることも意味します。
ミサイル オブジェクトのビット パターンは、表示されるピクセル (GRAFM) に対して同じバイトを共有しますが、各ミサイルは独立して配置できることに注意してください。「5 番目のプレーヤー」オプションが有効になっている場合 (PRIOR/GPRIOR レジスタを参照)、4 つのミサイルが 1 つの「プレーヤー」になり、ミサイルは、関連付けられたプレーヤー オブジェクトの色の表示から COLPF3 の値の表示に切り替わります。画面上の新しい「プレーヤー」の位置は、各ミサイルの位置を個別に指定して設定する必要があります。
プレイヤー/ミサイルのピクセルは、GTIA のピクセル エンジンの可視部分内でのみレンダリングされます。プレイヤー/ミサイル オブジェクトは、水平ブランクまたは垂直ブランクの間はレンダリングされません。ただし、オブジェクトは部分的に水平ブランク内に存在する場合があります。水平ブランクの外側にあるオブジェクトのピクセルは、ディスプレイの可視部分内にあるため、衝突を登録できます。可視カラー クロックの水平位置の範囲は、$22 hex /34 decから $DD hex /221 decです。
プレーヤー/ミサイル オブジェクトを可視表示領域から削除するには、水平位置 (左) 0、(右) $DE 16 進数/222 10 進数(またはそれ以上) を指定すると、プレーヤー/ミサイル オブジェクトのサイズに関係なくピクセルがレンダリングされなくなり、意図しない衝突がフラグ付けされなくなります。
HPOSP0 $D000 書き込み
プレイヤー0の水平位置
HPOSP1 $D001 書き込み
プレイヤー1の水平位置
HPOSP2 $D002 書き込み
プレイヤー2の水平位置
HPOSP3 $D003 書き込み
プレイヤー3の水平位置
HPOSM0 $D004 書き込み
ミサイルの水平位置0
HPOSM1 $D005 書き込み
ミサイル1の水平位置
HPOSM2 $D006 書き込み
ミサイル2の水平位置
HPOSM3 $D007 書き込み
ミサイル3の水平位置
以下は、Player/Missile オブジェクトを Playfield コンポーネントに揃えるときに便利な、可能な Playfield サイズの左端と右端のカラー クロック座標です。
プレイヤー/ミサイルのサイズ制御
標準、2 倍、4 倍幅の 3 つのサイズを選択できます。左端 (水平座標を参照) は固定されており、サイズ調整により、すべての場合においてプレーヤーまたはミサイルが右方向に拡大されます。
- 通常 - 1 ビット (ピクセル) は 1 カラー クロックの幅です
- ダブル - 1ビット(ピクセル)は2カラークロックの幅です
- クアッド - 1 ビット (ピクセル) は 4 つのカラー クロックの幅です
クアッド サイズでは、プレーヤー/ミサイルの 1 つのピクセルが、Antic Mode 2 のテキスト文字と同じ幅になることに注意してください。プレーヤー/ミサイルの優先順位の選択とクアッド幅のプレーヤー ミサイル グラフィックを組み合わせると、モード ラインごとに複数のテキスト カラーを作成できます。
各プレーヤーには独自のサイズ制御レジスタがあります。
SIZEP0 $D008 書き込み
プレーヤーのサイズ 0
SIZEP1 $D009 書き込み
プレイヤー1のサイズ
SIZEP2 $D00A 書き込み
プレイヤー2のサイズ
SIZEP3 $D00B 書き込み
プレイヤー3のサイズ
プレーヤーサイズのコントロール:
値:
SIZEM $D00C 書き込み
すべてのミサイルのサイズは 1 つのレジスタによって制御されますが、各ミサイルは他のミサイルとは独立してサイズを設定できます。「5 番目のプレーヤー」オプションが有効になっている場合 (PRIOR/GPRIOR レジスタを参照)、4 つのミサイルが 1 つの「プレーヤー」になりますが、幅は各ミサイルのサイズを個別に指定することによって設定されます。
値:
プレイヤー/ミサイルのグラフィックパターン
各プレーヤー オブジェクトには、独自の 8 ビット パターン レジスタがあります。ミサイル オブジェクトは、ミサイルごとに 2 ビットのレジスタを 1 つ共有します。値が設定されると、各スキャン ラインにその値が表示され続けます。値を更新するために CPU または ANTIC DMA による介入がなければ、オーバースキャン領域を含む画面の高さの縦縞パターンが表示されます。この操作モードでは、コンピューターの CPU または DMA に負荷がかかりません。これは、画面領域を区切る交互の色の境界線と縦線を表示する場合に便利です。
GRAFP0 $D00D 書き込み
プレーヤー 0 のグラフィック パターン
GRAFP1 $D00E 書き込み
プレイヤー1のグラフィックパターン
GRAFP2 $D00F 書き込み
プレイヤー2のグラフィックパターン
GRAFP3 $D010 書き込み
プレイヤー3のグラフィックパターン
各プレーヤーの幅は 8 ビット (ピクセル) です。ビットが設定されている場合、ピクセルはプレーヤーに関連付けられたカラー レジスタに割り当てられた色で表示されます。ビットが設定されていない場合、プレーヤー オブジェクトは透明になり、プレーヤー、ミサイル、プレイフィールド ピクセル、または背景色が表示されます。ピクセル出力は、プレーヤーの HPOS 値で指定された水平位置から始まり、最も高いビットが最初に出力されます。
GRAFM $D011 書き込み
すべてのミサイルのグラフィックパターン
各ミサイルの幅は 2 ビット (ピクセル) です。ビットが設定されている場合、ピクセルはミサイルに関連付けられたプレーヤーのカラー レジスタに割り当てられた色で表示されます。5 番目のプレーヤーが有効になっている場合 (PRIOR/GPRIOR を参照)、ミサイルのピクセルはすべて COLPF3 を表示します。ビットが設定されていない場合、ミサイル オブジェクトは透明になり、プレーヤー、ミサイル、プレイフィールド ピクセル、または背景色が表示されます。ピクセル出力は、ミサイルの HPOS 値で指定された水平位置から始まり、最も高いビットが最初に出力されます。
ミサイルの価値:
プレイヤー/ミサイルの衝突
CTIA/GTIA には 60 ビットがあり、プレーヤー、ミサイル、プレイフィールドのピクセルが交差したときに衝突を自動的に検出します。1 ビットは、プレーヤー/ミサイル オブジェクトの 0 以外のピクセルが特定のカラー レジスタのピクセルと交差したことを示します。背景カラー レジスタ/値を使用してレンダリングされたピクセルには衝突は登録されません。このシステムは、バウンディング ボックスやイメージ ビットマップ マスキングのコストの高い CPU 評価を行わずに、ピクセル単位でのオーバーラップ比較を瞬時に提供します。
オブジェクトの実際のカラー値は考慮されません。プレーヤー、ミサイル、プレイフィールド、および背景のカラー レジスタがすべて同じ値で、オブジェクトが実質的に「非表示」になっている場合でも、オブジェクトの交差では衝突が登録されます。これは、非表示または秘密のオブジェクトや壁を作成する場合に便利です。
隠れた交差点でも衝突が記録されます。Player オブジェクトの優先度が Playfield カラー レジスタの背後にあり、別の Player オブジェクトの優先度が Playfield よりも高く (前景)、前景の Player ピクセルが Playfield と Playfield の背後にある Player オブジェクトの両方を隠している場合、Playfield と背景および前景の Player オブジェクトの両方の間の衝突が、前景と背景の Player オブジェクト間の衝突とともに記録されます。
ミサイル同士の衝突は発生しないことに注意してください。
プレイヤー/ミサイルの衝突は、プレイヤー/ミサイル オブジェクトのピクセルがディスプレイの表示部分内にある場合にのみ発生します。プレイヤー/ミサイル オブジェクトは、水平ブランクまたは垂直ブランクの間はレンダリングされません。表示可能なカラー クロックの範囲は 34 ~ 221 で、表示可能なスキャン ラインの範囲は 8 行目から 247 行目までです。これらの座標の外側にあるプレイヤー/ミサイル データはレンダリングされず、衝突は記録されません。オブジェクトは部分的に水平ブランク内にある場合があります。水平ブランクの外側にあるオブジェクトのピクセルはディスプレイの表示部分内にあるため、衝突が記録される可能性があります。
プレーヤー/ミサイル オブジェクトを可視表示領域から削除するには、水平位置を (左) 0、(右) 222 (またはそれ以上) にすると、プレーヤー/ミサイル オブジェクトのサイズに関係なくピクセルがレンダリングされなくなり、意図しない衝突がフラグ付けされなくなります。
最後に、プレーヤー、ミサイル、およびプレイフィールド オブジェクトの衝突検出はリアルタイムで行われ、画像ピクセルが結合されて表示用に出力されるときに衝突が登録されます。オブジェクトが CTIA/GTIA によってレンダリングされる前にオブジェクトの衝突ビットをチェックすると、衝突は表示されません。
一度設定されると、衝突は HITCLR レジスタへの書き込みによってクリアされるまで有効のままになります。効果的な衝突応答ルーチンは、ターゲット オブジェクトが表示された後、またはフレームの終了時または垂直ブランク中に実行され、衝突に反応して次のフレームが始まる前に衝突をクリアする必要があります。
衝突は 1 ビットのみであるため、衝突は明らかに加算的ではありません。1 フレーム内でピクセル間の衝突が何回発生し、異なる場所で発生したとしても、衝突があったことを示すビットは 1 つだけです。衝突ビットが設定されると、プログラムは関連するオブジェクトを調べて衝突場所を特定し、各場所に対する対応方法を決定できます。
HITCLR と衝突検出はリアルタイムであるため、ディスプレイ リスト割り込みはディスプレイをセクションに分割し、各セクションの始めに HITCLR を使用し、各セクションの終わりに個別の衝突評価を行うことができます。
「5 番目のプレーヤー」オプションが有効になっている場合 (PRIOR/GPRIOR レジスタを参照)、唯一の変更点は、ミサイル 0 ~ 3 が、関連付けられているプレーヤー オブジェクトの色の表示から COLPF3 の値の表示に切り替わることです。新しい「プレーヤー」の衝突は、個々のミサイルに対して引き続き報告されます。
プレイヤー/ミサイルとプレイフィールドの衝突
各ビットは、Player/Missile オブジェクトのピクセルが指定された Playfield カラー オブジェクトのピクセルと交差したことを示します。背景色には衝突は登録されていません。
隠れた交差点でも衝突が記録されます。プレイヤー/ミサイル オブジェクトの優先度がプレイフィールド カラー レジスタの背後にあり、別のプレイヤー/ミサイル オブジェクトの優先度がプレイフィールドよりも高く (フォアグラウンド)、フォアグラウンドのプレイヤー/ミサイル ピクセルがプレイフィールドとプレイフィールドの背後にあるプレイヤー/ミサイル オブジェクトの両方を隠している場合、プレイフィールドと背景およびフォアグラウンドのプレイヤー/ミサイル オブジェクトの両方との衝突が記録されます。
高解像度の 1/2 カラー クロック ピクセル モード ( ANTICモード 2、3、および F) は、異なる方法で処理されます。ピクセル値が 0 の COLPF2 としてレンダリングされる「背景」カラーは、衝突を登録しません。高解像度のピクセルは、COLPF1 からの輝度値としてレンダリングされます。ピクセルは、カラー クロック幅のペア (ピクセル 0 と 1、ピクセル 2 と 3、ピクセル 318 と 319 まで) にグループ化されます。ペアのいずれかのピクセルが 1 の場合、プレーヤーまたはミサイル ピクセルとプレイフィールド カラー COLPF2 の間で衝突が検出されます。
GTIAモード9と11はプレイフィールドの衝突を処理しません。GTIAモード10では、プレイフィールドの衝突はプレイフィールドピクセルがCOLPF0からCOLPF3を使用する場所に登録されます。
M0PF $D000 読む
ミサイル0からプレイフィールドへの衝突
M1PF $D001 読む
ミサイル1とプレイフィールドの衝突
M2PF $D002 読み取り
ミサイル2とプレイフィールドの衝突
M3PF $D003 読む
ミサイル3とプレイフィールドの衝突
P0PF $D004 読む
プレイヤー0からプレイフィールドへの衝突
P1PF $D005 読む
プレイヤー1とプレイフィールドの衝突
P2PF $D006 読み取り
プレイヤー2とプレイフィールドの衝突
P3PF $D007 読み取り
プレイヤー3とプレイフィールドの衝突
ミサイルとプレイヤーの衝突
ミサイルはプレイヤーやプレイフィールドに衝突します。ミサイル同士の衝突はありません。
M0PL $D008 読む
ミサイル0からプレイヤーへの衝突
M1PL $D009 読む
ミサイル1とプレイヤーの衝突
M2PL $D00A 読む
ミサイル2とプレイヤーの衝突
M3PL $D00B 読む
ミサイル3とプレイヤーの衝突
プレイヤー同士の衝突
2 人のプレイヤー間の衝突により、両方のプレイヤーの衝突レジスタの衝突ビットが設定されます。プレイヤー 0 とプレイヤー 1 が衝突すると、プレイヤー 0 のプレイヤー 1 に対する衝突ビットが設定され、プレイヤー 1 のプレイヤー 0 に対する衝突ビットが設定されます。
プレイヤーは自分自身と衝突することはできないため、そのビットは常に 0 になります。
P0PL $D00C 読み取り
プレイヤー0からプレイヤーの衝突
P1PL $D00D 読み取り
プレイヤー1対プレイヤーの衝突
P2PL $D00E 読み取り
プレイヤー2対プレイヤーの衝突
P3PL $D00F 読み取り
プレイヤー3対プレイヤーの衝突
プレイヤー/ミサイルとプレイフィールドの色と輝度
デフォルトの CTIA/GTIA 色解釈モードのすべてのプレーヤー/ミサイル オブジェクトのピクセルとすべてのプレイフィールド ピクセルは、間接参照を使用して色を指定します。間接参照とは、ピクセル データの値が色を直接指定するのではなく、色の別の情報ソースを指すことを意味します。CTIA/GTIA には、色に使用する値を設定するハードウェア レジスタが含まれており、ピクセルの情報はこれらのレジスタを参照します。Atari のパレットは、16 色の 8 つの輝度レベルで、合計 128 色です。色間接参照の柔軟性により、プログラムは画面の色をプログラムの表示目的に合わせて調整できます。
すべてのハードウェア カラー レジスタには対応するシャドウ レジスタがあります。
COLPM0 $D012 書き込み
シャドウ: PCOLOR0 $02C0
プレイヤーとミサイル0の色/輝度。
GTIA 9 色モードが有効になっている場合 (PRIOR/GPRIOR 値 $80)、このレジスタは COLBK ではなく、境界と背景 (プレイフィールド ピクセル値 0) に使用されます。
COLPM1 $D013 書き込み
シャドウ: PCOLOR1 $02C1
プレイヤーとミサイル1の色/輝度。
COLPM2 $D014 書き込み
シャドウ: PCOLOR2 $02C2
プレイヤーとミサイル2の色/輝度。
COLPM3 $D015 書き込み
シャドウ: PCOLOR3 $02C3
プレイヤーとミサイル3の色/輝度。
COLPF0 $D016 書き込み
シャドウ: カラー0 $02C4
プレイフィールド 0 の色/輝度。
COLPF1 $D017 書き込み
シャドウ: カラー1 $02C5
プレイフィールド 1 の色/輝度。
このレジスタは、ANTIC テキスト モード 2 および 3、およびマップ モード F で設定されたピクセル (値 1) に使用されます。輝度部分のみが使用され、COLPF2 の色値と OR 演算されます。他の文字モードおよびマップ モードでは、このレジスタはピクセルの予想される色と輝度を提供します。
COLPF2 $D018 書き込み
シャドウ: カラー2 $02C6
プレイフィールド2の色/輝度。
このレジスタは、ANTIC テキスト モード 2 および 3、およびマップ モード F のプレイフィールド背景色に使用されます。つまり、ピクセル値 0 が使用される場所です。他の文字モードおよびマップ モードでは、このレジスタはピクセルの予想される色と輝度を提供します。
COLPF3 $D019 書き込み
シャドウ: カラー3 $02C7
プレイフィールド3の色/輝度
COLPF3 は、いくつかの特別な状況で利用できます。
- ミサイルが「5 番目のプレーヤー」に変換されると、関連付けられたプレーヤー オブジェクトの色の表示から COLPF3 の表示に切り替わり、優先順位が変更されます。PRIOR/GPRIOR レジスタを参照してください。
- プレイフィールド テキスト モード 4 および 5。反転ビデオ文字 (高ビット $80 がセット) により、CTIA/GTIA は文字マトリックス内の COLPF2 ピクセルを COLPF3 値に置き換えます。( ANTIC のグリフ レンダリングを参照してください)
- プレイフィールド テキスト モード 6 および 7。文字値のビット 6 と 7 が設定されている場合 (文字範囲 $C0-FF)、文字ピクセル マトリックス全体が COLPF3 に表示されます。( ANTIC のグリフ レンダリングを参照してください)
- このレジスタは、GTIA の特殊な 9 色、ピクセル間接カラー モードでも使用できます。
COLBK $D01A 書き込み
シャドウ: カラー4 $02C8
プレイフィールドの背景の色/輝度。
背景色は、オーバースキャン表示領域全体にわたって他のピクセルが発生しない場所に表示されます。背景には、次の例外が発生します。
- ANTIC テキスト モード 2 および 3、およびマップ モード F では、ピクセルがレンダリングされるプレイフィールド領域の背景は COLPF2 から取得され、COLBK の色がプレイフィールドの周囲の境界として表示されます。
- GTIA カラー解釈モード $8 (9 色間接指定) では、ディスプレイの背景色はカラー レジスタ COLPM0 によって提供され、COLBAK はプレイフィールド ピクセル値 $8 に使用されます。
- GTIA 色解釈モード $C (1 つの輝度レベルで 15 色、および背景) では、COLBK を使用して他のすべてのピクセル (ピクセル値 $1 から $F) の輝度レベルを設定します。ただし、背景自体は COLBK レジスタで設定された色コンポーネントのみを使用します。背景の輝度値は 0 に強制されます。
カラーレジスタのビット:
カラー レジスタの上位ニブルは、16 色 ($00、$10、$20... ~ $F0) のうちの 1 つを指定します。
レジスタの下位ニブルは、16 個の輝度値 ($00、$01、$02... ~ $0F) のいずれかを指定します。
通常の色解釈モードでは、最下位ビットは重要ではなく、8 つの輝度値 ($00、$02、$04、$06、$08、$0A、$0C、$0E) のみが使用可能であるため、完全なカラーパレットは 128 色の値になります。
GTIA カラー解釈モード $4 (輝度のみのモード) では、プレイフィールド ピクセルに 16 ビットの輝度値がすべて使用可能で、256 色のパレットが提供されます。このモードで表示されるプレーヤー/ミサイル オブジェクトは、間接的に色付けされますが、それでも 128 色のパレットが使用されます。
通常の色解釈モードでは、ピクセル値の範囲は $0 から $3 で、通常はそれぞれカラー レジスタ COLBK、COLPF0、COLPF1、COLPF2 を指します。カラー テキスト モードには、特定の範囲の文字値に COLPF3 を使用するオプションも含まれています。詳細については、 ANTICのグラフィックス モードを参照してください。
プレーヤー/ミサイル グラフィック パターンの表示が有効になっていて、グラフィック パターン ビットが設定されている場合、表示される色はオブジェクトに割り当てられたレジスタから取得されます。
色の生成と表示には例外があります。
- ANTIC テキストモード 2 および 3、およびマップモード F:
- これらのモードでのピクセル値は $0 と $1 のみです。$0 ピクセルは、カラー レジスタ COLPF2 であるプレイフィールドの背景を指定します。$1 ピクセルは、COLPF2 の色コンポーネントと、COLPF1 で指定された輝度を使用します。プレイフィールドの周囲の境界は、COLBK の色を使用します。
- ANTIC テキスト モード 2 と 3、およびマップ モード F は、プレーヤー/ミサイル グラフィックスで他のモードとは異なる動作をします。グリフまたはグラフィックス ピクセルに使用される COLPF1 は常に最高の優先度を持ち、プレーヤーまたはミサイルによって隠されることはありません。COLPF1 の色は常に「背景」から取得されますが、これは通常 COLPF2 です。したがって、プレーヤー/ミサイルと 5 番目のプレーヤーが COLPF2 よりも優先される場合、COLPF1 グリフ/グラフィックス ピクセルは、最も優先度の高い色 (プレーヤーまたはミサイル) の色コンポーネントと COLPF1 の輝度コンポーネントを使用します。この動作は、プレーヤー/ミサイルの優先度の競合によって「背景」が真っ黒になる場合でも一貫しています。要約すると、CTIA/GTIA が最終的に高解像度ピクセルの「背後」に使用すると決定した色は、COLPF1 フォアグラウンド グリフ/グラフィックス ピクセルを「着色」するために使用されます。
- GTIA例外
- GTIA カラー解釈モード $8 (9 色間接指定) では、ディスプレイの背景色と境界色にカラー レジスタ COLPM0 が使用され、プレイフィールド ピクセル値 $8 には COLBAK が使用されます。
- GTIA 色解釈モード $C (1 つの輝度レベルで 15 色、および背景) は、COLBK を使用して他のすべてのピクセル (ピクセル値 $1 から $F) の輝度レベルを設定します。ただし、背景自体は、COLBK レジスタで設定された色コンポーネントのみを使用します。背景の輝度値は 0 に強制されます。背景の色コンポーネントも他のピクセルの色と OR 演算されることに注意してください。したがって、背景の色コンポーネントが黒 (数値的には 0) でない場合、モード内の全体の色数は減少します。
- プレイヤー/ミサイルの例外:
- プレーヤー/ミサイルの優先度値が $0 (PRIOR/GPRIOR を参照) の場合、重なり合うプレーヤー ピクセルとプレイフィールド ピクセルが OR 演算され、異なる色が表示されます。
- プレイヤー/ミサイルの優先度設定が競合すると、競合が発生した場所では真の黒 (色 0、輝度 0) が出力されます。
- プレーヤー/ミサイルのマルチカラー オプションを使用すると、重なり合ったプレーヤー ピクセルが OR 結合され、異なる色が表示されます。
ANTIC 文字モードごとのカラーレジスタの使用:
ANTIC マップ モードごとのカラー レジスタの使用:
GTIA モードごとのカラーレジスタの使用 (ANTIC F) :
プレイヤー/ミサイルの色は、すべてのモードでプレイヤー/ミサイル オブジェクトに常に使用できますが、特別な GTIA モード (16 シェード/16 色) が有効な場合は色が変更される場合があります。
その他のプレイヤー/ミサイルおよびGTIAコントロール
PRIOR $D01B 書き込み
シャドウ:GPRIOR $026F
このレジスタは、GTIA プレイフィールド カラー解釈モード、マルチカラー プレーヤー オブジェクト、5 番目のプレーヤー、プレーヤー/ミサイル/プレイフィールドの優先順位など、いくつかの CTIA/GTIA カラー管理機能を制御します。
GTIA プレイフィールドの色の解釈
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 つの値を提供します。
16 シェード
このモードでは、COLBK レジスタを使用して背景色を指定します。間接参照を使用するのではなく、ピクセル値は輝度を直接表します。このモードでは、Atari カラー パレットで 4 つの輝度ビットすべてを使用できるため、256 色を表示できます。
このモードでは、プレーヤー/ミサイル グラフィック (5 番目のプレーヤー オプションなし) は適切に表示されますが、プレイフィールドとの衝突検出は無効になります。プレイフィールドの優先順位は常に下にあります。ミサイルが 5 番目のプレーヤーとして機能するように切り替えられると、ミサイル オブジェクトがプレイフィールドに重なる部分で、ミサイル ピクセルの輝度がプレイフィールド ピクセルの輝度値と結合されます。
9 色
他の 2 つの特別な GTIA モードとは異なり、このモードは完全にカラー間接制御によって駆動されます。9 つのカラー レジスタはすべて、ピクセル値 0 から 8 までディスプレイ上で機能します。残りの 7 つのピクセル値は、以前のカラー レジスタを繰り返します。
出力時にピクセルは 1 カラー クロック (GTIA モード ピクセルの半分) だけ遅延されます。このオフセットにより、興味深い効果が得られます。たとえば、このモードと別の GTIA モード間でページをすばやく切り替えると、明らかに解像度が高く、色数が多い表示になります。
このモードは、境界線と背景 (プレイフィールド 0 の値のピクセル) に COLBK ではなくカラー レジスタ COLPM0 を使用するという点で独特です。
プレーヤー/ミサイル グラフィックは、同じカラー レジスタ COLPM0 を使用するため、プレーヤー/ミサイル 0 が背景ピクセルと区別できないという例外を除けば、適切に表示されます。プレーヤー/ミサイルの色を使用するプレイフィールド ピクセルは、プレーヤー/ミサイル オブジェクトであるかのように優先度設定によって変更されるため、プレーヤー/ミサイルの表示に影響を与える可能性があります。(プレーヤー/ミサイル/プレイフィールドの優先度については、後述の説明を参照してください)。
プレイヤー/ミサイルの色を使用するプレイフィールド ピクセルは、プレイヤー/ミサイル オブジェクトが重なっても衝突をトリガーしません。ただし、プレイフィールドの色 COLPF0 から COLPF3 が重なるプレイヤー/ミサイル グラフィックは、予想される衝突をトリガーします。
16色
このモードでは、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 hex /32 decは、マルチカラー プレーヤー オブジェクトを有効にします。2 つのプレーヤー/ミサイル オブジェクトのピクセルが重なる場所に、3 番目の色が表示されます。これは、プレーヤー/ミサイル オブジェクトのペア間の優先処理を排除することによって実装され、CTIA/GTIA は 2 つのカラー ピクセルのビット単位の OR を実行して新しい色を出力します。
例: 色の値が 98 hex /152 dec (青)のプレーヤー ピクセルが、色の値が 46 hex /70 dec (赤)のプレーヤー ピクセルと重なり、ピクセルの色は DE hex /228 dec (薄緑/黄) になります。
マルチカラー出力が可能なプレーヤー/ミサイルのペア:
- プレイヤー0 + プレイヤー1
- ミサイル0 + ミサイル1
- プレイヤー2 + プレイヤー3
- ミサイル2 + ミサイル3
5人目のプレイヤー
PRIOR ビット 4、値 $10 hex /16 decは、ミサイルが 5 番目のプレーヤーになることを可能にします。ミサイルの色処理以外、ミサイルに機能的な変更は発生しません。通常、ミサイルは関連するプレーヤーの色を使用して表示されます。5 番目のプレーヤーが有効になっている場合、すべてのミサイルはプレイフィールド 3 (COLPF3) の色を表示します。水平位置、サイズ、垂直遅延、およびプレーヤー/ミサイルの衝突はすべて同じように動作します。プレーヤー オブジェクトのピクセル交差に対する 5 番目のプレーヤーの優先順位は COLPF3 ですが、5 番目のプレーヤーのピクセルはすべてのプレイフィールドの色よりも優先されます。
カラー処理の変更により、GTIA の代替カラー モードでのミサイルの表示にもいくつかの例外が発生します。
- GTIA 16 シェード モード: ミサイル ピクセルがプレイフィールドと重なる部分では、ピクセルはプレイフィールド ピクセルの輝度値を継承します。
- GTIA 16 カラー モード: ミサイル ピクセルがプレイフィールドと重なる部分では、ピクセルはプレイフィールド ピクセルのカラー値を継承します。
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 はプレイフィールドの周囲の境界として出力されます。グラフィックスまたはグリフ ピクセルは、背景 (通常は COLPF2) の色成分と混合された COLPF1 の輝度成分のみを使用して出力されます。
プレーヤー/ミサイルと COLPF2 の優先順位の関係は、以下の優先順位表に従って機能します。優先順位の高いプレーヤー/ミサイルのピクセルは、COLPF2 を「背景」色として置き換えます。COLPF1 は常に最高の優先順位を持ち、プレーヤーやミサイルによって隠されることはありません。グリフ/グラフィック ピクセルは、最も優先順位の高い色 (プレイフィールド、プレーヤー、またはミサイル) の色コンポーネントと、COLPF1 の輝度コンポーネントを使用します。プレーヤー/ミサイルの優先順位の競合により「背景」が真っ黒になる場合でも、この動作は一貫していることに注意してください。実際には、CTIA/GTIA が最終的に「背景」色に使用する色値によって、COLPF1 フォアグラウンド グリフ/グラフィック ピクセルが「色付け」されます。
VDELAY $D01C 書き込み
垂直遅延 P/M グラフィックス
このレジスタは、ANTIC のDMACTLレジスタで Double Line Player/Missile 解像度が有効になっている場合に、単一のスキャン ラインの移動を提供するために使用されます。これは、偶数スキャン ラインで ANTIC DMA 更新を GRAF* レジスタにマスクすることで機能し、グラフィックス パターンが 1 スキャン ライン下に移動します。
シングル ライン解像度では各スキャン ラインで ANTIC DMA 更新が必要であり、VDELAY は偶数スキャン ラインでの更新をマスクするため、このビットはシングル ラインのプレーヤー/ミサイル解像度をダブル ラインに削減します。
GRACTL $D01D 書き込み
グラフィックコントロール
GRACTL は、CTIA/GTIA による ANTIC からのプレーヤー/ミサイル DMA データの受信を制御し、ジョイスティック トリガー入力のモードを切り替えます。
プレーヤー/ミサイル DMA データを受信するには、CTIA/GTIA がデータを受信するように設定されている必要があります。これは、ANTIC のDMACTLレジスタのビット ペアと一致する GRACTL のビット ペアを使用して行われます。このビット ペアは、ANTIC にプレーヤー データとミサイル データを送信するように指示します。GRACTL のビット 0 は DMACTL のビット 2 に対応し、ミサイル データの転送を有効にします。GRACTL のビット 1 は DMACTL のビット 3 に対応し、プレーヤー データの転送を有効にします。GTIA が ANTIC から DMA 経由でプレーヤー/ミサイル データを受信するには、これらのビットを設定する必要があります。プレーヤー/ミサイル グラフィックスが CPU によって直接操作されている場合は、これらのビットをオフにする必要があります。
ジョイスティック トリガー レジスタは、押された/押されていない状態をリアルタイムで報告します。プログラムの入力ポーリングがジョイスティック ボタンの瞬間的な押下を捕捉するのに十分な頻度ではない場合、トリガーを閉じた/押された状態でロックするように設定し、ボタンを放した後もその状態を維持することができます。GRACTL ビット 2 を設定すると、すべてのトリガーのラッチが有効になります。ビットをクリアすると、トリガーはラッチされていないリアルタイムの動作に戻ります。
HITCLR $D01E 書き込み
衝突をクリア
このレジスタに書き込むと、すべてのプレーヤー/ミサイル衝突検出ビットがクリアされます。
その他のCTIA/GTIA機能
ジョイスティックトリガー
TRIG0 $D010 読み取り
シャドウ: STRIG0 $0284
ジョイスティック 0 トリガー
TRIG1 $D011 読み取り
シャドウ:STRIG1 $0285
ジョイスティック1トリガー。
TRIG2 $D012 読み取り
シャドウ:STRIG2 $0286
ジョイスティック2トリガー。
TRIG3 $D013 読み取り
シャドウ:STRIG3 $0287
ジョイスティック3トリガー
ビット 7 から 1 は常に 0 です。ビット 0 はジョイスティック トリガーの状態を報告します。値 1 はトリガーが押されていないことを示します。値 0 はトリガーが押されていることを示します。
トリガーは、レポート ボタンの押下をリアルタイムで記録します。ボタンが押された状態は、ボタンが放されるとすぐにクリアされます。
トリガーは、押された状態でラッチ、つまりロックするように設定でき、明示的にクリアされるまでその状態が維持されます。GRACTL ビット 2 は、すべてのトリガーのラッチ動作を有効にします。GRACTL ビット 2 をクリアすると、すべてのトリガーがリアルタイム動作に戻ります。
PAL $D014 読む
PALフラグ。
このレジスタは、システムのディスプレイ標準を報告します。ビット 3 から 0 が 1 (値 $f hex /15 dec ) に設定されている場合、システムは NTSC で動作しています。ビットが 0 の場合、システムは PAL モードで動作しています。
CONSPK $D01F 書き込み
コンソールスピーカー
Bit3 は Atari 800/400 の内蔵スピーカーを制御します。後期モデルではコンソール スピーカーが取り外され、サウンドは通常のPOKEYオーディオ信号とミックスされてモニター ポートと RF アダプターに出力されます。Atari OS はコンソール スピーカーを使用してキーボードのクリック音とベル/ブザー音を出力します。
オペレーティング システムは、垂直ブランク ルーチン中にスピーカー ビットを設定します。ビットに 0 を繰り返し書き込むと、垂直ブランクによって値がリセットされるため、60 Hz のブザー音が生成されます。6502 コードを使用して 5 番目のオーディオ チャネルを効果的に追加することで、有用なトーンを生成できますが、このチャネルではオーディオ トーンを維持するために CPU 時間が必要になります。
CONSOL $D01F 読み取り
コンソールキー
特別なコンソール キー (Start、Select、Option) の状態を報告するためにビットが割り当てられています。ビット値 0 はキーが押されていることを示し、ビット値 1 はキーが押されていないことを示します。キー/ビット値:
- 開始キー = ビット値 $1
- キーを選択 = ビット値 $2
- オプションキー = ビット値 $4
プレイヤー/ミサイルグラフィック(スプライト)操作
ハードウェア「スプライト」システムは、CTIA/GTIA によって処理されます。スプライト システムの ATARI の正式名称は「Player/Missile Graphics」です。これは、シューティング ゲームで「プレーヤー」やその武器である「ミサイル」などの高速で移動するオブジェクトの表示メモリを操作する必要性を減らすように設計されたためです。
プレーヤーは、基本的に幅 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 つのミサイルを 2 つのカラー表示オプション間で切り替えることができます。各ミサイル (0 ~ 3) は、関連付けられたプレーヤー オブジェクト (0 ~ 3) の色を表すか、すべてのミサイルがレジスタ COLPF3/COLOR3 の色を表示します。ミサイルが同様の色である場合、5 番目のプレーヤーとして扱うことができますが、画面上で正しく配置するには、4 つのミサイル水平位置レジスタすべてに値を保存する必要があります。PRIOR/GPRIOR は、2 つのプレーヤーの重なり合うピクセルが 3 番目の色を生成する機能も制御します。これにより、使用可能なオブジェクトの数が減りますが、マルチカラーのプレーヤー オブジェクトが可能になります。最後に、PRIOR/GPRIOR は、プレーヤー/ミサイル ピクセルとプレイフィールド ピクセルの前景/背景レイヤー (「優先度」と呼ばれる) を変更するために使用でき、表示される色に予測どおりに影響を与える優先度の競合が発生する可能性があります。
垂直方向に変化する画像/パターンを持つスプライトという従来のアイデアも、Player/Missile グラフィックス システムに組み込まれています。ANTIC チップには、ディスプレイが生成されると DMA を実行して新しいピクセル パターンを CTIA/GTIA に自動的に送る機能が含まれています。これは、各スキャン ラインまたは 1 つおきのスキャン ラインに対して実行でき、Player/Missile ピクセルの高さは 1 スキャン ラインまたは 2 スキャン ラインになります。このように、Player/Missile オブジェクトは、ディスプレイの高さによって、フォント内の非常に背の高い文字 (幅 8 ビット/ピクセル) と見なすことができます。
プレーヤー/ミサイル オブジェクトを水平方向に移動するのは、CTIA/GTIA のレジスタを変更するのと同じくらい簡単です (Atari BASIC では、1 つの POKE ステートメントでプレーヤーまたはミサイルを水平方向に移動できます)。オブジェクトを垂直方向に移動するには、グリフの定義をプレーヤーまたはミサイル ビットマップの新しい場所にブロック移動するか、プレーヤー/ミサイル ビットマップ全体 (128 バイトまたは 256 バイト) を回転させます。最悪の場合でも、6502マシン言語ではビットマップ全体の回転はかなり高速です。ただし、6502 には 8080 にあるブロック移動命令はありません。スプライトの長さはちょうど 128 バイトまたは 256 バイトなので、インデックスは 6502 のバイト幅のレジスタに簡単に対応できます。Atari BASIC には高速メモリ移動コマンドがないため、BASIC PEEK() および POKE(s) を使用してメモリを移動すると非常に時間がかかります。 Player/Missile グラフィックスを使用する Atari BASIC プログラムには、高速メモリ移動を実行するための他のオプションがあります。1 つの方法は、USR()関数を介して短いマシン言語ルーチンを呼び出してメモリ移動を実行することです。もう 1 つのオプションは、大きな文字列を Player/Missile メモリ マップとして使用し、文字列コピー コマンドを実行してマシン言語速度でメモリ移動を実行することです。
Player/Missile グラフィックスを Atari ハードウェアの他のグラフィックス機能と慎重に組み合わせて使用すると、グラフィックス プログラミング、特にゲームが大幅に簡素化されます。
GTIA の機能強化
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 ディスプレイが、ピクセルあたり 2 色、水平方向に 320 ピクセル、モード ラインあたり 1 スキャン ラインから、16 色、水平方向に 80 ピクセルに変更されます。追加のカラー解釈により、次のことが可能になります。
- GTIA カラー解釈モード$4 — Atari パレットの 16 色相から、単一色相の 16 色相 (背景色 COLBK で設定)。これは、Atari BASIC の Graphics 9 でも利用できます。
- GTIA 色解釈モード$8 — このモードでは、128 色の Atari パレット全体から任意の色相と輝度で水平線ごとに 9 色の間接色を使用できます。これは、Playfield ピクセルのすべての Player/Missile および Playfield カラー レジスタを使用して実現されます。このモードでは、背景色はカラー レジスタ COLPM0 によって提供され、COLBAK は Playfield ピクセル値 $8 に使用されます。このモードは、Atari BASIC で Graphics 10 としてアクセスできます。
- GTIA 色解釈モード$C — 単一のシェード/輝度値に 15 色相、および背景。背景の値 COLBK は、他のすべてのピクセル (ピクセル値$1から$F ) の輝度レベルを設定します。輝度値の最下位ビットは考慮されないため、標準/CTIA 8 輝度値のみを使用できます ( $0、$2、$4、$6、$8、$A、$C、$E )。さらに、背景自体は COLBK レジスタで設定された色コンポーネントのみを使用します。背景の輝度値は 0 に強制されます。このモードは、Atari BASIC の Graphics 11 でアクセスできます。
これらのモードのうち、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] [15]
Atari の所有者は、 BASICコマンドを実行することで、マシンに CTIA または GTIA が搭載されているかどうかを確認できますPOKE 623,64。実行後に画面が黒くなった場合、マシンには新しい GTIA チップが搭載されています。画面が青のままの場合、マシンには CTIA チップが搭載されています。
バグ
東ヨーロッパ市場向けに製造された最後の Atari XE コンピュータは中国で製造されました。すべてではないにしても、多くのコンピュータにバグのあるPAL GTIA チップが搭載されています。Graphics 9 以上の輝度値に問題があり、縞模様として表示されます。チップを交換すると問題は解決します。また、外部回路を使用して、不具合のある GTIA チップを修復する試みも行われています。
参照
参考文献
- ^ abc Atari Home Computer フィールドサービスマニュアル - 400/800 (PDF) . Atari, Inc. pp. 1–10 . 2010年9月10日閲覧。
- ^ Neubauer, Doug (2009-06-20). 「The Atari Years、Doug Neubauer 著。Star Raiders、Solaris、Pokey」DougNeubauer.com。
- ^ abc Sherer, Robin Alan (1988年6月). 「GTIA Joystick Painter - 強力なAtariアニメーションツール」. ANTIC . 7 (2): 37. ISSN 0113-1141 . 2011年1月26日閲覧。
- ^ 米国特許 4296476、Mayer, Steven T.、Miner, Jay G.、Neubauer, Douglas G.、Decuir, Joseph C.、「プログラム可能なグラフィックジェネレータを備えたデータ処理システム」、1981 年 10 月 20 日発行、Atari, Inc. に譲渡。
- ^ abcde Patchett, Craig; Sherer, Robin (1984)。「特殊チップと ROM」。Atari のマスター メモリ マップ。Reston、Va.: Reston Publishing Company。ISBN 0-8359-4242-2. 2011年1月26日閲覧。
- ^ abcde Mace, Scott (1982-03-15). 「Atari が静かに 16 色グラフィック チップに切り替え」InfoWorld . 4 (10). Palo Alto, CA: Popular Computing: 3–4. ISSN 0199-6649 . 2011-02-01に取得。
- ^ ab Chamberlain, Craig (1982年7月). 「Atari Video Graphics And The New GTIA」. Compute! (26): 124. ISSN 0194-357X . 2011年1月24日閲覧。
- ^ abc Joe Decuir、「ゲームマシンアーキテクチャの3世代」、CGEXPO99
- ^ ab Small, David; Small, Sandy; Blank, George (1983 年 5 月)。「デザイン哲学と GTIAデモ」。The Creative Atari。Creative Computing Press。ISBN 978-0-916688-34-9. 2011年1月26日閲覧。
- ^ Switzer, Steve (1983年10月). 「Atari Clinic」. ANTIC . 2 (7): 103. ISSN 0113-1141 . 2011年2月1日閲覧。
- ^ Michael Current、「SALLY、ANTIC、CTIA/GTIA、POKEY、FREDDIE チップとは何ですか?」、Atari 8 ビット コンピューター: よくある質問
- ^ abcde ボリス、ダン。 「アタリチップス」。ダン B のホームページ。2011 年 2 月 1 日に取得。
- ^ Vendel, Curt. 「Atari 800XLCR」。AtariMuseum.com。2011年9月13日時点のオリジナルよりアーカイブ。2011年2月1日閲覧。
- ^ Vendel, Curt. 「KERI Performance Tester」。AtariMuseum.com。2011年9月13日時点のオリジナルよりアーカイブ。2011年2月1日閲覧。
- ^ スモール、デイビッド、スモール、サンディ、ブランク、ジョージ編 (1983)。「魔法使い、プリンセス、そしてアタリ」。クリエイティブ アタリ。クリエイティブ コンピューティング プレス。ISBN 0916688348。
外部リンク
- Atari Program Exchangeが発行した De Re Atari
- イアン・チャドウィック著『Atari のマッピング、改訂版』
- GTIA チップのデータシートを PDF にスキャンしました。
- jindroush サイト(アーカイブ) GTIA 情報
- CTIAダイショット
- GTIAダイショット
