Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Projekt: OS-Development  ::  Tastatur Treiber  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Praxis und Co
Unregistrierter




Beitrag Praxis und Co Unregistrierter 19:39:30 13.12.2013   Titel:   Tastatur Treiber            Zitieren

Hi,
ich möchte einen Tastatur Treiber schreiben.

Theorie:
C++:
// Tastatur.h
#define 0x63 c

C++:
// Tastatur.cpp
int lese;
 
if(lese == 0x63)
{
printf("c");
}


Praxis:
Falsch!

Man muss doch erst das Register überprüfen, oder?
Kann mir wer helfen?

LG
supernicky2
Unregistrierter




Beitrag supernicky2 Unregistrierter 20:57:48 13.12.2013   Titel:              Zitieren

Hallo,

du musst erst den Port 0x64 einlesen und prüfen ob Bit 0 gesetzt ist, wenn ja ist ein Zeichen im Tastaturpuffer vorhanden.

Über den Port 0x60 kannst du es dann einlesen und auswerten.
Es werden aber nur die Scancodes übergeben... diese musst du mittels ASCII Tabelle
intern umwandeln. D.h. jedem Scancode einen ASCII Code zuweisen.

Bedenke das du auch immer zwei Tastencodes bekommst, einmal fürs drücken
und einmal fürs loslassen der Taste...

Prüfe hier immer ob Bit 7 gelöscht ist, nur dann ist die Taste gedrückt, ansonsten
ist sie losgelassen worden.

Gruß, Nicky
yeah!
Unregistrierter




Beitrag yeah! Unregistrierter 21:10:02 13.12.2013   Titel:              Zitieren

http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId185043
LightBoom
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.05.2014
Beiträge: 72
Beitrag LightBoom Mitglied 19:46:34 04.05.2014   Titel:              Zitieren

supernicky2 schrieb:
Prüfe hier immer ob Bit 7 gelöscht ist, nur dann ist die Taste gedrückt, ansonsten
ist sie losgelassen worden.

Gruß, Nicky


Wie überprüft man eigentlich ob ein Bit gelöscht ist? Und wie beschriftet man eins?

_________________
See it Creative ...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14885
Beitrag Erhard Henkes Mitglied 20:47:33 04.05.2014   Titel:              Zitieren

PrettyOS - util.h
C:
#define IS_BIT_SET(value, pos) ((value)&BIT(pos))
#define CLEAR_BIT(val, bit) __asm__("btr %1, %0" : "+r"(val) : "r"(bit))
#define SET_BIT(val, bit) __asm__("bts %1, %0" : "+r"(val) : "r"(bit))

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
IsItRight?
Unregistrierter




Beitrag IsItRight? Unregistrierter 19:41:45 05.08.2014   Titel:              Zitieren

Erhard Henkes schrieb:
PrettyOS - util.h
C:
#define IS_BIT_SET(value, pos) ((value)&BIT(pos))
#define CLEAR_BIT(val, bit) __asm__("btr %1, %0" : "+r"(val) : "r"(bit))
#define SET_BIT(val, bit) __asm__("bts %1, %0" : "+r"(val) : "r"(bit))


Bin grad über das Thread gestoßen und wenn ich das richtig verstanden habe ist:
- IS_BIT_SET eine Funktion um ein zu prüfen ob ein Bit gesetzt ist. Dazu kommt die Nummer des Bits in value und die Adresse nach pos.
- CLEAR_BIT ist da um das Bit bit in val zu löschen.
- SET_BIT setzt ein das bit bit in val.

Richtig?
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14885
Beitrag Erhard Henkes Mitglied 23:29:38 05.08.2014   Titel:              Zitieren

die letzten beiden hast Du korrekt erkannt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
IsItRight?
Unregistrierter




Beitrag IsItRight? Unregistrierter 15:57:17 10.08.2014   Titel:              Zitieren

Was ist denn das erste? :)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1715
Beitrag Mr X Mitglied 16:17:46 10.08.2014   Titel:              Zitieren

Prüft, ob das Bit mit der Nummer "pos" im Integer "value" gesetzt ist.
supernicky
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.11.2011
Beiträge: 201
Beitrag supernicky Mitglied 17:20:25 11.08.2014   Titel:              Zitieren

LightBoom schrieb:
supernicky2 schrieb:
Prüfe hier immer ob Bit 7 gelöscht ist, nur dann ist die Taste gedrückt, ansonsten
ist sie losgelassen worden.

Gruß, Nicky


Wie überprüft man eigentlich ob ein Bit gelöscht ist? Und wie beschriftet man eins?


Hallo,

du schreibst ja mit Assembler.

Mit OR kannst du ein Bit setzen

Assembler:
or eax, 1          ;setzt Bit 0 in EAX



Mit AND kannst du ein Bit löschen

Assembler:
and eax, 0FFFFFFFEh          ;löscht Bit 0 in EAX


Nicky


Zuletzt bearbeitet von supernicky am 17:21:16 11.08.2014, insgesamt 2-mal bearbeitet
C++ Forum :: Projekt: OS-Development  ::  Tastatur Treiber  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.