I/O-Befehle mit speziellen Funktionen

Neben der "normalen" Benutzung der I/O-Befehle für Datentransfers werden diese auch benutzt, um spezielle Funktionen des Rechners, z.B. des Prozessors oder des Graphikadapters, zu steuern bzw. um entsprechende Flags zu setzen. Diese Sonderfunktionen sind im folgenden aufgelistet. Sofern Funktionen nur für die 5100 oder nur die 5110 gültig sein sollten, ist dies jeweils in der ersten Spalte angegeben.

Gerät 0 (Prozessor, Graphikadapter)

Control

Bemerkung Bit Beschreibung
510001=Reset Read Data Error
511001=Load jumper information into World Trade Latch and selector
10=Disable Interrupts
20=Enable Interrupts
30=Display off
511040=Display on
50=Toggle RWS/ROS Level 0
511060=Alarm on
511070=Alarm off

Put (nur 5110)

Bemerkung Bit Beschreibung
0
10=Level 1 ROS; 1=Level 1 RWS
20=Level 2 ROS; 1=Level 2 RWS
30=Level 3 ROS; 1=Level 3 RWS
4??
5
6
7

OpE

Diese I/O-Befehle führen die Shift- bzw. Rotierbefehle des Prozessors aus.

Gerät 1 (Common / Language ROS)

Control

Bemerkung Bit Beschreibung
01=ROS write enable
1
2
3
510041=Select BASIC ROS/Common ROS
511041=Select BASIC ROS
51=Select APL ROS
511061=Select Common ROS
7

Zum Auslesen des ausgewählten ROS wird die Adresse über zwei PUTB-Befehle an Gerät 1 geschickt, zuerst das höherwertige Byte der Adresse, dann das niederwertige.
ACHTUNG: Es wird die Wortadresse erwartet, nicht die Byteadresse!

Anschließend kann mittels zweier GETB ein Wort an der Adresse ausgelesen werden. Der zweite GETB erhöht dabei automatisch die Wortadresse um 1, so daß beim Lesen eines kontinuierlichen Bereiches die Adresse nicht neu übermittelt werden muß.

Über zwei aufeinanderfolgende STAT läßt sich die aktuelle ROS-Adresse wieder zurücklesen.

Interessant hierbei ist Bit 0: Die Fähigkeit, das ROS (bzw. den beschreibbaren Ersatz) zu beschreiben, diente offenbar den Entwicklern, neue Versionen der entsprechenden non-executable ROSse zu testen, ohne gleich duztende neuer EPROMs (wir sind hier in der Zeit der 1702 oder 2708!) oder gar ein neue Maskenroms produzieren zu müssen.

Gerät 2 (Executable ROS)

nur 5110

Control

Bemerkung Bit Beschreibung
00=I/O ROS
10=Interpreter ROS
2immer 1
3immer 1
4immer 1
5immer 1
6immer 1
7immer 1

Da immer nur eines der zwei Executable ROSse (I/O-Routinen und Meta-Interpreter) aktiv sein kann, dient dieser Control-Befehl der Auswahl zwischen diesen beiden. Die Umschaltung zwischen APL und BASIC erfolgt allerdings in Hardware durch den Umschalter APL/BASIC an der Frontplatte.
Offensichtlich braucht man eine Umschaltroutine in jedem dieser ROSse, da die Ausführung sofort nach dem Control-Befehl in das andere ROS umschaltet.

OpE

Bemerkung Bit Beschreibung
01=Bereich 0000-1FFF vorhanden
11=Bereich 2000-3FFF vorhanden
21=Bereich 4000-5FFF vorhanden
31=Bereich 6000-7FFF vorhanden
41=Bereich 8000-9FFF vorhanden
51=Bereich A000-BFFF vorhanden
61=Bereich C000-DFFF vorhanden
71=Bereich E000-FFFF vorhanden

OpE liefert eines von drei Statusbytes, die Auswahl erfolgt durch Vorbelegung des Zielregisters (die Werte in eckigen Klammern stammen vom 5110 Model 1 APL/BASIC ohne Feature ROS):

   $80 - Größe des I/O ROS [= $F0]
   $40 - Größe des Meta-Interpreter ROS [= $C0]
   $20 - (??) [= $80]
Theoretisch können also Lücken vorhanden sein, in der Praxis scheint dies allerdings nicht vorzukommen.
Jeder ROS-Bereich verfügt über eine Setup-Routine, die u.a. einige Variablen im RWS setzt. Diese Routinen liegen alle am Ende des jeweiligen Bereichs und werden durch einen Sprung nach xFFE (s.o.) aufgerufen; der Rücksprung erfolgt nach R2.
Nach eigener Erfahrung gilt folgendes:

Gerät 4 (Tastatur / Steuerung Interrupt 1)

Control

Bemerkung Bit Beschreibung
0
10=Reset interrupt 3
2
510030=Keyboard lock; unused!
4(Interrupt 2?)
5(Interrupt 2?)
60=Typamatic on; 1=Typamatic off
70=Enable interrupt 3; 1=disable interrupt 3

OpE

Die Tastatur liefert jeweils einen Status und einen Scancode zurück. Die Auswahl erfolgt durch Vorbelegung des Zielregisters beim STAT-Befehl:

   $80 - Status lesen
   $40 - Scancode lesen

Statusbyte

Dies ist das Statusbyte, das mittels OpE gelesen wird.

Bemerkung Bit Beschreibung
0(immer 0?)
10=APL; 1=BASIC (vom Schalter an der Frontplatte)
2immer 1
3immer 1
51104Key Pending
5immer 1
6immer 1
51107Katakana Enable (wenn vorhanden)

Gerät D (Diskettenadapter)

Control

Bemerkung Bit Beschreibung
01=Start Mode
11=Start Read
21=Diag 1
31=Diag 2
41=Erase gate on
51=Read/Write CRC
61=Write AM
71=Reset Read/Write/Diag

Put

Im Access Mode des Controllers werden hiermit die mechanischen Funktionen des ausgewählten Diskettenlaufwerks gesteuert. Die Funktionen sind in der folgenden Tabelle aufgelistet.

Bemerkung Bit Beschreibung
01=Reset New Media Bit
11=MFM, 0=FM
21=Switch Filter
31=Inner Tracks
41=Engage Head
51=Side 1, 0=Side 0
6Access Line 1
7Access Line 2

Im Reset Mode wird mit PUT die gewünschte Untergeräteadresse an den Diskettencontroller übermittelt, also welches der bis zu vier möglichen Laufwerke.

Im Schreibmodus werden per PUT die einzelnen Datenbytes zur Diskette übertragen.

Get

Im Access Mode wird mit GET der Status des Diskettenlaufwerks, nicht des Controllers, abgefragt.

Bemerkung Bit Beschreibung
01=New Media
11=MFM, 0=FM
21=Switch Filter
31=Inner Tracks
4Head Engage (1=Engaged)
5Head Selected (1=Side 1)
6Access Line 1
7Access Line 2

OpE

Mit OpE erhält man den Status des Diskettenadapters.

Bemerkung Bit Beschreibung
01=Write Mode
11=Read Mode
21=Diag 1 or 2
31=Index Hole
41=Erase Gate Sense
51=Diskette 2, 0=Diskette 1
61=CRC Error
71=R/W Overrun

Gerät E (Bandadapter)

Control

Bemerkung Bit Bit=0 Bit=1
0RunStop
1ForwardReverse
2Channel 1Channel 0
3WriteRead
4Channel 0 eraseNot channel 0 erase
5Channel 1 eraseNot channel 1 erase
6Diagnostic modeNot diagnostic mode
7Interrupt enabledInterrupt disabled

Erläuterungen

Diese Auflistung steht so im IBM 5100 MIM, im IBM 5110 MIM hat man sie unterschlagen. Allerdings ist sie nicht völlig verständlich bzw. irreführend, daher hier noch einige Erläuterungen.

Put

Die folgende Beschreibung findet sich nur im IBM 5100 MIM Seite C-14, gilt aber auch für die 5110.

Bemerkung Bit Bit=0 Bit=1
0
1
2Byte modeBit mode
3
4
5
6First transitionNo action
7+Serial write data outNo action

Erläuterungen

OpE

Mit OpE erhält man den Status des Bandadapters, allerdings muß man folgende Vorbereitungen treffen:

Der relevante Ausschnitt aus der Tape Sense Routine im Executable ROS sieht wie folgt aus:
  CTRL $E, #$FF
  GETB R5, $E
  LBI R5, #$40
  STAT R5, $E
  MOVE $8E, R5    ; Speichere Status nach 008F (siehe MIM Seite 3-34)

Bemerkung Bit Beschreibung
01=End of tape (EOT)
11=No device address E response
21=Tape running
31=Cartridge in place
41=Erase on
51=LED and erase OK
61=File protected
70=Beginning of tape (BOT)

Gerät F (Reset, Auswahl Zeichensatz)

Control

Bemerkung Bit Beschreibung
01=Reset Async. comm/Serial I/O
11=Reset tape adapter
21=Reset keyboard
31=Reset printer
41=Reset display adapter
51=Reset device address B (unused)
61=Reset device address C (unused)
71=Reset diskette adapter