Autor Thema: Tastatur-Treiber  (Gelesen 3694 mal)

sp

  • Gast
Gespeichert
« am: 13. October 2004, 16:27 »
Hallo,

ich bin im Augenblick dabei einen Tastatur-Treiber für mein kleines RM OS zu schreiben. Texteingaben (auch mit Shift) mit deutschem Tastatur-Layout funktionieren auch schon ganz gut. Nur jetzt hab ich ein Problem mit der Speicherung der gedrückten Taste. Bei den Buchstaben ist das ja noch ganz einfach, da kann ich einfach die ASCII Codes in meine Warteschlange setzten. Nur wie ist es mit Tasten für die es keine ASCII Codes gibt, wie z.B. die Pfeiltasten oder die sechs Tasten über den Pfeiltasten, wie auch immer man die nennt :).

Soweit ich weiß verwenden die meisten OS's eine virtuelle Tastatur, auf der es alle möglichen Tasten aller Layouts gibt. Oder wie funktioniert so etwas?

Vielen Dank.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #1 am: 13. October 2004, 20:37 »
Eine Möglichkeit wäre das du ein Steuerzeichen verwendest, das weisst halt auf eine spezielle Taste hin, und dahinter dann die Scancodes der Tasten, so weiss das Programm wenn das aufs Steuerzeichen trifft das sowas kommt^^ dem Progg must du dann selbstverständlich sagen was es damit anfangen soll.
Ich handhabe des so^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 15. October 2004, 19:44 »
oder du speicherst ein bit mit 1 oder 0, ob es als ASCII-Code oder als Scancode interpretiert werden soll, und danach den Code. Du musst dem Progg halt sagen, dass es nach einem 1-Bit das Byte als ASCII-Code und nach einem 0-Bit das Byte als ScanCode interpretieren soll. ich habe da keine Erfahrung, und auch noch nix für mein OS gemacht... aber da du schreibst, das OS ist im RM; warum benutzt du keine BIOS-Ints???

mfg

JN
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Franz1299

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 15. October 2004, 20:15 »
ASCII braucht doch sowieso nur 7bit.
Ich nehme mal an das du deine Warteschlange Byteweise(=8bit) auswertest, oder?
Wenn das so ist könntest du das 8. Bit wirklich, wie Joachim_neu sagt, als Steuerbit nehmen, allerdings würde ich 0=ASCII und 1=Code für andere Tasten nehmen, da sich die Bytes so mit den normalen ASCII Btes decken.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #4 am: 15. October 2004, 20:45 »
Warum nimmst du nicht einfach ein 16 Bit Wert. Du liest vom Treiber erst aus welche Taste gedrückt wurde und speicherst dann einen von dir ausgesuchten Code in einem 16 Bit Wort.

Musst also eine für dein OS eigene Tabelle von Scancodes usw. erstellen.
----------------------
Redakteur bei LowLevel

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #5 am: 16. October 2004, 14:15 »
Jo. Windows hat auch seine ganz eigene Tabelle an virtuellen Keycodes. Und die werden auch als WORD (16 Bit) verschickt wenn ich mich recht erinnere.

Es ist halt der einfachste Vorschlag der mir einfällt. Und da man ja in seinem eigenen OS ja praktisch nix vorgeschrieben bekommt, kann man sich ja auch den einfachsten Weg aussuchen.
----------------------
Redakteur bei LowLevel

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #6 am: 16. October 2004, 15:38 »
Ich werde wahrscheinlich für die nächste Ausgabe wharsheinlich ein Tut über Keyboard Programmierung bei steuern....

So wie TeeJay hab ich das ganze auch implementiert, ein FIFO Speicher der immer den Scancode und den ASCII(falls es einen gibt) abspeichert. Das BIOS macht das übrigens genauso.... Linux macht es auch so ähnlich, das praktische ist das man z.B. für verschiedene Konsolen nen eigenen FIFO benutzen könnte, und einfach immer nur die Pointer umbiegen müsste.

@Franz
Du hast recht ASCII hat nur 7-BIT, aber auf der Tastatur sind noch Zeichen z.B. äöü die nich im ASCII-Code enthalten sind, dafür brauch man dan z.B. den ISO-Latin Code der den ASCII Code erweitert.

Mal davon abgesehen muss man natürlich ISO-LAtin auch in den Video-Ram laden, damit der auch dargestellt werden kann..
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

 

Einloggen