Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Cheebi am 31. July 2006, 20:12

Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: Cheebi am 31. July 2006, 20:12
Hallo,

ich habe nun die IDT geladen. Sie enthält die Infos zu 15 Interrupts und einem IRQ (IRQ1).
Auf einem Intel Pentium Rechner klappt alles, solange ich keine Taste drücke (also, solange kein IRQ1 auftritt). Wenn der eintritt, wird plötzlich bevor noch der IRQ1 abgearbeitet wird, Interrupt 8 ausgelöst. Also die Exception für Double Fault (was auch immer das ist).
Wenn ich das ganze auf einem AMD Rechner laufen lasse, wird schon beim Aktivieren der Interrupts die Exception 13 ausgelöst. (General Protection Exception(Triple Fault))  Woher das kommt, kann ich mir nicht erklären. Ich habe nur 2 Segmente (Ring00) in der GDT. Und die Ints in der IDT sind auch alle Privelegelevel 0.
Das kann ich mir einfach nicht erklären. An der IDT kanns eigentlich nicht liegen, da die Exceptionhandler ja auch gelesen werden können.

Gruß Cheebi
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: bluecode am 31. July 2006, 20:42
Im osfaq (http://www.mega-tokyo.com/osfaq/HardWareIrq) sollte alles stehen :wink:
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: bitmaster am 31. July 2006, 21:14
Hast du die IRQs mit dem PIC gar nicht umgebogen? Also dann zeigen Hardwareinterrupts ja auf Exceptions. Das sollte nicht so sein. Setze den IRQ0 mal auf "int 20h" und den IRQ8 auf "int 28h" (die anderen sind dann ja automatisch gleich dahinter). Der IRQ0 wird in regelmäßigen Abständen aufgerufen.

bitmaster
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: Cheebi am 01. August 2006, 13:09
hi,

ich hab die IRQs gebogen ja. nach 0x20 und 0x28 wie auch in den ganzen tuts. was ich jetzt eingebaut habe, ist das sichern der Ports vor dem Ansetzen zum mappen. Nun wird auch auf dem Pentiumrechner Interrupt13 ausgeführt und nicht wie zuvor Interrupt8. aber funktionieren tut da noch nix. ich bin einfach zu blöd...
maskiert habe ich nur IRQ1

Cheebi
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: bitmaster am 01. August 2006, 16:45
Wieso erhält deine IDT dann nur Informationen für 15 Interrupts und einem IRQ? Setze die ersetzen 32 Interrupts mal auf einem Handler mit einer Endlosschleife. Die nächsten 16 Interrupts (IRQs) solltest du auch alle einem Handler zuweisen. Denke auch an einem EOI. Und natürlich dem ired.

bitmaster
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: Cheebi am 01. August 2006, 17:13
danke, werd ich gleich mal probieren. jetzt hab ich nur noch eine frage:
was ist der unterschied zwischen "iret" und "iretd"? (bzw. auch pushad und pusha?)

cheebi
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: nooooooooos am 01. August 2006, 17:17
Die Befehle mit dem D sind einfach für den PM geschaffen.

Beim iret macht das glaub ich keinen Unterschied aus. Beim push/a werden einfach die 32-Bit Register gesichert anstatt nur den 16-Bittern.


Nooooooooooooos
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: bitmaster am 01. August 2006, 18:15
Zitat von: nooooooooos
Die Befehle mit dem D sind einfach für den PM geschaffen.

Beim iret macht das glaub ich keinen Unterschied aus. Beim push/a werden einfach die 32-Bit Register gesichert anstatt nur den 16-Bittern.


Nooooooooooooos
Nein, pusha und iret sind für den meisten assembler gleich mit pushad und iretd. Wenn du z.B. beim fasm USE32 und beim nasm [bits 32] im Code stehen hast macht der aus pusha automatisch pushad und aus iret iretd. Du brauchst da also nicht drauf zu achten.

bitmaster

EDIT: Beim iretq ist das aber nicht so. Fasm macht aus gründen die ich mir nicht erklären kann aus iret nicht automatisch iretq. Also nur für die 64 Bit Freaks unter uns. ;-)
Titel: Interrupt 8 bzw. 13?? wird durch IRQ1 ausgelöst!?
Beitrag von: Cheebi am 02. August 2006, 17:47
hi,

ich glaube, dass der General Protection Fault einfach ausgelöst wird, weil irgendetwas nicht richtig initielaisiert ist. Etwas in der GDT, weil ich wirklich grlaube, dass ich alles richtig umbiege und intialisiere, was die IDT und die Interrupts angeht... Ich guck mal weiter..
aber danke soweit....
Cheebi