| Zeile 9: | Zeile 9: | ||
Ich empfehle den meisten erst einmal die Spezifikationen nur zu überfliegen und sie sich dann genauer anzuschauen, wenn diese Anhand des Quelltextes beschrieben werden. Leider konnte ich nicht zu jeden Befehl eine 100%-ige Beschreibung anfertigen, da ich noch nicht das vergnügen hatte, diesen zu testen. | Ich empfehle den meisten erst einmal die Spezifikationen nur zu überfliegen und sie sich dann genauer anzuschauen, wenn diese Anhand des Quelltextes beschrieben werden. Leider konnte ich nicht zu jeden Befehl eine 100%-ige Beschreibung anfertigen, da ich noch nicht das vergnügen hatte, diesen zu testen. | ||
| + | == Spezifikationen == | ||
| + | |||
| + | {|border="1" align="center" cellpadding="2" cellspacing="2" | ||
| + | |- | ||
| + | | '''Port''' || '''Zugriff''' || '''Beschreibung''' | ||
== Spezifikationen == | == Spezifikationen == | ||
| Zeile 46: | Zeile 51: | ||
| ''F0h'' || 2 Bytes || Mit diesem Befehl kann abhängig vom zweiten Byte das Scancode Set entweder gesetzt oder abgerufen werden | | ''F0h'' || 2 Bytes || Mit diesem Befehl kann abhängig vom zweiten Byte das Scancode Set entweder gesetzt oder abgerufen werden | ||
Das Format des zweiten Byte: | Das Format des zweiten Byte: | ||
| − | 00h - holt den aktuellen Scancode Set ab, sodass dieser an den Port 60h gesendet wird | + | : 00h - holt den aktuellen Scancode Set ab, sodass dieser an den Port 60h gesendet wird |
| − | 01h - scancode set 1 (PCs and PS/2 mod 30, except Type 2 ctrlr) | + | : 01h - scancode set 1 (PCs and PS/2 mod 30, except Type 2 ctrlr) |
| − | 02h - scancode set 2 (ATs, PS/2, default) | + | : 02h - scancode set 2 (ATs, PS/2, default) |
| − | 03h - scancode set 3 | + | : 03h - scancode set 3 |
|- | |- | ||
| − | | ''F2h'' || 1 Byte || Keyboard ID auslesen -> AT Keyboards liefern als Wert FAh (ACK) zurück | + | | ''F2h'' || 1 Byte || Keyboard ID auslesen |
| − | + | :: -> AT Keyboards liefern als Wert FAh (ACK) zurück | |
| + | :: -> MF2 Keyboards liefern ABh + 41h oder aber auch ABh 83h an den Port 60h | ||
|- | |- | ||
| ''F3h'' || 2 Bytes || Setze die typematic rate/delay. Der Typematic-Delay gibt an, ab wann der Scancode der gedrückten Taste wiederholt an 60h gesendet wird, | | ''F3h'' || 2 Bytes || Setze die typematic rate/delay. Der Typematic-Delay gibt an, ab wann der Scancode der gedrückten Taste wiederholt an 60h gesendet wird, | ||
die Typematic-Rate dagegen gibt an, wie oft dann der Scancode pro Sekunde gesendet wird. | die Typematic-Rate dagegen gibt an, wie oft dann der Scancode pro Sekunde gesendet wird. | ||
Das Format des zweiten Byte: | Das Format des zweiten Byte: | ||
| − | Bit 7 : 0 (reserved) | + | : Bit 7 : 0 (reserved) |
| − | Bit 6-5 : geben die Typematic Delay an | + | : Bit 6-5 : geben die Typematic Delay an |
00 = 250ms 01 = 500ms | 00 = 250ms 01 = 500ms | ||
10 = 750ms 11 = 1000ms | 10 = 750ms 11 = 1000ms | ||
| − | Bit 4-0 : diese beiden geben die Typematic-Rate an, die sich wie folgt zusammen stellt: | + | : Bit 4-0 : diese beiden geben die Typematic-Rate an, die sich wie folgt zusammen stellt: |
| − | 1/( (8+A) * 2^B * 0,00417 ) pro Sekunde A->Bits 2-0 B->Bits 4-3 | + | ::: 1/( (8+A) * 2^B * 0,00417 ) pro Sekunde A->Bits 2-0 B->Bits 4-3 |
| − | + | :: die Formel ein wenig umgestellt: | |
| − | 240/( (8+A) * 2^B ) pro Sekunde -> denn ~0,00417 = 1/240 | + | ::: 240/( (8+A) * 2^B ) pro Sekunde -> denn ~0,00417 = 1/240 |
Bei 00000b würde das dann so aussehen: | Bei 00000b würde das dann so aussehen: | ||
| Zeile 99: | Zeile 105: | ||
|} | |} | ||
| − | + | <span id="60hmouse"></span> | |
{|border="1" align="center" cellpadding="2" cellspacing="2" | {|border="1" align="center" cellpadding="2" cellspacing="2" | ||
|- | |- | ||
| Zeile 168: | Zeile 174: | ||
{|border="1" align="center" cellpadding="2" cellspacing="2" | {|border="1" align="center" cellpadding="2" cellspacing="2" | ||
|- | |- | ||
| − | | colspan= | + | | colspan=2 | SpecialCode Liste - SpecialCodes werden an den Port 60h nach Befehlen geschickt |
|- | |- | ||
| '''Code''' || '''Beschreibung''' | | '''Code''' || '''Beschreibung''' | ||
| Zeile 181: | Zeile 187: | ||
| ''AAh'' || BAT completion code (sent after errorfree Basic Assurance Test) | | ''AAh'' || BAT completion code (sent after errorfree Basic Assurance Test) | ||
|- | |- | ||
| − | | ''ABh'' || das ist das erste der zwei Bytes, die bei MF2-Keyboards als ID geliefert werden (siehe Befehl | + | | ''ABh'' || das ist das erste der zwei Bytes, die bei MF2-Keyboards als ID geliefert werden (siehe Befehl F2h) |
| − | |||
|- | |- | ||
| ''EEh'' || Wird als Echo bei der Selbstdiagnostik zurückgegeben (siehe Befehl EEh) | | ''EEh'' || Wird als Echo bei der Selbstdiagnostik zurückgegeben (siehe Befehl EEh) | ||
| Zeile 242: | Zeile 247: | ||
: 7 - reserved (0) | : 7 - reserved (0) | ||
: 6 - IBM PC Kompatibilitäts-Modus - Auch XLAT, konvertiert wie der Befehl, alle Scancodes zu Set 1, ansonsten werden Roh-Daten | : 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 | : 5 - IBM PC Kompatibilitäts-Modus - 0 - use 11-bit codes, 1 - use 8086 codes | ||
: 4 - deaktiviere Keyboard | : 4 - deaktiviere Keyboard | ||
| Zeile 255: | Zeile 260: | ||
| ''A4h'' || 1 Byte || Prüfe, ob ein Passwort installiert ist, wenn ja gibt es FAh und wenn nicht F1h an den Port 60h aus | | ''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 | + | | ''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 | | ''A6h'' || 1 Byte || Prüfe Passwort | ||
| Zeile 263: | Zeile 268: | ||
| ''A8h'' || 1 Byte || Aktiviere die Maus | | ''A8h'' || 1 Byte || Aktiviere die Maus | ||
|- | |- | ||
| − | | ''A9h'' || 1 Byte | + | | ''A9h'' || 1 Byte || Teste Mausport, das Ergebnis wird an 60h geschickt und kann folgendermaßen aussehen: |
: 00h - no error | : 00h - no error | ||
: 01h - keyboard clock line stuck low | : 01h - keyboard clock line stuck low | ||
| Zeile 270: | Zeile 275: | ||
: 04h - keyboard data line stuck high | : 04h - keyboard data line stuck high | ||
: 05h - (Compaq only) diagnostic feature | : 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 | | ''AAh'' || 1 Byte || Initiiert Selftest und sendet bei erfolgreichen Test 55h an 60h, bei Fehler jedoch FCh an 60h | ||
| Zeile 284: | Zeile 288: | ||
: 7 - Keyboard aktiviert/nicht gesperrt | : 7 - Keyboard aktiviert/nicht gesperrt | ||
: 6 - 0 - Video ist CGA (Farbe) | : 6 - 0 - Video ist CGA (Farbe) | ||
| − | + | :: 1 - Video ist MDA (schwarz/weiß) | |
: 5 - 0 - Manufaktur-jumper ist installiert (Manufaktor-Testmodus) | : 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 | : 4 - war früher dafür da um die Größe des Ram zu symbolisieren, wir aber nciht mehr genutzt | ||
: 3 - reserved | : 3 - reserved | ||