カテゴリ 重要度 ステータス 解決状況 登録日時 最終更新
システムコア認証済み未処理2024-09-12 08:532024-09-13 13:57
 
テスターpgimeno担当者 ソースcantab/jupace.cpp
バージョン0.251発生バージョン修正バージョン
修正コミットプルリク
フラグ実機・資料検証済み, コード検証済み
セット jupace
セット詳細
jupace - Jupiter Ace
 
概 要割り込み中のZ80データバスの値が正しくない。
詳 細It seems that the bus value during an interrupt servicing in the jupace driver is fixed to 255. This is incorrect; the real machine's hardware actually derives the value from both text RAM and character set RAM in a nontrivial way, associated with the video hardware. I've posted the details of the correct behaviour here: https://retrocomputing.stackexchange.com/questions/20350/what-would-be-the-value-on-the-data-bus-for-a-jupiter-ace-with-the-z80-interrupt#30578

This affects the game Valkyr in particular (marked as Not Working as of this writing); possibly more. This game assumes that the data bus value during an interrupt is 20h, which is not necessarily true in general but it is true if the machine was just booted and just a LOAD command was entered.
再現手順- Configure the machine with at least 16K extra RAM.
- Load and try to play Valkyr (m_valkyr.zip).
- Observe that the machine resets or otherwise fails to work.
- Optionally, modify the driver to always return 32 instead of 255 as the bus value during interrupt servicing and try again; check that the game loads an runs.
追加情報The value for an unused I/O port (e.g. port 255) is also derived from text RAM / character set RAM in the same way; the same fix could also provide accurate values for unused ports. I'm not aware of any program that expects a correct value though, but it would be nice to have it in the interest of accuracy.

I've written a test ROM that allows verifying whether the IM2 behaviour is correct in normal situations (it's not very thorough though). https://codeberg.org/pgimeno/jupace-testrom
 
添付ファイル