Image: 240704 PS/55エミュ製作 [34]VGAのモノクロモニター判別方法を調べる

前回からもう1週間か。つい昨日までDOSすら起動できなかった。まず、日本語DOS用のスキャンコードの実装は若干手間が掛かるくらいで、難しいところはなかった。

次に、PS/2ではメモリアドレスE0000-FFFFFhまでの128KBがBIOSとして使用されているのだが、PS/55のディスプレイ・アダプターはE0000-E0FFFhの1KBをテキスト画面のバッファーとして使用する。このために、PS/55のシステムボードには、このアドレス空間をBIOS ROMから切り離せる仕組みが特別に用意されている。ただ、PCemの既存のコードだとメモリマップの管理上、最小4KB単位でしか切り離せない。E2000hあたりにはディスクBIOSがあるらしく、E0000-E3FFFhを切り離すとブートできなくなる。これに気付いてコードを修正するのに時間が掛かった。

これで、画面は表示できないものの、DOSは正常に起動するようになった。しかし、一番大変なのはやっぱり画面表示部分だ。やっと上のように表示できるようになったのがつい先ほどのこと。前に見覚えがある白いDOS画面が表示された。この時と同様にI/Oポートの返値を変えてみたが解決しない。

そもそも、VGAではカラーモニターとモノクロモニターをどうやって判別しているのだろう。

モニターの判別は、1990年代にディスプレイメーカーの業界団体 (VESA) によってDDC規格が策定された後の製品であれば、モニターからEDIDというデータを取得することによってメーカーや機種を含む様々な情報を得ることができる。それ以前では、空いている信号ピンに割り当てられたIDピンでモニター固有の番号を取得する方法があることは知っていたが、カラーモニターとモノクロモニターの判別はそれとは別の方法があった。

PS/2のHardware Technical Referenceによれば、VGAのレジスターの一つであるInput Status Register 0 (I/O 3C2h) のビット4で「このビットはBIOSによって、接続されたディスプレイの種類の判別に使われる。」と記載されている。

Input Status Register  (Hex 03C2 Read)

Bit | Function
----|-----------------
7   | CRT Interrupt
6,5 | Reserved
4   | Switch Sense Bit
3-0 | Reserved

Bit 4: This bit is used by BIOS in determining the type of display attached.

I/Oポートの読み出しビットで実装されているということは、ハードウェア的な信号で検出する手段が用意されているのだろうか。

PS/2の回路図が落ちていたのでそれを見たところ、VGA端子のうちR・G・Bの3つのピンそれぞれに180Ωの抵抗を通してLM339(コンパレーター)のマイナス側へ入力され、LM339の出力はVGAチップに+5V/10kΩのプルアップ抵抗を付けて入力されていることが分かった。つまり、R・G・Bのうち1つでも一定電圧以上、つまり未接続の端子があれば、LM339の出力はローレベルになり、VGAチップのピン入力もローになる。このピン入力の状態がSwitch Sense Bitなのではないか。

ここまでハード寄りの詳しい話はウェブを調べても出てこないが、VOGONSでこれに絡む話が見つかったので、あながち的外れではない。

Investigating old ISA VGA cards \ VOGONS

ただ、PS/55ディスプレイ・アダプターもこれと同じかどうかは怪しいんだよなぁ。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!