diff options
Diffstat (limited to 'kernel/timer.s')
| -rw-r--r-- | kernel/timer.s | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/timer.s b/kernel/timer.s index 3723782..c84a847 100644 --- a/kernel/timer.s +++ b/kernel/timer.s @@ -1,15 +1,40 @@ global ticks global timer_init +extern cstate extern register_isr +extern reschedule ticks: dd 0 tick_handler: + pusha + ; save the data segment selectors + mov ax, ds push ax + ; switch to kernel data segments + mov ax, 0x10 + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + ; save a pointer to the state information + mov [cstate], esp + + ; handle the timer tick inc dword [ticks] mov al, 0x20 out 0x20, al + + ; call the scheduler + call reschedule + + ; restore the data segment selectors pop ax + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + popa iret timer_init: |
