Hi Leute,
Ich hab ein Proglem mit CommOs. Habs geschafft, nach ein paar kleinen Ãnderungen, das Teil zum laufen zu bringen. Habe den Bootloader verändert, dass er auch auf meinem Pentium 2 läuft. Hab dazu im Bootloader die Segmentregister upgedatet, da sich der PC sonst aufgehängt hat.
Hab aus der Boot.ini den Vesa Mode rausgelöscht. Nun hab ich folgende Kernel.c:
/////////////////////////////////////////////////////////////////////
// Basic code written by Roshl //
// Edited by: //
// Changes: //
/////////////////////////////////////////////////////////////////////
//#include "datatypes.h"
//#include "bootupinfo.h"
#define KRNL_POS 0x10000
void main()
{
char *Text = "Welcome to Protected Mode";
char *VideoMem = (char*)0xB8000;
while(*Text)
{
*VideoMem = *Text;
*VideoMem++;
*VideoMem = 7;
*VideoMem++;
*Text++;
}
for (;;);
return;
}
Der Code müsste doch eigentlich Zeichen in den Videoram schreiben. Leider passiert garnix. Der Bootloader scheint aber zu funktionieren.
Der Code funktioniert auf meinem PC, meinem DOS-PC und auf dem Bochs nicht.
Hab für den Videoram auch schon den Wert 0xA8000 ausprobiert mit dem selben Ergebnis.
Hab am Linkscript nix geändert.
Der Disassembler spuckt bei der Disassemblierung der kernel.c folgenden Code aus:
C:\nasm>ndisasmw -u kernel.bin -e 138
00000000 55 push ebp
00000001 B970000100 mov ecx,0x10070
00000006 89E5 mov ebp,esp
00000008 BA00800B00 mov edx,0xb8000
0000000D 803D7000010000 cmp byte [0x10070],0x0
00000014 740F jz 0x25
00000016 8A01 mov al,[ecx]
00000018 41 inc ecx
00000019 8802 mov [edx],al
0000001B 42 inc edx
0000001C C60207 mov byte [edx],0x7
0000001F 42 inc edx
00000020 803900 cmp byte [ecx],0x0
00000023 75F1 jnz 0x16
00000025 EBFE jmp short 0x25
00000027 90 nop
00000028 90 nop
00000029 90 nop
0000002A 90 nop
0000002B 90 nop
0000002C 90 nop
0000002D 90 nop
0000002E 90 nop
0000002F 90 nop
00000030 90 nop
00000031 90 nop
00000032 90 nop
00000033 90 nop
00000034 90 nop
00000035 90 nop
Was mache ich falsch?