Jak niektórzy pamiętają, od jakiegoś czasu bawię się techniką mikroprocesorową retro. W chwili obecnej pracuję m.in. nad dwoma równoległymi projektami prostych komputerków: jeden wykorzystuje 6502, drugi polski mikroprocesor MCY7880. W obydwu przypadkach zastosowałem pecetowy kontroler klawiatury AT/PS2, czyli popularny kiedyś układ 8242.
W komputerze na MCY7880 wszystko zadziałało bez większego problemu. Uruchomiłem przerwania, napisałem procedurę odbierającą bajt danych z klawiatury, a następnie dodałem kod tłumaczący skankody klawiszy (w domyślnym formacie Set 2, funkcja "translation" w kontrolerze jest wyłączona) na ASCII. Wszystko działa.
W przypadku 6502 miałem natomiast więcej problemów. Kod przepisałem w asemblerze 6502, nie wprowadzając do niego większych zmian (największą była zmodyfikowanie zawartości bajtu konfiguracyjnego o jeden bit - wyłączenie przerwań). Nic jednak nie chciało działać - funkcja tłumacząca wyrzucała jakieś bzdury. Postanowiłem więc sprawdzić, co w ogóle przyjmuje na wejściu. I tutaj przeżyłem spore zaskoczenie - kontroler wysyłał kody, ale w formacie "Set 1", a przecież cały czas używałem tej samej klawiatury i nie włączałem translacji.
Pomyślałem, że może trafił mi się jakiś dziwny egzemplarz 8242, więc podmieniłem je między komputerami. Jednak nie - każdy komputer zachowywał się tak samo jak przedtem.
Ktoś ma jakiś pomysł co powodu takiego stanu rzeczy?
Kod procedury inicjującej 8242 pod MCY7880: