diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 12cf013..a95472e 100755 Binary files a/iso/boot/kernel.elf and b/iso/boot/kernel.elf differ diff --git a/kernel.elf b/kernel.elf index 12cf013..a95472e 100755 Binary files a/kernel.elf and b/kernel.elf differ diff --git a/kmain.c b/kmain.c index 7f55655..82e269e 100644 --- a/kmain.c +++ b/kmain.c @@ -23,34 +23,13 @@ int kmain(int retvalue) clear(); - // printf testing + colorputs("Blank OS version 1 iteration 3 minor 20\n", 10); // TODO: Framebuffer upgrade: color output // TODO: Serial printf to dump registers on kernel panic // TODO: Fix scrolling bug (framebuffer driver) - int age = 34; - int problems = 124; - char* name = "xamidev"; - - printf("Hello %s, you are %d years old and have %d problems. wow %%\n", name, age, problems); - - long suchwow = 2934342; - char character = 65; - printf("such number %u\nsuch character %c", suchwow, character); - - printf("wow negative %d\n", -3742); - printf("such hex %x %X\n", 0xcafe, 0xdeadbeef); - - printf("such pointer %p\n", (void*)0xcafe1234); - - for (int i=0; i<10; i++) - { - colorputs("hello colorful world!!\n", i); - } - // Div by zero exception - - //printf("Lalala, what a beautiful day! %d", 4/0); + timer_install(); return retvalue; } diff --git a/makefile b/makefile index 14f5ca0..db6ae9a 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -OBJECTS = loader.o kmain.o stdio.o io.o string.o serial.o gdt.o idt.o system.o isr.o irq.o +OBJECTS = loader.o kmain.o stdio.o io.o string.o serial.o gdt.o idt.o system.o isr.o irq.o timer.o CC = gcc CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -c LDFLAGS = -T link.ld -melf_i386 diff --git a/os.iso b/os.iso index db0f41c..347513c 100644 Binary files a/os.iso and b/os.iso differ diff --git a/system.h b/system.h index 031f160..6104e5b 100644 --- a/system.h +++ b/system.h @@ -17,4 +17,7 @@ void isr_install(); void irq_install(); void irq_install_handler(int irq, void (*handler)(struct regs *r)); void irq_uninstall_handler(int irq); +void timer_install(); +void delay(int ticks); #endif + diff --git a/timer.c b/timer.c new file mode 100644 index 0000000..ddc308e --- /dev/null +++ b/timer.c @@ -0,0 +1,26 @@ +#include "system.h" +#include "stdio.h" + +int timer_ticks = 0; + +void timer_handler() +{ + timer_ticks++; + + if(timer_ticks % 18 == 0) + { + puts("One second has passed\n"); + } +} + +void timer_install() +{ + irq_install_handler(0, timer_handler); +} + +void delay(int ticks) +{ + unsigned long eticks; + eticks = timer_ticks + ticks; + while ((unsigned long)timer_ticks < eticks); +}