Lowlevel
Lowlevel => OS-Design => Thema gestartet von: pascal.bayer am 03. November 2009, 23:10
-
Hier findet ihr sämtliche Dateien:
www.cubesoft-webdesign.de/upload/init.c
www.cubesoft-webdesign.de/upload/floppy.img
www.cubesoft-webdesign.de/upload/kernel.bin
Bis zur GDT hin hat alles funktioniert, aber seit ich die IDT hinzugefügt habe ... Sense
Danke für eure Hilfe! :-D
-
Hi,
in der Zeile
idt[i] |= (base & 0xffff) << 16;
ist das Offset nicht korrekt, außerdem maskierst du den falschen Teil von base.
Bits 16-31 von base landen in Bits 48-63. Siehe Intel Manuals Volume 3A, 6.11.
-
Wäre es dann so möglich?
static void set_idt_entry(int i, unsigned long base, unsigned int selektor, int flags)
{
idt[i] = base & 0xffff;
idt[i] |= (selektor & 0xffff) << 16;
idt[i] |= (flags & 0xffLL) << 40;
idt[i] |= ((base >> 16) & 0xffff) << 48;
}
-
Okay hat sich erledigt Fehler gefunden. Musste nur base auf long long casten
:-D