;-----------------;\r
; variables ;\r
;-----------------;\r
- timer_wait dd 0 ; time to wait\r
- timer_counter dd 0, 0 ; time since BOS started\r
- call_list dd 0, 0, 0, 0, 0 ; functions to call\r
+ timer_wait dd 0 ; time to wait\r
+ timer_counter dd 0, 0 ; time since BOS started\r
+ call_list dd 0, 0, 0, 0, 0 ; functions to call\r
\r
\r
;---------------------------;\r
; Timer IRQ(0) ;\r
;---------------------------;\r
timer:\r
- add dword [timer_counter], 1 ; it's just a 64-bit\r
- adc dword [timer_counter+4], 0 ; counter since boot.\r
-\r
- cmp [timer_wait], 0 ; "delay" countdown.\r
- je .test1\r
- dec [timer_wait]\r
-\r
- .test1: ; checks for calls to\r
- cmp [call_list], dword 0 ; do before we quit.\r
- je .test2\r
- call dword [call_list]\r
- .test2:\r
- cmp [call_list+4], dword 0\r
- je .test3\r
- call dword [call_list+4]\r
- .test3:\r
- cmp [call_list+8], dword 0\r
- je .test4\r
- call dword [call_list+8]\r
- .test4:\r
- cmp [call_list+12], dword 0\r
- je .test5\r
- call dword [call_list+12]\r
- .test5:\r
- cmp [call_list+16], dword 0\r
- je .end\r
- call dword [call_list+16]\r
-\r
- .end:\r
- mov al, 0x20\r
- out 0x20, al\r
- ret\r
+ add dword [timer_counter], 1 ; it's just a 64-bit\r
+ adc dword [timer_counter+4], 0 ; counter since boot.\r
+\r
+ cmp [timer_wait], 0 ; "delay" countdown.\r
+ je .test1\r
+ dec [timer_wait]\r
+\r
+ .test1: ; checks for calls to\r
+ cmp [call_list], dword 0 ; do before we quit.\r
+ je .test2\r
+ call dword [call_list]\r
+ .test2:\r
+ cmp [call_list+4], dword 0\r
+ je .test3\r
+ call dword [call_list+4]\r
+ .test3:\r
+ cmp [call_list+8], dword 0\r
+ je .test4\r
+ call dword [call_list+8]\r
+ .test4:\r
+ cmp [call_list+12], dword 0\r
+ je .test5\r
+ call dword [call_list+12]\r
+ .test5:\r
+ cmp [call_list+16], dword 0\r
+ je .end\r
+ call dword [call_list+16]\r
+\r
+ .end:\r
+ mov al, 0x20\r
+ out 0x20, al\r
+ ret\r
\r
\r
\r
; out: eax = 0 if OK ;\r
;------------------------------------------------;\r
add_timercall:\r
- cmp [call_list], 0\r
- jne .test2\r
- mov [call_list], ebx\r
- jmp .end\r
- .error:\r
- mov eax, 1\r
- ret\r
- .test2:\r
- cmp [call_list+4], 0 ; since i am so lazy\r
- jne .test3 ; and a loop can be\r
- mov [call_list+4], ebx ; rather complicated\r
- jmp .end ; for this stuff, i\r
- .test3: ; check for each one..\r
- cmp [call_list+8], 0 ; after all, it's only 5.\r
- jne .test4\r
- mov [call_list+8], ebx\r
- jmp .end\r
- .test4:\r
- cmp [call_list+12], 0\r
- jne .test5\r
- mov [call_list+12], ebx\r
- jmp .end\r
- .test5:\r
- cmp [call_list+16], 0\r
- jne .error\r
- mov [call_list+16], ebx\r
- .end:\r
- xor eax, eax\r
- ret\r
+ cmp [call_list], 0\r
+ jne .test2\r
+ mov [call_list], ebx\r
+ jmp .end\r
+ .error:\r
+ mov eax, 1\r
+ ret\r
+ .test2:\r
+ cmp [call_list+4], 0 ; since i am so lazy\r
+ jne .test3 ; and a loop can be\r
+ mov [call_list+4], ebx ; rather complicated\r
+ jmp .end ; for this stuff, i\r
+ .test3: ; check for each one..\r
+ cmp [call_list+8], 0 ; after all, it's only 5.\r
+ jne .test4\r
+ mov [call_list+8], ebx\r
+ jmp .end\r
+ .test4:\r
+ cmp [call_list+12], 0\r
+ jne .test5\r
+ mov [call_list+12], ebx\r
+ jmp .end\r
+ .test5:\r
+ cmp [call_list+16], 0\r
+ jne .error\r
+ mov [call_list+16], ebx\r
+ .end:\r
+ xor eax, eax\r
+ ret\r
\r
\r
\r
; out: eax = 0 if OK ;\r
;-------------------------------------------------;\r
remove_timercall:\r
- cmp [call_list], ebx\r
- jne .test2\r
- mov [call_list], dword 0\r
- jmp .end\r
- .error:\r
- mov eax, 1\r
- ret\r
- .test2:\r
- cmp [call_list+4], ebx\r
- jne .test3\r
- mov [call_list+4], dword 0\r
- jmp .end\r
- .test3:\r
- cmp [call_list+8], ebx\r
- jne .test4\r
- mov [call_list+8], dword 0\r
- jmp .end\r
- .test4:\r
- cmp [call_list+12], ebx\r
- jne .test5\r
- mov [call_list+12], dword 0\r
- jmp .end\r
- .test5:\r
- cmp [call_list+16], ebx\r
- jne .error\r
- mov [call_list+16], dword 0\r
- .end:\r
- xor eax, eax\r
- ret\r
+ cmp [call_list], ebx\r
+ jne .test2\r
+ mov [call_list], dword 0\r
+ jmp .end\r
+ .error:\r
+ mov eax, 1\r
+ ret\r
+ .test2:\r
+ cmp [call_list+4], ebx\r
+ jne .test3\r
+ mov [call_list+4], dword 0\r
+ jmp .end\r
+ .test3:\r
+ cmp [call_list+8], ebx\r
+ jne .test4\r
+ mov [call_list+8], dword 0\r
+ jmp .end\r
+ .test4:\r
+ cmp [call_list+12], ebx\r
+ jne .test5\r
+ mov [call_list+12], dword 0\r
+ jmp .end\r
+ .test5:\r
+ cmp [call_list+16], ebx\r
+ jne .error\r
+ mov [call_list+16], dword 0\r
+ .end:\r
+ xor eax, eax\r
+ ret\r
\r
\r
\r
; out: nothing ;\r
;--------------------------------------------;\r
delay:\r
- mov [timer_wait], ecx ; mov value to "timer"\r
- .loop:\r
- cmp [timer_wait], 0\r
- jne .loop\r
- ret\r
+ mov [timer_wait], ecx ; mov value to "timer"\r
+ .loop:\r
+ cmp [timer_wait], 0\r
+ jne .loop\r
+ ret\r
\r
\r
\r
; out: ecx = pointer to counter ;\r
;--------------------------------------------;\r
active_delay:\r
- mov [timer_wait], ecx ; mov value to "timer"\r
- mov ecx, timer_wait ; let caller check value\r
- ret\r
+ mov [timer_wait], ecx ; mov value to "timer"\r
+ mov ecx, timer_wait ; let caller check value\r
+ ret\r
\r
\r
\r
; set PIT to 100Hz ;\r
;------------------------------;\r
set_pit_freq:\r
- push eax\r
- mov al, 0x34 ; set to 100Hz, 0x34 = 00110100b\r
- out 0x43, al\r
- mov al, 0x9B ; lsb 1193180 / 1193\r
- out 0x40, al\r
- mov al, 0x2E ; msb\r
- out 0x40, al\r
- pop eax\r
- ret
\ No newline at end of file
+ push eax\r
+ mov al, 0x34 ; set to 100Hz, 0x34 = 00110100b\r
+ out 0x43, al\r
+ mov al, 0x9B ; lsb 1193180 / 1193\r
+ out 0x40, al\r
+ mov al, 0x2E ; msb\r
+ out 0x40, al\r
+ pop eax\r
+ ret
\ No newline at end of file