Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: zacK am 02. December 2004, 14:09
-
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
-
Hast du denn ne IDT erstellt ?
-
joa habe ich...
aber ich glaube net das an der, der fehler is.
-
meldet sich leider niemand :((
-
Bei mir hab ichs gelöst indem ich [bits 32] vor den Code gesetzt habe.
-
omg bei mir rockt des mit dem bit32 nicht... :(
immer noch running in bogous memory...
-
Also: "Running in Bogus Memory heißt bei bochs, dass der Prozessor versucht hat, Code am Ende des RAMs auszuführen. Wenn du zum Beispiel deinen Bootloader irgendwo hinspringen lässt, wo nur 0 steht (beim bochsbooten der Fall), dann führt der prozessor 00 aus ( also add [bx+si],al ), bis EIP höher als der verfügbare RAM ist und der Speicher controller absagt :twisted:
-
hiho
ich möchte diesen thread noch kurz beenden und sagen wie sich das bei mir gelöst hat...
mein problem war das ich im gdt eine andere CS.base hatte als DS.base....
nun habe ich beides auf null und nun geht es ....
nach diesem kleinen fehler aber langen überdenk zeit, bin ich nun wieder top motiviert ;D
grunz