| Zeile 21: | Zeile 21: | ||
<br> | <br> | ||
| − | Normalerweise wird | + | Normalerweise wird der erste Auxiliary Port (PSAUX0*) für eine Tastatur verwendet und an den zweiten (PSAUX1*) ein Maus oder ein anderes Zeigegerät angeschlossen. Technisch unterscheiden sich die beiden Ports nicht. Daher kann man dort beliebige Gerätekombinationen anschließen, solange das BIOS nicht mit einer Fehlermeldung stoppt, weil es bestimmte Geräte an bestimmten Ports erwartet. Beliebige Gerätekombinationen werden z.B. von Linux unterstützt, nicht jedoch von Windows.<br> |
(*Anmerkung zu PSAUX0 und PSAUX1: Diese Begriffe habe ich mir "ausgedacht", da ich keine vernünftige offizielle Bezeichnung kenne. Man wird diese Begriffe also in keiner anderen Referenz finden. Außer es wurde hier abgeschrieben.) | (*Anmerkung zu PSAUX0 und PSAUX1: Diese Begriffe habe ich mir "ausgedacht", da ich keine vernünftige offizielle Bezeichnung kenne. Man wird diese Begriffe also in keiner anderen Referenz finden. Außer es wurde hier abgeschrieben.) | ||
| Zeile 27: | Zeile 27: | ||
== USB Legacy Support == | == USB Legacy Support == | ||
| − | Diese von vielen Mainboards | + | Diese von vielen Mainboards bereitgestellte Funktion simuliert angeschlossene USB-Geräte wie Maus und Tastatur als PS/2 Geräte.<br> |
<br> | <br> | ||
Dies hat für Programmierer Vor- und Nachteile. Einerseits muss man für die Unterstützung solcher Eingabegeräte keine eigenen USB Treiber programmieren. Andererseits ergeben sich damit einige der hier aufgelisteten Probleme:<br> | Dies hat für Programmierer Vor- und Nachteile. Einerseits muss man für die Unterstützung solcher Eingabegeräte keine eigenen USB Treiber programmieren. Andererseits ergeben sich damit einige der hier aufgelisteten Probleme:<br> | ||
| Zeile 43: | Zeile 43: | ||
Programmiert wird der KBC über die 2 Ports 0x60 und 0x64. Dabei werden auf den Ports nur Bytes gesendet und empfangen.<br> | Programmiert wird der KBC über die 2 Ports 0x60 und 0x64. Dabei werden auf den Ports nur Bytes gesendet und empfangen.<br> | ||
<br> | <br> | ||
| − | Über | + | Über den Port 0x64 kann man das Statusregister auslesen und KBC-Befehle senden.<br> |
<br> | <br> | ||
| − | + | Der Port 0x60 dient als Ein-/Ausgabe Puffer. Parameter oder Rückgabewerte für einen Befehl werden über diesen Port geschrieben bzw. gelesen. Wenn keine Befehlsparameter erwartet werden und man auf den Port 0x60 schreibt, wird direkt an PSAUX0 weitergeleitet.<br> | |
| − | *Vor dem Schreiben auf Port 0x60 oder 0x64 muss der | + | *Vor dem Schreiben auf Port 0x60 oder 0x64 muss der Eingabepuffer leer sein. (Port[0x64].Bit[1] == 0) |
| − | *Vor dem Lesen von Port 0x60 muss der | + | *Vor dem Lesen von Port 0x60 muss der Ausgabepuffer voll sein (Port[0x64].Bit[0] == 1) |
=== Statusregister === | === Statusregister === | ||
| Zeile 57: | Zeile 57: | ||
││││││└── Status des Eingabepuffers (KBC <- CPU) : 0=leer (Schreiben auf 0x60 oder 0x64 möglich); 1=voll | ││││││└── Status des Eingabepuffers (KBC <- CPU) : 0=leer (Schreiben auf 0x60 oder 0x64 möglich); 1=voll | ||
│││││└─── 1=Erfolgreicher Selbsttest (Wie Controller_Command_Byte.Bit[3]; sollte immer 1 sein) | │││││└─── 1=Erfolgreicher Selbsttest (Wie Controller_Command_Byte.Bit[3]; sollte immer 1 sein) | ||
| − | ││││└──── zuletzt | + | ││││└──── zuletzt benutzter Port : 0=0x60; 1=0x61 oder 0x64? |
│││└───── Tastatursperre : 0=Tastatur gesperrt; 1=Tastatur nicht gesperrt | │││└───── Tastatursperre : 0=Tastatur gesperrt; 1=Tastatur nicht gesperrt | ||
││└────── PSAUX? | ││└────── PSAUX? | ||
| Zeile 318: | Zeile 318: | ||
jne wait2 | jne wait2 | ||
| − | ;Den neuen Wert für | + | ;Den neuen Wert für den Inputport über Port 0x60 senden |
mov al, 0xFE | mov al, 0xFE | ||
out 0x60, al | out 0x60, al | ||