Image: 240629 PS/55エミュ製作 [33]リファレンスディスケットの起動に成功

PCemで2HDフォーマットのフロッピーからブートすると途中でDOSのロードが止まる問題の続き。

PCemはDOSBoxほどのデバッグ機能がないから、自分で割り込み発生時のレジスタをダンプしたり、特定アドレス上のメモリーへの変更を検出するコードを書かなければならなかった。BIOSを逆アセンブルしながらPS/2の色んなモデルのTechnical Referenceやフロッピーディスクコントローラー (FDC) のデータシートを見比べること約1週間弱。PS/2とPS/55で逆アセンブルしたコードを比較していたら、ついに原因が分かった。

原因はBIOS ROM上でかなり最初の方に実行されるFDCの初期化プログラムで、PS/2には存在しない(今まで読んだどのドキュメントにも書かれていない)I/Oポートを操作してFIFOバッファーをテストしていたことが分かった。初期化プログラムはI/Oポート3F3hのビット2に1をセットして、I/Oポート3F5hに7から0まで8バイトを書いた後、同じI/Oポート3F5hから1バイトずつ読んで7から0まで一致することをテストしていた。

I/Oポート3F3hはIBM PC互換機ではあまり使用例がない。PS/2の1990年版Technical Referenceによれば、Type 2 Controller(2EDをサポートするディスケット・ドライブ・コントローラー)で使われているが、今回のPS/55とは違う意味が割り当てられている。

Drive Status Register (Hex 03F3 Read)

Bit | Function
----|-----------------
7,6 | Media Type 1,0
5,4 | Drive Type 1,0
3,2 | Start-UP Map 1,0
1,0 | Reserved

Bit 3 | Bit 2 | Start-Up Drive
------|-------|---------------
  0   |   0   | Bay A
  0   |   1   | Second Drive
  1   |   0   | Third Drive
  1   |   1   | Reserved

FDCは実機ではNEC μPD72065Lが使われている。データシートにはこのFDCがFIFOバッファーを持っているという情報はないので、システムボード上の他のチップ(周辺回路)に独自で実装されているのか?モデル5550-S/T/Vの技術解説書にはディスケット・コントローラーの説明はないので分からない。

Image: NEC μPD72065L

PCemでは最大16バイトのFIFOバッファーを持つIntel 82077をエミュレートしているので、このコードを流用すれば実装はすぐにできる。

Image: リファレンスディスケット 162 装置の構成情報

やったー!これをやって、ようやくリファレンスディスケットから起動できるようになった!このプログラムはDOS/Vベースなので、これでDOS/V本体も動作するということが分かる。

まだ日本語キーボードもディスプレイアダプターも実装していない。やっとこれでスタート地点に立った。あとはDOSVAXのコードをPCemに移植するだけだが、先の道のりやゴールは見えているとはいえ、根本から構造が違うコードを移植するとなると長く険しい道だろうな。


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

管理人 : Akamaki (akm)

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

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

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