| Zeile 35: | Zeile 35: | ||
<span id="60hcmds"></span> | <span id="60hcmds"></span> | ||
| − | {| colspan=3 | Dies ist die Liste der Befehle, die an den Keyboard-Input-Buffer (60h) gesendet werden können. | + | {|border="1" align="center" cellpadding="2" cellspacing="2" |
| + | |- | ||
| + | | colspan=3 | Dies ist die Liste der Befehle, die an den Keyboard-Input-Buffer (60h) gesendet werden können. | ||
Werden 2 Bytes verlangt, wird das zweite auch an den Port 60h gesendet. | Werden 2 Bytes verlangt, wird das zweite auch an den Port 60h gesendet. | ||
|- | |- | ||
| Zeile 98: | Zeile 100: | ||
<<span id="60hmouse"></span> | <<span id="60hmouse"></span> | ||
| − | {| colspan=3 | Dies ist die Liste der Befehle, die zur Adjustierung der Maus dienen. Bevor einer dieser Befehle an den Port 60h gesendet werden kann, muss zuerst per<br> | + | {|border="1" align="center" cellpadding="2" cellspacing="2" |
| + | |- | ||
| + | | colspan=3 | Dies ist die Liste der Befehle, die zur Adjustierung der Maus dienen. Bevor einer dieser Befehle an den Port 60h gesendet werden kann, muss zuerst per<br> | ||
"D4h" an den Port 64h, dem Controller gesagt werden, dass das nächste Byte, also eins aus dieser Liste, auch an die Maus gesendet wird. Wir "D4h" nicht<br> | "D4h" an den Port 64h, dem Controller gesagt werden, dass das nächste Byte, also eins aus dieser Liste, auch an die Maus gesendet wird. Wir "D4h" nicht<br> | ||
zuvor verwendet würde der Befehl an die Tastatur und nicht die Maus gehen.<br> | zuvor verwendet würde der Befehl an die Tastatur und nicht die Maus gehen.<br> | ||
| Zeile 162: | Zeile 166: | ||
<span id="spcs"></span> | <span id="spcs"></span> | ||
| − | {| colspan=3 | SpecialCode Liste - SpecialCodes werden an den Port 60h nach Befehlen geschickt | + | {|border="1" align="center" cellpadding="2" cellspacing="2" |
| + | |- | ||
| + | | colspan=3 | SpecialCode Liste - SpecialCodes werden an den Port 60h nach Befehlen geschickt | ||
|- | |- | ||
| '''Code''' || '''Beschreibung''' | | '''Code''' || '''Beschreibung''' | ||
| Zeile 195: | Zeile 201: | ||
<span id="64hread"></span> | <span id="64hread"></span> | ||
| − | {| | + | {|border="1" align="center" cellpadding="2" cellspacing="2" |
|- | |- | ||
| colspan=8 | Bitfelder des Statusbytes, das beim Lesen des 64h's gelisfert wird | | colspan=8 | Bitfelder des Statusbytes, das beim Lesen des 64h's gelisfert wird | ||
| Zeile 201: | Zeile 207: | ||
| '''7''' || '''6''' || '''5''' || '''4''' || '''3''' || '''2''' || '''1''' || '''0''' | | '''7''' || '''6''' || '''5''' || '''4''' || '''3''' || '''2''' || '''1''' || '''0''' | ||
|- | |- | ||
| − | | 1 = Parity-Error bei der letzten Übertragung vom Keyboard | + | | colspan=8 | 1 = Parity-Error bei der letzten Übertragung vom Keyboard |
|- | |- | ||
| − | | || 1 = Ein Time-Out-Error ist aufgetreten, das heißt, dass die Maus oder die Tastatur nicht reagiert hat. Sollte dieser Fehler auftreten sollte mann den Resend-Befehl nutzen. | + | | || colspan=7 | 1 = Ein Time-Out-Error ist aufgetreten, das heißt, dass die Maus oder die Tastatur nicht reagiert hat. Sollte dieser Fehler auftreten sollte mann den Resend-Befehl nutzen. |
|- | |- | ||
| − | | || || 1 = Die Maus hat Daten für uns im Maus-Output-Buffer bereit leigen und sollten nun abgeholt werden<br> | + | | || || colspan=6 | 1 = Die Maus hat Daten für uns im Maus-Output-Buffer bereit leigen und sollten nun abgeholt werden<br> |
0 = es liegen keine Daten für uns bereit | 0 = es liegen keine Daten für uns bereit | ||
|- | |- | ||
| − | | || || || 1 = Keyboard gesperrt<br> | + | | || || || colspan=5 | 1 = Keyboard gesperrt<br> |
0 = Keyboard verfügbar | 0 = Keyboard verfügbar | ||
|- | |- | ||
| − | | || || || || 1 = Das letzte geschrieben Byte war ein Befehl und ging somit an den Port 64h<br> | + | | || || || || colspan=4 | 1 = Das letzte geschrieben Byte war ein Befehl und ging somit an den Port 64h<br> |
0 = Das letzte geschriebene Byte waren Daten und gingnen an den Port 60h | 0 = Das letzte geschriebene Byte waren Daten und gingnen an den Port 60h | ||
|- | |- | ||
| − | | || || || || || 1 = Selftest OK<br> | + | | || || || || || colspan=3 | 1 = Selftest OK<br> |
0 = power up or reset | 0 = power up or reset | ||
|- | |- | ||
| − | | || || || || || || 1 = Der Input-Buffer hat noch Daten, also es liegt noch der zuletzt gesendete Befehl in 60h/64h und wartet auf seine Verarbeitung<br> | + | | || || || || || || colspan=2 | 1 = Der Input-Buffer hat noch Daten, also es liegt noch der zuletzt gesendete Befehl in 60h/64h und wartet auf seine Verarbeitung<br> |
0 = Der Input-Buffer ist leer und alle Befehle sind verarbeitet, nun können wir einen Befehl senden | 0 = Der Input-Buffer ist leer und alle Befehle sind verarbeitet, nun können wir einen Befehl senden | ||
|- | |- | ||
| Zeile 225: | Zeile 231: | ||
<span id="64hcmds"></span> | <span id="64hcmds"></span> | ||
| − | {| colspan=3 | Dies ist die Liste der Befehle, die an den Keyboard-Controller (64h) gesendet werden können.<br> | + | {|border="1" align="center" cellpadding="2" cellspacing="2" |
| + | |- | ||
| + | | colspan=3 | Dies ist die Liste der Befehle, die an den Keyboard-Controller (64h) gesendet werden können.<br> | ||
Werden 2 Bytes verlangt, wird das zweite an den Port 60h gesendet! | Werden 2 Bytes verlangt, wird das zweite an den Port 60h gesendet! | ||
|- | |- | ||
| '''Befehl''' || '''Größe''' || '''Beschreibung''' | | '''Befehl''' || '''Größe''' || '''Beschreibung''' | ||
| + | |- | ||
| + | | ''20h'' || 1 Byte || Dieser Befehl sendet das derzeitige Commando-Byte an den Port 60h, wo es vom User abgeholt werden muss. | ||
| + | Der Aufbau des Commando-Bytes ist folgendermaßen (Beschr. gilt, wenn Bit=1 ist, ansonsten gilt das Gegenteil): | ||
| + | : 7 - reserved (0) | ||
| + | : 6 - IBM PC Kompatibilitäts-Modus - Auch XLAT, konvertiert wie der Befehl, alle Scancodes zu Set 1, ansonsten werden Roh-Daten | ||
| + | geliefert. -> dieses Bit muss gelöscht sein, bevor man die Scancode-Sets per F0h wechselt, denn sonst nur Kauderwelsch ensteht :) | ||
| + | : 5 - IBM PC Kompatibilitäts-Modus - 0 - use 11-bit codes, 1 - use 8086 codes | ||
| + | : 4 - deaktiviere Keyboard | ||
| + | : 3 - ignoriere Sicherheitsverschluss-Status | ||
| + | : 2 - System Flag | ||
| + | : 1 - Aktiviert die Aktivierung des IRQ12, wenn Mausdaten, wie das MouseDataPacket, im Buffer vorhanden sind (Bit5 bei 64h gesetzt) | ||
| + | : 0 - Aktiviert die Aktivierung des IRQ1, wenn Tastaturdaten, wie Scancodes, im Buffer vorhanden sind (Bit1 bei 64h gesetzt) | ||
| + | Notiz: Eigentlich sind bloß Bit 0 und 1 und evtl. noch Bit 4 für uns interessant! | ||
| + | |- | ||
| + | | ''60h'' || 2 Bytes || Dieser Befehl sendet das 2.Byte, Commando-Byte an den Keyboard-Controller. Commando-Byte-Bechreibung siehe 20h | ||
| + | |- | ||
| + | | ''A4h'' || 1 Byte || Prüfe, ob ein Passwort installiert ist, wenn ja gibt es FAh und wenn nicht F1h an den Port 60h aus | ||
| + | |- | ||
| + | | ''A5h 1 Byte Lade das Passwort. Das Passwort wird als Byte-Stream an den Port 60h gesendet und endet mit einem Byte=00h | ||
| + | |- | ||
| + | | ''A6h'' || 1 Byte || Prüfe Passwort | ||
| + | |- | ||
| + | | ''A7h'' || 1 Byte || Deaktiviere den Maus-Port, sodass die Maus wir deaktiviert | ||
| + | |- | ||
| + | | ''A8h'' || 1 Byte || Aktiviere die Maus | ||
| + | |- | ||
| + | | ''A9h'' || 1 Byte Teste Mausport, das Ergebnis wird an 60h geschickt und kann folgendermaßen aussehen: | ||
| + | : 00h - no error | ||
| + | : 01h - keyboard clock line stuck low | ||
| + | : 02h - keyboard clock line stuck high | ||
| + | : 03h - keyboard data line is stuck low | ||
| + | : 04h - keyboard data line stuck high | ||
| + | : 05h - (Compaq only) diagnostic feature | ||
| + | |- | ||
| + | | ''FFh - Total error | ||
| + | |- | ||
| + | | ''AAh'' || 1 Byte || Initiiert Selftest und sendet bei erfolgreichen Test 55h an 60h, bei Fehler jedoch FCh an 60h | ||
| + | |- | ||
| + | | ''ABh'' || 1 Byte || Testet das Interface, für mögliche Ergebnisse siehe Befehl A9h | ||
| + | |- | ||
| + | | ''ADh'' || 1 Byte || Deaktiviere Keyboard (Bit 4 in Commando-Byte). | ||
| + | |- | ||
| + | | ''AEh'' || 1 Byte || Aktiviere Keyboard wieder (Bit 4 in commando-Byte) | ||
| + | |- | ||
| + | | ''C0h'' || 1 Byte || Lese Inputport-Byte nach 60h aus. Dieses ist wie folgt aufgebaut | ||
| + | : 7 - Keyboard aktiviert/nicht gesperrt | ||
| + | : 6 - 0 - Video ist CGA (Farbe) | ||
| + | 1 - Video ist MDA (schwarz/weiß) | ||
| + | : 5 - 0 - Manufaktur-jumper ist installiert (Manufaktor-Testmodus) | ||
| + | 1 - normal | ||
| + | : 4 - war früher dafür da um die Größe des Ram zu symbolisieren, wir aber nciht mehr genutzt | ||
| + | : 3 - reserved | ||
| + | : 2 - Keyboard hat kein Strom | ||
| + | : 1 - current mouse serial data input state | ||
| + | : 0 - current keyboard serial input state | ||
| + | |- | ||
| + | | ''D0h'' || 1 Byte || Lese das Ouputport-Byte und platziere in auf Port 60h um ihn odrt abholen lassen zu können. | ||
| + | Das Byte sieht folgendermaßen aus(Beschr. gilt, wenn Bit=1 ist): | ||
| + | : 7 - keyboard data (output) | ||
| + | : 6 - keyboard clock (output/signal) | ||
| + | : 5 - In OutputBuffer ist ein Mausbyte (sobald dies gesetzt ist wird IRQ12 aufgerufen, sofern Bit1 im Commando-Byte gesetzt ist) | ||
| + | : 4 - In OutputBuffer sind Daten der Tastatur byte (aktiviert IRQ1, sofern Bit0 im Commando-Byte gesetzt ist) | ||
| + | : 3 - mouse data (output) | ||
| + | : 2 - mouse clock (output) | ||
| + | : 1 - Aktiviere die A20-Gate | ||
| + | : 0 - System reset/Reset processor | ||
| + | Notiz: Bit 0 sollte immer gesetzt sein, wenn man per D1h das Outputport-Byte schreibt :) | ||
| + | |- | ||
| + | | ''D1h'' || 2 Bytes || Das zweite Byte ist das Outpuport-Byte, welches somit das Outputport-Byte neu setzt. siehe auch Befehl D0h | ||
| + | |- | ||
| + | | ''D2h'' || 2 Bytes || Dieser Befehl schreibt das zweite Byte in den Output-Buffer des Keyboards (60h) | ||
| + | |- | ||
| + | | ''D3h'' || 2 Bytes || Dieser hingegen schreibt das zweite Byte in den Output-Buffer der Maus (auch 60h, aber zum auslesen muss die Tastatur deaktiviert sein) | ||
| + | |- | ||
| + | | ''D4h'' || 1 Byte || Dies ist der wichtigstste Befehl, den wir für unsere Mau benötigen, denn mit diesen Befehl wird der Tastatur gesagt, dass das nächste Byte, | ||
| + | was an den Port 60h gesendet wird nicht an den Tastatur-Controller sondern an die Maus gesendet werden soll. Für eine Liste der möglichen | ||
| + | Mausbefehle siehe hier. | ||
| + | |- | ||
| + | | ''EDh'' || 2 Bytes || Dieser Befehl ist zum löschen und anschalten der LEDs der Tastatur. Wenn das entsprechende Bit 1 ist, ist die LED an, ansonsten aus. | ||
| + | : Bit 7-3 : 0 = reserved | ||
| + | : Bit 2 : 0 = Caps Lock LED off -> 1 = on | ||
| + | : Bit 3 : 0 = Num Lock LED off -> 1 = on | ||
| + | : Bit 4 : 0 = Scroll Lock LED off -> 1 = on | ||
|} | |} | ||