Jakiś czas temu w celach czysto edukacyjnych zacząłem tworzyć pewien projekt, którego celem miało być bliższe poznanie niskopoziomowego działania systemów mikroprocesorowych oraz nauczenie się programowania w asemblerze. W tym celu zacząłem przenosić jeden ze swoich wcześniejszych projektów (zrealizowany oryginalnie na współczesnym, 32 bitowym MCU) na archaiczną architekturę 6502. Konkretnie sercem układu była CMOS-owa wersja mikroprocesora: WDC65C02.
Zacząłem od montażu płytki z CPU, pamięciami (EPROM i RAM), dekoderem adresów oraz prostym portem na 373, aby dzięki kilku migającym diodom wiedzieć, że sprzęt działa i program jest wykonywany. Diody zaczęły migać, czyli wszystko ok.
Potem przyszła kolej na kolejną płytkę. Umieściłem na niej kolejny (lokalny) dekoder adresów, wyświetlacz HD44780 oraz kilka przycisków podłączonych do portu wejściowego, zrealizowanego na 74HCT245. Elementy te pracują bezpośrednio na magistrali systemowej, a ich rejestry są dostępna dla procesora w przestrzeni adresowej. Wszystko ruszyło z miejsca - byłem w stanie wyświetlać tekst na wyświetlaczu, program reagował na wciśnięcie przycisków.
Tutaj zrobiłem sobie przerwę i projekt na jakiś czas wylądował na półce. Ostatnio jednak wykonałem trzecią płytkę. Ta także zawiera swój lokalny dekoder adresów, a także m.in. timer (MC6840), UART (MOS6551), RTC oraz GPIO (8255). Podłączyłem płytkę do wolnego gniazda na tasiemce, łącząc ją z magistralą systemową. Podłączyłem zasilanie i... Urządzenie zaczęło działać tylko połowicznie.
Krótko mówiąc:
1) Płyta procesorowa nadal działa, program się wykonuje, diody migają. 2) Płytka z wyświetlaczem nie działa. Wyświetlacz jest pustym ale chyba przechodzi inicjalizację, bo właśnie jest pusty - nie widać na nim dwóch rzędów złożonych z prostokątów, które wyświetlają się na niezainicjowanym HD44780.Na pewno nie ma tutaj konfliktu adresów, bo lokalny dekoder adresów na trzeciej płytce jest sterowany osobną, niewykorzystywaną nigdzie indziej linią CS z głównego dekodera - sprawdzałem.
Kolejną rzeczą, która przyszła mi do głowy było uszkodzenie któregoś z układów, zakłócające działanie magistrali. Zacząłem je więc po kolei usuwać. Dopiero po usunięciu wszystkich układów z podstawek (łącznie z dekoderem adresów) udało mi się powrócić do punktu wyjścia - wyświetlacz znów zaczął działać prawidłowo, ale tylko na chwilę. Dopóki płytka (choćby pozbawiona układów) jest podłączona, układ działa niestabilnie - wyświetlacz raz pokazuje tekst, a po ponownym odłączeniu i podłączeniu zasilania już nie chce.
Dopiero fizyczne odłączenie nowej płytki od magistrali przywraca normalną pracę.
Ktoś ma jakiś pomysł gdzie w ogóle mogę zacząć debugowanie?