Image: 260201 5550エミュ製作 [56]日本語DOSの起動に成功!

キーボードコントローラーとディスケットコントローラー (FDC) を実装して、とりあえずDOSが起動するようになった。漢字が豆腐になるなど表示が変だけど、これは意図したとおり。これが表示された瞬間は大喜びだった。

一番の山場はやはりブートローダーだった。IBM 5550のFDCのI/Oアドレス (3F4h, 3F5h) はIBM PCと同じだが、コントロールポート (3E0h) のアドレスとビットの意味が違う。DMAコントローラーのバンクアドレスを指定するI/Oポートの並びもIBM PCと違った。ディスクリードのデータが正しい位置に読み込まれないから、これに気付くまでIPLの解析に時間が掛かった。

IBM 5550用日本語DOSのディスケットのブートセクター(正確には、IBM PCと違ってブートローダーが含まれていないので「予約セクター」と呼ぶべき)がIBM PCと違うことに気付いた。しかも、全く構造の異なる2種類が存在する。3.5インチ2DD機用の新タイプと、5.25インチ2DD機用の旧タイプが存在する。私が持っているIPL ROMは初期モデルのようで、旧タイプにしか対応していないようだった。しかし、持っているDOSは後ろの方のバージョンで、新タイプのフォーマットしかない。これを旧タイプのフォーマットに手動で書き換える必要があった。このためにDOSのSYSコマンドを解析した。

旧タイプのフォーマットはBPB以外のデータがIBM PC用DOSのブートセクターと異なる(後にFORMATコマンドで確認したところ、BPBも記録されないことが判明)。しかし、FATの位置は同じだから、生のDOSではFATの先頭に書かれているメディアディスクリプタさえ読めればディスクフォーマットを判別できることから、他機種とのデータ交換では問題にならない。(Windowsでは無効なフォーマットとして扱われ、エラーになる。)

IPLからブートするために予約セクターに必要な情報は次の通り。

Addr:
0Ah: Sig (D7h)
18h-24h: Sig 12 bytes (C9 C2 D4 F5 F5 F5 F0 40 40 40 40 40) 'IBM5550     ' in EBCDIC
49h: ? (48h = 9 sectors / track, 40h = 8 sectors / track) (0100 1000 or 0100 0000)
108: (000Eh) -> bp+14 = bx+2: Absolute sector index for boot loading table
10A: SP - (0080h) Data size -> bp+18 = bx+6: DMA offset for data read

ここにはブートロードに必要な情報を含むテーブルの位置が記録されている。このテーブルはIBMBIO.COMファイルの先頭にあり、ロードするデータの先頭クラスター番号、サイズ、ロード先のセグメントアドレス、オフセットアドレスなどがある。IPLはこの情報を読んで、中間ローダーやDOSのBIOSをディスクからメモリーにロードする。

?     ClusR  SizeR  SegE   Fl?   OffsE       OffR
40 00 00 00  00 00  00 00  00 00 00 1C 05 00 00 00
0E 02 10 00  00 02  00 20  A0 00 00 00 00 00 00 00
0E 02 6F 00  00 34  00 11  00 00 00 00 00 00 00 00
0E 02 11 00  00 BC  40 05  13 00 00 00 00 00 00 00
0F E0 0E 00  F2 01  00 30  B2 00 F0 00 00 00 00 00
0F E2 0E 00  F2 01  00 10  52 00 08 01 00 00 00 00

あとはDOSを使いながら表示の修正を行っていくことになるだろう。エミュ製作は今スタートをきったばかりだ。


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

管理人 : Akamaki (akm)

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

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

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