Sinclair ZX – Kempston Interface
Zentrales Element der Schaltung ist der 8-fach Puffer und Leitungstreiber 74LS244 (U1). Er funktioniert wie ein digitaler Schalter. Liegt OEa bzw. OEb auf HIGH
, werden die Ausgänge OXa bzw. OXb hochohmig, was in diesem Fall bedeutet, das kein Signal auf die Datenleitungen D0 bis D7 des Expansion Ports gelegt wird. Wird OEa bzw. OEb auf LOW
gezogen, wird das Signal von den Eingangsleitungen IXa bzw. IXb an die entsprechenden Ausgänge und damit an die Datenleitungen D0 bis D7 durchgeleitet.
Alle acht Eingangsleitungen von U1 werden über das Widerstandsnetzwerk RN1 auf LOW
gehalten. Fünf der Leitungen sind mit dem Joystick-Port verbunden. Da an Pin 8 die Versorgungsspannung anliegt, sorgt ein Tastendruck einer Joystick-Aktion dafür, dass die entsprechende Eingangsleitung auf HIGH
gezogen wird. Schaltet U1 durch, liegen an den Datenleitungen folgende Werte an:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
LOW | LOW | LOW | Ⓗ Feuer | Ⓗ Oben | Ⓗ Unten | Ⓗ Links | Ⓗ Rechts |
Um zu entscheiden, wann U1 die Joystick-Eingaben auf die Datenleitungen legt, wird die IORQ-Leitung und die Adressleitung A5 ausgewertet. Die IORQ-Leitung wird von der CPU auf LOW
gezogen, wenn ein Ein- und Ausgabegerät abgefragt werden soll. Die Adressleitung A5 wurde von Kempston ausgewählt, weil diese noch nicht von der internen Hardware des ZX genutzt wurde. U1 schaltet durch, wenn sowohl IORQ als auch A5 auf LOW
liegen. Durch die Invertierung von OEa bzw. OEb muss ein ODER-Gatter verwendet werden, um diese Logik umzusetzen. Genutzt wird ein 4071 (U2), welcher vier ODER-Gatter in einem IC vereint. Davon wird jedoch nur das erste ODER-Gatter (U2a) genutzt, während die drei übrigen ungenutzt bleiben. Die Eingangsleitungen der ungenutzten ODER-Gatter müssen aus technischen Gründen jedoch mit einem definierten Signalpegel versorgt werden; der Anschluss an +5V bzw. Masse ist aber beliebig und hier einfach aufgrund der Leiterbahnführung auf der Platine so gewählt worden.
Um die Joystick-Daten softwareseitig auszulesen, muss ein Input-/Ouput-Request (IORQ = LOW
) durchgeführt und eine Adresse angegeben werden, bei der A5 auf LOW
liegt (xx0x xxxx). Bei vielen dieser Adressen käme es so jedoch zu Konflikten, da sowohl das Kempston-Interface als auch interne Hardware Daten auf die Datenleitungen auflegen würden. Konfliktfrei sind nur die Adressen xx01 1111. In der Praxis wurde üblicherweise die Adresse 0001 1111 (0x1F) gewählt, um das Kempston-Interface abzufragen.