前回ほぼ30年の歴史のある「活きている」MS-DOS互換OS、FreeDOSを、定番のCPUエミュレータQEMU上にインストールしてみました。FreeDOS自体はx86プロセッサ用ですが、QEMU自体はラズパイ4機のLinux環境で動いているので実プロセッサはArmです。階層は深いがx86の16ビットコードが走るっと。
※実機動作確認には以下を使用しております。
FreeDOSのブート
Linux(Raspberry Pi OS)上にQEMUをインストール済。前回作成したFreeDOSのHDDイメージファイルは freedos.img に格納されてます。以下でFreeDOSを立ち上げることができます。
$ qemu-system-x86_64 -rtc base=localtime -hda freedos.img
上記の場合、Raspberry Pi OSのデスクトップ画面上に「QEMU」のウインドウ(昔懐かしいVGA画面にテキスト表示しているイメージ)が開き、その中でFreeDOSが走り始めます。プロンプトに行き着く前に以下の2段階の処理を通過するのはMS-DOSと同様です。
-
- FDCONFIG.SYS
- FDAUTO.BAT
MS-DOSではCONFIG.SYSとAUTOEXEC.BATというお名前でしたが、FreeDOSでは頭にFDをつけて上記のようなファイル名になっています。まずFDCONFIG.SYSで組み込むドライバ類などを指定し、その処理を行ったのちバッチファイルFDAUTO.BATを実行して環境などユーザのご所望通りに整えます。
インストール後のデフォルト設定では、FDCONFIG.SYSからは以下のような選択肢が表示されます。昔、MS-DOSで、EMM386とか、XMMとか、HIMEMとか8086の1Mバイトの制約を超えるための各種のドライバ、UMBとかDOSイクステンダとかに慣れ親しんだ人(多分、私と同じ年寄だな)であれば「ちょっとファイル名違うケド」分かる気がするのではないかと思います。でも最初から「フラットな空間」になれている「今時の若者」にはサッパリかもしれませぬなあ。
基本的な考え方は「昔と変わらない」ですが、FreeDOSのメモリ管理のドライバ群はMS-DOS時代より強力かつ機能も豊富みたいです。後でJEMMEXとかJEMM386などいろいろ調査してみたいと思いますが、とりあえず「more compatible」というお言葉につられて2番選択で立ち上げてます。
ブートのついでにシャットダウンとリセットについてメモっておきます。プロンプトに以下を打ち込むことでシャットダウン(QEMU上でマウントしているディスクイメージをクローズして、Linuxのプロンプトに戻る)が可能です。
shutdown
Linux上でFreeDOSのディスクイメージを操作(Linuxでもマウント可能)する場合には、かならずshutdownして閉じた方が良いと思います。なお、shutdownコマンドはエイリアスです。実体は「fdapm poweroff」というコマンドみたいです。apmといえば、初期のDOSにはなかったパワーマネジメント機能で、そのFreeDOS版がfdapmみたいです。
またプロンプトに対して reset と入力すると、システムリセットがかかりFreeDOSは再起動します。これまた「fdisk /reboot」のエイリアスみたいです。Reboot時には以下のような画面が見えると思います。
FreeDOSの諸機能への入口
FreeDOSには立派な help 機能があり、所定のフォーマットのHELPファイルが用意されているコマンドについては
> help チョメチョメ
などと入力することで使い方を表示させることができます。結構充実してます。太古の時代のMS-DOSのコマンドなんか忘れたという人もバッチリ?
また、初期のMS-DOSの標準エディタといえば、
EDLIN
でした。FreeDOSにも「互換性」のためEDLINが含まれてます。でも今更EDLINなど使えないという人が多そう(私もそうですが)なためか、以下のスクリーンエディタが付属してます。
EDIT
多分、末期のMS-DOSに同梱されていた?スクリーンエディタ相当のものです。なお、FreeDOSのインストールディスク、ボーナスディスクにはそれ以外の各種エディタが多数含まれているのでお好みでインストールすることも可能。
なお、インストールディスクの以下のパスには複数の開発ツールが含まれてます。こんな感じ。
このようなディレクトリにはINDEX.LSTなるファイルが格納されているので、それを眺めるとZIPファイルの中身が分かります。
上記みると「シンプルな」Cコンパイラに加えて、Open Watcom C/C++コンパイラ、Pascalコンパイラ、そしてNASMアセンブラなどが格納されてます。
ボーナスディスクを覗いてみたら、上記以外にBASICインタープリタ、コンパイラを含む各種処理系がごちゃまんと含まれてました。お楽しみ。
上記のように各種パッケージはZIPファイルにまとめられてます。デフォルトで
-
- zip
- unzip
コマンドが含まれてます。また、ZIP化されたパッケージをインストールするための fdinst というプログラムも含まれているので使えそうです(まだ試してないけど。)
VNC、SSH
さてここまでのところは、ラズパイ4機をVNC接続し、ラズパイ4のRaspberry OSのデスクトップ画面をWindows11機のモニタ上に映して作業してました。QEMU画面はデスクトップ上の一つのウインドウとして現れるので分かり易いです。ただし問題が一つ
FreeDOSのキーボード選択に日本語キーボードの選択がない
です。それでUS Englishキーボードに設定して使ってます。VNC接続だと、Windowsに接続している手元の日本語キーボードでもUS English配列のつもりでキーを押さないと記号などが入力できませぬ。「確かこの辺だったよな~」という感じで、\とか : とか | とかを探して入力しました。まあ昔取ったなんとかですが、メンドイです。
QEMUを起動する qemu-system-x86_64 コマンドに -curses というオプションを加えると、QEMUは独立のGUIウインドウを開かず、標準入出力を使って動作してくれるようです。
以下では、Windows11の「ターミナル」内から、ターゲット機ラズパイ4へssh接続した後、-curses オプション付きでQEMU(とその上のFreeDOS)を起動してみたものです。
普通にWindows11のターミナル内にFreeDOSのコンソールが見えてます。そしてsshを介する方法だと、文字コード変換の処理はFreeDOSへ行く前に終わっているので、日本語キーボード配列そのままで記号も入力できます。やったね。
なお、EDITとかHELPとか、スクリーン制御するコマンドもSSH環境で問題なく動作してます。流石にVGAのビットマップを直接操作するようなゲームはダメだろうけれど。アセンブラやデバッガなら何の問題もなさそう。
QEMUはどんなCPUに見えてる?
FreeDOSのCPUSTATというコマンドを使って、FreeDOSから見えるCPU(QEMUが作り出したエミレーションの幻影)がどのようなのか確認してみました。CPUSTATの長大な出力の末尾が以下に。
SSE3ってことはPentium 4だね。結構QEMU頑張っているんじゃないかい。でも、ちゃんとQEMU Virtual CPU version 2.5+と見抜かれている。FreeDOSも分かってるのね。。。
FreeDOSの底力の一端
debugは最初期のMS-DOSから含まれているデバッガです。その「互換」デバッガがFreeDOSにも含まれてます。しかし、
上記のようにすると、80386以降の32ビットレジスタが見えます。勿論、下のように8086の16ビットレジスタ表示に戻すことも可能です。debugに似たdebugxというプロテクト・モード対応のデバッガまで含まれとるようです。見た目は古いDOSにクリソツのFreeDOSは何気に魔改造?