

MOS Technology 6522 Versatile Interface Adapter (VIA) は、MOS Technologyが6502ファミリのマイクロプロセッサのI/O ポートコントローラとして設計・製造した集積回路です。双方向 8 ビットパラレル I/O ポートを 2 つ、16 ビットタイマーを2 つ(うち 1 つはイベントカウンタとしても動作可能)、シリアル通信またはシリアルとパラレル間のデータ変換用の8 ビットシフトレジスタを備えています。2 つの I/O ポートの各ビットの方向は個別にプログラム可能です。6522 は MOS Technology によって製造されたほか、RockwellやSynertekなどの他社からも二次供給を受けていました。
6522は1980年代のコンピュータ、特にコモドールのマシンで広く使用され[ 1 ] 、 Apple III、Oric-1、Oric Atmos、BBC Micro、Victor 9000/Sirius 1、Apple Macintoshの設計の中核を成すものでした。Vectrexなどのビデオゲームプラットフォームも6522を使用しており、1984年から1989年のコルベットのデジタルダッシュクラスターも同様でした。高速CMOSバージョンのW65C22は、 Western Design Center (WDC)によって製造されています。
VIAには20本のI/Oラインがあり、2つの8ビット双方向ポート(または16本の汎用I/Oライン)と4本の制御ライン(ハンドシェイクおよび割り込み生成用)に分けられます。16本の汎用ライン(PA0~7、PB0~7)の方向はそれぞれ個別にプログラム可能です。制御ラインは、アクティブ時に割り込みを生成する(4本すべて)、対応するI/Oポートをラッチする(CA1およびCB1)、I/Oポート上のデバイスに対してハンドシェイク信号を自動的に生成する、またはプログラム制御出力として動作する(CA2およびCB2)ようにプログラムできます。CB1とCB2は、シフトレジスタのクロック入力およびデータラインとしても使用されるため、シフトレジスタが有効になっている間は他の機能には使用できません。
VIAは2つの16ビットタイマー/カウンタを提供します。それぞれワンショット(単安定)の「インターバルタイマー」モードで使用できます。タイマー1は「フリーランニング」(分周器/方形波)モードでも使用でき、このモードではタイマーがゼロに達すると自動的に初期カウントで再ロードされます。タイマー2は「パルスカウント」モードでも使用でき、このモードではタイマーはピンPB6(パラレルI/OポートBの7番目のビット)のハイからローへの状態遷移をカウントします。ワンショットモードでは、各タイマーはフリーランニングを継続し、ゼロに達してからの時間を測定できますが、タイマーが再起動されるまで割り込みは発生しません。各タイマーはゼロに達すると割り込みを生成でき、タイマー1はピンPB7(ポートBの8番目のビット)にパルス(インターバルタイマーモード)または方形波(フリーランニングモード)を出力することもできます。タイマー2はシフトレジスタのクロック周波数を提供するために使用できます。フリーランニングモードの便利な機能として、16ビットカウンタラッチにカウンタを再ロードすることなく新しいカウントをロードできるため、現在のカウントがゼロになった後にのみ新しいカウントがロードされ、出力周波数がシームレスに変化します。タイマー1のこの機能は、ピンPB7への出力機能と組み合わせることで、パルス幅変調信号、周波数スイープ、バイフェーズまたはFMエンコードされたシリアルビットストリームなどの複雑な波形を生成するために使用できます。[ 2 ]
VIAのシフトレジスタは双方向で、8ビット幅であり、タイマー生成クロック(タイマー2)、CPUクロック、またはCB1ライン上の外部クロックのいずれかで動作させることができます。シリアル入出力はCB2ラインで行われ、CB1ラインは外部クロック駆動のシリアルデバイス用のビットクロックを出力するようにプログラムすることも可能です。
NMOS 6522は、ワイヤードOR割り込み回路で使用できるオープンドレインIRQ出力を備えています。一方、WDC W65C22Sは、トーテムポールIRQ出力を備えており、W65C22Sが割り込みを行っていないときにトーテムポール出力がIRQピンをアクティブにハイに駆動するため、ショットキーダイオードによってワイヤードOR回路から分離する必要があります。この特定の問題は、オープンドレインIRQ出力を備えたWDC W65C22Nで解決されています。[ 3 ]
設計上の欠陥により、 CB1のエッジがϕ2(位相-2)クロックの立ち下がりエッジから数ナノ秒以内に重なると、 CB1のエッジが無視され、ビットの損失と後続データのフレーミングエラーが発生します。
回避策としては、外部クロック信号を74ACT74フリップフロップのD入力に入力し、フリップフロップのQ出力を6522のCB1ピンに接続し、ϕ0またはϕ2でフリップフロップをクロックする方法がある。[ 4 ]
シリアルシフトレジスタのバグは、California Micro DevicesのCMD G65SC22とMOS 6526で修正されました。後者のデバイスは、 Commodore 64以降、Commodoreが6522の代わりに採用したものです。
前述のシフトレジスタのバグとは別に、レジスタ破損の潜在的な問題がありました。これは通常、Motorola 68000など、 6502以外のバスアーキテクチャを持つマイクロプロセッサを搭載した6522システムでのみ発生していました。チップセレクトがロー(非アクティブ)で、かつϕ2クロック入力がハイ(アクティブ)のときにアドレスラインが変更されると、チップが選択されていないにもかかわらずレジスタの内容が変更される可能性がありました。この問題は、一部のCMOSバージョンでは修正されましたが、すべてではありませんでした。