Danke für den Tipp, hab das jetzt mal gemacht und folgende Log-Datei
bekommen.
http://xyross.de/bochs.logDarin fällt mir nur auf, das der Protect-Mode eingeschaltet wurde (Zeile 756)
00065895575-i-@006f0018-[CPU0 ] protected mode
und das er beendet
00065895575-e-@006f0018-[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
nachdem
00065895575-i-@006f0018-[CPU0 ] >> add dword ptr ds:[eax], eax : 0100
ausgeführt wurde. Also muss da der Fehler sein.
Jedoch finde ich im Assembler-Code (boot.asm) kein
"add", aber den Register "eax". Die 0100 ähnelt der Addresse
dess Kernels, fehlt halt eine Null, die habe ich anschließend rangehängt
also beim jmp, jetzt siehts so aus:
jmp 08h:010000h
Dann habe ich das ganze nochmal gemacht und jetzt sagt Bochs das:
00002609039-i-@00010006-[CPU0 ] >> and byte ptr gs:[edi+ebp*2+0x20], dh : 6520746F20
00002609039-e-@00010006-[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
(Hier die Log-Datei:
http://xyross.de/bochs2.log)
Da weiß ich nicht was ich machen soll, damits funktioniert.
Es passiert aber aufjedenfall nach dem Jump zum Kernel.
Edit:
Ich habe den Fehler gefunden, er liegt im C - Code:
char *Text = "Welcome to Protected Mode";
char *VideoMem = (char*)0xB8000;
while(*Text)
{
*VideoMem = *Text;
*VideoMem++;
*VideoMem = 7;
*VideoMem++;
*Text++;
}
Ich habe mal alles aus der begin() - Funtkion raus, auser die
Endlosschleife ( for(;
; ), jetzt sagt Bochs folgendes:
00141710000-i-@00010004-[CPU0 ] >> jmp .+0xfffffffe (0x00010004) : EBFE
Hab dann mal bei Google nach einer printf - Funktion gesucht und diese
verwendet:
void printf(char *text)
{
char *ptr;
for ( ptr = (char *)0xB8000; *text != 0; text++ )
{
*(ptr++) = *text;
*(ptr++) = 0xe;
}
}
int begin()
{
printf("Test");
for(;;);
}
als Fehler bekomme ich:
00026099052-i-@00000008-[CPU0 ] >> (invalid) : FFFF