IRQ klawiatury na starszym komputerze

0

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? :-)

0

Po kilku testach....
Wywaliłem prawie wszystko z kernela, został kod w assemblerze, czyli odblokowanie a20, tryb chroniony i gdt(bez idt). Kod w C:

int main(/* nie wazne */){
	init_console(); //czyszczenie ekranu, początkowe pozycje itp
	for(;;){
		setxy(0, 8);
		printf("%d  ", inb(0x60));
	}
	return 0;
}

Na wszystkim nie licząc starego laptopa, "os" działa. Na laptopie pojawia się napis 84 i dalej nie reaguje na klawiature. Gdy przed załadowaniem systemu klikam na klawisze to pojawia się numer wciśnietego klawisza i tak zostaje. Normalnie na innym komputerze "printf("%d ", inb(0x60));" działa na bieŻąco (Boże, widzisz takie błędy i nie grzmisz).
Co jest nie tak?

0

Na trybie real mode z IVT wszystko działa :-|
Uruchamiałem też proste systemiki ze stron zagranicznych i też na pmode nie działa klawiatura.
Czy ktoś z Was pisze system i może udostępnić wersje na dyskietke aby sprawdzić czy działa klawiatura w celu rozwiązania problemu?

0

Problem w pewnym stopniu rozwiązany.
Laptop ma przycisk nad klawiaturą, zresztą jak we wszystkich aby włączyć komputer.
Po naciśnięciu nic sie nie dzieje(na linuxie się usypia). Jak przytrzyma się 5s to się restartuje.
Zapytacie się jak sie go wyłącza :-) Koło gniazda zasilacza jest po prostu przełącznik. Na akumulatorach laptop już od dawna nie trzyma więc nie mam możliwości przebadania tego przycisku nad klawiaturą :-/

Dobra koniec tych opisów. Po uruchomieniu komputera i mojego systemu nie działa klawiatura, brak reakcji jeśli chodzi o przerwania itp. Lecz gdy wcisne ten przycisk nad klawiaturą nic sie nie dzieje lecz klawiatura zaczyna działać i wszystko jest OK.
Najlepiej jakby system sam "wciskał" ten przycisk, aby nie trzeba było fizycznie się ingerować żeby klawiatura zadziałała. Jak to zrobić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1