ソフトな忘却力(45) FreeDOS、その伝統はMS-DOS超え、進化も続くOS

Joseph Halfmoon

別シリーズで30年前のマニュアルを発掘。他でもありません、16ビットモードのx86用のアセンブラを書ける環境、を整備するのに懐かしのMS-DOSを復活させるしかないな、と思ったからです。しかし、いろいろ考えて「MS-DOS互換」のFreeDOSを使うことにしました。その伝統はMS-DOS越え、今も進化し続けているっと。

※「 ソフトな忘却力」投稿順 Index はこちら

※実機動作確認には以下を使用しております。

    •  Raspberry Pi 4 model B、Cortex-A72コア(ARMv8-A)
    •  Raspberry Pi OS (64bit) bullseye
x86の16ビットモード

ご存じの通り多くのパソコンやサーバー機にはx86系のCPUが使われています。まあ、このごろ評判悪いインテルか、みんな大好きAMD製ね、個人の感想デス。そしてx86にはざっくり言ってしまうと、

    1. 16ビットモード
    2. 32ビットモード
    3. 64ビットモード

の3つのモードがあり「切り替えて」使えるようになってます。Windows系OSにせよ、Linux系OSにせよ、最近のOSであれば、ほぼ間違いなく64ビットモードを使用しているのではないかと思われます。64ビットモード下のOS上でも32ビットのアプリケーションプログラムを走らせるのには何の支障もありません。それどころか一つのプログラムの中で64ビットモード命令と32モードビット命令を混在使用することも可能。なお、32ビットモードでも64ビットモードでも、16ビット、8ビットといったデータ長はサポートされているので16ビットのデータを扱うために「16ビットモード」に切り替える必要はまったく無いです。

つまり積極的に「16ビットモード」を使う必然性ありません。それどころかx86の場合

    • 32ビットモードのOSで16ビットモードのアプリを走らせるのはOK
    • 64ビットモードのOSで32ビットモードのアプリを走らせるのはOKだけれども16ビットモードのアプリはNG

ということになります。ぶちゃけ 16/32の切り替えか、32/64の切り替えかどちらかを選べということです。

今回、別件シリーズでArmのアセンブラ命令の練習がひと段落、お次はついにx86と考えました。x86には上述のように16、32、64と3つの世界が折り重なっているので、順番からして最初は16ビット世界だろ~と。しかし、Windows上でも、Linux上でも普段使っている64ビットOS上では16ビットのコードは走らん、のです。メンドクセー。

x86の16ビットモードはエミュレータで

そこで眠っている古代のMS-DOS機の復活に挑もうかとも思いましたが、この暑いさなかにハードのレストアめんどいです。そこで以下のように考えました。

    1. x86の16ビット命令はCPUエミュレータで実行する
    2. CPUエミュレータ上にDOSを載せ、その上で「セルフ」アセンブルする

Windows上やLinux上で、MS-DOSをエミュレートし「古い16ビット」のプログラムを走らせることができるソフトウエアは沢山の種類があります。実際、その中の数種類は使ったこともあるのです。しかし、多くはレトロゲームなどアプリを走らせることが主眼。今回はアセンブラ目的なので「機械語命令の動作がホンモノになるべく近い」エミュレータを使いて~ということで

QEMU

を使用することにいたしました。命令セット・エミュレータとしては定番中の定番。QEMU自体は Linux、macOS、Windows上で実行可能ですが、今回はLinux、それもArmホストのRaspberry Pi 4機のRaspberry OS上で動作させることにいたしました。今までArmのアセンブラ命令の練習をラズパイ上で実行していたので同じマシンに載せた、というだけです。なお、QEMU自体は、システム・レベルまでエミュレーション可能な構成と、ユーザ命令のみエミュレーションできる構成の2レベルあるのですが、今回は「セルフ開発」のためOSから搭載するのでシステムの方を選択です。QEMU自体のインストールは一撃

sudo apt install qemu-system-x86

インストールしたQEMUのバージョンが以下に。

qemu000

FreeDOS

さて次はQEMU上で走らせる「16ビットx86用のOS」の入手とインストールです。御本家マイクロソフト社がMS-DOSを無償公開してくれていることは知っていたので、「昔懐かしい」「正統」MS-DOSにするか?と考えたのです。しかし若干の調査の結果、MS-DOS互換の

FreeDOS

を使わせていただくことにいたしました。マイクロソフト社がMS-DOSの終息を公表した1990年代中盤、その発表に「切れた?」人たちが集って立ち上げたプロジェクトらしいです。「公開されている範囲」でMS-DOS互換というだけでなく、開発はいまだに続いていて当時のMS-DOSがサポートしていなかった部分にまで大きく踏み出しているみたいです。そしてフリーでオープンソース。

MS-DOSの登場は1981年、そして「将来的な終息」が発表されたのが1994年、最終バージョンが2000年ということのようなので、延々と使っていた記憶のあるMS-DOSは、実は高々20年ほどの製品でしかありません。それに比べて1995年だか1996年だかに始まっているFreeDOSの歴史は約30年。OS最新版は2022年版ですが、今年も関連ツールの開発は続いているみたいなので、MS-DOSの歴史をすでに超えている「活きた」プロジェクトです。こいつは使ってみて~です。

FreeDOSのインストールイメージ(CD-ROM、ISO形式)FD13-LiveCD.zip は以下からダウンロードすることができます。

https://www.freedos.org/download/

CD-ROMに焼いてCD-ROMドライブのついたハード実機で使うこともできれば、QEMUのようなエミュレータでマウントすることもできます。何気にCD-ROMからのブートに対応してます。朧げな記憶ではご本家MS-DOSではできなかったような。知らんけど。

今回はCD-ROMイメージからQEMUにマウントされた「仮想のハードディスク」イメージにFreeDOSをインストールして走らせることにいたします。その辺の手順は以下の wiki に書かれております。

https://en.wikibooks.org/wiki/QEMU/FreeDOS

ハードディスクのイメージファイルの生成は以下です。

qemu-img create -f raw freedos.img 100M

実際にCD-ROM(LiveCD)のイメージをマウントしてのブートは以下です。

qemu-system-x86_64 -rtc base=localtime -hda freedos.img -cdrom FD13LIVE.iso -boot d

ブートすると以下のような画面が表示されます。FreeDOSinstall0

そのままリターンするとCD-ROMからFreeDOSがスタートしてしまいます。Iキーを押してハードディスクにインストールを選択します。初回時は、HDDイメージ内の「パーティション」が切ってない、といってパーティションを切っていいかどうか聞かれます。お願いするとリブートされます。

2回目のブートでは、今度はHDDがフォーマットされてないと言われます。この辺、本物のハード上でサラからインストールしている感じっすね。フォーマットが成功するとどのような構成でFreeDOSをインストールするか聞かれます。ぶちゃけ、

    • FreeDOS本体だけでよいか、アプリまで含めるか
    • 上記の選択でさらにソースを含めるか否か

です。最小構成で20Mバイトくらいのハードディスク容量が必用で、LiveCD内のアプリを含めると300Mちかくなるみたい。そのソースまで含めると400M近く?と大きくなります。必要に応じて最初に生成するディスク・イメージ・ファイルの容量を調整すると。インストール開始すると以下のような画面があらわれます。結構時間かかります。昔のMS-DOSマシンで実行しているような時間感覚です。x86命令をエミュレーションしているArmの上で全てが実行されているのでそんなもんだろな。。。FreeDOSinstall1

そして立ち上がると以下のような「DOSプロンプト」が現れますです。FreeDOSprompt

ここまでくると、フツーにDOSよ。

ソフトな忘却力(44) Smalltalk、Pharo、インスタンスのdelete へ戻る

ソフトな忘却力(46) FreeDOS、使い方のあれこれ、VNC or SSH へ進む