ソフトな忘却力(48) FreeDOS、Open Watcom C/C++ コンパイラ

Joseph Halfmoon

前回FreeDOSに「強力なx86アセンブラ」NASMをインストールしました。しかし「リンカ不在」につき実行テストは.COM形式のみでした。リンカをゲットすべく今回はOpenWatcomコンパイラ・パッケージをインストールしてみます。パッケージサイズ、結構デカイです。まあ、中身見て納得。これまた超強力なx86環境デス。

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

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

    •  Raspberry Pi 4 model B、Cortex-A72コア(ARMv8-A)
    •  Raspberry Pi OS (64bit) bullseye
    •  QEMU 5.2.0
    •  FreeDOS 1.3
OpenWatcom 1.9

FreeDOSのドキュメントを読んでいると、コンパイラは OpenWatcom C 1.9 推し、アセンブラは NASM 推しで、FreeDOSの関連ツール自体がそれらで書かれていることも多いようです。どうもFreeDOS上で「なんらかの開発」する場合にはOpenWatcom いれておく、というものみたいです。

前回、NASMをインストールして、x86の16ビット、32ビット、64ビットの全モードに対応できるアセンブラなのね~と感動。しかし、NASM自体はアセンブラなので、ELFなどの各種オブジェクト形式をサポートしているものの、実行可能なEXE形式は直接生成できませんでした。前回はしかたないので、NASMで直接生成可能な「ベタな」BIN形式で COMファイルを生成し、Hello worldしてみました。

さて、リンカはどこにある?と調べてみると OpenWatcomパッケージの中にCコンパイラとともにあるようです。なお、OpenWatcomパッケージの中にも「アセンブラ」は含まれているみたいですが。

https://openwatcom.org/

上記ページにはほとんど情報量が無いですが、冒頭に印象的な一文が掲げられていたので引用させていただきます。

Open Watcom is like a mythical bird Phoenix that never dies and rises again from the ashes.

灰の中から復活したのね。。。

前回やったとおりで、パッケージのインストールそのものは簡単です。Dドライブに「LiveCD」のCD-ROMが見えている前提で、以下のコマンドラインでインストールは一発です。

fdinst install d:\PACKAGES\DEVEL\WATCOMC.ZIP

ただし、注意点が一つ。このパッケージはかなり容量を食います。インストール後、消費されたディスク容量を計算したら

124,010,496 バイト

ありました。実は、100Mバイトに設定してあったハードディスクのイメージファイルにOpenWatcomインストールしようとして、途中でエラーになってます。そこで300Mバイトのハードデイスクイメージを再生成してインストールしました。

結構な容量になる理由は以下でないかと。

    • DOSだけでなくWin16、Win32、OS2などの多種環境に対応。ライブラリ、バイナリとも複数の環境向けを含んでいる
    • コンパイラだけでなく、リンカ、デバッガ、IDEなど「統合環境」として使える構成になっている
    • vi(エディタ)やctags(tagsファイル作成)などの、あれば開発に便利なコマンド群まで含んでいる

とりあえず OpenWatcomパッケージをいれておけば、大抵のものは含まれているので、その後、お楽かと。ただしQEMUのようなエミュレーション環境上でインストールするのはかなり時間かかります。昔のDOSマシン上で作業している時間感覚デス。

インストールの末尾が以下に。watcomcInstalled

複数OS環境の使い分け

OpenWatcom は複数のOSに対応しており、DOS上ですらも「DOSイクステンダ」のような1Mバイト以上の空間を使えるソフトウエアを使ったプログラム開発ができる強烈なパッケージです。インストール後のバイナリの在処を見てみるとこんな感じ。BIN

BINディレクトリだけでも4つもあります。BINWが基本ディレクトリでDOS環境、Win16環境(昔懐かしい16ビットのWindows)向けです。それに対してOS/2(IBMが推しだった「堅牢」なOS)ではBINWに加えてBINP、Win32環境(Windows NTって名前は最近の若者知らないか?)ではBINWに加えてBINNTを使えとのこと。BINLはLinux用?とも思いましたが不明。

バイナリは4つでしたがライブラリはそれでは済みませぬ。まず16ビット、80286レベルまでは、以下のようにDOS、OS2、WIN(16)と3種。LIB286

32ビットとなると以下のごとし。LIB386

32ビット環境にも DOS があるのは、DOSイクステンダで、DOS上でも4Gバイトの巨大な空間を操作できるためかと思います。DOSイクステンダというとPharLap社(日本では富士通 FM Townsに搭載されていた)が有名ですが、OpenWatcomでは DOS4GW 推しみたいです。どうもOpenWatcomの各種ツール自体DOS4GW上で動いているみたいです。DOS上で作業しているのに1Mバイトの制約などは気にせんでよいっと。

他にも懐かしいNETWAREとかもリストされてますが、RDOSっていうのは誰?

というわけで実に多種多用なOS、実行環境に対応しているOpenWatcomです。でも所望の環境設定をするのがメンドいじゃない?と思って見たらありました。

owsetenv.bat

という名のバッチファイルがインストールに含まれてます。これをFreeDOSプロンプトから実行するとPATHだけでなく、各種の環境変数などFreeDOS用に一撃で設定してくれます。便利ね。

OpenWatcom Cで吉例Hello world

インストールの確認にHello worldしてみます。エディタはOpenWatcomと同時にインストールされていた Vi 利用です。こんな感じ。owVi

FreeDOS標準のEDIT(スクリーンエディタ)でもよいですが、当方のようにSSH接続で使っているとALTキーとかを多用して操作するのがイマイチメンドイです。その点Viであれば(最近使ってないのでいまいち手が動かんけど)、まあまあお楽、SSH接続向けね。

上記で作成したHello.cをコンパイルしてみました。注目行に黄色の下線を引いてあります。wcl_compile

まず、コンパイラ本体でもリンカでも、DOS/4GWが立ち上がって8086の1M制約を外してからツールが動いていることが分かります。コンパイラはwccという16ビット用のコンパイラが走っているみたい。コンパイラドライバへの指定次第では呼び出されるコンパイラ自体が32ビット用などに変わるような。

そして、お目当てのLinkerが走ってます。コンパイル結果が以下に。compileResults

OBJファイルからリンカの活躍によりEXEファイルが出来ておるようです。実行すると Hello world.じゃと。動作OKね。

ソフトな忘却力(47) FreeDOS、NASM、強力なアセンブラ、でもリンカはどこ? へ戻る

ソフトな忘却力(49) FreeDOS、Open Watcomの深みにハマる へ進む