
POKEYはPot Keyboard Integrated Circuitの略で、[1] Atari, Inc. [2]のDoug NeubauerがAtari 8ビットコンピュータ用に設計したデジタルI/O チップです。1979年にAtari 400とAtari 800で初めてリリースされ、その後のすべてのモデルとAtari 5200コンソールに含まれています。POKEYは、パドルコントローラ(ポテンショメータ)とコンピュータキーボードの読み取り機能と、サウンド生成機能と疑似乱数ソースを組み合わせています。クリアなトーンまたは歪み設定で変更された、特徴的な矩形波オーディオの4つの音声を生成します。 [3] Neubauerは、POKEYの機能を活用した Atari 8ビットキラーアプリケーションStar Raidersも開発しました。
POKEY チップは、 Centipede、Missile Command、Asteroids Deluxe、Gauntletなど、1980 年代の多くのアーケード ビデオ ゲームのオーディオに使用されています。Atariのアーケード システムの一部では、オーディオ チャネルを増やすために、1 つのパッケージに 2 つまたは 4 つの POKEY を搭載したマルチコア バージョンを使用しています。Atari 7800コンソールでは、ゲーム カートリッジに POKEY を含めることができ、システムのオーディオ チップよりも優れたサウンドが得られます。これを使用しているライセンス ゲームは、 BallblazerとCommandoの移植版の 2 つだけです。
LSIチップには40ピンがあり、C012294として識別されます。[4] USPTOは1982年2月2日に「複数のオーディオサウンド効果を生成する装置」に対してAtariに米国特許4,314,236を付与しました。[5]発明者として挙げられているのはSteven T. MayerとRonald E. Milnerです。
特徴
- オーディオ
- キーボードスキャン(最大64キー)+ 2つの修飾子ビット(Shift、Control)+ Break
- ポテンショメータポート (8 つの独立したポート、それぞれ 8 ビットの解像度)
- 高解像度タイマー (オーディオ チャンネル 1、2、4 は、ゼロを超えたときにタイマー割り込みが発生するように設定できます)
- 乱数ジェネレータ(17ビット多項式カウンタの8ビットを読み取ることができます)
- シリアル I/Oポート
- 8つのIRQ割り込み
バージョン
部品番号別:
- C012294 — Atari XEGSやAtari 5200コンソールを含むすべてのAtari 8 ビット コンピューターで使用されます。チップのサフィックスは製造元を示します。
- C012294B-01 — AMI
- C012294-03 — シグネティクス
- C012294-19 — ナショナル セミコンダクター
- C012294-22 — OKI
- C012294-31 — 輸入
- 137430-001 — Atari アーケード マシンの POKEY で使用されることがある部品番号。
- 137324-1221 — AtariアーケードマシンMajor Havoc、I, Robot、Firefox、Return of the Jediで使用されたクアッドコアPOKEY 。[6]
Atari はチップの製造に複数の異なるメーカーを使用していましたが、1983 年以降は AMI がほとんどのチップを製造しました。初期のチップは 5 マイクロメートル プロセスで製造されていましたが、後に 3 マイクロメートルに縮小されました。AMI 製の POKEY は、他のブランドのチップと比較して故障率が高いと報告されています。その理由は不明ですが、チップのパッケージングまたはボンディング ワイヤの欠陥ではないかと推測されています。オーブンで加熱することで機能しない POKEY を復活させることに成功したという限定的な報告もあります。POKEYOne などの最新の FPGA 代替品も存在します。[7]
ピン配置

レジスター
Atari 8 ビット コンピューターは POKEY を $D2xx 16 進ページにマップし、Atari 5200 コンソールはそれを $E8xx 16 進ページにマップします。
POKEY は、サウンド、パドル入力、キーボード入力、シリアル入出力、および割り込みを制御する 29 個の読み取り/書き込みレジスタを提供します。多くの POKEY レジスタ アドレスには、読み取りレジスタと書き込みレジスタとして異なる機能を実行するという 2 つの目的があります。したがって、以前に書き込まれた値を取得するためにハードウェア レジスタを読み取るコードは使用しないでください。
この問題は、ハードウェア レジスタの値をミラーリングする通常の RAM に実装されたオペレーティング システムの「シャドウ」レジスタによって、一部のレジスタで解決されます。垂直ブランク中に、オペレーティング システムは書き込みレジスタの RAM 内のシャドウ レジスタを対応するハードウェア レジスタにコピーし、それに応じてハードウェアからの読み取りレジスタのシャドウ値を更新します。したがって、対応するシャドウ レジスタを持つハードウェア レジスタへの書き込みは、次の垂直ブランク中にシャドウ レジスタの値によって上書きされます。
表示サイクルの不明な段階でハードウェアから直接値を読み取ると、一貫性のない結果が返される可能性があります (例: ポテンショメータの読み取り)。読み取りレジスタのオペレーティング システム シャドウ レジスタは、通常、優先される情報ソースです。
一部の書き込みハードウェア レジスタには、対応するシャドウ レジスタがありません。これらのレジスタは、垂直ブランク中に値が上書きされることなく、アプリケーションによって安全に書き込むことができます。アプリケーションがレジスタに書き込まれた最後の値を知る必要がある場合は、書き込んだ内容を記憶するために独自のシャドウ値を実装するのはアプリケーションの責任です。
以下の個々のレジスターリストには、次の凡例が適用されます。
オーディオ
Pokey には、プログラム可能なサウンド ジェネレーター、つまり個別の周波数、ノイズ、音声レベル コントロールを備えた 4 つのオーディオ チャンネルが含まれています。
各チャンネルには、8 ビットの周波数分周器と、ノイズと音量を選択するための 8 ビットのレジスタがあります。
- AUDF1 ~ AUDF4 – 周波数レジスタ (AUDio Frequency)
- AUDC1 ~ AUDC4 – ボリュームとノイズ レジスタ (AUDio Control)
- AUDCTL – ジェネレータを制御する汎用レジスタ (AUDio ConTroL)
POKEY のサウンドは独特です。4 つのチャンネルを個別に使用すると、ピッチの精度が不足しているため、12 平均律スケールの一部で顕著なデチューンが発生します。チャンネルをペアにして精度を高めることもできます。また、複数の形式のディストーションを使用できるため、より厚みのあるサウンドが得られます。ディストーションは主に音楽のベース パートに使用されます。
Atari 8 ビット ファミリー向けに開発されたサウンド エンジンの 1 つは、AMP エンジン (Advanced Music Processor) と呼ばれていました。これは、ミュージシャンのGary Gilbertsonによって使用されました。
オーディオチャンネル周波数
AUDF* レジスタは、対応するサウンド チャネルの周波数またはピッチを制御します。AUDF* 値は、垂直ブランクよりも頻繁に正確な間隔で実行する必要があるコードに役立つ POKEY ハードウェア タイマーも制御します。
各 AUDF* レジスタは 8 ビット値で、POKEY クロックからのパルスのカウントダウン タイマーまたは除数を提供します。したがって、値が小さいほど POKEY からのパルス出力の頻度が高くなり、値が大きいほど頻度が低くなります。$0 hex /0 decから $FF hex /255 decまでの値は、POKEY によって増分され、$1 hex /1 decから $100 hex /256 decの範囲になります。実際に聞こえる音のピッチは、選択した POKEY クロック周波数と歪み値によって異なります。オーディオ チャンネル制御およびオーディオ制御を参照してください。
AUDF1 $D200 書き込み
オーディオチャンネル1周波数
AUDF2 $D202 書き込み
オーディオチャンネル2周波数
AUDF3 $D204 書き込み
オーディオチャンネル3周波数
AUDF4 $D206 書き込み
オーディオチャンネル4周波数
オーディオチャンネルコントロール
オーディオ チャンネル コントロール レジスタは、個々のサウンド チャンネルの音量と歪みをコントロールします。サウンド チャンネルの音量を直接操作することで、POKEY クロックとは独立してオーディオを生成することもできます。これは、デジタル サンプルの再生に便利です。
AUDC1 $D201 書き込み
オーディオチャンネル1コントロール
AUDC2 $D203 書き込み
オーディオチャンネル2コントロール
AUDC3 $D205 書き込み
オーディオチャンネル3コントロール
AUDC4 $D207 書き込み
オーディオチャンネル4コントロール
ビット 0 ~ 3: 0 ~ F の音量レベルを制御します。
ビット 4: 強制的にボリュームのみの出力。このビットが設定されている場合、チャンネルは AUDF タイマー、ノイズ/歪みコントロール、およびハイパス フィルターを無視します。サウンドはボリューム ビット 0:3 を設定することによってのみ生成されます。この機能は、パルス コード変調を介してデジタル オーディオを作成するために使用されました。
ビット 5 ~ 7: ノイズ/歪みのシフト レジスタ設定。ビット値の説明は次のとおりです。
ランダム ノイズの生成は、17 ビット シフト レジスタの先頭から 8 ビットを読み取ることによって行われます。このレジスタは、NTSC の場合は 1.79 MHz、PAL の場合は 1.77 MHz の周波数で駆動されます。その出力は、各オーディオ チャンネルの分周率によって独立して使用できます。
AUDCTL $D208 書き込み
オーディオ コントロールでは、オーディオ チャネルに使用するクロック入力の選択、ハイパス フィルタ機能の制御、2 つのチャネルの結合による 16 ビットの周波数精度の実現、特定のチャネルの高周波数クロックの選択、多項式入力の「ランダム性」の制御が可能です。
記述がない場合は、「1」は「オン」を意味します。
- ビット 0
- $01: (15 kHz)、周波数分周率の選択「0」- 64 kHz、「1」- 15 kHz
- ビット 1
- $02: (FI2 + 4)、チャンネル4の周波数で評価されたチャンネル2のハイパスフィルタ
- ビット2
- $04: (FI1 + 3)、チャンネル3の周波数で評価されたチャンネル1のハイパスフィルタ
- ビット3
- $08: (CH4 + 3)、16ビットの精度を得るために分周器4+3を接続
- ビット4
- $10: (CH2 + 1)、16ビットの精度を得るために分周器2+1を接続
- ビット5
- $20: (CH3 1.79)、チャンネル 3 の周波数を設定します。「0」は 64 kHz です。「1」は 1.79 MHz NTSC または 1.77 MHz PAL です。
- ビット6
- $40: (CH1 1.79)、チャンネル 1 の周波数を設定します。「0」は 64 kHz です。「1」は 1.79 MHz NTSC または 1.77 MHz PAL です。
- ビット7
- $80: (POLY 9)、シフトレジスタ「0」- 17ビット、「1」- 9ビット
すべての周波数分周器 (AUDF) は、64 kHz または 15 kHz のレートで同時に駆動できます。
周波数分周器 1 と 3 は、CPU クロック (1.79 MHz NTSC、1.77 MHz PAL) によって交互に駆動できます。周波数分周器 2 と 4 は、分周器 1 と 3 の出力によって交互に駆動できます。このように、POKEY では、8 ビット チャネルを接続して 16 ビット精度のサウンドを作成できます。
可能なチャネル構成:
- 4つの8ビットチャンネル
- 2つの8ビットチャネルと1つの16ビットチャネル
- 2つの16ビットチャネル
ポテンショメータ
POKEY には、ポテンショメータ (パドル コントローラとも呼ばれる) に最もよく使用される 8 つのアナログ - デジタル コンバータ ポートがあります。アナログ入力は、タッチ タブレット コントローラや 12 ボタンのビデオ ゲーム キーボード コントローラにも使用されます。各入力にはドロップ トランジスタがあり、ソフトウェアからオンまたはオフに設定できます。タイマーは、テレビの電子ビームがペンを通過するときにタイマーをキャプチャするドロップ トランジスタにフォトダイオードを接続することで、ライト ペンをサポートするためにも使用できます。ペンの垂直位置は、別途読み取る必要がありました。
POT0 $D200 読む
シャドウ: PADDL0 $0270
パドルコントローラ 0 入力
POT1 $D201 読み取り
シャドウ: PADDL1 $0271
パドルコントローラ 1 入力
POT2 $D202 読み取り
シャドウ:パドル2 $0272
パドルコントローラ2入力
POT3 $D203 読む
シャドウ: PADDL3 $0273
パドルコントローラー3入力
POT4 $D204 読む
シャドウ: PADDL4 $02704
パドルコントローラー 4入力
POT5 $D205 読む
シャドウ: PADDL5 $0275
パドルコントローラー 5入力
POT6 $D206 読む
シャドウ: PADDL6 $0276
パドルコントローラー 6入力
POT7 $D207 読む
シャドウ: PADDL7 $0277
パドルコントローラー 7入力
各入力には 8 ビット タイマーがあり、各 TV ラインが表示される時間をカウントします。これにより、読み取った値をパドルで操作するオブジェクトの画面座標に直接入力できるという利点もあります。Atari パドルの値の範囲は 0 から 228 ですが、最大値は 244 です。パドル コントローラーは、時計回りに最大位置まで回すと 0 を読み取り、反時計回りに回すと最大値で終わる値を返します。
パドル読み取りプロセスは、POTGO への書き込みから始まり、POT* 値を 0 に、ALLPOT 値を $FF にリセットし、ポテンショメータ読み取りコンデンサを放電します。POT* 値は、ポテンショメータの抵抗値に達するまでスキャンされるにつれて増加します。パドル読み取りが完了すると、ALLPOT の対応するビットが 0 にリセットされます。
パドル スキャン プロセスは、完了するまでにビデオ フレームの大部分を要します。Atari オペレーティング システムは、パドルの読み取りを自動的に処理します。ステージ 2 の垂直ブランク中にパドルが読み取られ、パドル スキャンが開始されます。パドルの値はシャドウ レジスタにコピーされます。(パドル トリガーは、実際には PIA から読み取られたジョイスティック方向入力であることに注意してください。)
SKCTL のビットを設定すると、パドルをスキャンするより高速なモードが可能になります。読み取りシーケンスは数本のスキャン ラインで完了しますが、値の精度は低くなります。
ALLPOT $D208 読む
ポテンショメータのスキャンステータス
各ビットは 1 つのポテンショメータ入力 (POT* レジスタ) に対応します。POTGO に書き込むことによってパドル スキャンが開始されると、ALLPOT 内の各パドルのビットが 1 に設定されます。パドルのスキャンが完了すると、ALLPOT 内の対応するビットが 0 にリセットされ、関連する POT* レジスタの値が読み取り可能になったことを示します。
POTGO $D20B 書き込み
ポテンショメータスキャンを開始
POTGO に書き込むと、ポテンショメータ (パドル) のスキャン プロセスが開始されます。これにより、POT* 値が 0 に、ALLPOT 値が $FF にリセットされ、ポテンショメータの読み取りコンデンサが放電されます。各ポテンショメータのスキャンが完了すると、ALLPOT 内のポテンショメータに対応するビットがクリアされ、関連する POT* レジスタの値が読み取りに有効であることを示します。
シリアル入力出力ポート
含まれるもの:
- シリアル入力ライン
- シリアル出力ライン
- シリアルクロック出力ライン
- 双方向シリアルクロックデータライン
- レジスタ SKREST、SEROUT、SERIN、SKCTL、SKSTAT
POKEY はUARTの一種です。通常、2 倍のオーディオ チャネルの 1 つがボー レート ジェネレータとして使用されます。標準ボー レートは 19.2 kbit/s で、最大ボー レートは 127 kbit/s です。SEROUT レジスタに入力されたバイトは、自動的にシリアル バスを介して送信されます。データ フレームには 10 ビット (1 つのスタート ビット、8 つのデータ ビット、1 つのストップ ビット) が含まれます。電圧レベルは 0 V (論理 0) と +4 V (論理 1) です。簡単な電圧コンバータを使用して、Atari シリアル ポートを RS-232 ポートに接続できます。
各入出力操作により POKEY の内部シフトレジスタの値が変化するため、POKEY のプログラミング時には、各操作の実行後にいくつかの値を再初期化する必要があります。
SKREST $D20A 書き込み
シリアル ポート ステータス (SKSTAT) をリセットします。
このレジスタに書き込むと、ラッチである SKSTAT のビット 5 から 7 が 1 にリセットされます。ラッチは、キーボード オーバーラン、シリアル データ入力オーバーラン、およびシリアル データ入力フレーム エラーをフラグします。
SEROUT $D20D 書き込み
シリアルポートデータ出力バイト。
これは、シリアル シフト レジスタに転送されて 1 ビットずつ出力される 8 ビット (1 バイト) の値を保持するパラレル レジスタです。ポートが出力データを受け入れる準備ができると、シリアル データ出力割り込みによってオペレーティング システムに、この出力レジスタに 1 バイトを書き込むことができることが通知されます。
SERIN $D20D 読む
シリアルポートデータ入力バイト。
SEROUT と同様に、これも並列「保持」レジスタです。シリアル シフト レジスタがデータ入力を 1 ビットずつ読み取ることによって組み立てられた 8 ビット (1 バイト) の値を保持します。1 バイト全体が読み取られると、シリアル データ入力割り込みが発生し、オペレーティング システムにこのレジスタからバイトを読み取れることを通知します。
SKCTL $D20F 書き込み
シリアルポート制御
ビット 0: 機械式スイッチからのノイズやジッターを除去することを目的とした「デバウンス」スキャンを有効にします。値が 1 の場合、POKEY はキーをスキャンするときに内部比較レジスタを使用できます。キーが押されたと認識されるには、2 回の同時スキャンでキーが検出される必要があります。また、キーが解放されたと認識されるには、2 回の連続スキャンでキーが解放されたと認識される必要があります。オペレーティング システムで通常のキーボード処理を維持するには、これを有効にする必要があります。
ビット 1: キーボード スキャンを有効にするには 1 に設定します。オペレーティング システムで通常のキーボード処理を維持するには、これを有効にする必要があります。
ビット 2: 1 に設定すると、高速ですが精度の低いポテンショメータ スキャンが有効になります。高速ポテンショメータ スキャンでは、サイクルごとにカウンターが増分され、2 スキャン ライン以内に使用可能な結果が返されます。オペレーティング システムは、結果を生成するためにフレーム (1/60 秒) を要し、114 サイクル (スキャン ライン) ごとにカウンターが 1 回増分される低速ポテンショメータ スキャンを使用します。OS は、垂直ブランク割り込み (VBI) 中にポテンショメータ値を読み取り、結果を RAM 内のポテンショメータ シャドウ レジスタにコピーします。次に、次の VBI 中に次の読み取りのために POTGO をリセットします。
ビット 3: シリアル ポートの 2 トーン モードを有効にします。有効にすると、SIO バスに出力される 1 ビットと 0 ビットは、タイマー 1 と 2 によって設定されたトーンに置き換えられます。これは通常、デジタル データを表すアナログ トーンをカセット テープに書き込むために使用されます。
ビット 4 ~ 6: シリアル ポート操作のクロック タイミング制御。ビット値の説明は次のとおりです。
ビット 7: 既知の 0 出力を強制し、2 トーン シリアル出力モードでタイマー 2 がタイマー 1 をリセットできるようにします。
SKSTAT $D20F 読み取り
シリアルポートのステータス
KBCODE $D209 読み取り
シャドウ: CH $02FC
キーボードコード
8つのIRQ割り込み
- 壊す
- ブレーク(BREAKキー割り込み)
- け
- キーボード(キーボード割り込み)
- お客様
- シリアル入力準備完了(シリアルレールからの割り込み読み取り)の場合
- ODNN
- 出力データが必要な場合(シリアルレールからの書き込み割り込み)
- 爆笑
- if eXmitend Data(シリアル送信終了割り込み)
- T1
- タイマー1、タイマー1割り込み
- T2
- タイマー2、タイマー2割り込み
- T4
- タイマー4、タイマー4割り込み
割り込みは、レジスタ IRQEN によってソフトウェアからオンまたはオフに設定できます。IRQSTAT レジスタには割り込みステータスが含まれます。
キーボード
実際に押されたキーの 6 つのキー レジスタ (K0 K5)。00 から 3F までの値が含まれます。2 つの制御値が含まれます。そのうちの 1 つは、6 つの値すべてのデコーダーとして機能します。2 番目の制御値は、CTRL、SHIFT、BREAK などの特殊なキー値をデコードするために使用されます。
参考文献
- ^ 「I. 動作理論」。Atari Home Computer フィールド サービス マニュアル - 400/800。Atari , Inc. pp. 1–11。
- ^ Hague, James (2002-06-01). 「Doug Neubauer とのインタビュー」. Halcyon Days . 2008年1月14日閲覧。
- ^ 「第 7 章: サウンド」。De Re Atari。Atari, Inc. 1982 年。
- ^ Michael Current、「SALLY、ANTIC、CTIA/GTIA、POKEY、FREDDIE チップとは何ですか?」、Atari 8 ビット コンピューター: よくある質問
- ^ Atari, Inc. (1979-01-24). 「複数のオーディオサウンド効果を生成する装置」。米国特許。 2008年1月14日閲覧。
- ^ 「Atari Pokey の違い」。2016年11月16日。
- ^ 「Atari Pokeyチップの交換と修正の可能性」2020年1月11日。
外部リンク
- ASMA — Atari SAP ミュージック アーカイブ POKEY チップ ミュージック (SAP) プレーヤーと、さまざまな Atari 8 ビット ゲームの SAP ミュージックのコレクションです。
- POKEY チップのデータシートを PDF にスキャンしました。
- 小規模ロジックチップで作られたPOKEY
- Atari 8 ビット (POKEY を使用) で Commodore SID チップをエミュレートするビデオ。
