MS-DOS Player が更新されていました。12月30日の版です。
更新内容を張り付けます。
---------------------------------
2021/12/30
QEMUのtesti386.exeを参考に、NP21/WのI386コアを修正しました。
ia32_x86版のバイナリで、実機と同じ結果が得られるようになっています。
具体的な変更点は以下の通りです。
DAA/DAS/AAA/AAS/AAM/AAD命令を、DOSBoxの実装を基に修正しました。
SHLD/SHRD命令で、16bit以上シフトしたときの処理を修正しました。
FCOM/FCOMI/FXAM命令で、NaNやINFのときのC1,C2,C3フラグの値を修正しました。
FDECSTP/FINCSTP命令で、C1をクリアするよう修正しました。
FLD系命令で、スタックオーバフローの有無でC1をセットまたクリアするよう修正しました。
FSTENV/FLDENV/FSAVE/FLDENV命令で、data16プリフィックスを反映するよう修正しました。
なお、ia32_x64版だと、浮動小数点のテストで例外が発生してしまいます。
x86ビルドとx64ビルドで、何かしら処理が等価になっていないようですね、要調査。
---------------------------------------
さっそく使ってみましたが、ia32版では、自作のアプリでエラーが出ます。
自作アプリとは、turbo basic の古いプログラムで、VGAでないと動きません。
実は、今までの MS-DOS Player では、エラーが出て使えませんでした。
軟式さんの DOSVAXJ3 では使えていました。
確認のために、今回の版の全てのバイナリを試してみました。
i86_x86 VZ起動時に落ちる。VZは、186コードを含んでいます。
i86_x64 VZ起動時に落ちる。VZは、186コードを含んでいます。
i286_x86 問題なし。
i286_x64 問題なし。
i386_x86 問題なし。
i386_x64 問題なし。
i486_x86 問題なし。
i486_x64 問題なし。
ia32_x86 数字4桁の入力で、OE+2?? (??は数字によって変わる)エラーで止まる
ia32_x64 数字4桁の入力で、OE+2?? (??は数字によって変わる)エラーで止まる
数字4桁の入力は、裏で変換の計算をしているので、どこかで引っかかっているのかなと思いました。
私のプログラムか環境のせいだとは思いますが、一応作者の武田さんにご報告をさせていただきました。
今回、MS-DOS Playerで自作の古いアプリが動くようになりましたので、非常にありがたいです。
作者様に感謝いたします。m(__)m
V30 のテストをしていませんでした。これは、186 相当なのですね。
V30_x86 問題なし。
V30_x64 問題なし。
ということで、VZも問題なく起動できます。
今まで常用していた版は、ia32_x64版でした。
\MSDOS\BINARY\IA32_X64 のディレクトリ
2020/05/10 16:18 833,024 msdos.exe
サイズで確認したので、間違いないと思います。
この版の、i486_x64 と、x86 は問題なく動作しました。
つまり、ia32 固有の以前からの問題だったようです。
今回、動作検証のために自作アプリを武田さんに送りました。
そのため turbo basic でコンパイルし直してみましたが、ia32版だけ失敗します。
問題になるコードを TB 内部でも使用しているんでしょうかね。