Ähnlich wie die IN und OUT-Befehle beim Z80 oder in der x86-Familie verfügt der Prozessor im IBM 51x0 über Befehle, um mit der Peripherie (z.B. der Tastatur oder dem Diskettenlaufwerk) zu kommunizieren. Es ist zudem die einzige Möglichkeit, dies zu tun, da Geräte nicht in den Adreßraum eingeblendet werden können. Während bei IN oder OUT die Portadresse angegeben wird, muß hier eine von 16 Geräteadressen angegeben werden. Anders als Speichertransfers mit dem RWS oder ROS geschieht der Zugriff auf die Peripherie grundsätzlich byteweise.
Im Gegensatz zum Kapitel Datenübertragung, das auf die Übertragung der Daten-, Steuer- und Statusbytes eingeht, werden hier die Befehle beschrieben, die dafür zuständig sind.
Jedes Gerät stellt i.d.R ein Statusbyte zum Lesen zur Verfügung, das über die
OpcodeE-Leitung angefordet wird. Dafür existiert genau ein Maschinenbefehl, der
diesen Status in ein Register einliest: STAT Rx, i
Beispiel:
STAT R1, $4 liest Statusbyte von der Tastatur nach R1 STAT R2, $D liest Diskette Sense Byte vom Diskettenlaufwerk nach R2Bei besonderen Geräten wie dem Diskettenlaufwerk und dem Drucker existieren weitere Statusbytes. Der Zugriff auf diese hängt jedoch von der Implementierung des Adapters ab.
Hierfür ist der Befehl GETB zuständig, der für das Ziel die Adressierungsarten
Register-direkt oder Register-indirekt mit Postkrement erlaubt.
Beispiel:
GETB R12, $E liest Datenbyte vom Bandlaufwerk LWI R1, #$2000 GETB (R1)+, $D liest Datenbyte vom Diskettenlaufwerk nach $2000 und erhöht R1 um 1
Analog zu GETB existiert zum Schreiben der Befehl PUTB. Eine Einschränkung ist
jedoch das Fehlen der direkten Register-Adressierung.
Beispiel:
LWI R2, #$304F PUTB $5, (R2)-- schreibt den Inhalt von $304F zum Drucker und zieht 2 von R2 abÜber einen Umweg läßt sich aber auch der Inhalt eines Registers ausgeben:
LBI R4, #'C' LWI R5, #$0009 Speicheradresse des Low-Bytes von Register R4 PUTB $5, (R5) schreibt Buchstaben 'C' zum Drucker