format elf64

extrn io_WriteConsoleASCII

public interrupt_MapHandler


section '.text' executable

; sysvx64call void interrupt_MapHandler(uint64_t handler, int interrupt)
;
; Input:   (uint64_t rdi, int rsi)
; Clobbers: rax, flags
interrupt_MapHandler:
	mov rax, 0xFFFFFFFEC0000000  ; KERNEL_IDT_MAPPING
	shl rsi, 4                   ; rsi *= 16
	add rsi, rax                 ; rsi += KERNEL_IDT_MAPPING
	mov [rsi], di
	mov word [rsi+2], 0x10       ; GDT_EXEC_SELECTOR (index=2)
	mov word [rsi+4], 0x8e00
	shr rdi, 16
	mov [rsi+6], di
	shr rdi, 16
	mov [rsi+8], rdi
	ret