作者choan (八房龙之助)
看板Emulator
标题Re: [新闻] MS-DOS Player 2017/07/27
时间Thu Jul 27 00:09:47 2017
http://takeda-toshiya.my.coocan.jp/msdos/index.html
2017/7/27
通常のMS-DOS环境上で、Win32/64のプログラムを実行すると、
This program cannot be run in DOS mode.
と表示されて、そのままプログラムが终了するようになっています。
これは、Win32の実行ファイルのヘッダ内に、このようなメッセージを表示して
そのまま终了するようなMS-DOS用スタブプログラムが埋め込まれて、
MS-DOS环境ではそちらが実行されるようになっているからです。
MS-DOS Player上でWin32のプログラムを実行した场合も同様の动作でしたが、
INT 21h, AX=4B00h, INT 2Eh, またはINT 2Fh, AX=AE01hなどのサービスで、
Win32のプログラムを子プロセスとして起动しようとした场合は、
system() Win32 APIを使って、Win32の子プロセスとして実行するようにしました。
このとき、子プロセスが终了するまで、MS-DOS Playerは待机します。
ただし、INT 21h, AX=4B01h/4B03hなど、プログラムファイルをロードするだけで、
実际には実行しない场合は、プログラムファイルがそのままロードされます。
その後に、メモリ上にロードしたプログラムに処理が移った场合は、従来通り、
This program cannot be run in DOS mode.が表示されて终わりです。
なお、指定されたコマンドラインをそのまま丸ごと、system()に投げています。
16bitのプログラムとパイプで繋ぐようなケースは考虑していません。
また、子プロセスがコンソールに文字を表示する际、MS-DOS Player侧のINT 29hは
経由されませんのでご注意ください。
こちらの処理は、あくまで子プロセスの起动时のみとなります。
「msdos (プログラム名)」で起动时に指定したプログラムがWin32の场合は、
This program cannot be run in DOS mode.が表示されますが、
この场合は素直に対象のプログラムを直接起动してください、ということで(を
MS-DOS PlayerでCOMMAND.COMを実行して、その上でWin32のコンソールアプリを
シームレスに使用できるようになっているかと思います。
Windows上でVZエディタを使用する际、CLPPST.EXEというWin32のプログラムを使って、
Windows侧のクリップボードと连携しているそうです。
今回の修正で、この仕组みが动くようになっているといいのですが…。
素直にINT 21h, AX=4B00h辺りを使っててくれれば大丈夫だと思うんですけどね。
# DOS时代はSEDIT派でしたので、VZエディタの使い方をよく知らなかったり(苦笑)
# 検证ご协力お愿いいたします>今野様
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.126.232.106
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Emulator/M.1501085390.A.B18.html