From 11fc44ae4968bd08f9b5dad80179a5255128d70e Mon Sep 17 00:00:00 2001 From: xamidev Date: Mon, 15 Jul 2024 21:35:11 +0200 Subject: [PATCH] Add: IRQ init --- com1.out | Bin 154 -> 180 bytes irq.c | 90 ++++++++++++++++++++++++++++ iso/boot/kernel.elf | Bin 20044 -> 20624 bytes kernel.elf | Bin 20044 -> 20624 bytes kmain.c | 5 +- loader.s | 139 ++++++++++++++++++++++++++++++++++++++++++++ makefile | 2 +- os.iso | Bin 495616 -> 497664 bytes system.h | 4 +- 9 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 irq.c diff --git a/com1.out b/com1.out index ecf28e3f66445e0736d2abf8a92c16dfbbc060bb..a2cf745a7865ba5d55bfe36099415cc1da4fe395 100644 GIT binary patch delta 33 ocmbQmxP@^-8jGi&oBzaYIsVMN%#zH+oXo1!6a~+qz=^f80KY{GZ2$lO delta 18 ZcmdnOIE!&Y8mo(|Q>gpIEV+q`1pzrn1`z-N diff --git a/irq.c b/irq.c new file mode 100644 index 0000000..253d8d8 --- /dev/null +++ b/irq.c @@ -0,0 +1,90 @@ +#include "system.h" +#include "io.h" +#include "idt.h" + +extern void irq0(); +extern void irq1(); +extern void irq2(); +extern void irq3(); +extern void irq4(); +extern void irq5(); +extern void irq6(); +extern void irq7(); +extern void irq8(); +extern void irq9(); +extern void irq10(); +extern void irq11(); +extern void irq12(); +extern void irq13(); +extern void irq14(); +extern void irq15(); + +void *irq_routines[16] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 +}; + +void irq_install_handler(int irq, void (*handler)(struct regs *r)) +{ + irq_routines[irq] = handler; +} + +void irq_uninstall_handler(int irq) +{ + irq_routines[irq] = 0; +} + +void irq_remap(void) +{ + outb(0x20, 0x11); + outb(0xA0, 0x11); + outb(0x21, 0x20); + outb(0xA1, 0x28); + outb(0x21, 0x04); + outb(0xA1, 0x02); + outb(0x21, 0x01); + outb(0xA1, 0x01); + outb(0x21, 0x0); + outb(0xA1, 0x0); +} + +void irq_install() +{ + irq_remap(); + + idt_set_gate(32, (unsigned)irq0, 0x08, 0x8E); + idt_set_gate(33, (unsigned)irq1, 0x08, 0x8E); + idt_set_gate(34, (unsigned)irq2, 0x08, 0x8E); + idt_set_gate(35, (unsigned)irq3, 0x08, 0x8E); + idt_set_gate(36, (unsigned)irq4, 0x08, 0x8E); + idt_set_gate(37, (unsigned)irq5, 0x08, 0x8E); + idt_set_gate(38, (unsigned)irq6, 0x08, 0x8E); + idt_set_gate(39, (unsigned)irq7, 0x08, 0x8E); + idt_set_gate(40, (unsigned)irq8, 0x08, 0x8E); + idt_set_gate(41, (unsigned)irq9, 0x08, 0x8E); + idt_set_gate(42, (unsigned)irq10, 0x08, 0x8E); + idt_set_gate(43, (unsigned)irq11, 0x08, 0x8E); + idt_set_gate(44, (unsigned)irq12, 0x08, 0x8E); + idt_set_gate(45, (unsigned)irq13, 0x08, 0x8E); + idt_set_gate(46, (unsigned)irq14, 0x08, 0x8E); + idt_set_gate(47, (unsigned)irq15, 0x08, 0x8E); +} + +void irq_handler(struct regs *r) +{ + void (*handler)(struct regs *r); + + handler = irq_routines[r->int_no-32]; + if (handler) + { + handler(r); + } + + if (r->int_no >= 40) + { + outb(0xA0, 0x20); + } + + outb(0x20, 0x20); +} diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 620fe760433b65b9972c3db429d708b3f60d5d15..12cf0136f41a092f6cdab3afaf5b4f50947252ea 100755 GIT binary patch delta 5171 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 S!Q66);+=Vv) delta 3514 zcmb7`dr(yO6~}+~?o&j$?899!z_N>|2tq&wqjkU(5g$NmBtAhJsAw@7L?tt6*JW!g zlI@@;`iF^)?U-9VcTnYK?9qG1{PsGtt}c@9r-A#z|+|yL0y5 z&-tF;x##z~_qOklPQ50zyX4;K8{KYWt%0#x!^UZe#zPLq4mmb1O_rt{Z0%C4yW9#> zPtS>aD{hA=rN-Z7{)EvF@viY}2QyYBF~*7po7c&c2N{0u*Xb&y6Tw)$UV*z1CZ{u| z$C)24*we7R^pwRTn-yAZNtRO;+JaM_LWeDGX+M2#Ns<0S_wj#{609lG78-B$$Q2f< zvbrY^vobaw8T#(H>ICk^*kf?*MkSM=PZag$u2M_Lw+2k^Nw_-+o z!5>l>3*CxAWRH2NF5rLjJ5{X+y&4Ngml6sM3JY?;->nHP5#bo7iMN1oNfVYtgpqN5 zscvaPMOcUgtD0{je6+*mv<>c6)z;#Wx~fNAbz5B(3izG9^s&n`V-AFh&`vBLl!3PO zzr3TW0sjk{yDjS0*MIx|flKudPcjzpZ_u>mQO#UG#`5rFz`wPZCZ;CI`+8}9>M+y9 zA-vODX?<#%G?4bE4lVxH9KFZVxcajgve3n_C+^S1_u>wJfSXs;pX2@$VSjtu!XG~h z&Tjq6-=hy5vomI}CsV9D+qjNje@R8|9Mg1M`hss!vwM^Aunlen?x8fwGtjt!<26z| zL+Kfh%{ZImJM_HghN%_{%@;gQ)oJI=FIo8YwM1H!mP;#!y>HwUkGLKhlb&as%P%`= zS$e+7iA!H_HSJ5EB%ki3o9R9BwcgIphmVxZM=?XbpwrPAGcrp`*ogJy?{c-xez&do zc3`U1I`eki;a9Bncc~&{k?~jU{73sUCK*p*Y7FUgJ0r`q8JE7`ca%2j8{?jVaI56V z9AR3COJDF)nvz*yEa2`<^t;SwOy{wNe8I7FHFNZ&7w+=eTd1lkX7A<%e@|?{-=g_S zBfjC9FQECxMtoMyxA`uWWu?e}yi3cooW^WqHMCM7YnQ2I0KdUy${#)7*?vV;`{rR5 z+J!7o4Gq*Wy3w=+^W+Qmk|#UY@%3dP(BESVRX{X!P(yaUDNc)9*4dG5)tMe($NP@Y zqORO862G{I@>|b@uK$~NprZZegZ4mO@BFIjg>-b>T*t5L8lS6caII{rX>6*iWz99q zmekg*X7ohtE94Jze#Ef)@P+oTXLr;Uk8m@%#Sx9yvEP9AI{Uc=e11qj zuLqli_?N*&0%I?DS(V_}f`EBK!dJm31bsVru%Pb&uNAlhd{u~l2Rug5-vvhx-od}J z@+k7R#T~V~A2mMp2!HknUwDMC(2>b0-s|w{bHd{wF*ExSd@WwlUTzkqV|u)-3_~&3 z@N-tc!yi*vVT6;w`x3+L73itpAoK$feHgd}CEh+0{49&cOJ4Rk98(a$-}P=FP@B1vIyMhb9& zKNJec03Q|NbHK~O?8Ql9W8rY2fETq97{I22%Td6#NWwDk%NTOLsreAj2Nw$o7lGR_ zWlp?tx!wSd6?)tV-Xp{}gQsD{da$Rp23|P!_VrNDHiNedt9mQ=fRJE2_&#>U=tx0_ zz~v|)x`>Z}^Mv^0;0Xf%1KfiSX5#)@0iVEeS{Sl(;3{mxmm>N~^lY3>VV5F&1^PoF z;SF%Nz~6uiv8J%2wKa7IJXg@~ffr+&dKW|z%DBNAA;1KV6?icCtiU#~Sy;4*;30yZ z2Hqxc2KZxvbHL?H;r+*U;A;Sm3qrsIFjEw5|MEF40*?^pv;=$xQxskGWniDseipa^ zFDQKMz_4b(2BCco_)ua(^g*Lz&%t4{E9^cR;D%IEx_~-M*HhuNI@&ialm0o)ZClxx zo5z;me>_`U+r%nMimK<*nCY2zel@kYv}Eejnq0vD3ux{1D#x=8bv2D_No`a0%DSfN z#WhWJTzj12XC%euC9)_L$3Z^T3{0FkWLmU7A diff --git a/kernel.elf b/kernel.elf index 620fe760433b65b9972c3db429d708b3f60d5d15..12cf0136f41a092f6cdab3afaf5b4f50947252ea 100755 GIT binary patch delta 5171 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 S!Q66);+=Vv) delta 3514 zcmb7`dr(yO6~}+~?o&j$?899!z_N>|2tq&wqjkU(5g$NmBtAhJsAw@7L?tt6*JW!g zlI@@;`iF^)?U-9VcTnYK?9qG1{PsGtt}c@9r-A#z|+|yL0y5 z&-tF;x##z~_qOklPQ50zyX4;K8{KYWt%0#x!^UZe#zPLq4mmb1O_rt{Z0%C4yW9#> zPtS>aD{hA=rN-Z7{)EvF@viY}2QyYBF~*7po7c&c2N{0u*Xb&y6Tw)$UV*z1CZ{u| z$C)24*we7R^pwRTn-yAZNtRO;+JaM_LWeDGX+M2#Ns<0S_wj#{609lG78-B$$Q2f< zvbrY^vobaw8T#(H>ICk^*kf?*MkSM=PZag$u2M_Lw+2k^Nw_-+o z!5>l>3*CxAWRH2NF5rLjJ5{X+y&4Ngml6sM3JY?;->nHP5#bo7iMN1oNfVYtgpqN5 zscvaPMOcUgtD0{je6+*mv<>c6)z;#Wx~fNAbz5B(3izG9^s&n`V-AFh&`vBLl!3PO zzr3TW0sjk{yDjS0*MIx|flKudPcjzpZ_u>mQO#UG#`5rFz`wPZCZ;CI`+8}9>M+y9 zA-vODX?<#%G?4bE4lVxH9KFZVxcajgve3n_C+^S1_u>wJfSXs;pX2@$VSjtu!XG~h z&Tjq6-=hy5vomI}CsV9D+qjNje@R8|9Mg1M`hss!vwM^Aunlen?x8fwGtjt!<26z| zL+Kfh%{ZImJM_HghN%_{%@;gQ)oJI=FIo8YwM1H!mP;#!y>HwUkGLKhlb&as%P%`= zS$e+7iA!H_HSJ5EB%ki3o9R9BwcgIphmVxZM=?XbpwrPAGcrp`*ogJy?{c-xez&do zc3`U1I`eki;a9Bncc~&{k?~jU{73sUCK*p*Y7FUgJ0r`q8JE7`ca%2j8{?jVaI56V z9AR3COJDF)nvz*yEa2`<^t;SwOy{wNe8I7FHFNZ&7w+=eTd1lkX7A<%e@|?{-=g_S zBfjC9FQECxMtoMyxA`uWWu?e}yi3cooW^WqHMCM7YnQ2I0KdUy${#)7*?vV;`{rR5 z+J!7o4Gq*Wy3w=+^W+Qmk|#UY@%3dP(BESVRX{X!P(yaUDNc)9*4dG5)tMe($NP@Y zqORO862G{I@>|b@uK$~NprZZegZ4mO@BFIjg>-b>T*t5L8lS6caII{rX>6*iWz99q zmekg*X7ohtE94Jze#Ef)@P+oTXLr;Uk8m@%#Sx9yvEP9AI{Uc=e11qj zuLqli_?N*&0%I?DS(V_}f`EBK!dJm31bsVru%Pb&uNAlhd{u~l2Rug5-vvhx-od}J z@+k7R#T~V~A2mMp2!HknUwDMC(2>b0-s|w{bHd{wF*ExSd@WwlUTzkqV|u)-3_~&3 z@N-tc!yi*vVT6;w`x3+L73itpAoK$feHgd}CEh+0{49&cOJ4Rk98(a$-}P=FP@B1vIyMhb9& zKNJec03Q|NbHK~O?8Ql9W8rY2fETq97{I22%Td6#NWwDk%NTOLsreAj2Nw$o7lGR_ zWlp?tx!wSd6?)tV-Xp{}gQsD{da$Rp23|P!_VrNDHiNedt9mQ=fRJE2_&#>U=tx0_ zz~v|)x`>Z}^Mv^0;0Xf%1KfiSX5#)@0iVEeS{Sl(;3{mxmm>N~^lY3>VV5F&1^PoF z;SF%Nz~6uiv8J%2wKa7IJXg@~ffr+&dKW|z%DBNAA;1KV6?icCtiU#~Sy;4*;30yZ z2Hqxc2KZxvbHL?H;r+*U;A;Sm3qrsIFjEw5|MEF40*?^pv;=$xQxskGWniDseipa^ zFDQKMz_4b(2BCco_)ua(^g*Lz&%t4{E9^cR;D%IEx_~-M*HhuNI@&ialm0o)ZClxx zo5z;me>_`U+r%nMimK<*nCY2zel@kYv}Eejnq0vD3ux{1D#x=8bv2D_No`a0%DSfN z#WhWJTzj12XC%euC9)_L$3Z^T3{0FkWLmU7A diff --git a/kmain.c b/kmain.c index de43e15..7f55655 100644 --- a/kmain.c +++ b/kmain.c @@ -14,7 +14,10 @@ int kmain(int retvalue) idt_install(); log("initialized IDT", 2); isr_install(); - log("initialized ISRs", 3); + log("initialized ISRs", 2); + irq_install(); + __asm__ __volatile__("sti"); + log("initialized IRQs", 2), log("kernel started", 2); diff --git a/loader.s b/loader.s index 1286130..f159209 100644 --- a/loader.s +++ b/loader.s @@ -294,6 +294,145 @@ isr_common_stub: add esp, 8 iret +global irq0 +global irq1 +global irq2 +global irq3 +global irq4 +global irq5 +global irq6 +global irq7 +global irq8 +global irq9 +global irq10 +global irq11 +global irq12 +global irq13 +global irq14 +global irq15 + +irq0: + cli + push byte 0 + push byte 32 + jmp irq_common_stub + +irq1: + cli + push byte 0 + push byte 33 + jmp irq_common_stub + +irq2: + cli + push byte 0 + push byte 34 + jmp irq_common_stub + +irq3: + cli + push byte 0 + push byte 35 + jmp irq_common_stub + +irq4: + cli + push byte 0 + push byte 36 + jmp irq_common_stub + +irq5: + cli + push byte 0 + push byte 37 + jmp irq_common_stub + +irq6: + cli + push byte 0 + push byte 38 + jmp irq_common_stub + +irq7: + cli + push byte 0 + push byte 39 + jmp irq_common_stub + +irq8: + cli + push byte 0 + push byte 40 + jmp irq_common_stub + +irq9: + cli + push byte 0 + push byte 41 + jmp irq_common_stub + +irq10: + cli + push byte 0 + push byte 42 + jmp irq_common_stub + +irq11: + cli + push byte 0 + push byte 43 + jmp irq_common_stub + +irq12: + cli + push byte 0 + push byte 44 + jmp irq_common_stub + +irq13: + cli + push byte 0 + push byte 45 + jmp irq_common_stub + +irq14: + cli + push byte 0 + push byte 46 + jmp irq_common_stub + +irq15: + cli + push byte 0 + push byte 47 + jmp irq_common_stub + +extern irq_handler + +irq_common_stub: + pusha + push ds + push es + push fs + push gs + mov ax, 0x10 + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov eax, esp + push eax + mov eax, irq_handler + call eax + pop eax + pop gs + pop fs + pop es + pop ds + popa + add esp, 8 + iret + section .bss align 4 kernel_stack: diff --git a/makefile b/makefile index cfcec12..14f5ca0 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -OBJECTS = loader.o kmain.o stdio.o io.o string.o serial.o gdt.o idt.o system.o isr.o +OBJECTS = loader.o kmain.o stdio.o io.o string.o serial.o gdt.o idt.o system.o isr.o irq.o CC = gcc CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -c LDFLAGS = -T link.ld -melf_i386 diff --git a/os.iso b/os.iso index 3f8b453eb0b6f0ff111e7d38b3a3f2ad5301ad53..db0f41cd70dc78aaddd7e241683d099308cb896a 100644 GIT binary patch delta 5886 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 delta 4192 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 B@