Autor Thema: Fehler in der IDT - Hilfe!!!  (Gelesen 3470 mal)

pascal.bayer

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« 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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 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.
Dieser Text wird unter jedem Beitrag angezeigt.

pascal.bayer

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #2 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;
}

pascal.bayer

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 04. November 2009, 18:20 »
Okay hat sich erledigt Fehler gefunden. Musste nur base auf long long casten

 :-D

 

Einloggen