I/O-Befehle

Ä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.

Gerätestatus

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 R2
Bei 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.

Datenbyte lesen

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

Datenbyte schreiben

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