diff options
Diffstat (limited to 'kernel/kernel.c')
| -rw-r--r-- | kernel/kernel.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index 989eab6..7d845c5 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -4,6 +4,44 @@ // 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///// ///// @@ -23,6 +61,27 @@ void int_test_handler() } +// 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() { @@ -37,6 +96,14 @@ void kernel_main() 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); |
