rdos/kernel/intr.asm

56 lines
675 B
NASM
Raw Normal View History

; Register a interrupt handler
; in: AL interrupt number
; ES:DI far ptr to routine/data
intr_register:
; backup original values
push ax
push es
push di
; pop as ax later
push es
push di
; DI = AL * 4
mov ah, 4
mul ah
mov di, ax
; ES = 0
2019-03-31 22:54:51 +02:00
xor ax, ax
mov es, ax
; store offset
pop ax
stosw
; store segment
pop ax
stosw
pop di
pop es
pop ax
ret
2019-09-01 16:05:40 +02:00
; Get address for a interrupt vector
; in AL interrupt number
; out DS:SI far ptr to routine/data
intr_load:
push ax
; SI = AL * 4
mov ah, 4
mul ah
mov si, ax
; DS = 0
2019-09-01 16:05:40 +02:00
xor ax, ax
mov ds, ax
; load segment and offset in one go
lds si, [si]
2019-09-01 16:05:40 +02:00
pop ax
ret