FreeDOS 1.3をDOSBOX上で動かそう ( ブートエラーを解消する )


前回は、Linux上のQEMUにて、FreeDOS 1.3をインストール、日本語環境構築まで実行してみました。

今回は、先にインストールしたFreeDOSを、DOSBOX上で動かしてみます。
QEMUは、WindowsAndroidにもポーティングはされていますが、動作が重く快適な環境とは言えません。そこで、DOSBOXをコンテナのように使用、その上でFreeDOSを起動させ、LinuxだけではなくWindowsやAndroid上でも軽快に動かそう、というわけです。また、ゲームを動かしたい場合、DOSBOXにサウンド処理などを任せておくと設定が楽になるでしょう。


(1) FreeDOSのディスクイメージをマウントしてみる

DOSBOXは、ここからダウンロードし、インストールしておいてください。DOSBOXにはimgmountという機能があるので、これを利用して先にインストールしたFreeDOS環境をブートしてみます。

早速やってみましょう。
まずは、環境設定を行います。DOSBOXの設定ファイル(dosbox-{version}.confという形式になっています)は、このディレクトリにありますので、これを編集し実行していきます。

FreeDOSをマウントするために、上記設定ファイル最後尾にある[autoexec]セクションに下記を追加します。今回は、/active/freedosというディレクトリに、FreeDOSインストールディスクfd13.imgを配置しています。

[autoexec]  
# Lines in this section will be run at startup.  
# You can put your MOUNT lines here.  
imgmount c /active/freedos/fd13.img -size 512,63,16,260  
boot -l c  

imgmountでは、サイズを指定しなければいけませんが、-size 512,63,16,Xのような形式になります。Xは、イメージファイルのメガバイト数に、2.03125をかけた数字になるようです。fd13.imgの容量は128Mですので、Xは260となります。詳細はこちらを参照のこと

さて、DOSBOXを起動してみると...

なんと、ブートしてくれません。

read error」と表示されてしまいました。
しかし、このイメージファイルは、FDISKで内容が確認できますし、LinuxでもMountできましたから、ディスクが壊れているわけではありません。MBR部(最初の512バイト)のDUMPも見ましたが、パーティションテーブルとブートシグニチャー(55AA)もちゃんとセットされています。

DOSBOX-Xでは、ブートできる..

思い立って、DOSBOXの派生であるDOSBOX-Xをインストールしてみました。同一の設定で起動したところ、こちらはなんと問題なくブートしてくれたのです。

以上から、

「DOSBOXはFreeDOSのMBR内にあるブートストラップが気に入らないらしい」

という仮説が導かれました。


(2) PC DOS6.3で、MBRを書き換えてみる

 次のステップとして上の仮説を検証してみましょう。

ここでは、PC DOS6.3を使ってみます。なぜ、PC DOSを持ち出したのかと言いますと、随分前になりますが、DOSBOX上でPC DOS3をインストールした経験があり、問題なくブートしてくれた実績があるからです。

まずは、DOSBOX.confを下記のように書き換え、PC DOS6.3のFDD 1枚めをイメージファイル化したdos63_1.imgでブートします。

[autoexec]  
imgmount c /active/freedos/fd13.img -size 512,63,16,260  
boot /active/freedos/dos63_1.img  

上記画面となるので、ここでF3を押し、インストールは終了します。
A>プロンプト になるので、下記のコマンドでMBRを書き換えてしまいます。

A>FDISK /MBR  

以上で、PC DOSの役割はおしまい。終了して、DOSBOX.confを再度下記のように書き換えて、FreeDOSを起動します。

[autoexec]  
imgmount c /active/freedos/fd13.img -size 512,63,16,260  
boot -l c  

今回は、FreeDOS 1.3が問題なく、立ち上がりました。

確認のため、FreeDOSのFDISKでMBRを書き換えてみましょう

C>FDISK /MBR  

再起動すると、当然ですが立ち上がらなくなりました。

これにて、先の仮説「DOSBOXはFreeDOSのMBR内にあるブートストラップが気に入らないらしい」ということが検証されたことになります。


(3) 代替FDISKの利用

 さすがに、PC DOSのFDDイメージでMBRを書き換えるというのは一般的でないので、FDISKの代替品を探してみました。見つけたのが、FDSKというツールです。実は、前回紹介した自動スクリプトの中に、このFDSKをすでに組み込んであります。

これを使用して、FreeDOSのブートストラップを書き換えましょう。
再度QEMUでFreeDOSをブートし、FDSKを起動します。

C>FDSK  

起動すると下記の画面になるので、”機能5”を選択します。

以上で、DOSBOXにおけるFreeDOSロード問題は解消しました。


(4) Androidで動かす

 「こんなときは、自宅で鉄道旅行でもプランニングしよう(3)(Galaxy Tab ( SC-03G ) でも MARS を動かす)」で紹介したMagic DOSBOX上で、今回インストールしたFreeDOS 1.3を動かしてみましょう。

Magic DOSBOXのインストールなどは上記を参照してください。変更点は、[autoexec]セクションを下記のように設定するだけです。

[autoexec]  
imgmount c /storage/emulated/0/dosbox/fd13.img -size 512,63,16,260  
boot -l c  

Galaxy SC-03G(Android6)を使用、FreeDOSの英語モードでTurbo Pascal 5.5を動かしてみました。

このバージョンはフリーになっていたはずですが、現在のダウンロード先がわかりません。動作確認と認識ください。


(5) FreeDOSでのビデオモード

 DOSのディスプレイ入出力は、BIOSINT 10Hで行うのが一般的ですが、FreeDOSで感心したのは、モード 73H(エミュレート拡張CGAテキスト・モード)をちゃんとサポートしていることです。
「DOS/V BIOS インターフェース技術解説編」では、

モード73H(エミュレート拡張CGAテキスト・モード)は、以下の文字属性を指定することができます。属性バイトの1と2は「文字ブロックの読み取り(INT10H,AX=131xH)」と「文字ブロックの書き込み(INT10H, AX=132xH)」の機能により読み出しおよび書き込みを行うことができます。この2つの機能を使用しない場合は、このモードは、モード03Hと同じ働きをすることになります。

とあります。モード03Hとの違いは、属性を3バイト指定すること。属性バイト0は03Hと同様なのですが、属性バイト1には、下記が指定できます。

7 下線  
6 反転用に予約済み(0に設定)  
5 明滅用に予約済み(0に設定)  
4 透過属性用に予約済み(0に設定)  
3 罫線  
2 横罫線  
1 予約済み(0に設定)  
0 予約済み(0に設定)  

そう、ビット3と2を指定すると、テキストモードで罫線が引けるのです。事実上「罫線好きの日本人向け専用」ではないかと思われるこの機能、当時(1990年代前半)結構使用していたので、ちゃんとサポートされているのが妙に嬉しかったりします。DOSBOXだけでは動きません。

自宅には、IBMの「PS/V 2405-YVB」というのマシン(1992年製)があるのですが、そのうち、FreeDOSを実機で動かしたくなるかもしれません。