Autor Thema: Keyboard Scancodeset  (Gelesen 5253 mal)

sp

  • Gast
Gespeichert
« 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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 23. January 2005, 12:27 »
mal ne blöde frage: was ist die zweite scancode tabelle?
Dieser Text wird unter jedem Beitrag angezeigt.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #2 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.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #3 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?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #4 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

 

Einloggen