Hiho zusammen...
Irgendwie bin ich da wieder mal am anschlag... Sobald ich ein Interrupt aufruffe im PMode kommt ein Fehler von Bochs: prefetch: running in bogus memory...
ich habe mir da gedacht das das am wahrscheindlichsten an gdt oder am linkerscript liegt...
gdt_START:
gdt_NULL:
dd 0
dd 0
gdt_CODE:
dw 0xFFFF ; Segmentgrösse
dw 0x0 ; Segmentbasisadresse
db 0x1 ; Segmentbasisadresse
db 10011010b ; [1]=present,[00]=Level0,[1]=segment,[101]=type,[0]=busy flag
db 11001111b ; Zusatz
db 0x0 ; Segmentbasisadresse
gdt_DATA:
dw 0xFFFF
dw 0x0
db 0x0
db 10010010b ; [1]=present,[00]=level0,[1]=segment,[001]=type,[0]=busy flag
db 11001111b
db 0x0
gdt_END:
gdt_DESC:
limit dw gdt_END - gdt_START - 1
base dd gdt_START + 0x10000
da wundere ich mich warum beim cs ein 0x01 beim segmentbasisadresse ist aber beim ds selektor 0x00.. ändere ich es, dann funtzt es net mer..
und hier das linkerscript:
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
.text 0x10200 : {
*(.text)
}
.data : {
*(.data)
}
.bss : {
*(.bss)
}
}
der c-kernel liegt an position 0x10200 und der asm teil mit gdt an pos 0x10000
kann ich irgendwie testen ob der idt korrekt geladen wurde? bzw. ob dort die richtige adresse vermerkt ist?
brauche dringend hilfe
thx4help