Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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
-
mal ne blöde frage: was ist die zweite scancode tabelle?
-
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.
-
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?
-
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