summaryrefslogtreecommitdiff
path: root/kernel/timer.s
blob: 3723782ae7d5d93385d89ce638da4c1677bbbd57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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