Repository navigation
Ver.261022
変更履歴
バージョンはリリースした日付(YYMMDD)です。新しいものが上です。
ver 261022
追加したこと
-
CONFIG.SYS のデバイスドライバの組み込み。 起動ドライブ(ゲームのフォルダ)に本物の
CONFIG.SYSがあれば、DEVICE=・DEVICEHIGH=に書かれたドライバを、最初のプログラムより先に読み込んで初期化(INIT)し、装置の鎖(NUL の次)につなぎます。MIDI のドライバや音楽のドライバを CONFIG.SYS で組み込むゲームで、BGM が鳴るようになります。- 実機の MS-DOS と同じく、戦略ルーチン・割込みルーチンを DS:SI = 装置ヘッダ、ES:BX = 要求ヘッダで呼び、
DEVICE=の後ろの行(引数)を渡します。MZ 形式(.EXE)のドライバも読めます。 - メモリの管理(HIMEM・EMM386・VEMM など)・CD-ROM・マウス・日本語入力・SMARTDRV などは組み込みません。ブロック装置(RAM ディスクなど)も組み込みません。
- 組み込んだ文字装置は名前で開けます(読み書き・IOCTL はドライバへは渡しません)。
- INI の
LoadDevices=0で、組み込まないようにできます。設定INI作成.html にも追加しました。
- 実機の MS-DOS と同じく、戦略ルーチン・割込みルーチンを DS:SI = 装置ヘッダ、ES:BX = 要求ヘッダで呼び、
-
フロッピーから起動する(
Boot=FD)ゲームでも、CD-DA が鳴るようにした。 起動ディスクの MS-DOS で CD-ROM のドライバと MSCDEX.EXE を組み込むゲームでは、CD-ROM の装置が無いためにどちらも組み込めず、CD-DA が鳴りませんでした。Boot=FDでCDROM=があるときは、INT 2Fh AH=15h(MSCDEX)を割込みベクタを通さずに PC98PLAYER の MSCDEX へ回し、演奏・停止・トラック表などに答えます。装置ヘッダは MS-DOS のメモリを壊さないよう ROM の空きに置きます。CD の中のファイルは読めません(CD-DA だけ)。
直したこと
- MPU-PC98II(MIDI)の割込みを、受信データを読み終えたら取り下げるようにした。 実機の MPU は受信データがある間だけ割込みの線を上げています。割込みの中で ACK(FEh)を自分で読み終えるドライバで、読み終えたあとも割込みの要求が残っていたため、もう一度割込みに入って来ないデータを割込み禁止のまま待ち続け、ゲームの処理がほとんど進まなくなっていました。
- MPU の受信バッファがいっぱいのとき、新しい ACK(FEh)を捨てていたのを、古いものを捨てるようにしました。読まれずにたまったクロック・トゥ・ホスト(FDh)は、8 個を超えたら足さないようにしました。
ver 261021
追加したこと
Trace=2(止まる・落ちるときの詳しい記録)。 終わったとき(ウインドウを閉じる・リセット)に、ゲームのフォルダへ次の 2 つを書き出します。PC98PLAYER.DEBUG(テキスト): 終わったときの CPU のレジスタ・フラグ・コード・スタック・BP の鎖、PIC / PIT、起動の直後から変わった割込みベクタ(入った回数つき)、MCB の鎖、終わる前 10 秒の 1 秒ごとの様子(レジスタ・スタック・PIC・その 1 秒に入った割込みの回数)、割込みの長い記録(同じ割込みが続くものはまとめて回数を書く)、直近 8192 回の割込みと INT 21h の結果、直近 4096 回の I/O ポート、直近 16384 個の命令(実行する前のレジスタつき)。PC98PLAYER.MEM: 1MB のメモリの中身そのまま。PC98PLAYER.VRAM: テキスト VRAM とグラフィック VRAM の中身。PC98PLAYER.BMP: 終わったときの画面。PC98PLAYER.DEBUGには、画面の設定(文字・グラフィックの GDC の SYNC・PITCH・CSRFORM・ZOOM・SCROLL の領域、モードF/F、表示・描画バンク、GRCG・EGC、パレット)と、画面の設定の OUT(GDC・モードF/F・表示バンク・CRTC)の長い記録も書きます。Trace=2の間は命令を 1 つずつ記録するので、少し重くなります。
- 設定INI作成.html の「記録」で、
Trace=2を選べるようにしました。
直したこと
- マウスドライバ(NEC の MOUSE.COM)を常駐させるゲームで、グラフィック画面が 200 ライン(縦 2 倍)になって、画面の上半分だけが引き伸ばされて見えていた不具合を直した。 BIOS の作業域 0053Ch の bit7(高解像度= 24kHz・400 ラインのモード)を立てていなかったため、マウスドライバがカーソルを出すときに「200 ラインの機械」と判断して、INT 18h AH=42h でグラフィックを 200 ラインに戻していました。起動時と INT 18h AH=0Ah で bit7 を立てるようにしました。
- 割込みの入る位置によって、常駐するサウンドドライバのスタックが別のプログラムのコードを壊し、ゲームが止まったり未定義命令で落ちたりしていた不具合を直した。 スタックを元に戻すときに「SP を戻してから SS を戻す」順で書いている常駐プログラムがあり、その 2 命令の間に割込みが入ると、割込みの記録がまったく別の場所(あとから読み込まれたプログラムのコード)に積まれます。実機でもその 1 命令の間に割込みが入れば壊れますが、ほとんど当たりません。PC98PLAYER では割込みの入る位置が偏っていて何度も当たっていたので、SS を書き換える命令(MOV SS・POP SS)の直前では、割込みを 1 命令だけ待たせるようにしました。
Trace=1の[stall]の記録に、割込みが禁止されたまま止まっているときは、最後に禁止した命令の場所も書くようにしました。