Hmm okay, ich hab es jetzt so gemacht:
keyboard.c
void init_keyboard(void);
static void keyboard_command(uint8_t command);
void keyboard_interrupt(void);
void init_keyboard(void)
{
// Tastaturpuffer leeren
while (inb(0x64) & 0x1) {
inb(0x60);
}
// Tastatur aktivieren
keyboard_command(0xF4);
}
static void keyboard_command(uint8_t command)
{
// Warten bis die Tastatur bereit ist, und der Befehlspuffer leer ist
while ((inb(0x64) & 0x2)) {}
outb(0x60, command);
}
void keyboard_interrupt(void){
echo("keyboard interrupt");
}
handle_interrupt
void handle_interrupt(struct cpu_state* cpu)
{
echo("interrupt");
if (cpu->intr == 0x21) {
keyboard_interrupt();
}
else if (cpu->intr <= 0x1f) {
echo("%c SYSTEMFEHLER\n%c\n Exception %d\n ...\n ...\n ...\n ...\n\n%c", 0xC0, 0x4F, cpu->intr, screenDefaultColor);
// TODO Hier den CPU-Zustand ausgeben
while(1) {
// Prozessor anhalten
asm volatile("cli; hlt");
}
} else if (cpu->intr >= 0x20 && cpu->intr <= 0x2f) {
if (cpu->intr >= 0x28) {
// EOI an Slave-PIC
outb(0xa0, 0x20);
}
// EOI an Master-PIC
outb(0x20, 0x20);
} else {
echo("Unbekannter Interrupt");
while(1) {
// Prozessor anhalten
asm volatile("cli; hlt");
}
}
}
Es kommt aber nur am Anfang, als init_keyboard ausgeführt wird, einmal "keyboard interrupt" in der konsole, wenn ich dann Tasten drücke, passiert nichts...