Lowlevel

Lowlevel => OS-Design => Thema gestartet von: pascal.bayer am 03. November 2009, 23:10

Titel: Fehler in der IDT - Hilfe!!!
Beitrag 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
Titel: Re: Fehler in der IDT - Hilfe!!!
Beitrag von: Jidder am 03. November 2009, 23:29
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.
Titel: Re: Fehler in der IDT - Hilfe!!!
Beitrag von: pascal.bayer am 04. November 2009, 18:02
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;
}
Titel: Re: Fehler in der IDT - Hilfe!!!
Beitrag von: pascal.bayer am 04. November 2009, 18:20
Okay hat sich erledigt Fehler gefunden. Musste nur base auf long long casten

 :-D