240802 PS/55エミュ製作 [41]PS/55のモニターID検出方式
最近、OS/2のDDK (Driver Development Kit)を見つけて、これにディスプレイ・アダプターに関するヒントがワンチャンあればなぁ、でもこれは日本独自仕様だからないだろうな、と思いながら調べていたら、ディスプレイ・アダプターの内部レジスターが少しだけ分かる資料を見つけた。
ファイル名は PHOENIX.INC、説明は ATLAS video adaptor definitions とあり、MASMのプリプロセッサーを使って内部レジスターのインデックスを名前で定義している。もっと早い段階でこの資料を知っていたら、リバースエンジニアリングにそんなに時間を掛けずにすんだのに!
さらに、他のソースファイルによれば、ディスプレイ・アダプターのレジスターから読み取れる構成情報の中に、4ビットのモニターIDが記憶されていることが分かった。いくつかのモニターIDが定義されていたので、レジスターからIDを返すようにして、一つ一つ試してみたら、OS/2でカラー表示できるようになった。
// Monitor ID
#define StarbuckC 0x0A //1010b IBM 8514, 9518 color 1040x768
#define StarbuckM 0x09 //1001b x grayscale
#define Lark_B 0x02 //0010b IBM 9517 color 1040x768
#define Dallas 0x0B //1011b IBM 8515, 9515 color 1040x740 another palette
右のコメントは私が追加した。Starbuckというのは何かのコードネームで、コーヒーのスターバックスとは多分関係ない😆。StarbuckCとStarbuckMでカラーとモノクロが定義されていることから、5574カラー表示装置のIDはIBM 8514と同じなのではないかと推測できる。このことから、技術解説書ではディスプレイ端子の一部のピンでReservedとなっていたところは、実はMonitor IDとして使われている可能性が高いことが分かる。
エミュレーターの開発は大分進んできたが、まだ表示のバグがいくつかあって、これを直すのに時間が掛かるかもしれない。