| Zeile 95: | Zeile 95: | ||
<c>void handle_interrupt(struct cpu_state* cpu) | <c>void handle_interrupt(struct cpu_state* cpu) | ||
{ | { | ||
| − | + | int int_no = cpu->intr; | |
| + | |||
| + | if (int_no <= 0x1f) { | ||
kprintf("Exception %d, Kernel angehalten!\n", interrupt); | kprintf("Exception %d, Kernel angehalten!\n", interrupt); | ||
| Zeile 210: | Zeile 212: | ||
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 (int_no >= 0x20 && int_no <= 0x2f) { |
| − | if ( | + | if (int_no >= 0x28) { |
outb(0xa0, 0x20); | outb(0xa0, 0x20); | ||
} | } | ||