Initial Problem:
I'm trying to get the APIC Timer to fire vector 0x20 (32) of the IDT. I have correctly set the timer as bochs is giving repeated
Code: Select all
00024807285d[APIC0] local apic timer(periodic) triggered int
Code: Select all
00024832885d[APIC0] triggered vector 0x20 not accepted
Double Checks:
Correct code location is placed into vector 0x20 as I can call the location as a form a pointer function and it works (until the iretq).
Code: Select all
IDT[0x20]=64-Bit Interrupt Gate target=0x0018:0000000000201040, DPL=0
Code: Select all
00018381615d[IOAP ] IOAPIC: now entry[0] is dest=00, masked=0, trig_mode=0, remote_irr=0, polarity=0, delivery_status=0, dest_mode=0, delivery_mode=0, vector=20
Code: Select all
localAPICTimerISR:
push rax
mov al, '6'
mov [0x000B809C], al
mov al, '0'
mov [0x000B809E], al
mov rax, QWORD [0x5000] ; stored location of local APIC for BSP
add rax, 0xB0
mov DWORD [rax], 0 ; set EOI
pop rax
iretq
Initially I worried about the plain "vector=20" from the IOAPIC message, but even installing at vector #20 the code did not run.
There is nothing printed to the screen (the two 0xB8000 locations).
The ISR is installed to the IDT long before the timer is set up.
Am I missing something obvious?