Hallo,
das ist mein erster Beitrag und muss sagen ich bin echt begeistert ein so tolles deutschsprachiges Forum bezüglich OS-Entwicklung gefunden zu haben!
Schreibe gerade selbst ein kleines Betriebssystem in c++... allerdings habe ich ein Problem welches ich bisher nicht lösen konnte! wäre froh wenn von euch jemand eine Lösung hat
Also es geht um folgenden Beispiel-Kernel:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=6718&lngWId=3
dessen Code teilweise auch bei mir Verwendung findet...
Nun nach genauerem betrachten wird klar dass man eine neue ISR mit folgendem Code aktiviert:
(keyboard.cpp)
enable_irq(1, keyboard_int, INT_GATE|BITS_32|PRESENT|RING_2);
Dies funktioniert auch alles soweit! Wenn ich allerdings Interrupt0 nutzen möchte (z.b. für Taskswitching) bekomme ich merkwürdige Bildschirmausgaben oder auch gleich einen Page-Fault!
Hier meine Ergänzungen:
Wie im obigen Code gewünscht werden die X'e ausgegeben un erst nach ein paar Zeilen tritt ein Page-fault auf!
das ist mein erster Beitrag und muss sagen ich bin echt begeistert ein so tolles deutschsprachiges Forum bezüglich OS-Entwicklung gefunden zu haben!

Schreibe gerade selbst ein kleines Betriebssystem in c++... allerdings habe ich ein Problem welches ich bisher nicht lösen konnte! wäre froh wenn von euch jemand eine Lösung hat

Also es geht um folgenden Beispiel-Kernel:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=6718&lngWId=3
dessen Code teilweise auch bei mir Verwendung findet...
Nun nach genauerem betrachten wird klar dass man eine neue ISR mit folgendem Code aktiviert:
(keyboard.cpp)
enable_irq(1, keyboard_int, INT_GATE|BITS_32|PRESENT|RING_2);
Dies funktioniert auch alles soweit! Wenn ich allerdings Interrupt0 nutzen möchte (z.b. für Taskswitching) bekomme ich merkwürdige Bildschirmausgaben oder auch gleich einen Page-Fault!
Hier meine Ergänzungen:
Code: [Auswählen]
enable_irq(0, int_test, INT_GATE|BITS_32|PRESENT|RING_2);
Code: [Auswählen]
void int_test(){
//Don't let interrupts bother us while handling one.
interrupt_disable();
kernel->video->put('x');
kernel->video->refresh();
//tell pic we have acknowledged the interrupt
outportb(0x20, 0x20);
interrupt_enable();
asm("mov %ebp,%esp");
asm("pop %ebp");
asm("iret"); //return to executing code
}
Wie im obigen Code gewünscht werden die X'e ausgegeben un erst nach ein paar Zeilen tritt ein Page-fault auf!

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert


