call 40h:0h
To call my task, where 40h is selector.
Until now i was using iret instruction and I was rewriting EIP register for used TSS and then send eoi in timer interrupt
0x20 value for port 0x20
Now i started using jmp dword 0x:40:0x0 and i have infinite loop in my tasks
Before jmp dword 0x40:0x0 i send EOI signal 0x20 value for port 0x20
But i have noticed that it's working wrong i can't debugg it becouse bochs dont break point for itq0 interrupts but it seems like only 1 interrupt income
It was like that (pseudo-code):
What may be reason of it ?irq0_interrupt_income:
mov al, 20h
out 20h, al
cmp byte [tasknumber], 0
je run0task
inc byte [tasknumber]
jmp dword 0x40:0x0 ;run task1
run0task:
mov byte [tasknumber], 0
jmp dword 0x48:0x0 ;run task 2
iretd
By the way i have noticed on some site that guy was sending 0x60 value for port 0x20 as EOI signal. what for ? It's extra bit set there, but why ?