



6526/8520 Complex Interface Adapter ( CIA ) は、MOS Technologyが製造した集積回路です。6502 ファミリのマイクロプロセッサの I/O ポートコントローラとして機能し、並列およびシリアル I/O 機能、タイマー、時刻 (TOD) クロックを提供しました。このデバイスの最も顕著な用途は、Commodore 64とCommodore 128(D)で、それぞれに 2 つの CIA チップが搭載されていました。Commodore 1570およびCommodore 1571フロッピー ディスク ドライブには、それぞれ 1 つの CIA が搭載されていました。さらに、Amigaホーム コンピュータとCommodore 1581 フロッピー ディスク ドライブは、8520 と呼ばれる CIA 回路の改良版を採用していました。8520 は、簡略化されたTOD回路を除いて、機能的には 6526 と同等です。CIA の前身はPIAでした。
CIAには2つの8ビット双方向パラレルI/Oポートがあった。各ポートには対応するデータ方向レジスタがあり、各データラインを個別に入力モードまたは出力モードに設定できた。これらのポートを読み取ると、設定されたデータ方向に関係なく、常に個々のラインの状態が返された。
CIAは、内蔵の双方向8ビットシフトレジスタによりシリアルI/Oを処理できた。このチップは外部クロックからのシリアル入力を受け付け、内蔵のプログラマブルタイマーのいずれかでクロックされたシリアル出力を送信できた。8ビットのシリアル転送が完了するたびに割り込みが発生した。複数のコンピュータのシフトレジスタとクロック出力を接続することで、シンプルな「ネットワーク」を構築することができた。2MHz版の最大ビットレートは500kbit /sである 。
CIA には、以前の6522 VIAのシリアルシフトレジスタのバグに対する修正が組み込まれています。CIA は当初、ディスクドライブとの高速通信を可能にすることを目的としていましたが、最終的にはVIC-20とのディスクドライブの互換性を維持する必要性から使用できませんでした。実際には、 1541ドライブのファームウェアは 、 C64 の ビデオプロセッサの動作を回避するために、VIC-20 の前身よりもさらに遅くする必要がありました。この動作では、画面を描画する際に、512 マイクロ秒ごとに 40 マイクロ秒間CPUをオフにし、そのタイムスライスではバスを監視できないため、一部のビットを見逃すリスクがありました。[ 1 ] [ 2 ]
サブマイクロ秒精度のプログラマブルインターバルタイマーが2つ用意されていた。各タイマーは、 16ビットの読み出し専用プリセット可能ダウンカウンタと、それに対応する16ビットの書き込み専用ラッチで構成されていた。タイマーが開始されると、タイマーのラッチが自動的にカウンタにコピーされ、カウンタはクロックサイクルごとにデクリメントされ、アンダーフローが発生するまで動作した。CIAがアンダーフローするように設定されていれば、アンダーフロー時に割り込みが生成された。
タイマーは、アンダーフロー後に停止する「ワンショット」モードと、ラッチ値を再ロードしてタイマーサイクルを新たに開始する「連続」モードのいずれかで動作させることができた。タイマー出力は、割り込みを生成するだけでなく、第2のI/Oポートにゲート接続することもできた。
Commodore 64およびCommodore 128では、CIAのタイミングは公称1MHzのØ2システムクロックによって制御されていました。これは、タイマーが約1マイクロ秒間隔で減少することを意味し、正確な時間間隔はシステムがNTSCまたはPALのビデオ規格を使用しているかどうかによって決まりました。C-128ではクロックストレッチングが採用されていたため、CIAのタイミングはシステムがSLOWモードで動作しているかFASTモードで動作しているかの影響を受けませんでした。
タイマーBにタイマーAのアンダーフローをカウントするようにプログラムすることで、比較的長いタイミング間隔を生成することが可能だった。両方のタイマーに最大間隔値である65,535をロードした場合、1時間11分34秒のタイミング間隔が得られる。
CIAにはリアルタイムクロックが組み込まれており、インターバルタイマーのマイクロ秒単位の精度よりも人間のニーズに適した時刻計測装置を提供します。時刻はアメリカの12時間制(午前/午後)で表示されます。TODクロックは、時(ビット7が午前/午後フラグとして機能)、分、秒、および10分の1秒の4つの読み書きレジスタで構成されています。すべてのレジスタはBCD形式で読み出されるため、エンコード/デコード処理が簡素化されます。
レジスタから読み取ると、常に時刻が返されます。時刻取得中に桁上がりエラーが発生しないように、時レジスタを読み取ると、内部の時刻精度に影響することなく、レジスタの更新が直ちに停止します。10分の1レジスタの読み取りが完了すると、更新が再開されます。時レジスタ以外のレジスタは「オンザフライ」で読み取ることができるため、稼働中のTODクロックをタイマーとして使用することは実用的です。ただし、時レジスタを読み取った場合は、必ずその後10分の1レジスタも読み取る必要があります。そうしないと、すべてのTODレジスタが「フリーズ」状態になります。
時刻を設定するには、適切な BCD 値をレジスタに書き込む必要があります。時レジスタへの書き込みアクセスは、時計を完全に停止させます。10 分の 1 レジスタに値が書き込まれるまで、時計は再び動きません。レジスタはシステムのメモリ マップに順番で表示されるため、レジスタを正しい順序で書き込むには、単純なループだけで十分です。10 分の 1 レジスタのみに書き込んで時計を「微調整」することは可能です。この場合、ハードウェア リセット後、時計は 1:00:00.0 から動き始めます。
TODは、時刻計測機能に加えて、任意の時刻に割り込み要求を生成するように設定することで、目覚まし時計としても使用できます。多くの6526にはバグがあり(下記の正誤表も参照)、アラーム時刻の秒数がちょうどゼロの場合でも、アラームIRQが必ずしも発生するとは限りません。この問題を回避するには、アラームの10分の1の値を0.1秒に設定します。
TODクロックの内部回路は、50Hzまたは60Hzの 正弦波信号で駆動されるように設計されています。C-64およびC-128(D)で使用されていたように、コンピュータの電源は主電源からこのような信号を供給し、長期ドリフトの少ない安定したタイムキーパーを実現しました。両方の電源周波数で動作できるため、6526の単一バージョンを、50Hzまたは60Hzの 電源を使用している国で動作するコンピュータで使用できました。一般的に信じられていることとは異なり、NTSCまたはPALビデオ規格は主電源周波数に直接関連していません。さらに、一部のコンピュータはTODクロック周波数を主電源から取得していませんでした。たとえば、Commodore SX-64のNTSCおよびPALバージョンはどちらも、専用の水晶発振子によって供給される60HzのTODクロックを使用しています。例えば、Commodore 64のKERNALオペレーティングシステムは、システム起動時にビデオ規格を決定しますが、供給されたTODクロック周波数を識別したり、 50Hz駆動のマシンでCIAを正しく初期化したりはしません。したがって、CIAのTOD機能を使用するアプリケーションソフトウェアは、供給された周波数を自ら判断し、それに応じてCIAフラグを設定する責任があります。これを怠ると、クロックが正しい時刻から急速にずれてしまう可能性があります。
AmigaやCommodore 1581ディスクドライブで使用されたCIAの8520リビジョンでは、時刻クロックが6526のBCD形式から24ビットバイナリカウンタに変更されました。ただし、その他の動作は同様でした。
CIAには、1MHz(6526)、 2MHz(6526A)、 3MHz(6526B)のバージョンがありました。パッケージはJEDEC規格の40ピンセラミックまたはプラスチックDIPでした。時刻クロックが改良された8520 CIAは、Amigaコンピュータで使用されました。
Commodore は、コスト削減版Commodore 1571用に、C128DCR ( Commodore 128を参照) 内の 5710 と呼ばれるゲートアレイに、CIA に似た簡略化された (レジスタは 4 つのみ) ロジックを組み込みました。このゲートアレイには、他の機能も含まれています。5710 CIA は、高速シリアル インターフェース用のシリアル クロックが、CIA6526 相当のタイマー A 値 5 にハードワイヤリングされており、送信時のビットあたりの時間が 5μs になります。これは、オリジナルのCommodore 1571の 6526 CIA のタイマー A 値が 6 だったのとは異なります。5710 CIA には、タイマーやタイマー制御レジスタは含まれていません。2 つのポート レジスタと、シリアル シフタとそのイベントを制御するレジスタのみが含まれています。
前述のアラームクロック割り込みバグに加え、多くのCIAには、割り込み制御レジスタ(ICR)が実際に割り込みが発生するはずの時刻より1クロックサイクルまたは2クロックサイクル前に読み取られた場合、タイマーBハードウェア割り込みを生成しないという欠陥がありました。この欠陥と、コモドールが提供する(8ビット)オペレーティングシステムの論理エラーにより、コモドール64およびコモドール128コンピュータが高ボーレートで動作している際に、擬似RS-232エラーが頻繁に発生しました。