カテゴリ | 重要度 | ステータス | 解決状況 | 登録日時 | 最終更新 |
---|---|---|---|---|---|
システムコア | 低 | 認証済み | 未処理 | 2024-09-12 08:53 | 2024-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 | ||||
添付ファイル |