Hi,
Tut mir leid, aber der Code ist totaler schrott. Ein Tipp: Kauf dir ein anständiges Buch über C. (-> Amazon) oder lies dir zumindest ein paar Tutorials zu den grundlegensten(!) Sachen von C durch.
Ich geh hier mal auf die gröbsten Sachen ein.
in void SetCursor(int _xPos,int _yPos) :
Wenn du den Zeiger VideoMem verändern willst, musst du auch VideoMem schreiben und nicht *VideoMem. Du musst *VideoMem schreiben, wenn du einen Wert, an die Stelle, auf die VideoMem zeigt schreiben willst.
*VideoMem = (char*)0xB8000;
*VideoMem = *VideoMem + (xPos*2-2)
*VideoMem = *VideoMem + (yPos-1)*160
wird zu
VideoMem = (char*)0xB8000;
VideoMem = VideoMem + (xPos*2-2);
VideoMem = VideoMem + (yPos-1)*160;
Das Semikolon an dem Ende der Funktion ist überflüssig. Dafür müssen hinter die Zuweisungen welche.
in void ClearScreen():
Bei for-Schleifen steht im 2. Ausdruck, das, was wahr sein muss, damit die Schleife durchlaufen wird. Es muss also for (i=0; i<4000; i++) heissen. Es muss auch wieder VideoMem = (char*)0xB8000; heissen und diese Anweisung muss vor der for-Schleife stehen!
void print (char *string):
bekannte fehler in:
for(*VideoMem = *string; *VideoMem =! '/0'; *VideoMem++)
muss wenn überhaupt so lauten:
for(; *string != '\0'; VideoMem++)
*VideoMem = *string sorgt dafür, dass der erste buchstabe in string in den videospeicher geschrieben wird. das ist aber nicht so sinnvoll, wenn es ein string der länge 0 ist. dann wird nämlich eine null an den videospeicher geschrieben.
die abbruchbedingung ist erfüllt, wenn der string zuende ist, nicht irgendwas im Videospeicher (*VideoMem) 0 ist. Außerdem ist *VideoMem =! '/0' syntaktischer Schrott. Es müsste wenn überhaupt *VideoMem != '\0' heissen. Von der Logik her passt es aber wie gesagt nicht.
Das VideoMem++ würd ich eher in die Schleife tun, weil das übersichtlicher wird. Dann wird die for-schleiche vereinfacht zu while(*string)
Die Schleife würde ich so schreiben:
while(*string)
{
*VideoMem++ = *string++; // sprich den wert in *string nach *VideoMem schreiben und beide (VideoMem und string) erhöhen
*VideoMem++ = '7'; // sprich: 7 nach *VideoMem schreiben und VideoMem um 1 erhöhen
...
Ans ende der if-Abfragen und der for-schleifen kommen auch keine Semikolons.
void NewLine
soll wohl
void NewLine()
heissen
das sollten alle parse-errors gewesen sein. getestet hab ichs allerdings nicht