Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Biehler Productions am 09. August 2006, 14:15

Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions 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?
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Termite 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
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: ST-225 am 09. August 2006, 16:17
Vielleicht hilft Dir das hier weiter:

http://www.geocities.com/SiliconValley/Campus/1671/docs/keyboard.htm

edit:

Hab noch was gefunden: http://www.osdever.net/downloads/docs/scan%20codes.zip
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Osbios 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.
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: thetrue 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 (http://www.marjorie.de/ps2/scancode-set1.htm)
2. Scan Code Set 2  (http://www.marjorie.de/ps2/scancode-set2.htm)
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions 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:
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: thetrue 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
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Termite 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
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions 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?
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: thetrue am 10. August 2006, 13:58
hmm, unter bochs und echtem PC läuft, habe ich getestet ;)
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: nooooooooos 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....
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions 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. ;)
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: ST-225 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 !
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: bluecode 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".
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: thetrue 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]
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: thetrue 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
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: bluecode 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 :!:
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: nooooooooos am 14. August 2006, 13:56
Jop das Nachwort is hip!!!!
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: bluecode 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.
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: nooooooooos 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
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions am 14. August 2006, 22:29
Danke @T0ast3r

Ich werd mir das mal durchlesen
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions am 15. August 2006, 13:44
Anmerkungen:

Zitat

Bochs (ein Emulator für unwissende) gibt sonst eine Fehlermeldung von einen nicht
unterstützen Keyboard Command aus.


Ich würde hier eher schreiben "Bochs (Für Unwissende: Ein Emulator)"
Ansonsten hört es sich an, als sei der Emulator für "idioten" gedacht ;)
Oder ist das beabsichtigt? :lol:

Zitat

Tasten kann man theoretisch auch als Highlevel, Toplevel lowlevel Tasten betrachten.


Fehlt da nach Toplevel nicht ein Komma oder ein "oder"?
Und Lowlevl müsste afaik Großgeschrieben werden.

Zitat

Das folgende Schema wird auch bei ToasterOS verwendet, und somit verbiete ich jegliche
Weiterverbreitung in Tutorials (und ähnlichem), jedoch ist es gestattet für Code (aber nichts
anderes sonst) zu verwenden.



Das Dick markierte klingt irgendwie komisch.
Ich würd sagen, da fehlt ein Wort.
Vielleicht eher so:

"jedoch ist es gestattet, das Schema für eigenen sourcecode (aber nichts anderes sonst) zu verwenden"

Oder so ähnlich.

Zitat

; are one (E0h) or two (E1h)
cmp al,0E0h
je Keyboard_Handler_E?h
cmp al,0E1h
je Keyboard_Handler_E?h

Ich glaube, du hast diue Labels falsch geschrieben. Anstatt einem "?" sollte da wohl 0 und 1 stehen?

Ansonsten:
Danke für das Tut

Du schreibst, dass man das Scancodeset 1 verwenden sollte.
Wie kann ich die Sets ändern?

Und:
Zitat

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

00170145000i[KBD  ] internal keyboard buffer full, ignoring scancode.(e0)
00170145000i[KBD  ] internal keyboard buffer full, ignoring scancode.(b8 )
00171935000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1d)
00171935000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9d)


Warum sendet Bochs hier für die Alt GR Taste 4 bytes?

Falls jemand den Code braucht:

INT9H:
[...]

CHECK_BUFFER:
MOV CX, 20
LEA SI, [BUFFER]
SEARCH_0:
CMP BYTE [SI], 0
JE S_OK
INC SI
LOOP SEARCH_0
;Ansonsten wäre der Buffer voll, gib hier einen Ton etc. aus.
JMP INT9H_END

S_OK:
IN AL, 64H
TEST AL, 1b ;statusbyte überpüfen, ob scancode vorhanden
JE INT9H_END
mov ah, 0eh
mov al, "u"
int 10h ;Dient nur als Test
IN AL, 60H
MOV [SI], AL
jmp INT9H_END

[...]
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: Biehler Productions am 15. August 2006, 20:33
Zitat von: T0ast3r


und wie in meinem tut so viel ich weiß steht da auch drin dass die tasten alt gr und druck falsch gesendet werden...  :wink:


Ja, das steht drinn, aber ich hab das auf etwas anderes bezogen  :D

Nun kann ich endlich meinen Treiber fertig machen :-)
Titel: Tastatur: Scancodes von XT/AT
Beitrag von: MNemo am 23. August 2006, 18:15
Zitat von: T0ast3r
Ach ja und wegen dem alt gr:
  bochs sendet (extended) strg vorraus!

strg gehört aber zu alt gr dazu
hat also nix mit bochs zu tun sondern ist einfach teil des scancodes(ALT Gr = STRG +  ALT)
d.h. die scancodes die bochs liefert sind alle korekt