Fixed bug with sending EOI in change_task procedure (it shouldn't send it).

git-svn-id: svn://kolibrios.org@100 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Andrey Halyavin (halyavin) 2006-07-14 10:42:05 +00:00
parent ad6d923147
commit d925b54ad5

View File

@ -91,10 +91,15 @@ irq0:
add ebx, tss0 add ebx, tss0
mov word [far_jump.sel], bx ; selector mov word [far_jump.sel], bx ; selector
mov dword [far_jump.offs], eax ; offset mov dword [far_jump.offs], eax ; offset
cmp [irq0needeoi],byte 0
mov [irq0needeoi],byte 1
jz .noeoi
mov al,0x20 ; send End Of Interrupt signal mov al,0x20 ; send End Of Interrupt signal
mov dx,0x20 mov dx,0x20
out dx,al out dx,al
.noeoi:
cmp [0xffff],byte 0 cmp [0xffff],byte 0
je .switch je .switch
@ -120,16 +125,23 @@ uglobal
prev_slot dd ? prev_slot dd ?
event_sched dd ? event_sched dd ?
endg endg
iglobal
irq0needeoi db 1
endg
align 4 align 4
change_task: change_task:
pushfd
cli
mov [0xffff],byte 2 mov [0xffff],byte 2
mov [irq0needeoi],byte 0
dec dword [timer_ticks] ; because irq0 will increase it dec dword [timer_ticks] ; because irq0 will increase it
int 0x20 ; irq0 handler int 0x20 ; irq0 handler
popfd
ret ret