| Zeile 95: | Zeile 95: | ||
<c>void handle_interrupt(struct cpu_state* cpu) | <c>void handle_interrupt(struct cpu_state* cpu) | ||
{ | { | ||
| − | + | if (cpu->intr <= 0x1f) { | |
| − | |||
| − | |||
kprintf("Exception %d, Kernel angehalten!\n", interrupt); | kprintf("Exception %d, Kernel angehalten!\n", interrupt); | ||
| Zeile 212: | Zeile 210: | ||
Eine geeignete Implementierung für Exceptions ist die oben schon vorgeschlagene Fehlermeldung mit anschließendem Anhalten des Systems (später könnte man das aktuell ausgeführte Programm beenden, aber wir haben so etwas ja noch nicht). Für Hardware-Interrupts muss zumindest ein EOI (End of Interrupt) an den PIC gesendet werden, damit der Interrupt gleich beim nächsten Mal wieder gemeldet wird und nicht noch vom letzten Aufruf blockiert ist: | Eine geeignete Implementierung für Exceptions ist die oben schon vorgeschlagene Fehlermeldung mit anschließendem Anhalten des Systems (später könnte man das aktuell ausgeführte Programm beenden, aber wir haben so etwas ja noch nicht). Für Hardware-Interrupts muss zumindest ein EOI (End of Interrupt) an den PIC gesendet werden, damit der Interrupt gleich beim nächsten Mal wieder gemeldet wird und nicht noch vom letzten Aufruf blockiert ist: | ||
| − | <c>if ( | + | <c>if (cpu->intr >= 0x20 && cpu->intr <= 0x2f) { |
| − | if ( | + | if (cpu->intr >= 0x28) { |
outb(0xa0, 0x20); | outb(0xa0, 0x20); | ||
} | } | ||