FreeDOS 1.3をDOSBOX上で動かそう ( ブートエラーを解消する )
前回は、Linux上のQEMUにて、FreeDOS 1.3をインストール、日本語環境構築まで実行してみました。
今回は、先にインストールしたFreeDOSを、DOSBOX上で動かしてみます。
QEMUは、WindowsやAndroidにもポーティングはされていますが、動作が重く快適な環境とは言えません。そこで、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のディスプレイ入出力は、BIOSのINT 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を実機で動かしたくなるかもしれません。