Autor Thema: Tastaturtreiber  (Gelesen 5831 mal)

bscreator

  • Gast
Gespeichert
« am: 26. July 2010, 21:08 »
Hallo,

bisher hab ich meine Tastatur im RMOS nur über Interrupts gesteuert.
Jetzt möcht ichs mal über Ports versuchen. Leider steh ich ein bisl auf dem Schlauch.
Hier ist der bisherige Code:

;Warten, bis der Eingabepuffer leer ist
wait1:
in  al, 0x64                   
test al, 00000010b    ;Lesen, bis Eingabepuffer leer ist
jne  wait1

Wie kann ich jetzt ein Zeichen von der Tastatur lesen, bzw. wie muss ich den Code fortsetzen ?

Vielen Dank für eure Hilfe,
bsc

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. July 2010, 22:24 »
Du musst warten, bis der Controller meldet, dass eine Taste gedrückt wurde (also Bit 0 von Port 0x64 gesetzt ist, wenn ich das grade richtig sehe). Wenn das der Fall ist, kannst du von Port 0x60 den Scancode lesen und weitermachen wie üblich.

Aber warum willst du überhaupt auf Polling umstellen? Interruptbasiert ist wesentlich besser, weil du dabei nicht aktiv pollen musst, sondern einfach warten kannst, bis sich die Tastatur meldet.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Programm Noob

  • Gast
Gespeichert
« Antwort #2 am: 26. July 2010, 23:18 »
Moin

[Offtopic]
Entschuldige, wenn ich jetzt absolut Falsch liege aber kann es sein das du dir nichts merken kannst? Es gibt ihr viele Themen, die von dir begonnen wurden und ich glaube Tastatutreiber war auch schonmal dabei.[/Offtopic]

[Topic]
Bist du schon im Proteted mode? Wenn nein nim Grub :wink: und lese dann das Wiki zu Thema Keyboard.
[/Topic]

Programm Noob

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 27. July 2010, 12:37 »
[Topic]
Bist du schon im Proteted mode? Wenn nein nim Grub :wink: und lese dann das Wiki zu Thema Keyboard.
[/Topic]

Möglicherweise hast du Recht mit dem was du sagen willst. Aber ich wollte auch erwähnen dass es durchaus möglich ist auch ohne (den heiligen) GRUB den Protected Mode zu betreten......  :|
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 27. July 2010, 12:40 »
Ich wüsste nicht inwiefern RM oder PM mit diesem Problem etwas zu tun haben. Die Empfehlung, GRUB zu benutzen, ist sicher nicht verkehrt, aber ich glaube, die Behauptung, das wäre ein Beitrag zum Thema, stimmt nicht so ganz.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #5 am: 28. July 2010, 17:32 »
Zitat
Entschuldige, wenn ich jetzt absolut Falsch liege aber kann es sein das du dir nichts merken kannst? Es gibt ihr viele Themen, die von dir begonnen wurden und ich glaube Tastatutreiber war auch schonmal dabei.
Ich hab vorher meine ganzen Themen, die ich mal angefangen hab, durchgeschaut, war aber nichts dabei, das mir hätte helfen können.
Zitat
Bist du schon im Proteted mode? Wenn nein nim Grub
Mein OS wird kein PM-OS (Hab ich das nicht auch schon 20 mal gesagt ????). Später werd ich schon in den PM wechseln, werd dafür aber mit Sicherheit kein Grub nehmen, nur damit ich in den PM komm.
Zitat
Interruptbasiert ist wesentlich besser, weil du dabei nicht aktiv pollen musst, sondern einfach warten kannst, bis sich die Tastatur meldet.
Da geb ich Dir Recht, ich wollts nur mal über Ports versuchen.

Vielen Dank für deine Hilfe.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 28. July 2010, 18:42 »
GRUB nimmt man ja auch nicht nur, um irgendwie in den PM zu kommen, sondern weil man damit einen vernünftigen Bootloader hat, der einen nicht einschränkt.

Ich mein, du kannst auch gern erstmal ein RM-OS schreiben, aber ich seh ehrlichgesagt keinen großartigen Sinn darin. Beim Umstieg auf den PM kannst du dann so gut wie alles wegwerfen und nochmal neu anfangen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #7 am: 28. July 2010, 22:50 »
Hi,
mein jetziger Programmcode gibt unter Bochs nur Punkte, also "........." auf dem Bildschirm aus, solang bis ich die Return-Taste drück. Kann mir jemand sagen, warum nur Punkte ausgegeben werden ? Eigentlich sollte der doch, bis eine Taste gedrückt wird, in der "read"-Schleife sein, oder ?

wait1:
in al, 0x64
test al, 00000010b
jne wait1

read:  ;auf Tastendruck warten
in al, 0x64
test al, 00000001b
jne read

in al, 0x60  ;Scancode auslesen
cmp al, 0x1C ;Return ?
je exit
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp read

exit:
ret

Gruss,
bsc


Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 29. July 2010, 04:04 »
Hi,

zwei Sachen:
1. du musst Interrupts (oder zumindest den Keyboard-Handler) ausschalten, sonst behandelt das BIOS den Interrupt
2. du musst Warten bis das unterste Bit gesetzt ist, also je read statt jne read, siehe auch Wiki
« Letzte Änderung: 29. July 2010, 04:06 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen