Skip to content

Shared GIO interrupt bits have no wired-OR between heads/slots #262

Open

Description

@atomchild411

Two graphics heads (or GIO slots) that share an IOC status bit overwrite each other's level: there is no wired-OR between them.

Ioc::set_interrupt sets or clears the L0/L1 bit straight from the caller's level. On the Indy, head 1's FIFO interrupt also uses FifoFull; on the Indigo2, every slot's GioSg*/GioS0*/GioS1* variant sets the same shared GRAPHICS / FIFO_FULL / VERTICAL_RETRACE bit. So when one head deasserts while the other still asserts, the shared bit drops and the second head's interrupt is lost until it is raised again.

A fix would keep each source's level and OR them per status bit (the EXT_IO per-slot bits already tell the slots apart). Found while moving the IOC onto InterruptController (#261), which keeps today's behaviour.

🤖 Generated with Claude Code

Activity

  1. techomancer commented on Oct 22, 2026

    @techomancer
    Owner

    the 2nd head on indy needs to use different interrupts but we have to experiment with that to figure out which interrupts 2nd head should use. docs are not super clear on that.
    as for indigo2 yes, they set these ints by design together and irix acks them together afaik, but they should be multiplexed by ext io.
    if not we should fix it and test multihead.
    so we need a brave soul to run indy and indigo2 multihead and figure out exact interrupt mappings for both.
    the last time i researched this docs/interrupt_map.md

  2. self-assigned this
    on Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions