Debugowanie systemu na 8080

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?

Reply to
Atlantis
Loading thread data ...

W dniu poniedziałek, 30 kwietnia 2018 10:15:54 UTC+2 użytkownik Atlantis napisał:

==============

  1. Kod faktycznie jest duperelny, więc zrób sobie kompilację na piechotę i sprawdź czy przypadkiem asm80 nie robi jakiegoś błędu. Porównaj swoją kompilację z kodem wynikowym asm80.

  1. Może EPROM źle zaprogramowany, albo z czasem dostępu są jakieś jaja. Sprawdź na innym EPROMie. Ze starymi epromami bywają różne niespodzianki.

Reply to
stchebel

W dniu poniedziałek, 30 kwietnia 2018 11:03:31 UTC+2 użytkownik snipped-for-privacy@gmail.com napisał:

================

Aha, po włączeniu zasilania daj dłuższy reset żeby mieć pewność, że PC(Program Counter) zaczyna kręcić się od zera.

Reply to
stchebel

Dnia Mon, 30 Apr 2018 10:15:50 +0200, Atlantis napisał(a):

Przerwania. Nie wlaczyles ... ale ma chyba NMI. A do czego podlaczone ?

Linii danych i adresowych nie pomyliles ? Cuda sie moga dziac, a nie tak latwo wykryc.

No i zwolnij zegar, zobacz co bedzie.

Wez mlotek i rozbij, bedziesz mial tydzien wolnego :-)

J.

Reply to
J.F.

Na razie nie używam przerwań. Wszystkie linie związane z ich obsługą wiszą w powietrzu, to ponoć nie powinno jednak przeszkadzać, o ile w kodzie nie włączę obsługi przerwań...

Wielce mało prawdopodobne. Już parę razy zdążyłem sprawdzić połączenia miernikiem i za każdym razem wychodzi mi ten sam wynik. Szyna danych "wychodzi" z pinów DBx UCY74S428, szyna adresowa jest podłączona do procesora przez dwie sztuki UCY74S412, pracujące jako bufory.

Teraz i tak nie pracuje na maksymalnej prędkości. Do UCY74S424 podłączony jest obecnie kwarc 12 MHz. Czyli wychodzi na to, że CPU pracuje z prędkością około 1,3 MHz.

Reply to
Atlantis

NMI to niemaskowalne. A wiszacy w powietrzu MOS to nie jest najlepszy pomysl. W kazdym badz razie te 20ms sugeruje jakies zaklocene z sieci ... albo celowo doprowadzone przerwanie, np od generatora wideo.

Tylko wiesz - wystarczy kiepska karta katalogowa i juz np D5 wg programatora trafi na D4 w procesorze. NOP to akurat 00h, wiec bedzie wykonywany, ale inne rozkazy moga sie zmienic. Pozostaja tez zwarcia.

Z dobrym oscyloskopem/analizatorem mozna zobaczyc co na nozkach procesora jest ... tylko proponuje prostszy program, np NOP NOP JMP 2 ; czyli do samego siebie

Powinno wystarczyc.

I to widac na oscyloskopie ?

o ile pamietam tam sie uzywalo kwarca 9MHz pracujacego na overtonie ... to moze ten 12 wzbudzil sie na 36 :-)

O ile pamietam, to 8080 jest statyczny - mozesz przyciskiem generowac kolejne takty i sprawdzac cykl po cyklu co sie dzieje :-)

J.

Reply to
J.F.

Ok, to co powinienem zrobić z pinami INTx przy CPU i UCY74S428?

Tam (na razie) nie ma żadnego generatora wideo. Układ buduję sam od podstaw i w tej chwili na płytce jest absolutne minimum: zasilanie, generator sygnału zegarowego, CPU, kontroler magistrali, bufory szyny adresowej i EPROM.

BTW zrobiłem test polegający na usunięciu EPROM-u i podciągnięciu linii danych do masy przez drabinkę rezystorów 4,7k. Analizator logiczny podłączony do młodszego bajtu szyny adresowej (starszy sprawdzę późnej - mam tylko ośmiokanałowy analizator) pokazuje ładne przebiegi. Procesor zdaje się odczytywać instrukcje NOP, zwiększając wartość PC.

Mój EPROM to M27128A-2FI produkcji ST. Opierałem się na tej nocie:

formatting link
programowania używam chińskiego MiniPro TL866CS, obsługiwanego z poziomu Windowsa XP odpalonego na wirtualce.

Starałem się sprawdzić, czy linie danych i adresowe nie są zwarte z sąsiadującymi liniami - niczego takiego nie zauważyłem.

Praca na overtonie jeśli mnie pamięć nie myli wymagała trochę innej konfiguracji UCY74S424 - konieczne było dodanie obwodu rezonansowego. U mnie zastosowany jest najprostszy układ do pracy na podstawowej częstotliwości.

Takie rozwiązanie przeszłoby w Z80, ale 8080 miał trochę bardziej skomplikowane taktowanie - wymaga dwóch sygnałów odpowiednio przesuniętych w fazie. Właśnie do tego służy UCY74S424. :) OIDP pamiętam praca krokowa w 8080 jest możliwa, ale wymaga dodania paru elementów.

Reply to
Atlantis

Podciagnac do stanu nieaktywnego.

Dla TTL to jest za duzo.

To teraz ustaw opornikami rozkaz OUT :-)

Przypadkowe wzbudzenie grozi.

Masz teraz NOP i licznik adresow - mozesz sprawdzic.

No to palec bedzie bolal od naciskania, ale sie da.

Mozna tez dodac generator kilku impulsow (na atmelku :-)).

J.

Reply to
J.F.

Jaką wartość sugerujesz? Niemniej udało mi się przeprowadzić test. Wszystko zdaje się być w porządku, z jednym wyjątkiem. Linie przyjmują stanu wskazujące na zliczanie o jeden. Za wyjątkiem A14 i A15 - na tych panuje całkowita cisza. Próbowałem podmienić bufor szyny adresowej oraz przetestować inny egzemplarz CPU. Ten sam efekt pojawia się zarówno na MCY7880 z innej serii, jak i na NEC D8080AFC.

Dobry pomysł. ;)

Nie sądzę - pod ręką mam do dyspozycji jedynie stary analogowy oscyloskop do 15MHz. Co prawda nie mierzyłem częstotliwości, jednak szerokość impulsów wydawała się być w porządku.

Reply to
Atlantis

200 ohm dla stanu 0. Ale skoro dziala ... moze nie trzeba.

Moze zwarcie na plytce. A bezposrednio na procesorze sprawdzales ? Moze podstawka nie kontaktuje.

No to widac nie w tym problem.

J.

Reply to
J.F.

Właśnie sobie uświadomiłem, że rozwiązane jest banalne. Zupełnie zapomniałem, że w przypadku tych dwóch linii połączenie miedzy procesorem i buforem szyny nie jest bezpośrednie. Przechodzą one przez układ tymczasowo zmieniający umożliwiający start z EPROM-u, który normalnie znajduje się pod adresem 0x0C00. Układ jest zdemontowany na czas testów, ale zapomniałem o mostkach przepuszczających te sygnały. Dodam je i powtórzę test. Wszystko jednak w tej chwili wskazuje na to, e procesor karmiony instrukcjami NOP prawidłowo wystawia na szynę adresową kolejne wartości.

Reply to
Atlantis

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.