.global asm_pit_init .global asm_pit_tick .global asm_pit_get_ticks ticks: .int 0 asm_pit_get_ticks: mov (ticks),%eax ret asm_pit_tick: push %eax // persist // INC TICK COUNTER mov $ticks, %eax incl (%eax) pop %eax // load original ret asm_pit_init: // configure ticking 25 times a second // 1193180 / 25 = 47727.2 mov $47727, %dx mov $0b00110100, %al outb %al,$0x43 mov %dx,%ax out %al, $0x40 xchg %ah,%al out %al, $0x40 ret