IOC IR pin (FLYBK) on a GPU
Posted: Mon Feb 20, 2017 11:59 am
Emulating this pin, which on the face of it appears trivial, is somewhat of a problem. Although you can emulate the pin going high at the end of the display and going low during display (as ADFFS does currently), game code won't see the low event as its not executing during the frame blit.
The blitter currently blits the full frame in one go, triggering a virtualized T0/T1 IRQ if either pass zero at the end of a raster. This is sufficient for all (that I've seen at any rate) games that palette swap and is very CPU efficient. This isn't remotely close to what happens on a physical Arc through, as VIDC works in parallel to ARM.
A solution would be to blit one raster, then allow code to continue executing until it's time to plot the next raster, more closely emulating the hardware. As there's no Timer API, I can't currently implement the required IRQ code.
Something to revisit if/when a suitable API is added to RISCOS.
The BBC Emulator that Labyrinth uses, relies on code executing during the screen blit, relying on T0 ticking down. It's possibly using this for speed regulation as RISCOS sets T0 to tick at 100Hz.
EDIT: The following games rely on the IR pin being emulated correctly:
F10231 Ballarena (1990) (Sisteme)
F10629 Tactic (1990) (Eterna)
The blitter currently blits the full frame in one go, triggering a virtualized T0/T1 IRQ if either pass zero at the end of a raster. This is sufficient for all (that I've seen at any rate) games that palette swap and is very CPU efficient. This isn't remotely close to what happens on a physical Arc through, as VIDC works in parallel to ARM.
A solution would be to blit one raster, then allow code to continue executing until it's time to plot the next raster, more closely emulating the hardware. As there's no Timer API, I can't currently implement the required IRQ code.
Something to revisit if/when a suitable API is added to RISCOS.
The BBC Emulator that Labyrinth uses, relies on code executing during the screen blit, relying on T0 ticking down. It's possibly using this for speed regulation as RISCOS sets T0 to tick at 100Hz.
EDIT: The following games rely on the IR pin being emulated correctly:
F10231 Ballarena (1990) (Sisteme)
F10629 Tactic (1990) (Eterna)