51,6 → 51,8 |
.irqh dd ? |
endl |
|
DEBUGF 1, "K : Attach Interrupt %d Handler %x\n", [irq], [handler] |
|
and [.irqh], 0 |
|
push ebx |
154,25 → 156,6 |
cmp [v86_irqhooks+ebp*8], 0 |
jnz v86_irq |
|
cmp bp, 6 |
jnz @f |
push ebp |
call [fdc_irq_func] |
pop ebp |
@@: |
|
cmp bp, 14 |
jnz @f |
push ebp |
call [irq14_func] |
pop ebp |
@@: |
cmp bp, 15 |
jnz @f |
push ebp |
call [irq15_func] |
pop ebp |
@@: |
bts [irq_active_set], ebp |
|
lea esi, [irqh_tab+ebp*8] ; esi= list head |
217,14 → 200,6 |
; Note: this still isn't 100% correct, because two IRQs can fire simultaneously, |
; the better way would be to find the correct IRQ, but I don't know how to do |
; this in that case. |
; Also, [fdc_irq_func], [irq14_func], [irq15_func] could process interrupt |
; but do not return whether they did it, so just ignore IRQs 6, 14, 15. |
cmp ebp, 6 |
jz .fail |
cmp ebp, 14 |
jz .fail |
cmp ebp, 15 |
jz .fail |
push ebp |
xor ebp, ebp |
.try_other_irqs: |
232,8 → 207,14 |
jz .try_next_irq |
cmp ebp, 1 |
jz .try_next_irq |
cmp ebp, 6 |
jz .try_next_irq |
cmp ebp, 12 |
jz .try_next_irq |
cmp ebp, 14 |
jz .try_next_irq |
cmp ebp, 15 |
jz .try_next_irq |
lea esi, [irqh_tab+ebp*8] |
mov ebx, esi |
.try_next_handler: |