summaryrefslogtreecommitdiff
path: root/asm/asm_pit.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/asm_pit.s')
-rw-r--r--asm/asm_pit.s40
1 files changed, 40 insertions, 0 deletions
diff --git a/asm/asm_pit.s b/asm/asm_pit.s
new file mode 100644
index 0000000..8e16d0b
--- /dev/null
+++ b/asm/asm_pit.s
@@ -0,0 +1,40 @@
+.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