| カテゴリ | 重要度 | ステータス | 解決状況 | 登録日時 | 最終更新 |
|---|---|---|---|---|---|
クラッシュ/フリーズ | 重要 (ゲーム) | 解決済み | 修正済み | 2016-07-06 08:18 | 2016-08-04 18:42 |
| テスター | ballyalley | 担当者 | Duke | ソース | |
| バージョン | 0.175 | 発生バージョン | 0.124 | 修正バージョン | 0.176 |
| 修正コミット | プルリク | ||||
| フラグ | |||||
| セット | astrocde [280zzap] | ||||
| セット詳細 | |||||
| 概 要 | 280Zzzap/Dodgemカートリッジがリセットする。 | ||||
| 詳 細 | This is my first MAME bug report. I hope I have provided enough information to fix the issue. The 2K "280 ZZZap / Dodgem" cartridge (file 280zzap) for the Bally Arcade/Astrocade no longer works in MAME. I just tested it with mame0175b_64bit using Windows 7. This cartridge doesn't act correctly-- but it USED to work fine in early versions of MESS. I can start "280 ZZZap" from the Astrocade menu as normal, and as before, it still works; I can play the game. I pressed reset (F3) and was returned to the main menu (as expected). Then I chose "Dodgem" and I selected my "Race Time" as normal. The game's start screen is quickly drawn, and then the emulator resets to the cartridge's main menu. The last time that Dodgem worked was in MESS 0.123. An update to the astrocade driver was made for the next release of MESS 0.124 (March 2008). The update to the Astrocade driver is described as: - [ASTROCDE] Removed the MESS specific implementation of the video hardware in favor of the more accurate MAME version. Also fixed the I/O ports defintion which improves the sound a lot. [Dirk Best] I posted about this issue on the Bally Alley Yahoo groups in September 2013. A member of the group (Richard Degler) sent me a private email with an explanation of what is happening in the emulator what the Astrocade driver fails to work correctly. Hopefully, Richard's information will help someone figure-out what is causing the issue. Here is what I received from Richard: If you're serious about getting MESS fixed for Dodgem, here's where it goes wrong LD A,$23 ; set Interrupt register for L23xx LD I,A Setting up this here... ; Interrupt Vectors table L2330: DW L2334 ; for DODGEM only L2332: DW L24EA ; for 280 ZZZAP ; DODGEM Interrupt handler L2334: EX AF,AF' ; [aka DB $08,$D9] EXX ... Then later, with Game ID either 0 for 280ZZZap or 1 for Dodgem... ; Jump over ?? entry point L2493: LD HL,L4FC3 ; "custom time base" byte LD BC,$0601 ; reset to 6 and mask CT0 on CALL CTIMER ; do a System CALL CALL STIMER ; do another System CALL LD BC,$3246 LD A,(L4F5C) ; read Game ID AND A JR Z,L24AB ; (+$03) skip if 280 ZZZAP LD BC,$30A0 ; on DODGEM only L24AB: LD A,B OUT (INFBK),A ; &(13)=regB for INterrupt FeedBacK LD A,C OUT (INLIN),A ; &(15)=regC for write INterrupt LINe POP IX EXX EX AF,AF' EI RET If you set a "bp 24ab" and "F12" to Run and select 1 for 280ZZZAP then "Run to Next Interrupt - F7" you can see that the interrupt goes to 24EA as it should, but select 2 for DODGEM instead then "F7" it goes off to D908 which, if you do the math, means it used L2334: as a vector NOT the targeted routine. The WZ "register" in the left column not only shows this final Interrupt Routine address, but if you step thorough using F10 rather than F7 you can see it shows the last byte OUTput (x 256) and the Port Number PLUS one, which seems like a bug in the display rather than the actual Port it wrote to. That is the full explanation that Richard sent to me. | ||||
| 再現手順 | |||||
| 追加情報 | |||||
| 添付ファイル | |||||