projects
/
eightysix
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
0fd515d7a027fd9c0f3d45f24abcee3274348de7
[eightysix]
/
kern
/
src
/
intrent.asm
1
; interrupt entry routines
2
cpu 8086
3
bits 16
4
section .text
5
6
extern dispatch_intr
7
8
%macro INTR_ENTRY 2
9
global intr_entry_%2
10
intr_entry_%2:
11
push bp
12
push ax
13
push bp
14
mov bp, sp
15
mov ax, %1
16
mov [bp + 4], ax
17
pop bp
18
pop ax
19
jmp intr_entry_common
20
%endmacro
21
22
intr_entry_common:
23
push ax
24
mov ax, sp
25
add ax, 2
26
push cx
27
push dx
28
push bx
29
push ax ; saved sp
30
push bp
31
push si
32
push di
33
call dispatch_intr
34
pop di
35
pop si
36
pop bp
37
pop bx ; throw away saved sp
38
pop bx
39
pop dx
40
pop cx
41
pop ax
42
add sp, 2 ; remove interrupt number from the stack
43
iret
44
45
; CPU exceptions
46
INTR_ENTRY 0, div
47
INTR_ENTRY 1, trap
48
INTR_ENTRY 2, nmi
49
INTR_ENTRY 3, break
50
INTR_ENTRY 4, ovf
51
INTR_ENTRY 5, bound
52
INTR_ENTRY 6, ill
53
; IRQs
54
INTR_ENTRY 8, irq0
55
INTR_ENTRY 9, irq1
56
INTR_ENTRY 10, irq2
57
INTR_ENTRY 11, irq3
58
INTR_ENTRY 12, irq4
59
INTR_ENTRY 13, irq5
60
INTR_ENTRY 14, irq6
61
INTR_ENTRY 15, irq7
62
63
; vi:ts=8 sts=8 sw=8 ft=nasm: