PS/2-Maus — Änderungen 2233 → 2234

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>
−
{| colspan=3 | Bitfelder des Statusbytes, das beim Lesen des 64h's gelisfert wird
+
{|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
 
|}
 
|}