Простой ответ заключается в том, что в защищенном режиме прерывания, используемые 1-м программируемым контроллером прерываний, являются исключениями защищенного режима, что означает, что они должны быть преобразованы.
Счастливый ответ заключается в том, что только первый PIC
должен быть переназначен (переназначение второго предназначено только для удобства, поскольку оно начинается в int 70h
).
Вот цитата из оригинального AT BIOS.
INTA00 equ 020h ; 8259 port
INTA01 equ 021h ; 8259 port
INTB00 equ 0A0h ; 2nd 8259
INTB01 equ 0A1h
INT_TYPE equ 070h ; start of 8259 interrupt table location
;---------------------------------------------------------
; re-initialize the 8259 interrupt #1 controller chip :
;---------------------------------------------------------
mov al, 11h ; icw1 - edge, master, icw4
out INTA00,al
jmp $+2 ; wait state for i/o
mov al, 8 ; setup icw2 - int type 8 (8-f)
out INTA01, al
jmp $+2
mov al, 4 ; setup icw3 - master lv 2
out INTA01, al
jmp $+2
mov al, 1 ; setup icw4 - master, 8086 mode
out INTA01, al
jmp $+2
mov al, 0FFh ; mask all ints. off
out INTA01, al ; (video routine enables interrupts)
;---------------------------------------------------------
; re-initialize the 8259 interrupt #2 controller chip :
;---------------------------------------------------------
mov al, 11h ; icw1 - edge, slave icw4
out INTB00, al
jmp $+2
mov al, INT_TYPE ; setup icw2 - int type 70 (70-7f)
out INTB01, al
mov al, 2 ; setup icw3 - slave lv 2
jmp $+2
out INTB01, al
jmp $+2
mov al, 1 ; setup icw4 - 8086 mode, slave
out INTB01, al
jmp $+2
mov al, 0FFh ; mask all ints. off
out INTB01, al
;--------------------------------------------------------------------------------
Технический справочник по BIOS (c) 1984 IBM
Примечание:
jmp $+2 ; wait state for i/o
не требуется на текущем ПК.
icw1
очищает регистр маски прерываний, который разрешает прерывания на этом PIC.
Чип 8259A давно ушел, но интерфейс программирования все еще используется.
8259A Программируемый контроллер прерываний