最近、幸か不幸の巡り合わせか、IBM 5550のシステムROMが見つかってしまったので、まだ諦め切れていない私はこれを解析していました。私が一番気になっているブートストラップの謎(ディスクI/O周り)については未だ分からない点が多いが、それ以外ではそこそこの収穫があったと思う。
ここではIBM 5550のハードウェア仕様はモデル5551-G06の情報を参考にしているため、初期モデル (A, B, C)と異なる可能性がある。
ハードウェアの違い
| IBM 5550 | IBM 5160 | |
|---|---|---|
| ブランド名 | マルチステーション5550 | Personal Computer XT |
| 発表時期 | 1983年3月 | 1983年3月 |
| CPU | 8086 8MHz | 8088 4.77MHz |
| ROM | 16KB | 40KB |
| RAM | 256KB | 128KB |
| FDD | 1-3 x 2DD 720KB | 0-2 x 2D 360KB |
| FDC | μPD765A | μPD765A |
| キーボードI/O | XTプロトコル互換? | XTプロトコル |
| ビデオ出力 | 内蔵 | オプションの増設アダプター |
| CRTC | HD46505 | HD46505 (MDA/CGA) |
| フォントROM | なし(後にオプション) | 8KB (MDA/CGA) |
| テキスト画面解像度 | 1066 x 725(5551-B型) | 720 x 350 (MDA) |
| グラフ画面解像度 | 1024 x 768(5551-B型) | 640 x 200 (CGA) |
IBM 5550はIBM PCとアーキテクチャーが違うと言われているが、詳細を見ると、ハードウェア周りでは類似点が多い。割り込みコントローラーやDMAコントローラーなどの主要部分はI/Oポートも同じ。大きな違いは、IBM 5550はROMにBASICやBIOSを持たないことと、ディスプレイ周りはCRTコントローラーに日立HD46505(モトローラ6845として知られる)を使っていること以外に共通点がない。キーボード(5556-001など)は同じプロトコルを使用しているとみられるが、5576キーボードのスキャンコードセット8Ahと同じだとすれば、スキャンコードに互換性がない。
メモリーマップ
| アドレス | IBM 5550 | IBM 5160 |
|---|---|---|
| A0000 | 全角フォント/APAバッファー | - |
| B0000 | ^ | MDA |
| B4000 | ^ | - |
| B8000 | ^ | CGA |
| BC000 | ^ | - |
| C0000 | - | - |
| C8000 | - | Fixed Disk Control |
| CC000 | - | - |
| D8000 | 半角フォント | - |
| DC000 | - | - |
| E0000 | 属性バッファー | - |
| E1000 | - | - |
| E8000 | ハードディスク・コントロール・ローカル・メモリー | - |
| ? | - | - |
| F0000 | 漢字フォント・カード | System ROM (BIOS/BASIC) |
| ? | - | ^ |
| FC000 | システムROM (IPL) | ^ |
| FFFFF | ^ | ^ |
IPLを解析して分かったことは、IBM 5550はROMにフォントを持たない。例外的に、システムの電源オン時に実行されるBAT (Basic Assurance Test) という自己診断の画面表示用として、16進数(0から9とAからF)のフォントをIPL ROMに持っている。これ以外のフォントはOS(日本語DOSや文書プログラム)のディスクからビデオメモリーにロードされると考えられる。BASICをROMに持たない(日本語DOSのディスクに収録)ため、BIOSもROMに置く必要がなく、ROMにはBATとディスク起動に必要なコードしかない。IPL内でBIOS呼び出しを一切使っていないので、断片的に分かっているメモリーマップとI/Oポートから処理内容を推測するしかなく、ブートストラップの謎は未だに解明できていない。
ディスプレイ・アダプター
IBM 5550のディスプレイ・アダプターは機能的にはPS/55のものとほぼ同じ。アーキテクチャーはPS/55の初代ディスプレイ・アダプターと似ている。
→ 初代ディスプレイ・アダプターの特異なテキストモード [PS/55]
IPL ROMにHD46505用ビデオフォーマットのパラメーターテーブルに1066x725(82桁×25行)の画面モードがあり、紙面上以外で初めてこの画面モードの存在を確認できた。日本語DOSのコードを解析したところでは、漢字フォントカードのI/OポートとROMアドレスが違う。CRTCのI/OポートはIBM 5550ではCGAと同じ位置にある。DOSでのフォントの管理についてはまだ解明できていない部分が多い。
用途不明のI/Oポートがいくつかある。FDCに関連すると考えられる3F3hとか、システム構成情報やテストスイッチ、デバッグLEDに関係していそうなA0h-A2hとか。DOSBoxにエミュレーションを実装するなら、その辺りは誤魔化せそう。86Boxだとそうはいかないから難しい。