#include "kernel.h" // general kernel config & includes #include "console.h" // this will allow us to write to screen // TODO: cleanup . how can i compile it without the includes!?? /// PIT /// Timer stuff /* http://www.brokenthorn.com/Resources/OSDevPit.html vcc/gnd - voltage/ground D0-D7 - data lines (data bus) wr/rd - writing / reading (system control bus) cs - ignore wr/rd or not (address bus) a0-a1 (address bus) // the three 16bit down counters/timers/channels clk 0-2 (in) gate 0-2 (in) out 0-2 (out) //typical out1 -> pic interrupt on every tick (system timer) out2 - was used for genearting dram memory refresh (Do not use) out3 -> pc speaker gate pins : depend on mode of operation we do have modes 0-5. */ /////// void int_kb_handler(); ////////// KERNEL MAIN///// ///// // // test handler void int_test_handler() { __asm__("pusha"); scr_put_string_nl("inside software interrupt handler 88"); __asm__("popa"); __asm__("leave"); __asm__("iret"); } // clock handler void int_clock_handler() { __asm__("pusha"); scr_put_string_nl("."); // todo also the other pic!// TODO __asm__("mov $0x20, %al"); __asm__("out %al, $0x20"); // __asm__("popa"); __asm__("leave"); __asm__("iret"); __asm__("popa"); __asm__("leave"); __asm__("iret"); } void kernel_main() { // clear console scr_clear(); // hello message scr_put_string_nl(KERNEL_HELLO_MESSAGE); // init interrupt decriptor table // install and enable! int_init(0x08); int_install(); // remember that we shifted all interrupts with the pic by 32 // so clock = 32 (irq 0) // keyboard = 22 (irq 1) // etc.. // install pit handler (programmable timer interrupt channel0) int_install_ir(32, 0b10001110, 0x08,&int_clock_handler); // install keyboard handler int_install_ir(33, 0b10001110, 0x08,&int_kb_handler); // install test handler int_install_ir(88, 0b10001110, 0x08,&int_test_handler); // now we can enable interrupts back again int_enable(); scr_put_string_nl("Interrupts are up and running"); // kernel main loop while(1) { } }