Skip to content

Commit 6e1f10d

Browse files
committed
Added interrupts and PIT.
1 parent 498a7d8 commit 6e1f10d

File tree

16 files changed

+356
-1408
lines changed

16 files changed

+356
-1408
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"terminal.h": "c",
44
"idt.h": "c",
55
"gdt.h": "c",
6-
"types.h": "c"
6+
"types.h": "c",
7+
"irq.h": "c"
78
}
89
}

Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@
99
TARGET := testos.bin
1010
ALL_OBJ := environment.o \
1111
boot.o \
12+
_io.o \
1213
kernel.o \
1314
string.o \
1415
idt.o \
15-
_idt.o
16+
_idt.o \
17+
irq.o \
18+
_irq.o \
19+
pit.o
1620
ALL_DEP := $(patsubst %.o,.%.d,$(ALL_OBJ))
1721

1822
#Assembly configuration

_io.asm

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
section .text
2+
3+
global outb
4+
outb:
5+
mov edx, [esp+4]
6+
mov eax, [esp+8]
7+
out dx, al
8+
ret
9+
10+
global inb
11+
inb:
12+
mov edx, [esp+4]
13+
xor eax, eax
14+
in al, dx
15+
ret

_irq.asm

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
section .text
2+
3+
global _irq_0
4+
global _irq_1
5+
global _irq_2
6+
global _irq_3
7+
global _irq_4
8+
global _irq_5
9+
global _irq_6
10+
global _irq_7
11+
global _irq_8
12+
global _irq_9
13+
global _irq_10
14+
global _irq_11
15+
global _irq_12
16+
global _irq_13
17+
global _irq_14
18+
global _irq_15
19+
20+
_irq_0:
21+
cli
22+
push byte 0
23+
push byte 32
24+
jmp _irq_common
25+
26+
_irq_1:
27+
cli
28+
push byte 0
29+
push byte 33
30+
jmp _irq_common
31+
32+
_irq_2:
33+
cli
34+
push byte 0
35+
push byte 34
36+
jmp _irq_common
37+
38+
_irq_3:
39+
cli
40+
push byte 0
41+
push byte 35
42+
jmp _irq_common
43+
44+
_irq_4:
45+
cli
46+
push byte 0
47+
push byte 36
48+
jmp _irq_common
49+
50+
_irq_5:
51+
cli
52+
push byte 0
53+
push byte 37
54+
jmp _irq_common
55+
56+
_irq_6:
57+
cli
58+
push byte 0
59+
push byte 38
60+
jmp _irq_common
61+
62+
_irq_7:
63+
cli
64+
push byte 0
65+
push byte 39
66+
jmp _irq_common
67+
68+
_irq_8:
69+
cli
70+
push byte 0
71+
push byte 40
72+
jmp _irq_common
73+
74+
_irq_9:
75+
cli
76+
push byte 0
77+
push byte 41
78+
jmp _irq_common
79+
80+
_irq_10:
81+
cli
82+
push byte 0
83+
push byte 42
84+
jmp _irq_common
85+
86+
_irq_11:
87+
cli
88+
push byte 0
89+
push byte 43
90+
jmp _irq_common
91+
92+
_irq_12:
93+
cli
94+
push byte 0
95+
push byte 44
96+
jmp _irq_common
97+
98+
_irq_13:
99+
cli
100+
push byte 0
101+
push byte 45
102+
jmp _irq_common
103+
104+
_irq_14:
105+
cli
106+
push byte 0
107+
push byte 46
108+
jmp _irq_common
109+
110+
_irq_15:
111+
cli
112+
push byte 0
113+
push byte 47
114+
jmp _irq_common
115+
116+
_irq_common:
117+
pusha
118+
push ds
119+
push es
120+
push fs
121+
push gs
122+
mov ax, 0x10 ;Load ring-0 DS selector
123+
mov ds, ax
124+
mov es, ax
125+
mov fs, ax
126+
mov gs, ax
127+
mov eax, esp ;Push the stack
128+
push eax
129+
extern irq_main_handler
130+
call irq_main_handler
131+
pop eax
132+
pop gs
133+
pop fs
134+
pop es
135+
pop ds
136+
popa
137+
add esp, 8 ;cleans the pushed error code and pushed isr number
138+
iret ;pops CS, EIP, EFLAGS, SS and ESP

0 commit comments

Comments
 (0)