Tastatureingaben aus dem Speicher abrufen
-
Hey an alle.
also ich habe vor Tastatureingaben zu lesen. (joo ist klar scanf..) problem dabei ist, ich muss alle funktionen selbst schreiben und das wiederrum bedeutet, dass ich den buffer im speicher auslesen müsste.. (soweit liege ich doch richtig?)
mir ist bereits bekannt, dass die adresse im speicher 0x41E lautet. aber ich hab große probleme das ganze auszulesen, und als char zurückzugeben.
wenn mir vllt jemand sogar noch ein codebeispiel geben kann, wäre das super.
PS: es handelt sich nicht um eine hausaufgabe o.ä., im gegenteil..
-
Also erstmal der Hinweis das hier ist nicht durch den Standard gedeckt und kein portables C. Man könnte das folgendermaßen machen:
volatile char *input=0x41E; char gelesene_eingabe=*input;
-
vielen dank für die antwort, auch wenns im falschen bereich ist. (sorry, wo müsstes eig hin?)
ich darf aber trotzdem in dem thread jetzt weiterfragen oder? ^^
compiler meckert aber, weils pointer zu integer ist, ohne cast..
So siehts aus:
/// Zeiger auf Tastureingaben volatile char *input = 0x41E; char get_key(void) { char read = *input; return read; }
-
Wenn der Compiler einen Cast an der Stelle erwartet, dann spendier' ihm doch einen
->
volatile char *input = (char*)0x41E;
Du mußt dir nur im Klaren sein, was dieser Cast bedeutet - übersetzt ungefähr "Hallo Compiler, ich weiß genau was ich hier tue, also kümmere dich nicht weiter darum, was da passiert".
PS: Was für einen Zweck hat die ganze Übung eigentlich? Und was spricht dagegen, vorhandene Funktionen zu verwenden (wenn dir fscanf() zu viel Overhead mitbringt, kannst du auch direkt mit fgetc() arbeiten)?
-
Für welches System programmierst du denn? Bei allen halbwegs mordernen OSs im Computerbereich arbeitet man mit virtuellen Adressen, bei Windows hat man bspw. keine Chance von Ring-3-Ebene (user mode) Daten des Kernels (Ring 0) auszulesen.
-
dankedanke. compiliert jetzt. ich wusste nur nicht welcher cast wohin.. ^^
problem ist aber, dass wenn ich ne taste drücke nichts passiert..
das ganze soll ein "betriebssytem" werden (ich weiß.. besonders viel kanns dann eh nicht.. einfach mal zum rumprobieren.. (: ) die grundlegenden dinge hab ich dabei aus einem tutorial.. ^^
also ich beschreibs mal genauer.. atm ist es so (zum testen), das in einer while-schleife immer "" und das zeichen der tastatur hinternander angezeigt werden soll.. ausgabe durch eure hilfe ist allerdings immer "" und dann ne note.. egal was ich drücke..
kazzqe.c:
volatile char *input = (char*)0x41E; char get_key(void) { char read = *input; return read; }
kazzqe.h:
typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; typedef signed char s8; typedef short s16; typedef int s32; typedef long long s64; void screen_clear(); int puts(const char* msg); void putc(char c); int setXY(int x, int y); char get_key(void);
und
main.c:
void kernel() { char a; screen_clear(); puts("Hello"); while (1) { putc('_'); a = get_key(); putc(a); } }
EDIT:
@_Falke:
für ich glaub i586 architektur. kein os..
-
Wenn ich raten müsste würde ich sagen, daß du und der Tastaturtreiber unterschiedlicher Meinung sind, wo die Eingaben untergebracht werden sollen. Da solltest du dich eventuell mal mit dem anderen Ende der Leitung beschäftigen (sprich: wer schreibt die eingegebenen Zeichen in deinen Puffer?).
-
oha. also muss ich mich mit treibern beschäftigen und den evtl sogar selber machen?
oder liegts daran, dass ich auf einer VM teste? das ist ja dann wieder ein anderes ende? ich dachte, das bios übernimmt sowas, da ists ja überall gleich..