作りたいものに妥協しないために、会社を興してまで完成させた作品です。うれろー、うれろー。

2014年11月07日

MS-DOS PlayerとVZエディタ

141107-1.png

VZエディタを入手できたので、MS-DOS Player上での動作確認をしてみました。
IMEから漢字を正しく入力できない件を除いて、そこそこ動作していたようですね。

漢字の問題は、キーボードBIOSでキー入力の検出とキーコードの取得をしているのに、
何故かマルチバイト文字の2バイト目はMS-DOSのシステムコールで行っているのが原因でした。

キーボードBIOSでキー入力を検出、MS-DOSのシステムコールでキーコードを取得するケースは
EXDEBのために修正していたのですが、このケースは想像できなかった(苦笑)

取り急ぎ、今晩のリリースで修正しています。
VTDOSで動かす方が快適だろうとは思いますが、まあネタ程度に。


(2014/11/19 0:20追記)
BUPDATEでファイルを更新した際に、タイムスタンプが正しく更新されない不具合を修正しました。
Twitterの方でご指摘いただいた方、多謝多謝です。


(2014/11/30 17:30追記)
141130-1.png

キーボードコントローラ経由でのA20ラインの制御をサポートしました。
「はじめて読む486」のサンプルプログラムが幾つか動くようになっています。
ついでに、今回から486版のバイナリもビルドするようにしました。

また、int21h ax=5800h/5801h/5802h/5803hの仮サポートを行いました。
ただしUMBは未サポートのため、これらのサービスを実行してもエラーを返さない程度です。

例によって、Twitterの投稿から更新ネタを拾っています(を
不具合情報もっともっとプリーズです。


(2014/12/4 21:30追記)
141204-1.png 141204-2.png 141204-3.png

「はじめて読む486」のサンプルプログラムが更に幾つか動くようになりました。
テキストVRAM、UMB、キーボード割り込みの対応、タイマ割り込みの改良など、
ソースをもりっと大幅に書き換えています。
一通りテストはしていますが、何か不具合がございましたらお知らせください。

141204-4.png

タイマ割り込みの改良ついでに、CPUBENCHをテストしてみました。
私の開発環境では、i286版で80486DXの257MHz相当、i386版で102MHz相当の速度です。
思ったより高速に動いている感じですね。


(2014/12/6 14:40追記)
141206-1.png

VZエディタのGEME.DEFマクロが動くようになりました。
0x3daにあるCRTCのステータスレジスタの垂直同期信号をチェックしていたようです。

141206-3.png

i386/i486版の高速化を図りました。
CPUBENCHでみた限りでは、26%程度の高速化になっているようです。
posted by 武田 at 22:09| Comment(10) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
VzのDISKに入っているgame.def(テトリスもどきのゲーム)は現時点では上手く動作しないようです。マクロは未対応でしょうか。
Posted by shadow at 2014年12月03日 20:13
以前、マクロは動いているとのご報告を頂いていたのですが、確かにGEME.DEFは動いていないですね。
調査してみます。
Posted by 武田 at 2014年12月04日 21:31
Game.def動作確認できました。ところでWin98seのcommand.comを起動しvzを常駐するとファイラーは正常に動作しないです。上記の使用方法は想定外かもしれませんがvzに常駐モードがあるので試してみました。
Posted by Shadow at 2014年12月09日 22:55
下記にあるvzマクロのdenta.defマクロを終了しても画面表示がクリアーされないようです。
http://homepage3.nifty.com/mezala/vz/history/maclib1.html#denta005a
Posted by shadow at 2014年12月28日 11:04
bupdate対策でReadモードが指定されてもRead/Writeモードで開くようにしたようですが、このため読み出し専用属性がついたファイルを開くことができなくなっています。
CreateFileでdwDesiredAccessにGENERIC_READ | FILE_WRITE_ATTRIBUTESを指定して開いて、_open_osfhandleでファイルディスクリプタに変換すれば、読み出し専用ファイルも開けてかつタイムスタンプを変更できるファイルディスクリプタが得られるようです。
Posted by えむけい at 2015年05月07日 23:49
上記を含めて、ishコマンドの使用中に発見した問題に対応してみました。
https://github.com/vyv03354/msdos
・読み出し専用属性のついたファイルが開けない問題を修正
・command.com経由でプログラムを起動したときPSPのコマンドライン末尾にCRが付かない問題を修正
 (このためishがコマンドラインを正しく解析できなかった)
・find first/nextがカレントディレクトリ以外のパスを正しく検索できない問題を修正
 (このためishがカレントディレクトリ以外にある入力ファイルを正しく開けなかった)
・複数DTAに対応
 (ishの入力ファイルをワイルドカードで指定したとき、最初にishを含むファイルを見つけたところで停止していた)
Posted by えむけい at 2015年05月09日 18:02
さらに以下の2点を修正しました。
・8.3名の生成が無効になっているなどの理由で短いファイル名が存在しないとき、find first/nextでバッファオーバーランが起きる問題を修正。
・空きクラスタ数が65536の倍数のときに誤ってディスクがいっぱいと判定される問題を修正。
Posted by えむけい at 2015年05月10日 17:09
今晩のリリースで取り込ませていただきました。
遅くなってしまい申し訳ありません。
Posted by 武田 at 2015年06月25日 00:36
MS-DOS Playerの要望はここでいいでしょうか?
埋め込む機能ですが、リソース系のAPIを使うのはどうでしょうか。

基本的には
1. CopyFile("msdos.exe", "dosapp32.exe")
2. BeginUpdateResource("dosapp32.exe", FALSE)
3. UpdateResource() ... UpdateResource()
4. EndUpdateResource()

という感じなのですが、実際には1の直後にアンチウイルスソフトが書き込み禁止モードでファイルを開いて邪魔してくるので、コピーしたあとに書き込みモードでオープンできるようになるまでループを回して待機する必要があります。

その部分だけちょっと書いてみました。
http://www1.axfc.net/u/3683744/msdos
(アイコンを設定できる機能があると便利そうなので、そのへんも作ってます。*.icoしか読めませんが)

PEファイルを直接書き換えるより安全(?)だと思いますが、いかがでしょうか。
Posted by うめ at 2016年06月26日 20:46
MS-DOS Playerで msdos.exe msdos.zip や msdos.exe readme.txt みたいなことをするのはアホだけですかね
Posted by at 2016年06月26日 22:03
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/408513412

この記事へのトラックバック
まるくん、がんばれ、ちょうがんばれ