科学・技術
IBM MCGAゲートアレイのリバースエンジニアリング
IBM MCGA Gate Array Reverse Engineering (github.com)
要約
この記事は、IBMの低コストビデオチップセットであるMCGA(Multi-Color Graphics Array)のゲートアレイ、具体的にはメモリコントローラとビデオフォーマッタのリバースエンジニアリングについて解説しています。PS/2モデル25および30で導入されたこのチップセットの内部構造と機能、特にMCGAの隠された機能や製造テストレジスタに関する新しい知見が詳細に説明されています。
全文翻訳
IBM MCGAゲートアレイのリバースエンジニアリング
IBMのMCGA(Multi-Color Graphics Array)は、PS/2モデル25および30で導入された低コストのビデオチップセットです。Epson Equity 1eはMCGA互換のビデオを使用していますが、同じチップは使用していません。IBMチップセットは、メモリコントローラゲートアレイとビデオフォーマッタゲートアレイで構成されています。これらのいくつかの例はIBMの内部ゲートアレイプロセスで製造されましたが、他のものはセイコー製の外部ゲートアレイ部品を使用しています。
メモリコントローラゲートアレイ(72X8300)
このゲートアレイには、MC6845同期ジェネレータICの実装が含まれており、ISAバスへのビデオRAMインターフェース、キャラクタRAMインターフェース、およびクロック選択やモニターIDの読み出しを含むいくつかのその他の機能を管理します。私がリバースエンジニアリングした例は、セイコーSLA6430ゲートアレイを使用して実装されています。これには、それぞれ4つのトランジスタを持つ4,342個の基本セル(BC)が含まれています。BCは167行26列に配置されています。これは2um CMOSプロセスで、2層の金属層を持っています。画像は72x8300-sla6430jからのものです。リバースエンジニアリングされた回路図とレイアウトは、mcga72x8300flatサブディレクトリで見つけることができます。
ビデオフォーマッタゲートアレイ(72X8205)
フォーマッタゲートアレイは、ISAメモリとIOポートアドレスをデコードし、RAMDACインターフェースを管理し、グラフィックモードとテキストモードの両方でピクセルデータを生成します。このICの画像は2つあります。最初の72x8205-gl14105fsは、IBMの内部ゲートアレイプロセスで作られているようです。残念ながら、デキャッピング中に最上部の金属層が除去されたため、ネットリストを抽出できませんでした。2番目の72x8205-sla6330jはリバースエンジニアリングされています。mcga72x8205flatサブディレクトリを参照してください。これはセイコーSLA6330ゲートアレイです。これには、それぞれ4つのトランジスタを持つ3,312個の基本セルが含まれています。BCは144行23列に配置されています。
72x8300(メモリコントローラゲートアレイ)に関する注意点
リバースエンジニアリングの取り組みに基づき、MCGAに関する新しい情報が発見されました。MCGAは外部のHSYNCおよびVSYNC信号にジェンロックできます。これらの信号はビデオコネクタに引き出されています。ピン12(ID1)はVSYNC、ピン11(ID0)はHSYNCです。このモードを有効にするには、レジスタ0x12(キャラクタジェネレータインターフェースと同期極性、またはディスプレイセンス)のビット3に1を書き込みます。PS/2モデル30のテクニカルリファレンスマニュアルでは、このビットは「Reserved = 0」と記載されています。おそらく、このジェンロックモードには、25MHzまたは14MHzのクロック入力に接続された外部クロックPLLが必要になるでしょう。レジスタ0x10(モードコントロール)のビット3、「Compatibility」は80x25テキストモードのみに影響します。これは水平タイミングレジスタを2倍にします(0x00、水平合計の場合は1増加、0x02、開始水平同期の場合は1減少)。レジスタ0x10(モードコントロール)のビット2、「Clock = 1」は、どのクロックがビデオ回路を駆動するかを制御します。デフォルトの状態では、ほとんどのビデオ回路は25.175MHzクロックを使用します。このビットを0に変更することで、クロック周波数を14.318MHz入力に設定できます。レジスタ0x10(モードコントロール)のビット6、「Reserved = 0」はまだ完全に理解されていません。レジスタ0x20(Reserved)は製造テストモードレジスタです。ビット機能
7 14.318MHz代替クロックモード(不明)
6 VCKピン代替モード(通常VCKINはVCKに直接接続される)
5 スピードアップモード:不明
4 スピードアップモード:カーソル位置高カウンタ
3 スピードアップモード:カーソル位置低/キャラクタカウンタ
2 スピードアップモード:垂直合計調整カウンタ
1 スピードアップモード:垂直カウンタ
0 スピードアップモード:水平カウンタ
カウンタのスピードアップモードは、基本的に各カウンタの上位4ビットと下位4ビットの両方にクロック信号を注入するため、カウンタがより速く動作します。これは、チップテスターでの工場テストを助けるものです。
72x8205(ビデオフォーマッタゲートアレイ)に関する注意点
拡張モードレジスタ0x1Aには、2つの未文書化ビットがあります。
ビット機能
1 不明、他の解像度でも256カラーモードを強制する可能性がある。
0 不明、ディスプレイ全体にボーダーカラーを強制する可能性がある。
追加の製造テストレジスタは、以下の場所へアクセスすることで利用可能です。
レジスタ0x19 - 製造レジスタアドレス
レジスタ0x18 - 製造レジスタデータ
特定の製造テストレジスタにアクセスするには、レジスタ0x19にアドレスをロードし、0x18で内容を読み書きします。製造テストレジスタは以下のとおりです。
アドレスレジスタ
0 未実装
1 読み取り専用。RAMDACに送信されているデータの最新の内容(P[7:0]ピン)を含む。
2 読み取り専用。VRAMから受信しているデータの最新の内容(CP[7:0]ピン)を含む。
3 読み取り専用。フォーマットロジックからの不明な16カラーモードデータを含む。
4 書き込み専用レジスタ、操作については下記参照。
アドレス4の書き込み専用レジスタは、以下の2ビットのみを実装しています。
ビット機能
0 製造ハードリセット。リセットピンと同等。'1'を書き込むとデバイスがリセット状態になり、'0'を書き込むとリセット状態から抜ける。
1 '1'を書き込むと、RAMDACへ向かうものを含む多数の出力を無効にする。
リバースエンジニアリングプロセスの情報
72x8300の画像は21808x21778から10904x10889に縮小されました。出力JPGファイルはスペースを節約するために85%圧縮に設定され、48DPIに設定され、スケールファクター0.103170でKiCADにインポートされました。これにより、KiCAD単位でBC間の間隔が「3mm」になります。各基本セルタイプが特定され、回路図シンボルと関連付けられるたびに、ライブラリフットプリントが作成されました。元のBCの多くがミラーリングされていたため、フットプリントを回転できるようにパッドはすべて中央に配置されました。ゲートアレイは2層の金属を使用しており、層間の接続を理解するのは難しい場合があります。一般的に、許容される接触はいくつかしかありません。
メタル1からメタル2
メタル2からポリシリコン(ゲート)
メタル2から拡散
各列には、VCC(右側)とGND(左側)を運ぶ2本の平行なワイヤーがメタル2上にあります。したがって、各BCの左側の2つのトランジスタはNMOSで、右側の2つのトランジスタはPMOSです。BCでは、2つのトランジスタが1つのゲートを共有し、各ゲートには3つの接続パッドがあります。接点は、VCCまたはGNDを、2つのトランジスタ間の共有チャネル接続上、または1つのトランジスタの孤立したチャネル接続上、もう一方のトランジスタ、または両方のトランジスタの拡散領域に接続できます。論理ゲートに出入りする外部信号は、通常、メタル1上のセル全体を横断する水平トレースを使用して接続します。論理ゲートの内部配線は、通常メタル2で行われます。メタル2上の垂直平行ワイヤーが電源とグランドを運ぶことに加えて、電源とグランドを運ぶもう1組の水平ワイヤー(メタル1上)があります。私のリバースエンジニアリングされたレイアウトでは、これらは信号線ではないため、これらのラインの上にトレースは配置されていません。トレースはフットプリントパッドから始まり、下にある金属をたどり、他のすべての接続されたパッドに接続され、ネット名が与えられ、その後回路図に逆伝播されました(通常のKiCADプロセスとは逆)。
今後の計画
KiCADネットリストからVerilogを生成することを検討する