Wtam.
Pisze system operacyjny od zera i problem pojawił się przy klawiaturze.
Doświadczenia troche mam gdyż kilka lat temu też pisałem lecz zrezygnowałem :-) .
Mój systemik doskonale działa w emulatorze bochs, na komputerze pc(nawet na starszych), lecz na starszym laptopie fujitsu lifebook(procek 150MHz) już nie działa.
W IDT "przechwyciłem" przerwania, klawiature mam w indexie 0x21.
Tak konfiguruje pic'e:
void init_pic(){
/* remaps IRQ0-7 to 0x20-0x27 in interrupt vector table */
outb(0x11, 0x20);
outb(0x11, 0xA0);
outb(0x20, 0x21);
/* remaps IRQ8-IRQ15 to 0x28-0x2F in interrupt vector table */
outb(0x28, 0xA1);
/* PIC2 is connected to PIC1 via IRQ2 */
outb(0x04, 0x21);
outb(0x02, 0xA1);
outb(0x01, 0x21);
outb(0x01, 0xA1);
outb(0x01, 0x21);
outb(0x00, 0xA1);
}
Nie odblokowałem timera abym nie miał zbędnych wywołań jeśli chodzi o przerwania.
Po wciśnięciu klawisza na laptopie, brak reakcji, na innych komputerach/emulatorach wszystko działa. Czy możliwe jest że komputer ten nie ma IRQ dla klawiatury? Jakieś dodatkowe metody odblowowania klawiatury? Dodam jeszcze że linuxy działają normalnie(slackware 11) oraz można odczytać z portu 0x60 wciskane znaki. Czy już musze pisać symilacje irq klawiatury przez timera systemowego? :-)