summaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c67
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);