diff options
Diffstat (limited to 'kernel/timer.s')
| -rw-r--r-- | kernel/timer.s | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/kernel/timer.s b/kernel/timer.s new file mode 100644 index 0000000..de01ea6 --- /dev/null +++ b/kernel/timer.s @@ -0,0 +1,34 @@ +global timer_init +extern register_isr + +; TODO: move this someplace safe (not kmain.c) +extern ticks + +tick_handler: + push ax + inc dword [ticks] + mov al, 0x20 + out 0x20, al + pop ax + iret + +timer_init: + push ebp + mov ebp, esp + ; register the tick_handler + push tick_handler + push dword 0x20 + call register_isr + add esp, 8 + ; initialize the pit + mov ax, 0x36 + out 0x43, al + mov ax, 0x2E9C ; 10ms tick interval + out 0x40, al + mov al, ah + out 0x40, al + in al, 0x21 + and al, 0xFE + out 0x21, al + pop ebp + ret |
