Keyboard Controller — Änderungen 11267 → 11268

Zeile 1: Zeile 1:
 
Der '''Keyboard-Controller''' oder auch '''KBC''' ist ein Baustein auf dem Mainboard und dient (unter anderem) der Tastaturansteuerung. Ursprünglich von IBM entwickelt, wurde der Keyboard-Controller in seiner Funktion stark erweitert, wodurch sich heutzutage viele Aufgaben über selbigen erledigen lassen.
 
Der '''Keyboard-Controller''' oder auch '''KBC''' ist ein Baustein auf dem Mainboard und dient (unter anderem) der Tastaturansteuerung. Ursprünglich von IBM entwickelt, wurde der Keyboard-Controller in seiner Funktion stark erweitert, wodurch sich heutzutage viele Aufgaben über selbigen erledigen lassen.
−
 
  
 
Der KBC wurde mit dem AT-System (i286) eingeführt. Im Vorgängersystem XT wurde für vergleichbare Aufgaben das Programmable Peripheral Interface (PPI) genutzt.
 
Der KBC wurde mit dem AT-System (i286) eingeführt. Im Vorgängersystem XT wurde für vergleichbare Aufgaben das Programmable Peripheral Interface (PPI) genutzt.
Zeile 15: Zeile 14:
 
*Information darüber, ob das System eine Monochrom- oder Farbgrafikkarte benutzt (Irrelevant, da Farbgrafik bereits mit XT-Systemen als Standard eingeführt wurde!)
 
*Information darüber, ob das System eine Monochrom- oder Farbgrafikkarte benutzt (Irrelevant, da Farbgrafik bereits mit XT-Systemen als Standard eingeführt wurde!)
  
−
<br />
 
 
== Kommunikationswege ==
 
== Kommunikationswege ==
 
<br />
 
<br />
Zeile 22: Zeile 20:
 
<br />
 
<br />
  
−
Normalerweise wird der erste Auxiliary Port (PSAUX0*) für eine Tastatur verwendet und an den zweiten (PSAUX1*) eine 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.&nbsp;B. von Linux unterstützt, nicht jedoch von Windows.<br />
+
Normalerweise wird der erste Auxiliary Port (PSAUX0*) für eine Tastatur verwendet und an den zweiten (PSAUX1*) eine 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.&nbsp;B. von Linux unterstützt, nicht jedoch von Windows.
  
 
(*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.)
−
<br />
 
  
 
== USB Legacy Support ==
 
== USB Legacy Support ==
Zeile 36: Zeile 33:
 
== Programmieren des KBC ==
 
== Programmieren des KBC ==
  
−
Programmiert wird der KBC über die zwei Ports 0x60 und 0x64. Dabei werden auf den Ports nur Bytes gesendet und empfangen.<br />
+
Programmiert wird der KBC über zwei IO-Ports. Über Port 0x64 kann man das Statusregister auslesen und KBC-Befehle senden. 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 />
 
−
Über den Port 0x64 kann man das Statusregister auslesen und KBC-Befehle senden.<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 Eingabepuffer leer sein. (Port[0x64].Bit[1] == 0)
 
*Vor dem Schreiben auf Port 0x60 oder 0x64 muss der Eingabepuffer leer sein. (Port[0x64].Bit[1] == 0)
Zeile 58: Zeile 51:
 
     └──────── Paritätsfehler: 1=Beim letzten gesendeten/empfangenen Byte trat ein Paritätsfehler auf
 
     └──────── Paritätsfehler: 1=Beim letzten gesendeten/empfangenen Byte trat ein Paritätsfehler auf
 
</pre>
 
</pre>
−
<br />
 
  
 
=== Input Port P1 ===
 
=== Input Port P1 ===
Zeile 76: Zeile 68:
 
     └──────── Tastatursperre: 0=Tastatur gesperrt; 1=Tastatur nicht gesperrt
 
     └──────── Tastatursperre: 0=Tastatur gesperrt; 1=Tastatur nicht gesperrt
 
</pre>
 
</pre>
−
<br />
 
  
 
=== Outputport ===
 
=== Outputport ===
Zeile 91: Zeile 82:
 
     └──────── ? Keyboard data out
 
     └──────── ? Keyboard data out
 
</pre>
 
</pre>
−
<br />
 
  
 
=== Controller Command Byte ===
 
=== Controller Command Byte ===
Zeile 109: Zeile 99:
 
     └──────── 0 (reserviert)
 
     └──────── 0 (reserviert)
 
</pre>
 
</pre>
−
<br />
 
  
 
* [http://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#translationtable KBC-Scancode-Übersetzung]
 
* [http://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#translationtable KBC-Scancode-Übersetzung]
Zeile 147: Zeile 136:
  
 
</pre>
 
</pre>
−
<br />
 
  
 
=== Tastatur-Befehle ===
 
=== Tastatur-Befehle ===