doscmd を OpenBSD で動かす

☆2001/06/30 Makefileをちょっといじりました。OpenBSD2.9でも一発でコンパイルできます。

はじめに

doscmdってのは、早い話がDOSエミュレータの一種です。 UNIX like OS上で動作するDOSエミュレータとしては、dosemu,pcemu,doscmdが ありますが、それぞれ、以下の様な特徴があります。(違うところがあるかも、 自信無し)

DOS emulater 比較
dosemu 高機能、linux,(NetBSD)で動作、ほぼ完璧、VM86使用
pcemu 低機能、linux,FreeBSDで動作、8086レベルのみ、CPU自体をエミュレート
doscmd 低機能、BSDI,FreeBSD,NetBSDで動作、VM86使用

見ての通りそのままでOpenBSD上で動くものは1つもないので、 自分でパッチを当てるしかありません。
dosemuを動かしたいところですが、移植するにはかなり骨が折れそうなので、 今回の餌食として、doscmdを選びました。
pcemu? i386系のマシンだったらVM86使った方がいいかなぁ…と。

とにかく動かす

doscmdのソースを入手する

OpenBSD用のパッチを入手する

http://www.fenix.ne.jp/~thomas/memo/doscmd/doscmd-openbsd-20010630.diff.gz

パッチを当てて、コンパイル

% tar xzf doscmd1990502-2.tar.gz
% cd doscmd
% zcat doscmd-openbsd-20010630.diff.gz | patch -p1
% make
  

インストール

make install でおしまい。 あとは、README.booting_dosにしたがって、動作環境をつくります。

どこをいじったの?

BSDIやOpenBSD等のVM86モードをサポートするOSでは、VM86モードで動く プロセスで実行された任意のINT命令をシグナルとして32bitモードの ハンドラに通知することで、エミュレーションをサポートする機能があります。
このときシグナルハンドラに渡される、引数が、BSDIとOpenBSDでは違うのです。 この部分を書き換えてやれば、OpenBSDでもあっさり動いてしまいます。
引数はポインタで、そのポインタの指す構造体の構造も違うので、 ちょっと面倒ですが、一つ一つ書き換えていく、単純作業でした。

あとは、インストールされるディレクトリが、/usr/bin, /usr/libexecから、 /usr/local/bin, /usr/local/libexec になるようにMakefileを若干変更しました。 この辺は好みの問題かもしれませんが、私にとっては重要なことです。

終わりに

私の場合、べつにこのエミュレートされた、DOS上で何かをやろうってん わけじゃなくて、ただ、動かしたかっただけなんです。 なんだかんだいってDOSにさんざんお世話になってきた私は、 たとえ、いまさら、DOS上でやることがなくても、DOSアプリの動く環境が ほしくなってしまう、というか、DOSが動かないといけないような 気がしてしまうんですね。
そのうち、dosemuの移植にも挑戦してみたいと思います。 あとはplex86かな。


FENIX/ MEMBERS / thomas's HOME / MEMO/ doscmd

佐藤益弘 thomas@fenix.ne.jp