I just had an ugly thought about that joydrv code and it leads to this question:
Why are we swapping slots in the mpi at the Init phase exit? Its totally useless at the init exit as that belongs in the IRQ service routine. Particularly AFTER all those accesses intended to clear out any pending traffic from that chip, s/b first! And then restored at exit.
I think we are slot selecting ourselves away from further HD access, hence the I$OPEN freeze...
Back to trolling through joydrv_6551L.asm again. Get rid of that, or move it above the clearing operations, and see if its properly done in the service routine. While I'm checking the stack again. :(