
2026/06/27 14:17
IBM MCGA アレイのリバースエンジニアリング
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本文の核心は、IBM PS/2 MCGA チップセットへの深く踏み込んだ探求であり、メモリ制御ゲートアレイ (72X8300) およびビデオフォーマッターゲートアレイ (72X8205) について具体的な技術仕様を明らかにしている。未文書化されたレジスタマップ(アドレス 0x12 および 0x10 など)を解析することで、同期信号、テキストモード(ビット 3 を含む 80×25 モードを含む)、およびクロック速度に対する制御の詳細な説明を行っている。分析では、逆工学的手法によって特定化されたゲートアレイの物理的特性、例えば Seiko SLA6430(2um CMOS プロセス、4,342 バシックセルを使用)について詳述するとともに、IBM 自前のビデオフォーマッターチップについてはネットリスト抽出を妨げた欠落した層といった技術的課題にも言及している。文脈上、本文は IBM の公式実装とサードパーティ製バリエーション(Epson Equity 1e など)を区別している。今後、本プロジェクトではこれらの逆工学的手法によって特定化されたレイアウトを機能する Verilog コードへと変換することを目標としており、KiCAD デザインを精密な間隔要件に従ってインポートすることを行っている。結局のところ、このドキュメント開発者がプロプライエタリなチップなしでレガシーグラフィックシステムをエミュレートできるようになり、レトロコンピューティング業界にとって不可欠な資源となっている。
本文
IBM MCGA ゲートアレイのリバースエンジニアリング
IBM MCGA(マルチカラーグラフィック・アレイ)は、PS/2 モデル 25 および 30 と同時に登場した低コストビデオチップセットである。Epson Equity 1e も MCGA 互換のビデオ機能を採用しているが、異なるチップを使用している。
チップセット構成
- IBM のチップセットには以下の 2 つのゲートアレイが含まれる:
- メモリコントローラ用ゲートアレイ
- ビデオフォーマッタ用ゲートアレイ
- 製造プロセスの違いにより、以下のような組み合わせが存在する:
- IBM の内製ゲートアレイプロセス製
- **Seiko(精工舎)**の外部仕様ゲートアレイ部品製
メモリーコントローラ用ゲートアレイ (72X8300)
機能概要
- MC6845 サインジェネレータ IC の実装を含む。
- ISA バスとのビデオ RAM 間界界面の管理
- 文字 RAM 間界界面の管理
- クロック選択、モニタ ID の読み出しなど miscellaneous 機能の実装
リバースエンジニアリング仕様
- 基板: Seiko SLA6430 ゲートアレイを使用。
- 構造: トランジスタそれぞれ 4 つを有する基本セル(BC)全体で 4,342 個を内包。
- 配置:167 行 × 26 コラム
- プロセス: 2μm CMOS、金属層数 2 層。
リソースファイル
- 画像:
72x8300-sla6430j - シームレス図およびレイアウト:
サブディレクトリに記載。mcga72x8300flat
ビデオフォーマッタ用ゲートアレイ (72X8205)
機能概要
- ISA メモリおよび I/O ポートアドレスのデコード。
- RAMDAC 間界界面の管理。
- グラフィックモードとテキストモードの両方でピクセルデータの生成。
イメージのバリエーション
1. 72x8205-gl14105fs
(IBM 内製プロセス)
72x8205-gl14105fs- IBM の内製ゲートアレイプロセス上に搭載されるものと推測される。
- 制限: デキャップ作業の際に上層の金属膜が除去されたため、ネットリストの抽出は不可能。
2. 72x8205-sla6330j
(Seiko SLA6330)
72x8205-sla6330j- リバースエンジニアリングが完了しており詳細を
サブディレクトリで参照可能。mcga72x8205flat - 基板: Seiko SLA6330 ゲートアレイを使用。
- 構造:トランジスタそれぞれ 4 つを有する基本セル (BC) で3,312 個内包。
- 配置:144 行 × 23 コラム。
72X8300(メモリーコントローラ用)に関する注記
リバースエンジニアリングにより、MCGA に以下のような新たな情報が得られた。
主要機能とレジスタ操作
-
Genlock
- MCGA は外部 HSYNC および VSYNC シグナルに対するGenlock が可能。
- シグナル割り当て:
- ピン 12 (ID1): VSYNC
- ピン 11 (ID0): HSYNC
- 有効化方法:レジスタ
(文字ジェネレータ間界界面および同期極性/ディスプロセンソ)の**ビット 3 に「1」**をセット。0x12- 注記: PS/2 モデル 30 の技術参照マニュアルでは「予約済み=0」とリストされているが、実際には有効化可能。
- 推測: Genlock モードでは外部クロック PLL を 25MHz または 14MHz クロック入力に接続する必要がある。
-
レジスタ
(モード制御)の詳細0x10- ビット 3("互換性"): 80×25 テキストモードのみに影響。
- 水平タイミングレジスタを 2 倍にする処理制御。
: 水平合計値を加算。0x00
: 水平同期開始値から減じる。0x02
- ビット 2("クロック=1"): ビデオ回路のクロック源選択。
- デフォルト:ほとんどが 25.175MHz を使用。
- 変更方法:このビットを「0」に変更すると、クロック周波数を 14.318MHz 入力へ切り替え可能。
- ビット 6("予約済み=0"): 機能は完全には解明されていない。
- ビット 3("互換性"): 80×25 テキストモードのみに影響。
テスト用レジスタ (0x20
)
0x20- 製造上のテスト用モードレジスタである。
- ビット定義:
| ビット | 機能 | 備考 |
|---|---|---|
| 7 | 14.318MHz オートナレートクロックモード | 未確認 |
| 6 | VCK ピンオプショナルモード | 通常は VCKIN をそのまま VCK に接続 |
| 5 | スピードアップモード:不明 | |
| 4 | スピードアップモード:カーソル位置高カウンター | |
| 3 | スピードアップモード:カーソル位置低/文字カウンター | |
| 2 | スピードアップモード:垂直合計調整カウンター | |
| 1 | スピードアップモード:垂直カウンター | |
| 0 | スピードアップモード:水平カウンター |
- カウンタースピードアップモードの仕組み:
- 各カウンターの上位 4 ビットならびに下位 4 ビットの双方にクロックシグナルを注入するため、カウンタが素早くカウントダウンする。
- これはチップテスタにおける工場出荷時テストを助けるための機能である。
72X8205(ビデオフォーマッタ用)に関する注記
拡張モードレジスタ 0x1A
0x1A- ドキュメントされていないビットが 2 つ存在する:
| ビット | 推測される機能 |
|---|---|
| 1 | 不明だが、他の解像度であっても256 色モードを強制する可能性あり。 |
| 0 | 不明だが、全体のディスプレイにボーダー色を適用させる可能性がある。 |
製造用テストレジスタ
アクセス手順:レジスタ
0x19 にアドレスを読み込み、その後レジスタ 0x18 を読み取るか書き込む。
| アドレス | レジスタ種類 | 機能詳細 |
|---|---|---|
| 0 | - | 実装されていない |
| 1 | ロンリード (R/W) | RAMDAC へ送信されるデータの最新内容 (P[7:0] ピン) を保持。 |
| 2 | ロンリード (R/W) | VRAM から受信されるデータの最新内容 (CP[7:0] ピン) を保持。 |
| 3 | ロンリード (R/W) | フォーマッティングロジックから得られる未知の 16 色モードデータを保持。 |
| 4 | ライトオンリー (W/O) | 次のビット機能を実装。 |
レジスタ 0x18
のビット機能(アドレス 4 用)
0x18| ビット | 機能 | 動作詳細 |
|---|---|---|
| 0 | 製造上のハードリセット | リセットピンと同様の効果。「1」書き込みでリセット状態へ移行、「0」書き込みで復帰。 |
| 1 | 出力無効化 | 「1」書き込みで RAMDAC への出力を含む多数の出力を無効化。 |
リバースエンジニアリングプロセスに関する情報
画像スケーリングと保存
- 元データ:
の画像は 21808×21778 から 10904×10889 へスケーリングされた。72x8300 - 保存形式: JPG ファイル(圧縮率 85%、DPI 48)で出力し、スケーリング係数 0.103170 を用いて KiCAD に読み込んだ。
- この設定により、KiCAD ユニット上で BC 間のスペースを「3mm」として得た。
ライブラリ作成とフットプリント
- 基本セルタイプ: タイプごとにライブラリフットプリントを作成し、シームレス記号と関連付け。
- パッド配置: すべてのパッドを中央に配置したため、元々ミラー画像である多くの BC でフットPRINT 自体を回転させることが可能となった。
構造的特徴と配線ルール
-
金属層: ゲートアレイは2 層の金属を使用。層間接続は以下の数パターンに限られる:
- メタル 1 からメタル 2
- メタル 2 からポリシリコン(ゲート)
- メタル 2 から拡散領域
-
電源・接地配置:
- 各カラムで、メタル 2 に並列して配置された 2 本の導線が VCC(右側)と GND(左側)を運ぶ。
- 結果として、BC 内の左側の 2 つのトランジスタは NMOSであり、右側の 2 つは PMOSである。
- BC 内では 2 つのトランジスタが 1 つのゲートを共有し、それぞれのゲートには 3 つの接続パッドを持つ。
- コンタクトは、共有チャネル結合部または孤立チャnel 結合部の拡散領域へ VCC/GND を接続するためのものとなる。
-
シグナル配線:
- 外部シグナルの入出:通常メタル 1でセル全体を横断する水平なトレースを使用。
- ロジックゲート内部配線:一般的にメタル 2上で行われる。
- 描画の制限: メタル 2 上の縦方向並列導線による電源・接地に加え、もう一组のメタル 1 上の水平導線も電源と接地を運ぶが、リバースエンジニアリングレイアウトではこれらのシグナルラインではない上に配置されたトレースは描画されていない。
ネットリスト生成フロー
- テーザ(トレース)は、フットプリントのパッドから出発し、背後の金属に沿って進み、与えられたネット名を持つすべての他の接続パッドに結び付けられる。
- その後、通常の KiCAD プロセスとは逆にスキーマ図へ逆方向に追跡される。
今後の計画
KiCAD のネットリストからVerilog コードを自動生成する手法の探求を目指す。