Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: sp am 22. January 2005, 11:54

Titel: Keyboard Scancodeset
Beitrag von: sp am 22. January 2005, 11:54
Hallo

welche Scancode-Tabelle benutzt ihr in eueren Treibern?
Ich habe gelesen, dass eigentlich nur die zweite Tabelle so richtig unterstützt wird. Stimmt das?


sp
Titel: Keyboard Scancodeset
Beitrag von: Jidder am 23. January 2005, 12:27
mal ne blöde frage: was ist die zweite scancode tabelle?
Titel: Keyboard Scancodeset
Beitrag von: Roshl am 24. January 2005, 22:38
Naja ich hatte da nie Probleme mit, ich hab meinen Treiber rückwärts gebaut sozusagen. Erklärung:
Keyboardtreiber direkt den Scancode als Zahlenwert auf dem Bildschirm ausgeben lassen, jede Taste nach einander gedrückt, Scancode für alles notiert, anhand dessen jumptables geschreiben die sich unterschieden für Funktionstasten (F...) und normalen Zeichen. Dann je nach dem ein anderes Stück Code ausführen lassen. Für normale Zeichen wieder eine Tabelle die die Scancodes in Ascii's überführt.
Treiber funktioniert unter Bochs und unter 2 verschiedenen realen Rechnern. Ergo nie das Scancodeset umschalten müssen.
Titel: Keyboard Scancodeset
Beitrag von: zacK am 25. January 2005, 21:50
ich programmiere auch gerade an einem tastatur treiber.

im momment nehme ich noch das set 1.

warum kann man dass denn nicht brauchen?? hat das nachteile gegenüber dem set 2?
Titel: Keyboard Scancodeset
Beitrag von: zacK am 27. January 2005, 17:25
ich habe ein bisschen weiter gelesen und herausgefunden, dass manche tastaturen nur das set 2 unterstützen... wie kann ich das nun aktivieren.

ich habe es mit diesem code probiert:

WaitToWrite();
outb(0x60, 0xF0);
if (inb(0x60) != 0xFA) printf ("Keyboard Error: Can't set Scancode-Set 2!\n", 0x19);
WaitToWrite();
outb(0x60, 0x3);

doch wenn ich überprüfen will ob dieser gesetzt wurde, scheint es nicht der fall zu sein.
WaitToWrite();
outb(0x60, 0xF0);
WaitToWrite();
outb(0x60, 0);
if (inb(0x60)==0x41) printf("SET 2 enabled", 0x78);


ah da brauchst du noch die WaitToWrite() funktion:void WaitToWrite()
{
while (inb(0x64) & 1);
};


und noch ne zweite frage. zum aktivieren des keyboards, brauch ich da den 0xF4 oder den 0xAE befehl??

thx