Podążam za kilkoma tutorialami i odnośnikami, próbującymi ustawić moje jądro. W samouczku natknąłem się na nieznany kod, który w ogóle go nie tłumaczy. Jest to kod, który mi powiedziano mapuje 16 IRQs (0-15)
do ISR lokalizacje 32-47
:Konfigurowanie odwzorowania IRQ
void irq_remap(void)
{
outportb(0x20, 0x11);
outportb(0xA0, 0x11);
outportb(0x21, 0x20);
outportb(0xA1, 0x28);
outportb(0x21, 0x04);
outportb(0xA1, 0x02);
outportb(0x21, 0x01);
outportb(0xA1, 0x01);
outportb(0x21, 0x0);
outportb(0xA1, 0x0);
}
Kod dla outportb()
jest w następujący sposób, ale mam już jasne zrozumienie tego, co jej robi:
void outPortB(unsigned short port, unsigned char data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (port), "a" (data));
}
I należy wspomnieć, że dotyczy to architektury x86 w trybie chronionym. Ten kod źródłowy działa dobrze i rozumiem, co robi, ale nie rozumiem, jak to działa. Czy ktoś może mi wyjaśnić, co się tutaj dzieje, więc na wypadek, gdy będę musiał to rozwinąć, będę wiedział, co robię?
Wow, dokładnie tego potrzebowałem. Dzięki kiści! –