Achso^^
Wenn vidmem ein Pointer auf 0xB8000 ist, wird das aber nicht den gewünschten Effekt haben, da 0xB8000 sich nicht ohne Rest durch 160 teilen lässt. Speicher lieber ein Offset, und greif auf den Videospeicher dann so zu:
char *vidmem = (char *)0xB8000;
unsigned long offset = 0;
[...]
case '\n':
offset = (offset/160)*160 + 160;
break;
[...]
void printc(char *c) {
vidmem[offset++] = c;
vidmem[offset++] = attribut;
}
IMHO ist es auch leichter mit Zeilen und Spalten statt mit direkten Pointern/Offsets zu arbeiten.