Nein, will keinen Terminal-Emulator bauen
Um genau zu sein entwickle ich mit C ein Betriebssystem. Bin im Protected Mode etc, aber das ist für dieses Problem wenig relevant. Da es sich um ein algemeines C-Problem handelt stell ich die Frage mal hier:
Also, ich habe einen Keyboard-Treiber der mir je anch Taste n' Integer Wert übergibt. Nun die Funktion dies auswerten soll:
Code:
int main()
{
[... Titel Ausgeben, PIC remapen, IDT aufsetzen, IRQs verknüpfen, CMOS checken, Floppys untersuchen, Color-Test durchführen ...]
char console[80];
int pos = 0;
int last;
int now;
int i = 1;
while (i > 80)
{
console[i] = '\0';
i++;
}
pos=0;
while (1==1)
{
now = getkeycode();
if (now != last) // Das MUSS so sein, sonst gibt er bei a drücken aaaaaaaaa[......] aus. Man muss halt 2x drücken für doppelbuchstaben.
{
pos++;
switch (now)
{
case 1: console[pos] = 'q'; break;
case 2: console[pos] = 'w'; break;
case 3: console[pos] = 'e'; break;
case 4: console[pos] = 'r'; break;
case 5: console[pos] = 't'; break;
case 6: console[pos] = 'y'; break;
case 7: console[pos] = 'u'; break;
case 8: console[pos] = 'i'; break;
case 9: console[pos] = 'o'; break;
case 10: console[pos] = 'p'; break;
case 11: console[pos] = 'a'; break;
case 12: console[pos] = 's'; break;
case 13: console[pos] = 'd'; break;
case 14: console[pos] = 'f'; break;
case 15: console[pos] = 'g'; break;
case 16: console[pos] = 'h'; break;
case 17: console[pos] = 'j'; break;
case 18: console[pos] = 'k'; break;
case 19: console[pos] = 'l'; break;
case 20: console[pos] = 'z'; break;
case 21: console[pos] = 'x'; break;
case 22: console[pos] = 'c'; break;
case 23: console[pos] = 'v'; break;
case 24: console[pos] = 'b'; break;
case 25: console[pos] = 'n'; break;
case 26: console[pos] = 'm'; break;
case 27: console[pos] = ' '; break;
};
last = now;
};
printf(console);
printf("\r");
asm volatile ("nop"); // Nicht weiter wichtig zum verständniss...
};
};
Allerdings funktioniert die Ausgabe nicht.
Ich bekomme das angezeigt:
$è@
Tipp ich auf ne Taste, dann wird @ mit dem Buchstaben ersetzt der zuerst gedrückt wurde. also ich tippe e
dann steht da: $èe.
Wenn ich weitertipp bleicht es so.
Weiß irgendjemand warum das nicht funktioniert?