Autor Thema: Wieder mal ein paar Fragen (PMode, IDT)  (Gelesen 4007 mal)

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« 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

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #1 am: 03. December 2004, 00:39 »
Hast du denn ne IDT erstellt ?
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #2 am: 03. December 2004, 23:38 »
joa habe ich...
aber ich glaube net das an der, der fehler is.

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #3 am: 07. December 2004, 14:07 »
meldet sich leider niemand :((

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #4 am: 02. January 2005, 19:25 »
Bei mir hab ichs gelöst indem ich [bits 32] vor den Code gesetzt habe.

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #5 am: 04. January 2005, 09:00 »
omg bei mir rockt des mit dem bit32 nicht... :(

immer noch running in bogous memory...

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #6 am: 04. January 2005, 10:34 »
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:

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #7 am: 24. January 2005, 11:40 »
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

 

Einloggen