IOC IR pin (FLYBK) on a GPU

Discuss VIDC, translation to VIDC20 and emulation of VIDC
Post Reply
Posts: 2984
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex

IOC IR pin (FLYBK) on a GPU

Post by JonAbbott »

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)
Post Reply