buppu3 / tnCart

FPGA cartridge for MSX
BSD 3-Clause "New" or "Revised" License
23 stars 5 forks source link

1chip MSX で Nextor の仮想 FD の動作がおかしい #8

Closed buppu3 closed 1 week ago

buppu3 commented 2 weeks ago

1chip MSX 上で tnCart の Nextor から仮想 FD のゲームを起動すると、ブート時に画面が暗いまま固まる。 FS-A1F では問題が発生しない。

buppu3 commented 2 weeks ago

1chip MSX 内蔵の DISK BIOS 有効時のメモリが不足が原因。 内蔵 DISK BIOS を無効にしても、特定のソフト(あ~くしゅ)は起動時にハングアップする。

buppu3 commented 1 week ago

プログラムが用意したスタック領域が小さすぎて暴走している現象を確認

あーくしゅ起動すると、下記の動作を行う

  1. BDOS のセクタリードで セクター8~31 を 0100h~ に読み出し、0100h へジャンプ
  2. スタックポインタを 0100h に設定
  3. 0080h~0084h にサブルーチンを転送
  4. BDOS で セクター1438を読み出し
  5. インタースロットコールで RAM の 0080h を呼び出し

1chipMSXで起動すると 4 の実行中に VSYNC 割り込みが発生し、Nextor の BDOS 処理と BIOS の割り込み処理がスタックを 123バイトを超えて使用してしまい、0080h~0084h の内容を破壊してしまう。その後に 5 で 0080h をコールすると意味のないコードを実行し暴走してしまう。

buppu3 commented 1 week ago

パッチをあててスタック領域を増やしても動作しない。

Nextor の割り込みルーチンが E3B7h~にあるが、ゲームのプログラムが E000h へ 2セクタ分のデータを読み出して、割り込みルーチンを破壊している。 FS-A1F の場合も内蔵ドライブを無効にしてゲームを起動すると暴走することを確認した。