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

Joseph Halfmoon

前回FreeDOS上にOpenWatcomコンパイラ環境をインストール。コンパイルしてリンクできるのは確認しました。しかし調べれば調べるほど「この環境」16/32ビット時代のx86を完璧に網羅している感じデス。今回はDOS上で使えるHELPシステムとデバッガを動かしてみたいと思います。必要な機能全部あるじゃん!

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

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

    •  Raspberry Pi 4 model B、Cortex-A72コア(ARMv8-A)
    •  Raspberry Pi OS (64bit) bullseye
    •  QEMU 5.2.0
    •  FreeDOS 1.3
OpenWatcom のhelpシステム

さて、「超強力なx86アセンブラ」NASMを活用するために、リンカが必用ということでインストールに走った OpenWatcom C/C++ コンパイラです。しかし、調べれば調べるほどその守備範囲の広さと機能に感激。ずぶずぶとハマってます。

最初は help システムから。freeDOSが素の「help」を使っていますが、OpenWatcomの方は「whelp」デス。以下のようにするとまずは whelp そのもののヘルプが表示されます。

C\> whelp

おお、充実のドキュメント群が。。。whelp

実際に中を覗くと、数百ページくらいありそうなドキュメントを読むことができます。完璧なドキュメンテーションだね。

一例として、OpenWatcom付属のデバッガ、wd のドキュメントを読む場合はこんな感じ。

C\> whelp wd

当方、実行環境にssh接続しているので、以下のようなテキストで構成されたHELPブラウザが現れます。whelp_wd

後は info みたいな感じでカーソルで項目を選んで「深みにダイブ」していけば所望のページを読むことができます。

Hello worldをwdしてみる

前回、吉例 Hello worldをFreeDOS上でコンパイル、リンクして動作させてみました。デバッグビルドをこさえるには、オプション /d2 をつければいいみたいです。ちなみに /d2 は「デバッグ情報テンコ盛り」のオプションみたいです。も少し控えめのオプションもあるみたいだけれども。

C\> wcl /l=dos /d2 hello.c

上記で生成したオブジェクト・プログラム(HELLO.EXE)を前回作成のプログラム(リネームしてHELLO_NO.EXEとしてある)とサイズを比較してみました。size_d2_option

ほぼほぼ倍ね。デバッグ情報がテンコ盛りのハズ。

さてデバッガの起動は簡単です。以下のごとし。

C\> wd hello

FreeDOS本体には、昔懐かしい debug とコマンド上位互換(魔改造版だが)の「debug」もありますが、そちらはシンボリックデバッグすらできない「昔風の」ベタなデバッガです。一方、wd の方は以下のごとし。WD_runs

ソースコードレベルで、ブレークポイントおいて走らせて、変数とかを吟味したりできる「今風」のデバッガです。上記は DOS上での実行なので、gdbでいうと -tui オプションで動かしているような感じです。なお、OpenWatcomは各種環境用のwdを含んでいて、Windows版のwdであればフツーにGUIウインドウが開いてデバッグできるみたいです。

今回はアセンブラの練習環境を作るという目的があるので、wd の低レベルなところを覗いてみます。Windowメニューには CPU registersとAssemblyというオプションあり、それらをイネーブルにすると以下のような表示になります。wd_assem_reg

Cのソースコードの合間にアセンブラ表示が挟み込まれます。またPentium Proと表示されてますが(実はQEMUだけれども)、DOS上の16ビットコードであるせいか、8086範囲のレジスタのみが表示されてます。

Cのソースコード単位でブレークかけられるだけでなく、アセンブラ表示をONにするとアセンブラ命令毎にブレークできるようです。

また、シングルステップ(WDではTraceと呼ばれているみたい)も可能。Trace機能はF8キーに割り当てられているので、AssemblyをイネーブルにしておいてF8を押すと1命令ずつステップ実行され、実行するごとにレジスタの値が更新されていきます。

やあ、これができれば十分じゃん。

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

ソフトな忘却力(50) FreeDOS、wlink、wdis、HDDイメージマウント へ進む