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?