Dziwna sprawa z 8242

Mar 07, 2020 5 Replies

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:

formatting link
Kod analogicznej procedury pod 6502:
formatting link
Ktoś ma jakiś pomysł skąd się może brać ta ciekawa sytuacja?


Dnia Sat, 7 Mar 2020 19:49:44 +0100, Atlantis napisał(a):

MVI A, 09H ;Interrupts enabled, system flag set, first port clock enabled

LDA #$08 ;Interrupts enabled, system flag reset, first port clock enabled

To jest ta jedna zmiana ?

Jeszcze bym zasugerowal sprawdzenie linii danych ... ale tam jakies AA i 55 jest, to chyba sprawdzili programowo ...

A na pewno masz te sama wersje zrodla i binarki ?

J.

Tak.

Linie danych na pewno nie są pomieszane ani przerwane. Na obydwu komputerach uruchomiłem dość rozbudowane oprogramowanie, w postaci interpreterów BASIC-a. W przypadku takiego uszkodzenia nie działałyby prawidłowo. Poza tym cała procedura inicjacji 8242 przechodzi do samego końca, z związku z czym wiemy, że sterownik przyjmuje konkretne rozkazy/dane, odpowiadając na nie we właściwy sposób.

W sensie? Kod pisałem i kompilowałem samodzielnie, wygenerowany plik hex osobiście grałem do EPROM-u. ;)

Na razie w przypadku 6502 problem obejdę w najprostszy możliwy sposób - ustawiłem w konfiguracji bit odpowiedzialny za translację kodów (tak na wszelki wypadek, gdyby mu się odwidziało) a teraz zmodyfikuję procedurę odpowiedzialną za tłumaczenie na ASCII, aby przyjmowała dane wejściowe w set 1.

W dniu 07.03.2020 o 19:49, Atlantis pisze:

Jeśli to retro, to ja miałem kiedyś problem z klawiaturą tego rodzaju, że kiedyś klawiatury miały przełącznik AT/XT ;) Płytę główna wymieniłem na giełdzie (Grazybowska) i dopiero się zorientowałem.

Pan Cezary Grądys napisał:

A jeszcze wcześniej nie miały. Najpierw był komputer PC/XT i do niego klawiatura. Potem pojawił się PC/AT, już z nową klawiaturą. Te dwusystemowe z przłącnikiem, to w tajwańskich klonach.

Pan Cezary Grądys napisał:

A jeszcze wcześniej nie miały. Najpierw był komputer PC/XT i do niego klawiatura. Potem pojawił się PC/AT, już z nową klawiaturą. Te dwusystemowe z przłącznikiem, to w tajwańskich klonach.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required