feat: mise a jour de l'irq 1 par défaut Ajout de irqendmaster dans les irq cascadées Utilisation du sélecteur 0x20 au lieu de 0x30 pour les exceptions/interruptions
This commit is contained in:
parent
e2b0599126
commit
bbffb508fb
96
lib/idt.c
96
lib/idt.c
|
@ -34,7 +34,7 @@ void initpic(void)
|
||||||
outb(0xA0,0x11);
|
outb(0xA0,0x11);
|
||||||
nop();
|
nop();
|
||||||
/* Initialisation de ICW2 - vecteur de depart = 96 */
|
/* Initialisation de ICW2 - vecteur de depart = 96 */
|
||||||
outb(0xA1,0x70);
|
outb(0xA1,0x60);
|
||||||
nop();
|
nop();
|
||||||
/* Initialisation de ICW3 */
|
/* Initialisation de ICW3 */
|
||||||
outb(0xA1,0x02);
|
outb(0xA1,0x02);
|
||||||
|
@ -232,6 +232,8 @@ void irq0()
|
||||||
{
|
{
|
||||||
cli();
|
cli();
|
||||||
print("irq 1");
|
print("irq 1");
|
||||||
|
while ((inb(0x64)&1)==0);
|
||||||
|
inb(0x60);
|
||||||
irqendmaster();
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
|
@ -296,6 +298,7 @@ void irq8()
|
||||||
cli();
|
cli();
|
||||||
print("irq 8");
|
print("irq 8");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -305,6 +308,7 @@ void irq9()
|
||||||
cli();
|
cli();
|
||||||
print("irq 9");
|
print("irq 9");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -314,6 +318,7 @@ void irq10()
|
||||||
cli();
|
cli();
|
||||||
print("irq 10");
|
print("irq 10");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -323,6 +328,7 @@ void irq11()
|
||||||
cli();
|
cli();
|
||||||
print("irq 11");
|
print("irq 11");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -331,7 +337,10 @@ void irq12()
|
||||||
{
|
{
|
||||||
cli();
|
cli();
|
||||||
print("irq 12");
|
print("irq 12");
|
||||||
irqendslave();
|
while ((inb(0x64)&1)==0);
|
||||||
|
inb(0x60);
|
||||||
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -341,6 +350,7 @@ void irq12()
|
||||||
cli();
|
cli();
|
||||||
print("irq 13");
|
print("irq 13");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -350,6 +360,7 @@ void irq14()
|
||||||
cli();
|
cli();
|
||||||
print("irq 14");
|
print("irq 14");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -359,6 +370,7 @@ void irq15()
|
||||||
cli();
|
cli();
|
||||||
print("irq 15");
|
print("irq 15");
|
||||||
irqendslave();
|
irqendslave();
|
||||||
|
irqendmaster();
|
||||||
sti();
|
sti();
|
||||||
iret();
|
iret();
|
||||||
}
|
}
|
||||||
|
@ -366,52 +378,52 @@ void irq15()
|
||||||
void initidt(void)
|
void initidt(void)
|
||||||
{
|
{
|
||||||
u16 i;
|
u16 i;
|
||||||
putidt((u32)exception0, 0x30, INTGATE, 0);
|
putidt((u32)exception0, 0x20, INTGATE, 0);
|
||||||
putidt((u32)exception1, 0x30, INTGATE, 1);
|
putidt((u32)exception1, 0x20, INTGATE, 1);
|
||||||
putidt((u32)exception2, 0x30, INTGATE, 2);
|
putidt((u32)exception2, 0x20, INTGATE, 2);
|
||||||
putidt((u32)exception3, 0x30, INTGATE, 3);
|
putidt((u32)exception3, 0x20, INTGATE, 3);
|
||||||
putidt((u32)exception4, 0x30, INTGATE, 4);
|
putidt((u32)exception4, 0x20, INTGATE, 4);
|
||||||
putidt((u32)exception5, 0x30, INTGATE, 5);
|
putidt((u32)exception5, 0x20, INTGATE, 5);
|
||||||
putidt((u32)exception6, 0x30, INTGATE, 6);
|
putidt((u32)exception6, 0x20, INTGATE, 6);
|
||||||
putidt((u32)exception7, 0x30, INTGATE, 7);
|
putidt((u32)exception7, 0x20, INTGATE, 7);
|
||||||
putidt((u32)exception8, 0x30, INTGATE, 8);
|
putidt((u32)exception8, 0x20, INTGATE, 8);
|
||||||
putidt((u32)exception9, 0x30, INTGATE, 9);
|
putidt((u32)exception9, 0x20, INTGATE, 9);
|
||||||
putidt((u32)exception10, 0x30, INTGATE, 10);
|
putidt((u32)exception10, 0x20, INTGATE, 10);
|
||||||
putidt((u32)exception11, 0x30, INTGATE, 11);
|
putidt((u32)exception11, 0x20, INTGATE, 11);
|
||||||
putidt((u32)exception12, 0x30, INTGATE, 12);
|
putidt((u32)exception12, 0x20, INTGATE, 12);
|
||||||
putidt((u32)exception13, 0x30, INTGATE, 13);
|
putidt((u32)exception13, 0x20, INTGATE, 13);
|
||||||
putidt((u32)exception14, 0x30, INTGATE, 14);
|
putidt((u32)exception14, 0x20, INTGATE, 14);
|
||||||
putidt((u32)exception15, 0x30, INTGATE, 15);
|
putidt((u32)exception15, 0x20, INTGATE, 15);
|
||||||
putidt((u32)exception16, 0x30, INTGATE, 16);
|
putidt((u32)exception16, 0x20, INTGATE, 16);
|
||||||
putidt((u32)exception17, 0x30, INTGATE, 17);
|
putidt((u32)exception17, 0x20, INTGATE, 17);
|
||||||
putidt((u32)exception18, 0x30, INTGATE, 18);
|
putidt((u32)exception18, 0x20, INTGATE, 18);
|
||||||
for(i=19;i<32;i++)
|
for(i=19;i<32;i++)
|
||||||
{
|
{
|
||||||
putidt((u32)interruption, 0x30, INTGATE, i);
|
putidt((u32)interruption, 0x20, INTGATE, i);
|
||||||
}
|
}
|
||||||
putidt((u32)irq0, 0x30, INTGATE, 32);
|
putidt((u32)irq0, 0x20, INTGATE, 32);
|
||||||
putidt((u32)irq1, 0x30, INTGATE, 33);
|
putidt((u32)irq1, 0x20, INTGATE, 33);
|
||||||
putidt((u32)irq2, 0x30, INTGATE, 34);
|
putidt((u32)irq2, 0x20, INTGATE, 34);
|
||||||
putidt((u32)irq3, 0x30, INTGATE, 35);
|
putidt((u32)irq3, 0x20, INTGATE, 35);
|
||||||
putidt((u32)irq4, 0x30, INTGATE, 36);
|
putidt((u32)irq4, 0x20, INTGATE, 36);
|
||||||
putidt((u32)irq5, 0x30, INTGATE, 37);
|
putidt((u32)irq5, 0x20, INTGATE, 37);
|
||||||
putidt((u32)irq6, 0x30, INTGATE, 38);
|
putidt((u32)irq6, 0x20, INTGATE, 38);
|
||||||
putidt((u32)irq7, 0x30, INTGATE, 39);
|
putidt((u32)irq7, 0x20, INTGATE, 39);
|
||||||
for(i=40;i<112;i++)
|
for(i=40;i<96;i++)
|
||||||
{
|
{
|
||||||
putidt((u32)interruption, 0x30, INTGATE, i);
|
putidt((u32)interruption, 0x20, INTGATE, i);
|
||||||
}
|
}
|
||||||
putidt((u32)irq8, 0x30, INTGATE, 112);
|
putidt((u32)irq8, 0x20, INTGATE, 96);
|
||||||
putidt((u32)irq9, 0x30, INTGATE, 113);
|
putidt((u32)irq9, 0x20, INTGATE, 97);
|
||||||
putidt((u32)irq10, 0x30, INTGATE, 114);
|
putidt((u32)irq10, 0x20, INTGATE, 98);
|
||||||
putidt((u32)irq11, 0x30, INTGATE, 115);
|
putidt((u32)irq11, 0x20, INTGATE, 99);
|
||||||
putidt((u32)irq12, 0x30, INTGATE, 116);
|
putidt((u32)irq12, 0x20, INTGATE, 100);
|
||||||
putidt((u32)irq13, 0x30, INTGATE, 117);
|
putidt((u32)irq13, 0x20, INTGATE, 101);
|
||||||
putidt((u32)irq14, 0x30, INTGATE, 118);
|
putidt((u32)irq14, 0x20, INTGATE, 102);
|
||||||
putidt((u32)irq15, 0x30, INTGATE, 119);
|
putidt((u32)irq15, 0x20, INTGATE, 103);
|
||||||
for(i=120;i<255;i++)
|
for(i=104;i<255;i++)
|
||||||
{
|
{
|
||||||
putidt((u32)interruption, 0x30, INTGATE, i);
|
putidt((u32)interruption, 0x20, INTGATE, i);
|
||||||
}
|
}
|
||||||
/* initialise le registre idt */
|
/* initialise le registre idt */
|
||||||
idtreg.limite = 256*8;
|
idtreg.limite = 256*8;
|
||||||
|
|
Loading…
Reference in New Issue