[HOME]  [リストへもどる]
一括表示

  MS-DOS Player の更新 - konno 17/07/14-23:42 No.7758
    ┣ MS-DOS Player の使い方と利点 - konno 17/07/15-01:03 No.7759
    ┃┗ Re: MS-DOS Player の現状 - konno 17/07/20-20:18 No.7766
    ┃ ┗ Re^2: MS-DOS Player の現状 - konno 17/07/21-23:57 No.7767
    ┣ MS-DOS Player の更新 2017/7/24版 - konno 17/07/26-01:32 No.7771
    ┃┗ MS-DOS Player の更新 2017/7/27版 - konno 17/07/27-21:42 No.7772
    ┃ ┗ Re: MS-DOS Player の更新 2017/7/27版 - konno 17/07/28-21:55 No.7773
    ┃  ┗ Re^2: MS-DOS Player の試用報告 - konno 17/07/30-15:47 No.7774
    ┃   ┗ Re^3: MS-DOS Player の試用報告 - 10♯ 17/07/31-21:52 No.7775
    ┃    ┗ Re^4: MS-DOS Player の試用報告 - konno 17/08/02-00:47 No.7776
    ┃     ┗ MS-DOS Player の使い方 - konno 17/08/07-00:06 No.7777
    ┗ MS-DOS Player 2017/8/12 の更新 - konno 17/08/14-20:28 No.7778

(7758) 7758MS-DOS Player の更新  投稿者:konno   2017/07/14(金) 23:42
   コメント数 3

MS-DOS Player 2017-07-14版が出ました!!
最近頻繁に更新がありましたが、今回の更新はびっくり!!うれしい!!

MS-DOS Player for Win32-x64 のページです。
http://takeda-toshiya.my.coocan.jp/msdos/index.html

以下、更新内容の引用です。
--------------------------------------------------------
2017/7/14
INT 21h, AX=440Ch, CL=5Fhをサポートしました。
INT 2Fh, AX=1A01h, CL=5Fhをサポートしました。
いずれもディスプレイの情報を設定するサービスですが、画面サイズのみ設定可能です。
MODE CON COLS=40 LINES=25とか出来るようになっているかと思います。

INT 21h/2Fhのサービスによって、コンソールに文字を表示する際に、
INT 29hの処理がフックされている場合は、INT 29hを経由するように修正しました。

制限として、INT 29hの処理がフックされている場合、STDINからの入力を待って、
更に入力に対してエコーを返すサービス(INT 21h, AH=01h/0Ah/3Fh)を実行中は、
仮想マシンのCPUの動作が停止して、タイマ割り込みが発生しなくなります。

これらのサービスの入力待ちの処理は、仮想マシンのCPU上でループするのではなく、
MS-DOS Playerのサービスの処理上でループすることで待機しています。
この待機中も、タイマ割り込みが発生できるように、CPUを回し続けるために、
別スレッドでサービスの処理を実行して、そちらで入力待ちをしてやって、
メインスレッドでは、CPUでダミールーチンを実行し続けるようになっています。
(この辺りについては、2017/2/22の記事をご参照ください。)

この別スレッドで実行しているサービスの処理内で、コンソールにエコーを返す際に、
INT 29hを実行するために、メインスレッドで回っているCPUに茶々を入れることが
構造的にとても難しかったため、INT 29hの処理がフックされている場合は、
サービスの処理をそのままメインスレッドで実行するようにしました。
このとき、メインスレッドで入力待ちをしている間、CPUの動作が停止してしまうため、
タイマ割り込みは発生できなくなります。

また、INT 29hの処理内で、再度コンソールに文字を表示するINT 21h/2Fhのサービスが
呼び出された場合、無限ループに入らないように、INT 29hは再発生しません。

今回の実装で、CPUコアからDOSのシステムコールのエミュレーションが呼ばれて、
その中で、INT 29hを実行してIRETするまでCPUコアを回してやって、
その中で、またDOSのシステムコールのエミュレーションが呼ばれて、といった感じで、
再入することを想定していなかった色々な処理を再入しまくってます。
何かしら処理に矛盾を来たしていないか、安定性に問題ないか、色々と苛めテストに
ご協力いただけますと幸いです。

本件は、VZエディタの私家版を開発されている、金野様よりご指摘いただきました。
VZエディタからDOSコマンドを実行する際に、INT 29hをフックすることで、
DOSコマンドの実行結果を取り込む、みたいなことをしているそうです。

Windows NTやOS/2上のコマンドプロンプトでも、コンソールに文字を表示する際に、
INT 29hを経由しないそうですが、意外と互換性が微妙なんですかね?
(この問題を補うために、toint29というソフトが公開されています)

------------------------------------------------------------------

ということで、実はMS-DOS Player 作者の武田さんに、
VZのコンソールが使えるようにならないかメールしたのです。
構造的に難しいとのことで、諦めていたんですが、実現してくれました!!
超嬉しいです!!

VZerにとってコンソールは大きな武器なので、これが使えないと実使用が難しい。
これから MS-DOS Player を本格的に試験運用していくつもりです。

武田さん、本当にありがとうございます。

      - No.7758 -    このTreeへ              [リストへもどる ] soft


(7758) 7759MS-DOS Player の使い方と利点  投稿者:konno   2017/07/15(土) 01:03
    7758 番 konno さんへのコメント    コメント数 1

・MS-DOS Player の使い方と利点

i486_x86 の中のmsdos.exeをパスを通したフォルダにコピーして
ショート−カットアイコンのプロパティのリンク先に

C:\UT\msdos.exe -n40,120 vzibmj.com /vz

と入れて起動したら、120桁40行のV-TEXTで起動する


・・・と思ったら、今回のVerでは、80桁25行のままみたい。
どうやら、-n を入れるとダメみたいですね。
-n は使えないが、プロパティの中のレイアウトで行桁数変更できます。

command.com を使えば、BAT も常駐もできます。

C:\UT\msdos.exe -x -v7.0 e:\command /c c:\ut\vzp.bat


・MS-DOS Player の利点

多種類のcommand.com が動作する
MSDOS Ver2.0〜Ver7.1 Win98のcommand.comまで動くそうです。
PCDOS,DRDOSやFreeCOMやGRDOSまでも・・・凄いですね。
ただ、Win95のcommand.comで試したら、DIRが表示しないようです。
なので、現状 DIR でLFN表示は実現出来ていません。

ソーサーが動く(英語版ソフトなので文字化けはするが80*25で)
VTDOSでは動かないソフトも動く可能性があるということですね。


      - No.7759 -    このTreeへ    コメント元:7758 へ    [リストへもどる ] soft


(7758) 7766Re: MS-DOS Player の現状  投稿者:konno   2017/07/20(木) 20:18
    7759 番 konno さんへのコメント    コメント数 1

ショート−カットアイコンのプロパティのリンク先に

C:\UT\msdos.exe -x vzibmj.com /vz -nq

で取りあえずVZは起動しますが、やはり commannd.com が無いとまともに動かない。
この環境で、set , Ver などのコマンドは動くが、CMD.EXE なのかしら?
これらの内部コマンドはVZのコンソールに反映されません。
 toint29 を使用してもダメなので、もしかして内部コマンドとか?

この環境での Vmap これはVZのコンソールに反映されます。

VMAP Version 2.01  Copyright (C) 1989-91 by c.mos

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
0205 sys    4    9152  <config>
0445        1    8192  <free>
0646 <--    1    3888  vzibmj 1.60t /vz -nq       1B 22 29
073A        1  724032  <free>
B800 sys    1       0  <config>

----- EMS ver4.0 (frame: C000h) -----       ----- XMS ver3.00 -----
handle pages   size  name                   HMA not used
------ ----- ------  --------               EMB free: 31680 KB
  free  2033 32528k
 total  2048-32768k


> command.com を使えば、BAT も常駐もできます。
> C:\UT\msdos.exe -x -v7.0  e:\command /c c:\ut\vzp.bat

さて、この指定で Windows10 Pro Ver 1607 のノートPCは動くが
 Windows10 Home Ver 1703 のデスクトップPCが動かない。
この詳細はもっと調べてから書きますが、まず現状の問題点を。

 shift + F08〜F10 キーが効かない
 ctrl  + F01 キーが効かない

これは痛いです。切り貼りなどで使っているので、これが使えないと実用出来ない。
この文は最初素のVZで書き始めたが、マクロも動かないので、Vmapの表示だけ。
次にcommannd.com経由のVZで続きを始めたが、切り貼り出来なくて即諦めました。

VTDOS 付属の KEYCODE.EXE で、キーコードが発行されてないのを確認しました。
 alt + F04 でMS-DOS Player が終了するのは仕様だから仕方ないですね。

ああ、やっぱりVTDOS環境は極楽だぁ。

> MSDOS Ver2.0〜Ver7.1 Win98のcommand.comまで動くそうです。
> PCDOS,DRDOSやFreeCOMやGRDOSまでも・・・凄いですね。

すみません、GRDOS は勘違いだったようです。
 GWBASIC をなぜかGRDOS と思い込んでしまったようです。
もうろくじじいだなぁ。

      - No.7766 -    このTreeへ    コメント元:7759 へ    [リストへもどる ] pre


(7758) 7767Re^2: MS-DOS Player の現状  投稿者:konno   2017/07/21(金) 23:57
    7766 番 konno さんへのコメント

> > C:\UT\msdos.exe -x -v7.0 e:\command /c c:\ut\vzp.bat
> さて、この指定で Windows10 Pro Ver 1607 のノートPCは動くが
> Windows10 Home Ver 1703 のデスクトップPCが動かない。
> この詳細はもっと調べてから書きますが、まず現状の問題点を。

調べてみると、幽霊の正体見たり、みたいな面妖なことになっていた。
DOS6.2のcommannd.com が悪いのかも、と思ってFreeCOMのに入れ替えようと
VZで削除しようとしたが出来ない。他で使っていないのを確認して
エクスプローラーで削除しようとしたがファイルが見つからない。

システムファイルが表示されてないのかと確認し、隠しファイル
の表示にチェックを入れたら見えるようになった。
よく見ると、アイコンの色が薄いので、隠し属性になっているのか?
だが、VZの属性表示では何も属性が付いていない。
取りあえず、エクスプローラーで削除して、FreeCOMのに入れ替えた。

そうしたら、あっけなくMSDOS Player が動きましたよ。何だったんだ。

ところが今度はフォントのトラブルが。
英語モードになったのか、変なフォントに切り替わってしまった。
MSゴシックも消え、ターミナルもサイズ表示が消えて最小表示になる。

再起動しても変わらず、何をしても直らない。
色々試行錯誤した末にやったことはよく覚えていないが、たぶん
最小表示のまま起動させ、その窓の上のアイコンを右クリック
プロパティのフォントタブを開き、たぶん数字入力窓に20と入れて
Enter したら直ったみたいな。

ところで、CLPPST.EXE が動きませんね。古いデータを貼り付けるだけで
別窓のデータの切り張りができないです。

c:\vz\CLPPST.EXE /W c:\vz\CLPPST.TMP
This program must be run under Win32

コンソールの履歴にはこんな表示が。
32ビットコマンドがだめなのかなあ。

ZCPY32もダメみたい。

c:\vz\CLZCPY32 /u C:\VZ\-LES\12C1EA~1 C:\UT\IME
This program cannot be run in DOS mode.

ちょっと表示の化けがあるかな。

ZCPY32 /u C:\VZ\-LES\12C1EA~1 C:\UT\IME
This program cannot be run in DOS mode.

もう一度実行したら違う表示に。

ここまでMSDOS Playerで書いたが、CLPPST.EXEが動かないので
SAVEしてVTDOS窓で開いて切り貼りする羽目に。(^^;

      - No.7767 -    このTreeへ    コメント元:7766 へ    [リストへもどる ] soft


(7758) 7771MS-DOS Player の更新 2017/7/24版  投稿者:konno   2017/07/26(水) 01:32
    7758 番 konno さんへのコメント    コメント数 1

MS-DOS Player 2017-07-24版が出ました.

以下、更新内容の引用です。
--------------------------------------------------------
2017/7/24

キーの押し離し、キーの読み込みがあった際に、BIOSデータエリア内にある、
キーバッファの内容や、キーバッファの書き込み・読み込み位置の情報を、
然るべく更新するように修正しました。
キーバッファの内容を直接参照するソフトが動作するようになったかと思われます。

こちらの不具合は、Pedro Pablo Lopez Rodriguez様にご指摘いただきました。
スペインのマドリード工科大学(Polytechnic University of Madrid)で、
Operating Systemの教授をされているそうです。
もし拙作が、教育や研究のお役に立てているようでしたら光栄ですね。

Shift+F8〜F10、Ctrl+F1を入力できない不具合を修正しました。
WindowsキーおよびMenuキーを無視するために、スキャンコードが5Bh〜5Ehの場合は
キーバッファに入れないようにしていたのですが、
ShiftまたはCtrlキーとファンクションキーを同時に押したときのスキャンコードで、
5Bh〜5Ehになるものがあり、これらも無視されてしまっていたようです。

また、-nオプションが機能していなかった不具合を修正しました。

これらの不具合は、前回に引き続き、金野様にご指摘いただきました。

INT 29hの処理中、TSCが正しく更新されない不具合を修正しました。
RDTSC命令はPentium以降ですので、リリースしているバイナリでは無関係です。

また、INT 29h、またはINT 21h/2Fhでキー入力待ちなど時間が掛かるサービスの実行中に、
タイマ割り込みによって更にINT 21h/2Fhで時間が掛かるサービスを呼び出した場合は、
サービスの処理待ちの為に更に別スレッドを立ち上げないようにしました。
普通はそのようなことはないかと思いますが、念のための安全対策です。


------------------------------------------------------------------

ということで、Shift+F8〜F10、Ctrl+F1の不具合が修正されました。
武田さん、ありがとうございます。

command.com についてですが、Win98 の command.com が良いようです。
Dir で LFN が表示出来ます。
-V オプションがあると起動できないみたいです。

MEU というメモリ表示ソフトは表示が超遅いですね。
どこかでウエイトが効いているのかな。


      - No.7771 -    このTreeへ    コメント元:7758 へ    [リストへもどる ] soft


(7758) 7772MS-DOS Player の更新 2017/7/27版  投稿者:konno   2017/07/27(木) 21:42
    7771 番 konno さんへのコメント    コメント数 1

MS-DOS Player 2017-07-27版が出ました.

以下、更新内容の引用です。
--------------------------------------------------------
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エディタの使い方をよく知らなかったり(苦笑)
# 検証ご協力お願いいたします>今野様

------------------------------------------------------------------

ということで、MS-DOS Player上のVZで CLPPST.EXEが動くようになりました。
その他のWin32プログラムもばっちり動いています。
武田さん、ありがとうございます。

前回の記事で
> command.com についてですが、Win98 の command.com が良いようです。
> Dir で LFN が表示出来ます。
> -V オプションがあると起動できないみたいです。
と書きましたが、使い方がいまいちわかっていなかったようです。
武田さんからメールを頂いたので引用します。

----------------------------------------------------------

Microsoft純正のCOMMAND.COMは、INT 21H, AX=3306Hを使ってDOSのバージョンを取得して、
それが期待した値であるかをチェックするようになっています。
デフォルトではV7.10を返すようになっていますので、Win98のCOMMAND.COMを使う場合は
-vオプションを指定しなくてもそのまま動作します。
(逆に、V7.10以外を-vオプションで指定してしまうと動作しなくなります。)

例えばMS-DOS V6.22のCOMMAND.COMを使用する場合は、"msdos -v6.22 command.com"のように
バージョンを指定する必要があります。
または、MS-DOS Player内蔵のデバッガを使って、INT 21H, AX=3306Hを呼んでいるところで
ブレークを掛けてやれば、起動時のバージョンチェックのルーチンを簡単に見つけられますので、
ルーチンを潰すようにCOMMAND.COMにパッチを当ててもいいかと思います。

FreeDOSで使われているFreeCOM辺りだと、そもそもバージョンチェックすらしてないので、
こちらを使う方が簡単かもしれません。

-------------------------------------------------------------

      - No.7772 -    このTreeへ    コメント元:7771 へ    [リストへもどる ] soft


(7758) 7773Re: MS-DOS Player の更新 2017/7/27版  投稿者:konno   2017/07/28(金) 21:55
    7772 番 konno さんへのコメント    コメント数 1

MS-DOS Player でVZをアセンブルしてみた。

ver
Windows 98 [Version 4.10.2222]

mk6.bat
Turbo Link  Version 2.0  Copyright (c) 1987, 1988 Borland International
msdos error, ax= 0006h
exe2com: can't find input file vzibmj.exe
exe2com 1.04 by Chris Dunford/The Cove Software Group

 ドライブ C: のボリュームラベルはありません.
 ボリュームシリアル番号は 0000-0000
 ディレクトリは C:\VZ\vzk\K07T4

ファイルが見つかりません.
                        24,118.86 メガバイトの空きがあります.


ということで、TLINK.EXE でエラーになって実行ファイルができないです。

Turbo Link  Version 2.0  Copyright (c) 1987, 1988 Borland International
Warning: no stack

正常ならこういう警告表示が出て、実行ファイルは出来ます。
警告表示でエラーになって終了しているのかな?

いっぽう、comannd.com 6.20 の場合、DELコマンドでエラーになります。

ver
MS-DOS Version 6.20

del *.obj
不明なエラーです.


VZ使用で出る不具合もあるかもしれませんが、実用にはもう少し検証を
続けるようですね。使いながら気づいたことを書いていきます。


      - No.7773 -    このTreeへ    コメント元:7772 へ    [リストへもどる ] pre


(7758) 7774Re^2: MS-DOS Player の試用報告  投稿者:konno   2017/07/30(日) 15:47
    7773 番 konno さんへのコメント    コメント数 1

GREP の動作の違い

VTDOS + izgrep
VTDOS|C:\VZ\K07T5>C:\UT\IZGREP.EXE "AF"
^C で終了できる。

MS-DOS Player + izgrep
C:\VZ\K07T5>C:\UT\IZGREP.EXE "AF"
^Cが効かない、どのキーでも終了できない。


VTDOS + ygrep
VTDOS|C:\VZ\K07T5>C:\UT\YGREP.EXE
検索 pattern を指定してください。
ygrep.hlpをygrepを起動するdirectoryに置いてください。

VTDOS|C:\VZ\K07T5>C:\UT\YGREP.EXE "AF"
普通に検索されます。

MS-DOS Player + ygrep
C:\VZ\K07T5>C:\UT\YGREP.EXE
何もしない?

C:\VZ\K07T5>C:\UT\YGREP.EXE "AF"
何もしない?


VTDOS + yagrep
VTDOS|C:\VZ\K07T5>C:\UT\YAGREP.EXE "AF"
^C で終了できる。

MS-DOS Player + yagrep
C:\VZ\K07T5>C:\UT\YAGREP.EXE "AF"
'C:\UT\YAGREP.EXE" "AF' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


MS-DOS Player +VZで操作中何度か完全に固まりました。
一度はファイラーだったかな? キーコード調査中だったかな?
一度は日本語文の編集中で、作成中の文章が保存できなくなって困った。
窓を閉じることもできない状態でした。
タイトルバーのアイコンをクリック→編集→全選択→コピー
で、表示画面のデータは別窓VZに保存出来た。やれやれ

int29h 対応でかなり手を入れてもらったので、その影響かも。
VZ固有の問題かもしれないですが、追及は難しいですね。
ということで、実用にはまだ厳しいです。


      - No.7774 -    このTreeへ    コメント元:7773 へ    [リストへもどる ] soft


(7758) 7775Re^3: MS-DOS Player の試用報告  投稿者:10♯   2017/07/31(月) 21:52
    7774 番 konno さんへのコメント    コメント数 1

VTDOS+VZでも年数回はフリーズすることありますけどね…
初回リリース時点でその頻度には落ち着いてましたけど。
      - No.7775 -    このTreeへ    コメント元:7774 へ    [リストへもどる ] soft


(7758) 7776Re^4: MS-DOS Player の試用報告  投稿者:konno   2017/08/02(水) 00:47
    7775 番 10♯ さんへのコメント    コメント数 1

> VTDOS+VZでも年数回はフリーズすることありますけどね…
> 初回リリース時点でその頻度には落ち着いてましたけど。

そうですね、VTDOS登場のころを思い出します。
それで思い出したのが、各種command.comの非互換性です。
#4473 で、Win98やWin95のcommand.com で

> dirとたたいた結果は

>> 'r' は、内部コマンドまたは外部コマンド、
>> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

>なんか、最初の2文字がどこかに消えてしまった模様。

ということがあり、純DOSのcommand.comで調整されたVTDOSでは
Win98やWin95のcommand.com で ポインタのずれがあったような気がします。
MS-DOS PlayerはWin98のcommand.comを使用しているようなので、逆に
ポインタがずれたりとかないでしょうかね。

また、#5744 で、

> どうやら、DOSは、引数が無い場合、引数エリアのメモリをクリアしていないようです。
> なんという手抜き!!
> おそらくVTDOSと擬似常駐VZの環境ではクリアされていたということでしょうね。
> スペースによる違いはスペースまで読むか無視するかという動作の非互換性ですね。

と書いたように、command.com によって、スペースの処理とか違ったりして
今回の事象と何か関連ありそうにも思ったりしました。


> MS-DOS Player + yagrep
> C:\VZ\K07T5>C:\UT\YAGREP.EXE "AF"
> 'C:\UT\YAGREP.EXE" "AF' は、内部コマンドまたは外部コマンド、
> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

これ、よく見ると引用符の位置がおかしくなっていますね。

C:\VZ\K07T5>C:\UT\YAGREP.EXE 'AF'

と変えてみたら、コマンド入力待ちになって、^C で終了出来ました。


あとは、編集中、特定の文字入力でVZマクロが起動したりしました。
VZのキーコード取得は変態的なことをやっているので
キーバインドの調整が必要かもしれないと素人考えで思いました。
編集中に固まったのはこれが原因かもと思いました。
いずれにしても、再現できないと特定が難しいですね。


ところで、今までの動作検証は全て非常駐VZでした。
MS-DOS Player ではまだVZを常駐で動作できていません。
どなたか常駐で使用できている人はいませんか?

      - No.7776 -    このTreeへ    コメント元:7775 へ    [リストへもどる ] soft


(7758) 7777MS-DOS Player の使い方  投稿者:konno   2017/08/07(月) 00:06
    7776 番 konno さんへのコメント

MS-DOS Player のページが更新されました。  
今回は、MS-DOS Player の使い方の記事になっています。
長いですが以下に引用します。

----------------------------------------------------------
2017/8/4
子プロセスとして32bit/64bitのプログラムを実行できるようになった件ですが、
 子プロセスとして起動した32bit/64bitのプログラムが終了するまで、
MS-DOS Playerに処理が戻らないことを意識していただく必要があります。
 特に子プロセスとパイプを繋ぐときはご注意ください。

 例題として、TYPEコマンドとMOREをパイプで繋ぐケースを考えてみます。
 以下、話を単純化するため、64bit Windows上の話とします。
COMMAND.COM, MORE.COMは16bit、CMD.EXT, MORE.EXEは64bitのプログラムとします。
 使用するMS-DOS Player(MSDOS.EXE)も64bit版とします。


	>MSDOS.EXE COMMAND.COM
	>TYPE HOGE.TXT | MORE.COM

MS-DOS Player上で動いている、16bitのCOMMAND.COMと、16bitのMORE.COMを
 パイプで繋いでいますが、これは問題なく動作します。
このパイプは、MS-DOS Playerの仮想DOS環境上で繋がれたパイプとなります。


	>MSDOS.EXE COMMAND.COM
	>TYPE HOGE.TXT | MORE.EXE

子プロセスとして起動した64bitのMORE.EXEが終了するまで、MS-DOS Playerに
処理が戻りませんので、TYPE HOGE.TXTの出力はMORE.EXEに繋がりません。
つまり、MS-DOS Playerの仮想DOS環境上では、32bit/64bitの子プロセスと
 パイプを繋ぐことはできません。


	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MORE.COM

MS-DOS Playerから子プロセスとして起動された64bitのCMD.EXE上では、
16bitのMORE.COMは動作しません。
また、CMD.EXE上でEXITして終了するまで、MS-DOS Playerには処理は戻りません。


	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MORE.EXE

MS-DOS Playerから子プロセスとして起動された64bitのCMD.EXEと、64bitのMORE.EXEを
 パイプで繋いでいますが、これは問題なく動作します。
MS-DOS Playerとは関係なく、普通にコマンドプロンプト(CMD.EXE)を起動して、
 普通にTYPE HOGE.TXT | MORE.EXEを実行したときと同じ状況です。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。


	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MSDOS.EXE MORE.COM

MS-DOS Playerから子プロセスとして起動された64bitのCMD.EXEと、別に起動された
MS-DOS Playerとパイプを繋いでいますが、これは問題なく動作します。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。
またこのとき、MORE.COMは、最初に起動したCOMMAND.COMとは別のDOS仮想環境上で
動作していることにご注意ください。


	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MORE.EXE

64bitのMS-DOS Playerと、64bitのMORE.EXEをパイプで繋いでいますが、
これは問題なく動作します。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。
またこのとき、MORE.EXEは、MS-DOS Player上の子プロセスとしてではなく、
MS-DOS Playerとは別のプロセスとして起動していることにご注意ください。


	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MORE.COM

MORE.COMは、MS-DOS Player上の子プロセスとしてではなく、MS-DOS Playerとは
別のプロセスとして起動することになりますが、勿論、64bit Windows上では
16bitのMORE.COMは動作しません。


	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MSDOS.EXE MORE.COM

MS-DOS Playerと、別に起動されたMS-DOS Playerとパイプを繋いでいますが、
これは問題なく動作します。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。
また、COMMAND.COMとMORE.COMは、別のDOS仮想環境上で動作していることに
 ご注意ください。


	>MSDOS.EXE -cMORE32.EXE MORE.COM
	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MORE32.EXE
	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MORE32.EXE

16bitのMORE.COMを、MS-DOS Playerに埋め込んで、64bitのプログラムに変換すれば、
64bitのプログラムとパイプを繋ぐことが可能です。

-------------------------------------------------------------------


どうやら、今回の32ビットのGrep が挙動不審だった原因も同じようですね。
16ビットのVZから32ビットの対話型コマンド(Grep)は使えないようです。
WGREPなどの16ビットのGrepを使えば問題ないということですね。

あるいは、shadowさんご紹介のKWIC FinderなどのGUIアプリを使って、
クリップボード経由でVZに張り付けるか。

今回の一連のVZ対応更新で、VZ使用環境が飛躍的に向上したのは間違いなく
本当にありがたいです。

よくわからないものを無理して使うのは素人ユーザーの所以か。


#ああ、またまた妄想が・・・


「消滅しただと!! 丸ごとか!!」
「よくわからないものを無理して使うから、使途が暴走したんだわ。」
「だがこれも全てシナリオ通りだ。四回文書が無くなるのも計画の内さ。」
「ああ、そうだな。」
「われわれが最初のVZを参考にして人の手で作り上げたものだからな。」
「VZ改シリーズは完成していたのか。」
「これで〇〇補完計画も進むだろう。」


      - No.7777 -    このTreeへ    コメント元:7776 へ    [リストへもどる ] pre


(7758) 7778MS-DOS Player 2017/8/12 の更新  投稿者:konno   2017/08/14(月) 20:28
    7758 番 konno さんへのコメント

MS-DOS Player が更新されていました。
以下引用です。

----------------------------------------------------------------
2017/8/12
キーバッファの処理を改良しました。
SO1において、キー入力が安定するようになりました。

従来は、MS-DOS Playerのコード上のFIFOバッファで管理していたのですが、
これを、BIOSデータエリア上のキーバッファで管理するようにしました。
キーバッファの内容を直接参照するソフトの動作が改善しているかと思います。

また、BIOSデータエリア上のキーバッファが空でない場合は、32msecおきに
IRQ1(キーボード割り込み)を発生するようにしました。
キーバッファにまだデータが残っているのに読みに来なくて、次にキーが押されて
割り込みが発生したときに、その前に押されてキーバッファに残っていたキーが
遅れて取り込まれて、今押されたキーは取り込まれないままバッファに残る、
みたいな状況が改善しています。

ただし、BIOSデータエリア上のキーバッファはたった16文字分しかありません。
これに収まりきらない分は、従来のFIFOバッファの方に入れておいて、
BIOSデータエリア上のキーバッファに空きができたら、従来のFIFOバッファから
順次移していくようにしています。
IME上で長い文章を入力して、一気に変換して確定すると、コンソールに対して
一気に入力が反映されるので、このような仕組みが必要になります。

2017/8/11
INT 10h, AH=0Ehを修正しました。
画面に1文字表示する機能ですが、AH=09h/0Ahと同様に、BHに出力先の画面番号が
入っているものと勘違いしていました。
現在選択されている画面への出力、ということでいいみたいですね。

MEU.COM対策で、キー入力をチェックをしながらスピンロックしている場合に、
Sleep(10)のかわりに、_mm_pause()を実行するよう修正した件について、
もう少し修正をおこないました。

2017/8/9
メモリユーティリティのMEU.COMの表示が遅い問題を修正しました。

キー入力の有無のチェックの処理を、短期間に繰り返し実行している場合には、
スピンロックをしていると見做して、キーチェック毎にSleep(10)してやることで、
キー入力をスムーズにする処理が入っています。
こちらのソフトでは、1文字表示する毎に、何故かINT 21h, AH=06h, DL=FFhで
キー入力のチェックをしており、上記の条件に当てはまっていたため、
1文字表示する毎にSleep(10)してしまっていました。

Sleep(10)の代わりに、_mm_pause()を実行するように修正しています。

---------------------------------------------------------------

おお、MEU の表示が速くなった。\(^^)/ ヤッタ-

最近はVZのほうを弄っているので、あまり動作報告できないです。
10#さんから頂いたパッチを積み残したままだったんですが
最近必要を感じて、泥縄を弄っているところです。例えば、

MS-DOS Player for Win32-x64 謎WIPページ

このような長いタイトルのWEBのページをテキストに落として
VZで見るのに、SFNだとタイトルがわかりにくいので
LFNで表示させたいが、半角空白があるとうまくないのです。

やっと形が出来てきたところですが、MS-DOS Player+VZだと
現状開けないので、まずVZをきちんと形にしないとね。
この文章はMS-DOS Player+VZで書いてます。

# 全てはVZのために


      - No.7778 -    このTreeへ    コメント元:7758 へ    [リストへもどる ] soft