
Intel 8255(またはi8255)プログラマブル周辺機器インターフェース(PPI)チップは、1970年代前半にIntel 8080マイクロプロセッサ向けにIntelによって開発・製造されました。8255は、24本の並列入出力ラインと、さまざまなプログラマブル動作モードを提供します。
8255は、Intelが自社の8085および8086マイクロプロセッサとその後継機種で使用するために設計したMCS-85ファミリーのチップです。 [ 1 ]最初は40ピンDIPパッケージで提供され、後に44ピンPLCCパッケージになりました。[ 2 ]デジタル処理システムで広く使用され、後に他のメーカーによってクローンされました。82C55は、より高速で消費電流が少ないCMOSバージョンです。
8255の機能は現在、主にサブ機能としてより大型のVLSI処理チップに組み込まれています。8255のCMOSバージョンはルネサスによってまだ製造されていますが[ 3 ] 、主にマイクロコントローラのI/Oを拡張するために使用されています。
8255は、 Motorola 6800ファミリーのMotorola 6820 PIA(ペリフェラルインターフェースアダプタ)と同様の機能を持ち、同じく元々は40ピンDILパッケージで提供されていました。8255は、4つのプログラム可能な方向ビットを備えた24個のI/Oピンを提供します。1つはポートA(7:0)(つまり、ポート内のすべてのピン)、1つはポートB(7:0)、1つはポートC(3:0)、1つはポートC(7:4)用です。これに対し、MotorolaおよびMOSチップは、16個のI/Oピンと4個の制御ピンしか提供しませんが、Motorola/MOSチップでは、すべてのI/Oピンの方向(入力または出力)を個別にプログラムできます。どちらのチップも、一定量の自動ハンドシェイクと割り込み生成を行う構成を備えています。
他に同等のマイクロプロセッサI/Oチップとしては、 Signetics 2650ファミリーの2655プログラマブルペリフェラルインターフェース、Z80 PIO、Western Design CenterのWDC 65C21(Motorola 6820/6821に相当)、そしてタイマーやシフトレジスタなどの追加機能を備えたMOS Technologyの6522 VIAおよび6526 CIAなどが挙げられる。

Intel ID8255A の産業用グレード版は、100 個以上の数量で 17.55 米ドルで入手可能でした。[ 4 ] 入手可能な Intel 8255A-5 バージョンは、100 個以上の数量で 6.55 米ドルでした。[ 5 ]入手可能な 82C55A CMOS バージョンは、沖電子工業株式会社 に外注されていました。[ 6 ] Intel ブランドの 82C55 の入手可能なパッケージは、1985 年第 4 四半期にサンプリングされた44 ピンPLCCでした。 [ 7 ]東ヨーロッパでは、同等の回路がソビエト連邦でKR580VV55Aとして、チェコスロバキアでTeslaによって MHB8255A として 製造されました。
8255は、 SV-328やすべてのMSXモデルなど、多くのマイクロコンピュータ/マイクロコントローラシステムやホームコンピュータで広く使用されました。8255は、オリジナルのIBM PC、[ 8 ] PC/XT、PC/jr、およびクローン、さらにN8VEMなどの多数の自作コンピュータで使用されました。
8255 は、CPU またはデジタル システムにプログラム可能な並列I/Oへのアクセスを提供します。[ 9 ] 8255 には 24 個の入出力ピンがあります。[ 10 ]これらは 3 つの 8 ビット ポート (A、B、C) に分割されています。[ 11 ] ポート A とポート B は 8 ビット入出力ポートとして使用できます。ポート C は、8 ビット入出力ポートとして、または 2 つの 4 ビット入出力ポートとして、またはポート A と B のハンドシェイク信号を生成するために使用できます。
これら3つの港は、さらに以下のように分類される。
8本のデータライン(D0~D7)(8ビットのデータバッファ付き)を使用して、ポートまたは制御レジスタにデータを読み書きできます。RD(ピン5)とWR(ピン36)は、それぞれ読み出しおよび書き込み操作用のアクティブロー信号です。アドレス線A1およびA0は、以下に示すように、各ポートのデータレジスタまたは制御レジスタへのアクセスを可能にします。
制御信号チップの選択CS(ピン6)は8255チップを有効にするために使用されます。これはアクティブロー信号です。つまり、CS = 0 の場合、8255 は有効になります。RESET入力(ピン 35) は、8085、8086 などのシステムの RESET ラインに接続されているため、システムがリセットされると、すべてのポートが入力ラインとして初期化されます。これは、ポート方向設定の不一致により 8255 および/またはそれに接続されている周辺機器が破損するのを防ぐためです。例として、ポート A に 8255 に接続された入力デバイスを考えてみましょう。前の操作でポート A が出力ポートとして初期化され、現在の構成を使用する前に 8255 がリセットされていない場合、8255 と接続されているデバイスの両方がデータを送信するため、接続されている入力デバイスまたは 8255、またはその両方が破損する可能性があります。
制御レジスタ(または制御ロジック、コマンドワードレジスタ)は、動作モードとポートの入出力指定を選択するために使用される 8 ビットレジスタです。[ 12 ]
8255には、基本的に2つの動作モードがあります。
2つの動作モードは、制御ワードレジスタのD7ビットの値に基づいて選択されます。D7=1の場合、 8255はI/Oモードで動作し、D7=0の場合、 BSRモードで動作します。
ビットセット/リセット(BSR)モードはポートCでのみ使用可能です。ポートCの各ライン(PC 7 - PC 0)は、制御ワードレジスタに適切な値を書き込むことでセットまたはリセットできます。BSRモードとI/Oモードは独立しており、BSRモードを選択してもI/Oモードの他のポートの動作には影響しません。[ 13 ]

ポートCのピンの選択は、以下のように決定されます。
例えば、PC 5を設定する必要がある場合は、制御ワードで、
したがって、上記の値に従って、0B(16進数)が制御ワードレジスタ(CWR)にロードされます。
このモードは、制御ワードレジスタのD 7ビットが 1 の場合に選択されます。I/O モードは 3 つあります。 [ 14 ]

例えば、ポートBと上側のポートCを入力ポートとして、下側のポートCとポートAを出力ポートとして初期化する必要がある場合(すべてモード0):
したがって、目的の操作を行うには、制御ワードレジスタに「10001010」= 8A (16進数)をロードする必要があります。
このモードでは、ハンドシェイク信号なしで、ポートを単純な入出力操作に使用できます。ポートAとポートBは単純な入出力操作を提供します。ポートCの2つの半分は、一緒に8ビットの追加ポートとして使用することも、個別の4ビットポートとして使用することもできます。ポートCの2つの半分は独立しているため、片方を入力ポートとして初期化し、もう片方を出力ポートとして初期化することも可能です。
モード0における入出力機能は以下のとおりです。
「ラッチ」とは、ビットが記憶レジスタ(フリップフロップのアレイ)に格納され、ラッチ後に入力が変化しても出力が一定に保たれることを意味します。バッファは記憶機能を持たない要素で、有効になると現在の信号をそのまま通過させます。
8255の出力は、最後に書き込まれたデータを保持するためにラッチされています。これは、データがバス上に1サイクルしか保持されないため必要です。ラッチがない場合、書き込みサイクルが終了するとすぐに出力は無効になります。
入力はラッチされません。CPUは現在の値を読み取り、後で参照する必要がある場合はCPUレジスタまたはメモリにデータを格納するだけでよいためです。ポートの読み取り中に入力が変化すると、結果が不確定になる可能性があります。
ポートAまたはポートBをハンドシェイク(ストローブ)入出力操作に使用する場合は、そのポートをモード1で初期化します(ポートAとポートBは異なるモードで初期化することも可能です。例えば、ポートAをモード0、ポートBをモード1で動作させることもできます)。ポートCの一部のピンはハンドシェイクラインとして機能します。
このモードにおけるポートB(入力ポートとして動作しているか出力ポートとして動作しているかに関わらず)では、PC0、PC1、PC2ピンがハンドシェイクラインとして機能します。
ポートAがモード1の入力ポートとして初期化されている場合、PC3、PC4、PC5はハンドシェイク信号として機能します。ピンPC6とPC7は入出力ラインとして使用できます。
ハンドシェイクをサポートするモード1には、以下の機能があります。
入力ハンドシェイク信号
ハンドシェイク信号を出力します
このモードではポート A のみを初期化できます。ポート A は双方向ハンドシェイクデータ転送に使用できます。つまり、同じ 8 本のライン (PA0 ~ PA7) でデータの入力と出力が可能です。ピン PC3 ~ PC7 はポート A のハンドシェイク ラインとして使用されます。ポート C の残りのピン (PC0 ~ PC2) は、グループ B がモード 0 で初期化されている場合は入出力ラインとして、グループ B がモード 1 で初期化されている場合はポート B のハンドシェイクとして使用できます。このモードでは、8255 はシステム バスをスレーブマイクロプロセッサに拡張したり、フロッピー ディスクコントローラとの間でデータ バイトを転送したりするために使用できます。データ送信側と受信側の間で適切なデータ フローと同期を維持するために、確認応答信号とハンドシェイク信号が提供されます。