Tastatur im Protect Mode
-
Hum....Aber ich hab ein Problem mit dem korrekten Auslesen:
again: in al,60h cmp al,1Ch jne again
So, drück ich nun enter, wiederholt er die Schleife nicht und macht weiter im Programm, soweit so gut. Drück ich aber eine andere Taste, bevor ich Enter Drücker, bzw. sogar mehrere, dann reagiert er auch bei anschließendem Druck auf Enter nicht, er scheint quasi das zuerst eingelesene Zeichen nicht zu "vergessen". Wie kann ich dem entgegen wirken?
Und wenn ich als erste Taste Enter drücke, und später im Programm nochmal diese Prüfung mache, wird sie gleich übersprungen, weil er das Zeichen noch irgendwie hat :(....
-
Ringding schrieb:
Du bekommst einen IRQ (1 glaube ich), wenn ein neuer Scancode in diesem Port drinnensteht.
-
@Ringding:
Den IRQ 1 kann man auch maskieren, dann bekommt man ihn nicht mehr - den keyboard controller stoert das nicht.Zudem hat der controller durchaus auch einen kleinen Puffer - schon allein, da die Signale seriell uebertragen werden.
@sevobal:
Nach jedem Auslesen musst du den eingelesenen scan code bestaetigen, indem du den controller zuruecksetzt (aus- und wieder einschalten, dafuer gibt es mehrere Moeglichkeiten). Anschliessend steht der naechste verfuegbare scan code in port 60h.
-
Nobuo T schrieb:
@Ringding:
Nach jedem Auslesen musst du den eingelesenen scan code bestaetigen, indem du den controller zuruecksetzt (aus- und wieder einschalten, dafuer gibt es mehrere Moeglichkeiten). Anschliessend steht der naechste verfuegbare scan code in port 60h.wtf???
Ich hatte schon (irgendwann mal) nen Tastaturtreiber, der auch funktioniert hat, aber da hats gereicht, wenn man den Scancode ausliest. Ich dachte durch das Auslesen wird automatisch dieser Scancode aus dem tastaturpuffer entfernt und wenn im Tastaturpuffer ein weiterer vorhanden ist wird der an den Controller übermittelt (+IRQ1)."I'm still confused, but on a higher level", Enrico Fermi about quantum physics
-
Nobuo T wird schon Recht haben - das wusste ich nicht. Trotzdem halte ich es für die natürlichste Methode, einfach auf den IRQ zu reagieren und dort den Scancode auszulesen.
-
@bluecode:
Ich habe auch einen Tastaturtreiber geschrieben.
Koennte mir auch vorstellen, dass es da auch sehr auf's Chipset ankommt - da kocht irgendwo jeder sein eigenes Sueppchen.. Standard (naja, zumindest war's bei den Original controllern mal so, und AFAIK auch bei allen meinen Rechnern - aber KA, inwiefern es da noch irgendwelche quirks-modi gibt) ist aber, dass ein reset notwendig ist, bevor der naechste scan code verfuegbar ist und der naechste IRQ ausgeloest wird => koennte sein, dass dein Treiber daher nicht auf allen Rechnern laeuft.
Andere Sache ist natuerlich, wenn du einfach so port 60h ausliest und den standard-IRQ-handler installiert laesst, fuehrt der den reset durch. Das gleiche, wenn du von deinem IRQ zum original handler chainst. (was fuer verkorxte Anglizismen -_-)@Ringding:
Jo, da kann ich dir nur zustimmen, aber er wird wohl schon seine Gruende haben, warum er keinen IRQ-handler installiert...
-
hi,
Ich hab ja nicht an der Kompetenz von irgendjemand hier im Forum gezweifelt
Die Tatsache, dass man den Tastaturkontroller resetten muss, ist mir nur total neu. Ich hab gestern im "PC Hardwarebuch" (6. Auflage) nachgelesen und da steht auch nichts davon drin, dass man den Tastaturkontroller resetten müsste. Ich wüsste auch nicht wofür das gut sein sollte. Oder ist des nur, wenn man das nicht über den IRQ1 macht, sprich ihn maskiert?btw. meint ihr mit Tastaturpuffer, den im BIOS?
-
bluecode schrieb:
Ich hab ja nicht an der Kompetenz von irgendjemand hier im Forum gezweifelt
Na dann ist ja gut.
bluecode schrieb:
Ich hab gestern im "PC Hardwarebuch" (6. Auflage) nachgelesen und da steht auch nichts davon drin, dass man den Tastaturkontroller resetten müsste.
Ich habe das Buch selbst zwar nicht, aber allein durch solche Diskussionen habe ich nun schon von 2 Fehlern im Teil ueber Tastaturen in diesem Buch erfahren.
Kann da nur erahnen, wieviele da noch drinstecken... Fazit: Nicht alles glauben, was da geschrieben steht, sondern auf jeden Fall nochmal selbst nachforschen (oder auch: das Buch ist unbrauchbar).bluecode schrieb:
Ich wüsste auch nicht wofür das gut sein sollte. Oder ist des nur, wenn man das nicht über den IRQ1 macht, sprich ihn maskiert?
Das ist ganz einfach ein ACK an den Controller, dass der scan code fertig verarbeitet wurde und nun der naechste ausgegeben werden soll.
Wie ich bereits schrieb: Wenn der controller nicht zurueckgesetzt wird, wird auch kein neuer IRQ generiert. Port 60h gibt zudem dann immer nur den ersten nach dem letzten reset aufgelaufenen scan code aus (bzw. Fehlercodes, wenn der Puffer ueberlaeuft).Dh. immer, wenn du mit einem scan code fertig bist und den naechsten bearbeiten willst (ob nun mittels IRQ oder nicht spielt dabei keine Rolle), gehoert ein reset her.
bluecode schrieb:
btw. meint ihr mit Tastaturpuffer, den im BIOS?
Bisher war hier die Rede vom Hardwarepuffer im Tastaturcontroller, nicht von dem in der BDA.
-
Hi,
über welche Port führe ich denn diesen Reset durch, habe mal ein wenig gesucht und Folgendes gefunden:mov al,0xF6 ; Reset Keyboard out 0x60,al
Leider funktioniert das aber so rein gar nicht. Gibts es andere Möglichkeiten (anderer Port oder anderer Hexwert), um diesen Reset durchzuführen? Danke!
-
Jo, ich denke das wird nicht reichen. Du musst den Controller aus- und wieder einschalten.
zB. ueber Port 61h, bit7: 0=Enable keyboard; 1=Disable keyboard.
Also einmal am Ende des IRQs bit7 auf 1 und anschliessend wieder auf 0 setzen.
Pass aber auf, dass du die anderen bits auf diesem Port nicht veraenderst!