Skończyłem ostatnio składać prosty system mikroprocesorowy na polskim MCY7880. Płytka poza procesorem i układem zasilania zawiera także UCY74S424, UCY74S428, UCY74S405, kilka sztuk UCY74S$12 (bufor szyny adresowej i fragment dekodera adresów). Do tego pamięci i trochę drobnicy TTL.
W chwili obecnej podłączona jest wersja minimalistyczna - z podstawek wyjęty dekoder adresów, linia CS EPROM-u na stałe podłączona do masy.
Sprawdziłem parę razy wszystkie połączenia i wygląda na to, że nie popełniłem żadnego błędu lutując kynar. Jeszcze przed włożeniem pamięci EPROM do postawki sprawdziłem najważniejsze linie oscyloskopem i wszystko zdawało się być w porządku - na liniach adresowych pojawiały się regularne przebiegi, wskazujące na inkrementację adresu. Regularne impulsy na liniach CS sugerowały także poprawne działanie dekodera adresów.
Następne zaprogramowałem EPROM prostym programem, stworzonym za pomocą webowego asemblera (asm80.com).
ORG 00000H NOP NOP NOP NOP START: NOP NOP MVI A, 80H OUT 00H NOP NOP JMP START
Po włożeniu EPROM-u zamilkły górne linie magistrali adresowej, co wskazuje na to, że faktycznie wykonuje się jakaś pętla.
Rozkaz OUT 00H miał zapisać nową wartość do jednego z UCY74S412, okazało się jednak, że linia nie została ustawiona. Zacząłem się więc bliżej przyglądać przebiegom za pomocą prostego analizatora logicznego. Okazuje się, że:
1) Linia I/OW nie zmienia wcale swojego stanu. A przecież powinna ustawić się w stanie niskim przy zapisie do IO. 2) Linia MEMR jest aktywna prawie cały czas (co mnie specjalnie nie dziwi). 3) Na linii MEMW co jakieś 20ms pojawiają się dwa impulsy stanu niskiego. Chyba nie powinno ich tam być? Przecież w moim kodzie nie występują żadne operacje zapisu do pamięci, nie jest skonfigurowany stos itp.Uprzedzając potencjalne odpowiedzi - nie, nie zamieniłem MEMW i I/OW miejscami. Zresztą wspomniane impulsy występują również po zakomentowaniu linijki z poleceniem OUT.
Próbowałem zamienić MCY7880 na procesor produkcji NEC. Podmieniłem też MCY74S428 na inny egzemplarz, ale ne przyniosło to żadnego rezultatu.
Ktoś ma jakiś pomysł odnośnie tego, co może być nie tak? Co mogę sprawdzić? Może problem jest software'owy i najzwyczajniej w świecie coś pominąłem?