In arnold, when the Z80 CPU acknowledges any interrupt (independent of its mode), it triggers ASIC_AcknowledgeInterrupt. This automatically clears the raster/PRI interrupt (ASIC_ClearRasterInterrupt) or the highest-priority DMA interrupt.
In caprice, asic_get_interrupt_vector is only called under IM 2. In IM 1, the Z80 simply jumps to 0x38 but never acknowledges or clears the pending state in the ASIC.
Find out which behavior is the correct one and fix caprice's behavior if needed. Then check if it fixes any game.
In arnold, when the Z80 CPU acknowledges any interrupt (independent of its mode), it triggers
ASIC_AcknowledgeInterrupt. This automatically clears the raster/PRI interrupt (ASIC_ClearRasterInterrupt) or the highest-priority DMA interrupt.In caprice,
asic_get_interrupt_vectoris only called under IM 2. In IM 1, the Z80 simply jumps to 0x38 but never acknowledges or clears the pending state in the ASIC.Find out which behavior is the correct one and fix caprice's behavior if needed. Then check if it fixes any game.