5,19 → 5,14 |
;; IRQ0 HANDLER (TIMER INTERRUPT) ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
align 32 |
irq0: |
cmp [error_interrupt],-1 |
je no_error_in_previous_process |
pushad |
push ds es |
mov ax, os_data |
mov ds, ax |
mov es, ax |
|
mov [0xffff],byte 0 |
|
mov [error_interrupt],-1 |
|
no_error_in_previous_process: |
|
mov edi,[0x3000] |
shl edi, 3 |
; fields of TSS descriptor: |
26,10 → 21,6 |
inc dword [timer_ticks] |
|
mov eax, [timer_ticks] |
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
call playNote ; <<<--- INSERT THIS LINE !!!!!!!!!! |
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
cmp eax,[next_usage_update] |
jb .nocounter |
add eax,100 |
37,6 → 28,8 |
call updatecputimes |
.nocounter: |
|
call playNote ; <<<--- Speaker driver |
|
mov edi, [0x3010] |
|
mov ebx, [edi+0x18] ; time stamp counter add |
47,8 → 40,8 |
|
mov ebx,[0x3000] |
|
cmp [0xffff], byte 1 ;1 |
je do_not_change_task ;je |
cmp [0xffff], byte 1 |
je .do_not_change_task |
|
.waiting_for_termination: |
.waiting_for_reuse: |
64,43 → 57,55 |
je .waiting_for_reuse |
|
cmp ebx,[0x3004] |
jbe nsched0 |
jbe @f |
mov ebx,1 |
mov edi,0x3020 |
@@: |
|
nsched0: |
|
mov [0x3000],ebx |
mov [0x3010],edi |
|
do_not_change_task: |
jmp @f |
.do_not_change_task: |
mov [noct], 1 |
@@: |
|
call _rdtsc |
mov [edi+0x18],eax |
|
cmp [0xffff],byte 0 |
je nodecffff |
je @f |
dec byte [0xffff] |
nodecffff: |
@@: |
|
|
shl ebx, 3 |
xor eax, eax |
add ebx, tss0 |
mov word [0xB004], bx ; selector ;mov [tss_s],bx |
mov word [0xB004], bx ; selector |
mov dword [0xB000], eax ; offset |
|
mov al,0x20 ; send End Of Interrupt signal |
mov dx,0x20 |
out dx,al |
|
cmp [noct], 1 |
je @f |
.switch: |
jmp pword [0xB000] |
inc [context_counter] ;noname & halyavin |
@@: |
mov [noct], 0 |
|
jmp irq0 |
pop es ds |
popad |
iret |
|
iglobal |
|
|
uglobal |
context_counter dd 0 ;noname & halyavin |
noct db 0 |
endg |
|
|