znaczacy > misc.* > misc.elektronika

Atlantis (07.03.2020, 20:49)
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:


Kod analogicznej procedury pod 6502:


Kto? ma jaki? pomys? sk?d si? mo?e bra? ta ciekawa sytuacja?
J.F. (07.03.2020, 23:02)
Dnia Sat, 7 Mar 2020 19:49:44 +0100, Atlantis napisał(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.


> Kod procedury inicjującej 8242 pod MCY7880:
>
> Kod analogicznej procedury pod 6502:
>
> Ktoś ma jakiś pomysł skąd się może brać ta ciekawa sytuacja?


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.
Atlantis (08.03.2020, 00:18)
On 07.03.2020 22:02, J.F. wrote:

> To jest ta jedna zmiana ?


Tak.

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


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.

> A na pewno masz te sama wersje zrodla i binarki ?


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.
Podobne wątki