global ticks global timer_init extern register_isr ticks: dd 0 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 0 push dword 0x20 call register_isr add esp, 12 ; 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