doscmdってのは、早い話がDOSエミュレータの一種です。 UNIX like OS上で動作するDOSエミュレータとしては、dosemu,pcemu,doscmdが ありますが、それぞれ、以下の様な特徴があります。(違うところがあるかも、 自信無し)
dosemu | 高機能、linux,(NetBSD)で動作、ほぼ完璧、VM86使用 |
pcemu | 低機能、linux,FreeBSDで動作、8086レベルのみ、CPU自体をエミュレート |
doscmd | 低機能、BSDI,FreeBSD,NetBSDで動作、VM86使用 |
見ての通りそのままでOpenBSD上で動くものは1つもないので、
自分でパッチを当てるしかありません。
dosemuを動かしたいところですが、移植するにはかなり骨が折れそうなので、
今回の餌食として、doscmdを選びました。
pcemu? i386系のマシンだったらVM86使った方がいいかなぁ…と。
% tar xzf doscmd1990502-2.tar.gz % cd doscmd % zcat doscmd-openbsd-20010630.diff.gz | patch -p1 % make
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