Hallo,
was für Könner wahrscheinlich eine Sache von einer Minute wäre, bringt mich gerade zum grübeln. Ich möchte die beiden PICs initialisieren, damit ich den IRQ1 für Tastaturereignisse benutzen kann. Also habe ich versucht, die Tabelle auf
http://www.lowlevel.eu/wiki/Programmable_Interrupt_Controller#Initialisierung in Code umzusetzen:
// master
outb(0x20, 0x10); // Initialisierung einleiten
outb(0x21, 0x04); // IRQ0 soll auf Interrupt 32 sein (4*8)
outb(0x21, 0x04); // Bitmaske
// slave
outb(0xA0, 0x10); // Initialisierung einleiten
outb(0xA1, 0x04); // IRQ0 immernoch auf 32
outb(0xA1, 2); // Verbindung zum Master
// kein Interrupt maskieren
outb(0x21, 0);
outb(0xA1, 0);
Die Tastatur habe ich folgendermaßen initialisiert:
// Puffer leeren
while (inb(0x64) & 0x1)
inb(0x60);
// Tastatur aktivieren
while((inb(0x64) & 0x2));
outb(0x60, command);
IDT ist auch initialisiert und ich habe eine Funktion für Interrupt 0x21 eingestellt, die über
int $0x21 auch aufgerufen wird.
Wenn ich meinen Kernel mit bochs ausführe, dann passiert auf Tastendruck nichts, obwohl ich in meiner IRQ1 Funktion eine Bildschirmausgabe programmiert habe. Über den manuellen Aufruf mit
int $0x21 erscheint die Bildschirmausgabe. Meine Vermutung ist jetzt, dass die PIC Controller nicht richtig eingestellt wurden. Kann mir da jemand weiterhelfen?
lg
Developer30