Autor Thema: Tastatur: Scancodes von XT/AT  (Gelesen 10776 mal)

Biehler Productions

  • Beiträge: 51
    • Profil anzeigen
    • http://bielos.de.tk
Gespeichert
« am: 09. August 2006, 14:15 »
Hi,

 ich will meinen Tastaturtreiber endlich mal um die Möglichkeit zur Darstellung von Großbuchstaben erweitern.

Aber in einem Buch "PC Intern 3.0" (etwas ältere Ausgabe), lese ich, dass jeder Tastaturtyp (XT, AT) unterschiedliche Scancodes an den PC sendet.
Meine Fragen:
Ist das richtig, oder habe ich das einfach falsch verstanden?

Und wenn das richtig ist, wie kann ich dann einen allgemeingültigen Tastaturtreiber schreiben?
Mir wird dann wohl nichts anderes übrig bleiben, als den User auswählen zu lassen, welchen Typ er besitzt, bzw. automatisch nach dem richtigen Typ zu suchen?

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 09. August 2006, 15:55 »
Jo das scheint richtig zu sein.

nur stellt sich mir die frage wer noch ne 83Tasten XT (eXtendedTechnologie) Tastatur daheim hat, und nen passenden rechner, an dem er sie anschliesen kann.

gruss

ST-225

  • Beiträge: 43
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 09. August 2006, 16:17 »

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 09. August 2006, 16:40 »
Wie Termite schon andeutete wirst du kaum noch einen XT finden können. Das einzige was du vom Benutzer eventuell einstellen lassen solltest ist das Tastertur-Layout. Denn egal ob die Tastertur Englisch oder Deutsch ist, die Tasten senden nach ihrer Position, nicht nach dem was auf ihnen steht! Als Beispiel sei hier die Vertauschung von z und y genannt wenn man mit einer deutschen Beschriftung mit Englischem Layout arbeitet.
db 0x55AA

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #4 am: 09. August 2006, 17:42 »
diemeisten Tastaturen haben die Translation von ScanCode-Set 2 zu SCanCode Set 1 ...

das musst du ausschalten, dann haste ScanCode-Set 2, was heutzutage jede Tastatur gerne verwendet ;)

hier die SCanCodes:
1. Scan Code Set 1
2. Scan Code Set 2
thetrue way is my way

Biehler Productions

  • Beiträge: 51
    • Profil anzeigen
    • http://bielos.de.tk
Gespeichert
« Antwort #5 am: 09. August 2006, 18:52 »
Ich habe jetzt mal verschiedene Tasten durchprobiert.
Bei meiner Tastatur hat ALT GR den Scancode 1d und STRING Links genauso.
Und die Pfeil-nach-unten Taste hat den Scancode 2a, die SHIFT Links hat ebenfalls den Scancode 2a.

Läuft hier irgendwas schief, liegt es an meiner Tastatur (ist eine Funktastatur mit Zusatztasten von Cherry) oder was ist hier los?


Und wie kann ich ein Codeset ausschalten?

Und diese Zusatzcodes wie E0, die manchen Scancodes vorangestelt werden, werden doch zuerst an den Port gesendet.
Den muss ich abfangen und danach nochmals den Port abfragen und das nächste Scancodebyte holen, oder?

Irgendwie sitzt ich grad total auf der Leitung
 :oops:

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #6 am: 09. August 2006, 19:53 »
hmm, dein problem ist genau wie meines früher: ich habe immer nur einen scanncode ausgegeben, der rest wurde überschrieben, deswegen war ich auch verwirrt ... dann habe ich das richtig gemacht, und alles ging, bzw ich war nun ganz sicher das es ging ^^

hier mal mien test OS, das die SCancodes ausgibt + den source (ps: da ist viel kopiert :D ist mien erstes OS )
http://www.imagespell.com/show.php?id=b02b943c90cfb7f4801ab354e8a334c1.rar&private=yes&uid=1
thetrue way is my way

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 10. August 2006, 09:36 »
Moin

Ich kann mich zumindest an meine alten TurboPascal zeiten erinnern, da hatten die Sondertasten 2 Scanncods (der erste wies darauf hin, das es sich um eine sondertaste handelte, der 2 gab dann an welche es war). sprich, man musste 2 mal auslesen um rauszubekommen welche sonder taste das war.

gruss

Biehler Productions

  • Beiträge: 51
    • Profil anzeigen
    • http://bielos.de.tk
Gespeichert
« Antwort #8 am: 10. August 2006, 11:27 »
Hi,
sorry, aber das hilft mir alles nicht ganz weiter.

@thetrue
wenn ich das OS starte,wird lediglich der text "Fuck You all" ausgegeben, sonst nix.
Aber es hat mich auf eine Idee gebracht, wie ich die Scancodes auslesen kann.

Ich habe jetzt einfach einen Bootloader, der sich in ne Endlosschleife hängt.
Dann brauch ich nur sooft eine Taste drücken, bis der Tastaturbuffer voll ist.
Dann kann ich jede beliebige Taste drücken und dadruch deren Scanciode auslesen.

bochs meldet mir nun, wenn ich die ALT GR Taste drücke:
Zitat

00185789000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1d)
00185789000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00185789000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00185789000i[KBD  ] internal keyboard buffer full, ignoring scancode.(38)
00186776000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00186776000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00186776000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00186776000i[KBD  ] internal keyboard buffer full, ignoring scancode.(b8)


Kann ich jetzt davon ausgehen, dass diese Codes stimmen?
Weil irgendwie passen die zu keinem der oben geposteten 2 (3) Scancodesets.
Und auch passen die weder zu so einem MF II Layout noch zu nem AT/XT Layout.

Wenn ich die ALT GR Taste drücke, wird der Code 1d 9d e0 38 gesendet.
Der Break Code ist dann folglich 9d 9d e0 b8

Aber:
Wenn ich auf der ALT Gr Taste drauf bleibe, wird nur einmal 1d gesendet und ansonsten nur 9d e0 38

Zitat

00124321000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1d)

00124321000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00124321000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00124321000i[KBD  ] internal keyboard buffer full, ignoring scancode.(38)

00131467000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00131467000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00131467000i[KBD  ] internal keyboard buffer full, ignoring scancode.(38)
00131835000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00131835000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00131835000i[KBD  ] internal keyboard buffer full, ignoring scancode.(38)
00132161000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)
00132161000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00132161000i[KBD  ] internal keyboard buffer full, ignoring scancode.(38)


Ist das normal, oder funktoniert da BOCHS nicht richtig?

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #9 am: 10. August 2006, 13:58 »
hmm, unter bochs und echtem PC läuft, habe ich getestet ;)
thetrue way is my way

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 11. August 2006, 14:49 »
Dann beeil dich aber.....kannst du mir nicht schon eine Vorabversion schicken?? Ich bin grad bei der Tastatur und in einer Woche sind die Ferien zu Ende....

Biehler Productions

  • Beiträge: 51
    • Profil anzeigen
    • http://bielos.de.tk
Gespeichert
« Antwort #11 am: 12. August 2006, 10:24 »
Zitat von: T0ast3r
hi, ich hab nen vollständigen Tastatur Treiber welcher alle Tasten unterstützt, inklusive amerikanischen und europäischen layout, windows Tasten, alt gr usw.

http://pastebin.ca/126179


(Kommt ~ in ner Woche)


Uh, solange kann ich nicht warten.

Ich such grad in dem Code die Scancodes.
Includest du die in der "interface.asm"?
Ich find die nirgends :oops:

Naja, es würde mir schon reichen, wenn du mir sagst, ob die Scancodes, die mir BOCHS sagt, richtig sind. ;)

ST-225

  • Beiträge: 43
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 14. August 2006, 12:21 »
Sicherlich zweifelt niemand an deiner fachkompetenz, toaster, aber das nachwort finde ich schon etwas übertrieben bzw. man könnte es ironisch auffassen. Ansonsten sicherlich ein gutes tut bzw. auch referenz. Mach weiter so !

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #13 am: 14. August 2006, 13:11 »
@T0ast3r: Du solltest dir mal ernsthafte Gedanken über dich und deine Fähigkeiten machen. Ist jetzt nicht böse gemeint :!:, aber das Nachwort & das was du so im Chat erzählst sind doch deutlich überzogen.

Zum Tutorial: Befehle, welche an den Keyboard Controller gehen werden an Port 0x64 gesendet und Befehle welche entweder an das Keyboard selber oder an die Maus gehen werden an Port 0x60 gesendet (<- Das ist mir übrigens Dank meines grenzenlosen Intellekts im Schlaf eingefallen :lol: Mein Name ist übrigens Hubert J. Farnsworth).
Ich würd mich freuen, wenn du dich bereiterklären würdest das Tutorial im wiki zu veröffentlichen oder wenn du wenigstens dein Einverständnis dafür geben würdest.

btw. "Do it with learning" gibts nicht, das heißt wenn dann "learning by doing".
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #14 am: 14. August 2006, 13:35 »
Zitat
Wie sieht nun ein Handler aus?
Das ist immer das wichtigste beim (… ) OS development, do it with learning.
Also erstens muss überprüft werden ob ein Scancode überhaupt verfügbar ist, ansonsten
einfach per iret den Handler wieder exiten.


öhm das stimmt nich ganz, den die tastatur kann ja auch andere daten senden ... nicht nur den tastaturcode. du prüfst da nur ob etwas im buffer ist ... das heist noch lange nicht, dass es ein scancode ist ...

[/quote]
thetrue way is my way

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #15 am: 14. August 2006, 13:45 »
es gibt den Controller in der Tastatur und auf dem Mainboard

den in der tastatur spricht man über 60h an
und den an dem MainBAord über 64 h
thetrue way is my way

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #16 am: 14. August 2006, 13:54 »
Zitat von: thetrue
den in der tastatur spricht man über 60h an
und den an dem MainBAord über 64 h

naja, nicht ganz. Beide Ports "gehören" zum keyboard controller (auf dem Mainboard). Der Port 0x64 ist das Status-/Befehlsregister des Controllers und der Port 0x60 der Ein-/Ausgabepuffer. Wenn man da was reinschreibt/rausliest, dann geht das (je nachdem, ob man davor 0xD4 geschrieben hat) zur Tastatur bzw. zur Maus bzw. stammt von der Tastatur/Maus (je nachdem welche bits im Statusregister gesetzt sind). Einen Link der das untermauert hab ich leider nicht für dich, aber so steht das in "PC Hardwarebuch - Aufbau, Funktionsweise, Programmierung, 6te Auflage" (in der 7ten Auflage ham se soweit ich mich erinnern kann die Tastatur/Maus & das Diskettenlaufwerk außen vor gelassen). btw. das Buch ist _sehr_ empfehlenswert :!:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 14. August 2006, 13:56 »
Jop das Nachwort is hip!!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #18 am: 14. August 2006, 14:23 »
Zitat von: T0ast3r
...vorher hast du das mit dem D4h nicht erwähnt...

Hat ja mit der Tastatur an sich nix zu tun.

Zitat
welche Bits geben an worher das kommt?
(eigentlich ist es ersichtlich ob IRQ1 oder IRQ12 aktiviert wurde)

jo, man kanns natürlich am IRQ erkennen oder/und am Bit 5. Falls das gesetzt ist, dann ist das Byte in 0x60 von der Maus, andernfalls von der Tastatur.

Zitat
hmm ich muss D4h nach 64h senden, wird dann das nächste byte von 60h oder 64h zur Maus gesendet?

nur das, welches du nach 0x60 schreibst. 0x64 ist nur für den keyboard controller (auf dem Mainboard) zuständig.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 14. August 2006, 15:55 »
Jojo das Tut is nicht schlecht....Aber ich denke dass ich da so ziemlich alles verstanden habe.....

Nur eins vermisse ich einbisschen.....Die Tastaturlayouts der Schweizerischen Tastaturen!!!!


Gruss
Nooooooooos

 

Einloggen