Dos eXecution environment for BeOS / POSIX [$Date: 2000/09/29 18:31:25 $]
(C) Copyright 2000 Toyoshima-House
C:\>new
2000/09/30 ... LSI-Cが動作するようになりました。
また、ソースをCVSで取得できるようにしました。
2000/08/19 ... ページ立ち上げ。
C:\>purpose
このプロジェクトの目的は、BeOSのTerminal下でシームレスに
DOSのコンソールベースのアプリケーションを実行することにあります。
最終的にはexecve互換のdos_execveといった形でライブラリ化し、
shellに簡単なパッチを当てることでBeOSネイティブなコマンドと
区別することなくDOSコマンドを実行できるようにします。
今のところ16bitのコマンドをターゲットにしています。
C:\>roadmap
EXEファイルを起動 ... [ OK ]
簡単なコマンドの実行 ... [ OK ]
LSI-Cを完全動作させる ... [ OK ]
WonderWitch開発環境の完全動作 ... [ OK?]
(以下、随時追加...)
C:\>screenshot
実際に動作中のスクリーンショットです。
2000/08/02 12:02 50,886 dx01.jpg
2000/08/03 18:18 45,335 dx02.jpg
2000/09/30 03:22 261,327 dx03.jpg
3 個のファイル
0 個のディレクトリ
C:\>implement
実装は次のような方法を取っています。
外部仕様 ... 「dx」という名前の実行ファイルとして実装され、引数に
実行するDOSコマンド名、そしてその引数をとります。
CPU ... エミュレーション。VMのほうが効率の面では有利ですが、
BeOSで実現が困難かつ私自身の知識不足のため、この手法を取りました。
結果としてPPCでも動作可能と思われます。CPUエミュレーション部分は
MAMEに採用されているFabrice Frances氏のコードを元にしています。
DOS CALL ... 割り込みベクタの飛び先に$0F, $XX, $CFといったシーケンスを用意し
CPUエミュレータ部分で$0Fを実行しようとしたら、各割り込み処理を実装した
コールバック関数を引数$XXで呼び出すようにしています。
内部はネイティブコードで記述し、必要に応じてCPUエミュレータ内部の
レジスタやフラグを書き換えます。
環境変数 ... BeOS側の環境変数を元に環境ブロックを生成し、
DOSプログラムに渡しています。
この際、DX_xxxという名前の環境変数が存在した場合には、
xxxの替りにDX_xxxの内容がxxxとして渡されるようにしています。
PATHに関しては、ディレクトリの区切り文字を「/」から「\」へ、
パスの区切り文字を「:」から「;」へ変換して渡します。
引数 ... dxに渡される2つ目移行の引数を元にPSPの80h以降の情報を生成して
DOSプログラムに渡しています。DOS側の制限で255バイト以上の長さの引数は
渡すことができません。
ファイル ... 記述子0、1、2はそれぞれBeOS側のSTDIN、STDOUT、STDERR
に結びつけられます。今のところテキストモードの処理は考えずに実装しています。
また、ファイル名についてはcase insensitiveで処理できるようにしています。
長い名前についてもDOSコマンド側の実装で可能な限り対応します。また、引数に
含まれるファイル名については、内部的に「短い名前」⇔「長い名前」の対応表を作り、
対処してみる予定です。
C:\>cvs
最新版のソースをcvs経由で取得できるようになりました。
:pserver:anonymous@misuzu.p.utmc.or.jp://CHIYO/cvsroot、
モジュール名はdxです。以下の手順でアクセスできます。
パスワードはありませんので、プロンプトが出たら改行を押して下さい。
C:\>cvs -d :pserver:anonymous@misuzu.p.utmc.or.jp://CHIYO/cvsroot login
(Logging in to anonymous@misuzu.p.utmc.or.jp)
CVS password:
C:\>cvs -d :pserver:anonumous@misuzu.p.utmc.or.jp://CHIYO/cvsroot co dx
サーバーはフレッツISDNでインターネットに接続しているため、場合によっては
アクセスできない事があるかもしれません(名前はDynamic DNSで参照できるように
なっています)。pserverはversion 1.11の改良版をWindows 2000上で動かしています。
現在updateで差分更新に失敗するという問題があります。該当ファイルを削除した上で
再度updateをすると問題を回避できます(直さねば・・・)。
C:\>status
LSI-Cが動作するようになりました。今のところ、WonderWitch付属のhelloのサンプル
が一通り問題なくmakeできることが確認されています。
C:\>develop
プログラムはCで書かれています。なぜC++でないかというと、...解りません...
たまたまCで書き始めてしまったためにCになってます。
ソースファイルを取得したら、「$ tar zxvf dx-20000809.tar.gz」などとして展開して下さい。
dx/ 以下にソースが展開されます。このまま「$ make」すれば、実行ファイルdxが生成されます。
また、「$ env DEBUG=1 make」とすれば、デバッグ版のdx_debugが生成されます。
デバッグ版は内部に簡単なデバッガを内蔵している他、DOS CALLのトレースを表示します。
簡単なソースの解説をしておきます。
debug.c ... デバッガの実装です。
dos.h ... DOSに関する構造体を定義しています。
file.c ... ファイル入出力周りを実装しています。
i86/ ... 80286 CPU エミュレータ関係が含まれます。
i86info.h ... CPU情報にアクセスするために必要な構造体を定義しています。
int.c ... INT割り込みが発生した際にコールバックとして呼ばれます。
int1a.c ... INT 1A周りを実装しています。int.cから呼ばれます。
int21.c ... INT 21周りを実装しています。int.cから呼ばれます。
int21_43.c ... INT 21 (AH = 43h)周りを実装しています。int21.cから呼ばれます。
int21_44.c ... INT 21 (AH = 44h)周りを実装しています。int21.cから呼ばれます。
mame_inc ... i86/ 以下のコンパイルに必要になるMAMEのヘッダが入っています。
memory.c ... CPUからのメモリアクセス部分、およびメモリ管理を実装しています。
process.c ... EXEファイルの読み込みやプロセスに係る部分を実装しています。
C:\>reference
開発資料として以下のものを参考にしています。
doscmd ... *BSD用のDOSコマンド実行環境。ことの発端とも言う。
MS-DOSの世界 ... ecb.さんの「目指せプログラマー!」内にあるコーナー。
私、MS-DOSで開発したことなかったんで、とても参考になりました。
Interrupt Jump Table ... INT周りについての詳細な資料があります。
ここの資料を元に実装しています。
C:\>members
開発に関係してる人達です。勝手に巻き込んだ(と思ってる)人とか、
アドバイザーとか、巻き込む予定の人とかも(ぉぃ。
とよしま ... 言い出しっぺ。
Masashi Sawada ... 巻き込まれた人その1。
内藤(暴威) ... 巻き込まれた人その2。
伊藤隆幸 ... アドバイザー。
かっき〜 ... もう逃げられません(笑)。
C:\>contact
何かありましたら、とよしままでお願いします。
IRCの方で、#Be日本に常駐しているので、そちら経由でもOKです(たぶん)。
|
|
|
|
|