Oder arbeitet das mit einer Art Latch und wenn ich lese wird kurzfristig auf Eingang umgeschaltet?
genau so.
Und da an den Ports interne PullUps hängen, schalten die Joysticks direkt gegen GND
Setzt Du einen Port auf Ausgang (DDR=1) und schreibst in den Port ein #$00, dann ist der Port nur so lange auf #$00, solange du diesen Port nicht ausliest.
So kannst Du direkt die Joysticks abfragen, Joy1 mit LDA$DC01 und Joy2 mit LDA$DC00 (natürlich mit anschließender Auswertung der Bits 0-4).
EDIT:
nur der gleichzeitige Druck einer "passenden" Taste könnte Dir da in die Suppe spucken, sofern der jeweils andere Port eines der Bit´s 0-4 noch auf 0 gesetzt hat.