MuTerm (p1) [UTF-8]  
 ターミナル  編集  文字コード  ヘルプ
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です(たぶん)。
$Id: index.html,v 1.10 2000/09/29 18:31:25 toyoshim Exp $