| Zeile 17: | Zeile 17: | ||
| + | |||
| + | Statusregister (lesen von Port 0x64) | ||
<pre> | <pre> | ||
| − | + | Bit 76543210 | |
| + | │││││││└─ Status des Ausgabepuffers (KBC -> CPU) : 0=leer; 1=voll (es kann von Port 0x60 gelesen werden) | ||
| + | ││││││└── Status des Eingabepuffers (KBC <- CPU) : 0=leer (Schreiben auf 0x60 oder 0x64 möglich); 1=voll | ||
| + | │││││└─── Systemstatus? : 0=Reset/Selbsttest wird gerade ausgeführt; 1=Selbsttest OK | ||
| + | ││││└──── zuletzt benutztes Port : 0=0x60; 1=0x61 oder 0x64? | ||
| + | │││└───── Tastatursperre : 0=Tastatur gesperrt; 1=Tastatur nicht gesperrt | ||
| + | ││└────── PSAUX? | ||
| + | │└─────── Timeout : 1=Tastatur oder PSAUX-Gerät ragiert nicht? | ||
| + | └──────── Paritätsfehler : 1=Beim letzten Senden/Empfangen trat ein Paritätsfehler auf | ||
| + | </pre> | ||
| + | <br> | ||
| + | Inputport (Lesen über KBC-Befehl 0xC0) | ||
| + | <pre> | ||
Bit 76543210 | Bit 76543210 | ||
| − | + | │││││││└─ Keyboard data in pin? | |
| − | + | ││││││└── PS/2 mouse in pin? | |
| − | + | │││││└─── Reserviert | |
| − | + | ││││└──── Reserviert | |
| − | + | │││└───── Reserviert | |
| − | + | ││└────── Reserviert | |
| − | + | │└─────── Wether you have a color or mono screen? | |
| − | + | └──────── Tastatursperre : 0=Tastatur gesperrt; 1=Tastatur nicht gesperrt | |
| + | </pre> | ||
| + | <br> | ||
| + | Outputport (Lesen über KBC-Befehl 0xD0, schreiben über KBC-Befehl 0xD1) | ||
| + | <pre> | ||
| + | Bit 76543210 | ||
| + | │││││││└─ 1=CPU-Reset | ||
| + | ││││││└── 1=A20-Gate eingeschaltet | ||
| + | │││││└─── ? PS/2 mouse data out | ||
| + | ││││└──── ? PS/2 mouse clock signal | ||
| + | │││└───── ? 1: Output buffer full | ||
| + | ││└────── ? 1: Output buffer PS/2 mouse full | ||
| + | │└─────── ? Keyboard clock signal | ||
| + | └──────── ? Keyboard data out | ||
| + | </pre> | ||
| + | <br> | ||
| − | |||
| + | Port 0x61 (lesen und schreiben) | ||
| + | <pre> | ||
Bit 76543210 | Bit 76543210 | ||
| − | + | │││││││└─ PPI \ | |
| − | + | ││││││└── PPI \ | |
| − | + | │││││└─── PPI |Dieser Teil ist vom Programmable Peripheral Interface | |
| − | + | ││││└──── PPI |nicht überschreiben! | |
| − | + | │││└───── PPI / | |
| − | + | ││└────── PPI / | |
| − | + | │└─────── Setzt die "clock"-Leitung auf low, so dass die Tastatur keine Daten an den PC senden kann | |
| − | + | └──────── 0=Tastatur eingeschaltet; 1=Tastatur ausgeschaltet | |
| + | </pre> | ||
| + | <br> | ||
| + | |||
| + | KBC-Befehle (schreiben auf Port 0x64)<br> | ||
| + | Bevor man auf Port 0x64 schreibt, müssen Port[0x60].Bit[1]==0 und Port[0x60].Bit[2]==1 sein! | ||
| + | <pre> | ||
| + | 0xAA Tastatur-Selbsttest. Sollte 0x55 auf Port 0x60 zurückgeben. | ||
| + | |||
| + | 0xAB Testen des Tastaturanschlusses. Auf Port 0x60 wird ein Byte zurückgegeben: | ||
| + | |||
| + | 00h: No error | ||
| + | 01h: Clock low | ||
| + | 02h: Clock high | ||
| + | 03h: Data low | ||
| + | 04h: Data high | ||
| + | ffh: Total Error | ||
| + | |||
| + | 0xAD Deaktivieren der Tastatur | ||
| + | |||
| + | 0xAE Aktivieren der Tastatur | ||
| + | |||
| + | 0xC0 Lesen des Inputports. Gibt den Inhalt vom Inputport auf Port 0x60 aus. (Siehe: Inputport) | ||
| + | |||
| + | 0xD0 Lesen des Outputports. Gibt den Inhalt vom Outputport auf Port 0x60 aus. (Siehe: Outputport) | ||
| + | |||
| + | 0xD1 Schreiben des Outputports. Den neuen Wert für das Outputport auf Port 0x60 schreiben. (Siehe: Outputport) | ||
| + | |||
| + | 0xD2 ? | ||
| + | 0xD3 ? | ||
| + | 0xD4 ? | ||
| + | |||
| + | 0xE0 ? | ||
| + | |||
| + | 0xFx ? | ||
| + | |||
| + | |||
| + | </pre> | ||
| + | <br> | ||
| + | |||
| + | Tastatur-Befehle (schreiben auf Port 0x60)<br> | ||
| + | Bevor man auf Port 0x60 schreibt, müssen Port[0x60].Bit[1]==0 und Port[0x60].Bit[2]==1 sein! | ||
| + | <pre> | ||
| + | 0xED Setzen der LEDs auf der Tastatur. Ein zweites Byte wird über Port 0x60 gesendet: | ||
| + | |||
| + | Bit 76543210 | ||
| + | │││││││└─ Scroll Lock : 0=aus 1=an | ||
| + | ││││││└── Num Lock : 0=aus 1=an | ||
| + | │││││└─── Caps Lock : 0=aus 1=an | ||
| + | └┴┴┴┴──── 0 | ||
| + | |||
| + | 0xEE Dieser Befehl ist zum testen der Tastatur. Die Tastatur sollte mit 0xEE antworten. | ||
| + | |||
| + | 0xF0 Auswählen des Scancodes. Als Parameter den Scancode 1, 2(standard) oder 3 auf Port 0x60 senden. | ||
| + | (Anmerkung: Kann man mit dem Wert 0 als Parameter den aktuellen Scancode auslesen?) | ||
| + | |||
| + | 0xF2 Diesen Befhel sendet man zum identifiziren der Tastatur. Es gibt folgende Rückgabewerte: | ||
| + | |||
| + | XT Tastatur : Timeout (Port[0x64].Bit[6]=1) | ||
| + | AT Tastatur : Rückgabewert 0xFA | ||
| + | MF II Tastatur : Rückgabewert 0xFA 0xAB 0x41 | ||
| + | |||
| + | 0xF3 Setzen der Wiederholrate für gedrückte Tasten. Ein zweites Byte wird über Port 0x60 gesendet: | ||
| + | |||
| + | Bit 76543210 | ||
| + | │││└┴┴┴┴─ Wiederholrate der Taste nach der Wartezeit | ||
| + | │││ Wert : Wiederholungen pro Sekunde | ||
| + | │││ 00000 : 30 | ||
| + | │││ 00001 : 26,7 | ||
| + | │││ 00010 : 24 | ||
| + | │││ 00100 : 20 | ||
| + | │││ 01000 : 15 | ||
| + | │││ 01010 : 10 | ||
| + | │││ 01101 : 9 | ||
| + | │││ 10000 : 7,5 | ||
| + | │││ 10100 : 5 | ||
| + | │││ 11111 : 2 | ||
| + | │││ | ||
| + | │└┴────── Wartezeit bevor eine gehaltene Taste wiederholt wird. | ||
| + | │ 00 : 250 ms | ||
| + | │ 01 : 500 ms | ||
| + | │ 10 : 750 ms | ||
| + | │ 11 : 1000 ms | ||
| + | │ | ||
| + | └──────── 0 | ||
| + | |||
| + | 0xF4 ? | ||
| + | 0xF5 ? | ||
| + | 0xF6 ? | ||
| + | |||
| + | 0xFE ? | ||
| + | |||
| + | 0xFF ? | ||
| + | |||
</pre> | </pre> | ||