Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
『はじめて読む486』のサンプルを OpenWatcom でビルドする

『はじめて読む486』のサンプルを OpenWatcom でビルドする

概要

『はじめて読む486』のサンプルプログラム集 をできるだけ簡単に試してみるために、OpenWatcom を使ってビルドしてみました。

※ 16bit 用の無料で使えるコンパイラとしては LSI C-86 試食版が有名ですが、関数の呼び出し規約が MSC や Borland C とは異なっているため、アセンブリプログラムの修正が必須となってしまいます。また、Turbo C 2.01 もありますが、インストールが面倒で TASM も含まれていません。

ダウンロード

OpenWatcom のダウンロードページから open-watcom-c-win32-1.9.exe をダウンロードします。

インストール

インストール時には、ターゲットとして、必ず 16bit DOS を選択してください。 ホストは通常は、32bit Windows のみを選択しておけばよいでしょう。(DOS も選択することもできますが、割愛します。)

インストールの最後に、環境変数の設定を行うかと、関連づけを行うかを聞かれますが、OpenWatcom をメインの C コンパイラとして使うのでなければどちらも不要でしょう。

インストール時に環境変数を設定しなかった場合は、コマンドプロンプトを立ち上げてから、C:\WATCOM\owsetenv.bat を実行すれば、必要な環境変数が設定されます。

ビルド

手動ビルド

最初は、お試しに Makefile を使わずに手動でビルドしてみましょう。 まずは、4.3章のモード移行プログラムをビルドしてみます。

コマンドプロンプトを立ち上げてから以下のコマンドを打って、環境変数の設定を行ってください。

C:\WATCOM\owsetenv.bat

次に、サンプルプログラムのあるディレクトリに移動します。

cd \work\486\SOURCE\

アセンブル、コンパイル、リンクを行います。-ecc は MSC と同じ呼び出し規約を使うためのオプションです。

wasm PROTO0_A.ASM
wcl -ecc -D__MSC__ TESTPROT.C proto0_a.obj

testprot.exe ができあがっていれば、おそらく成功です。

Makefile を使ったビルド

最新のサンプルプログラムには、OpenWatcom 用の Makefile が含まれていますので、以下のコマンドで全てのプログラムをビルドできます。

wmake -f MAKEFILE.OW

実行

試しに動かしてみるならば、MS-DOS Player for Win32-x64 (msdos.exe) を使うのが簡単です。 msdos.zip を C:\tools に解凍した場合は、次のコマンドを実行してみてください。

C:\tools\msdos\binary\i386_x86\msdos.exe testprot.exe

Now going to Protected mode... と表示されるはずですので、Enter を入力してください。 Returned from Protected mode. と表示されて、コマンドプロンプトに戻ってくれば成功です。

※ msdos.exe 上で動作するサンプルプログラムはごく一部である点に注意してください。全てのサンプルプログラムを動かしてみるには、VMware Player などの仮想環境上に FreeDOS をインストールし、その上で動かすのが良いと思われます。

※ sieve32 など一部のサンプルプログラムは、msdos.exe 上で動かすためには、コンパイルオプションの変更が必要です。MAKEFILE.OW を編集し、CFLAGS = で始まる行の末尾に、 -DUSE_BIOS_FOR_A20 を追記してください。

@koron 氏により、VirtualBox や VMware などで実行可能な実験環境が公開されています。 https://github.com/koron/486/releases

@k-takata

This comment has been minimized.

Copy link
Owner Author

@k-takata k-takata commented Oct 17, 2014

LIB環境変数の設定は、別途行う必要があると書いていましたが、不要だったようです。
C:\WATCOM\binw\wlsystem.lnkの記載に従って、ターゲットに応じて自動で設定されるようです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment