Hallo,
ein paar Fragen zum grundlegenden Ablauf der Kommunikation mit der Aussenwelt:
Laut Bitte melde dich an, um diesen Link zu sehen. ist ja die CIA1 für Tastatur und Joystickabfrage zuständig, und die Abfrage erfolgt im Kernal.
Dabei wird wohl Port A Als Ausgang und Port B als Eingang definiert. Soweit noch alles klar.
Die Tastaturabfrage geschieht nun über eine 0 die durch die einzelnen PortBits von Port A geshiftet wird und dann wird an Port B geprüft ob eine Leitung nun auf Low liegt -> Tastendruck. Auch das verstehe ich noch.
Wie läuft das aber jetzt mit den Joysticks?
An Port B (Joy1) verstehe ich es ja noch, der Port ist auf Eingang gestellt, durch die internen Pull-Ups auf High und der Joystick zieht die entsprechenden Leitungen auf Low, indem ein Schluss zu GND geschaffen wird.
Aber was ist mit Port2 (also CIA Port A)? Der ist doch auf Ausgang programmiert - wie kommt da die Pegeländerung zustande? Da sollte doch immer das anliegen was als letztes ins Datenregister reingepoked wurde, warum also reagiert der Port auf den Schluss zur Masse im Joystick? Da würde doch de facto ein Kurzer entstehen, da der ausgang 5V direkt an Masse anlegt, belastet das nicht den Ausgang arg?
(Ach ja, kurze Seitenfrage: Die $7F die da ohne Betätigung anliegen ergeben sich daraus dass der Ausgang zwischen den Shiftereien so 'geparkt' wird- es wird also nicht bei jeder Tastaturabfrage durch den Kernal der Zustand des Ports abgefragt?)
Was würde eigentlich passieren wenn man beide DDR der CIA auf Ausgang programmiert und dann eine Taste drückt? Die Ausgänge kollidieren dann ja, könnte das einen Schaden an der CIA verursachen (aka 'Killerpoke')?