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.
Bemerkung | Bit | Beschreibung |
---|---|---|
5100 | 0 | 1=Reset Read Data Error |
5110 | 0 | 1=Load jumper information into World Trade Latch and selector |
1 | 0=Disable Interrupts | |
2 | 0=Enable Interrupts | |
3 | 0=Display off | |
5110 | 4 | 0=Display on |
5 | 0=Toggle RWS/ROS Level 0 | |
5110 | 6 | 0=Alarm on |
5110 | 7 | 0=Alarm off |
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | ||
1 | 0=Level 1 ROS; 1=Level 1 RWS | |
2 | 0=Level 2 ROS; 1=Level 2 RWS | |
3 | 0=Level 3 ROS; 1=Level 3 RWS | |
4 | ?? | |
5 | ||
6 | ||
7 |
Diese I/O-Befehle führen die Shift- bzw. Rotierbefehle des Prozessors aus.
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 1=ROS write enable | |
1 | ||
2 | ||
3 | ||
5100 | 4 | 1=Select BASIC ROS/Common ROS |
5110 | 4 | 1=Select BASIC ROS |
5 | 1=Select APL ROS | |
5110 | 6 | 1=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.
nur 5110
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 0=I/O ROS | |
1 | 0=Interpreter ROS | |
2 | immer 1 | |
3 | immer 1 | |
4 | immer 1 | |
5 | immer 1 | |
6 | immer 1 | |
7 | immer 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.
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 1=Bereich 0000-1FFF vorhanden | |
1 | 1=Bereich 2000-3FFF vorhanden | |
2 | 1=Bereich 4000-5FFF vorhanden | |
3 | 1=Bereich 6000-7FFF vorhanden | |
4 | 1=Bereich 8000-9FFF vorhanden | |
5 | 1=Bereich A000-BFFF vorhanden | |
6 | 1=Bereich C000-DFFF vorhanden | |
7 | 1=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.
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | ||
1 | 0=Reset interrupt 3 | |
2 | ||
5100 | 3 | 0=Keyboard lock; unused! |
4 | (Interrupt 2?) | |
5 | (Interrupt 2?) | |
6 | 0=Typamatic on; 1=Typamatic off | |
7 | 0=Enable interrupt 3; 1=disable interrupt 3 |
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
Dies ist das Statusbyte, das mittels OpE gelesen wird.
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | (immer 0?) | |
1 | 0=APL; 1=BASIC (vom Schalter an der Frontplatte) | |
2 | immer 1 | |
3 | immer 1 | |
5110 | 4 | Key Pending |
5 | immer 1 | |
6 | immer 1 | |
5110 | 7 | Katakana Enable (wenn vorhanden) |
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 1=Start Mode | |
1 | 1=Start Read | |
2 | 1=Diag 1 | |
3 | 1=Diag 2 | |
4 | 1=Erase gate on | |
5 | 1=Read/Write CRC | |
6 | 1=Write AM | |
7 | 1=Reset Read/Write/Diag |
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 |
---|---|---|
0 | 1=Reset New Media Bit | |
1 | 1=MFM, 0=FM | |
2 | 1=Switch Filter | |
3 | 1=Inner Tracks | |
4 | 1=Engage Head | |
5 | 1=Side 1, 0=Side 0 | |
6 | Access Line 1 | |
7 | Access 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.
Im Access Mode wird mit GET der Status des Diskettenlaufwerks, nicht des Controllers, abgefragt.
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 1=New Media | |
1 | 1=MFM, 0=FM | |
2 | 1=Switch Filter | |
3 | 1=Inner Tracks | |
4 | Head Engage (1=Engaged) | |
5 | Head Selected (1=Side 1) | |
6 | Access Line 1 | |
7 | Access Line 2 |
Mit OpE erhält man den Status des Diskettenadapters.
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 1=Write Mode | |
1 | 1=Read Mode | |
2 | 1=Diag 1 or 2 | |
3 | 1=Index Hole | |
4 | 1=Erase Gate Sense | |
5 | 1=Diskette 2, 0=Diskette 1 | |
6 | 1=CRC Error | |
7 | 1=R/W Overrun |
Bemerkung | Bit | Bit=0 | Bit=1 |
---|---|---|---|
0 | Run | Stop | |
1 | Forward | Reverse | |
2 | Channel 1 | Channel 0 | |
3 | Write | Read | |
4 | Channel 0 erase | Not channel 0 erase | |
5 | Channel 1 erase | Not channel 1 erase | |
6 | Diagnostic mode | Not diagnostic mode | |
7 | Interrupt enabled | Interrupt disabled |
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.
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 | |||
2 | Byte mode | Bit mode | |
3 | |||
4 | |||
5 | |||
6 | First transition | No action | |
7 | +Serial write data out | No action |
Mit OpE erhält man den Status des Bandadapters, allerdings muß man folgende Vorbereitungen treffen:
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 |
---|---|---|
0 | 1=End of tape (EOT) | |
1 | 1=No device address E response | |
2 | 1=Tape running | |
3 | 1=Cartridge in place | |
4 | 1=Erase on | |
5 | 1=LED and erase OK | |
6 | 1=File protected | |
7 | 0=Beginning of tape (BOT) |
Bemerkung | Bit | Beschreibung |
---|---|---|
0 | 1=Reset Async. comm/Serial I/O | |
1 | 1=Reset tape adapter | |
2 | 1=Reset keyboard | |
3 | 1=Reset printer | |
4 | 1=Reset display adapter | |
5 | 1=Reset device address B (unused) | |
6 | 1=Reset device address C (unused) | |
7 | 1=Reset diskette adapter |
Mit einem PUTB kann man den Displayadapter zwischen verschiedenen Zeichensätzen umschalten.
$00 - EBCDIC $10 - French Canadian $20 - International $30 - United Kingdom $40 - Spanish Speaking $50 - Spain $60 - Portugal $70 - Japan $80 - Italy $90 - France $A0 - Finland/Sweden $B0 - Denmark/Norway $C0 - Brazil $D0 - Belgium $E0 - Austria/Germany $F0 - Katakana