Понял одну свою проблему - я отображал страницу для MMIO APIC на физические адреса, определяемые моим менеджером физической памяти, а надо было один в один, то есть вот так
Код:
void* apic_base_vaddr = (void*) get_apic_base(); /* Эта функция возвращает базовый адрес БЕЗ ФЛАГОВ */
map_pages(KERNEL_PAGE_TABLE,
apic_base_vaddr, /* Адрес в ВАП ядра */
(physaddr_t) apic_base_vaddr, /* Физический адрес - начало MMIO APIC */
1, /* одна страница */
0x13); /* Атрибуты: present, writeable, uncacheable */
а если не один в один, то варьировать можно было виртуальный адрес (загрузив его потом в MSR 0x1B), но не физический MMIO
Теперь посмотрел содержимое регистров, после включения питания оно таково

Регистр с версией содержит 0x50011 что я полагаю верное значение.
Счетчик теперь тикает, однако прерывание не происходит. Разбираюсь дальше