Atlantis
Guest
Mon Apr 30, 2018 8:15 am
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?
Guest
Mon Apr 30, 2018 11:03 am
W dniu poniedziałek, 30 kwietnia 2018 10:15:54 UTC+2 użytkownik Atlantis napisał:
Quote:
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?
=============
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.
2. Może EPROM źle zaprogramowany, albo z czasem dostępu są jakieś jaja. Sprawdź na innym EPROMie. Ze starymi epromami bywają różne niespodzianki.
Guest
Mon Apr 30, 2018 11:06 am
W dniu poniedziałek, 30 kwietnia 2018 11:03:31 UTC+2 użytkownik stch...@gmail.com napisał:
Quote:
W dniu poniedziałek, 30 kwietnia 2018 10:15:54 UTC+2 użytkownik Atlantis napisał:
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?
=============
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.
2. Może EPROM źle zaprogramowany, albo z czasem dostępu są jakieś jaja. Sprawdź na innym EPROMie. Ze starymi epromami bywają różne niespodzianki.
===============
Aha, po włączeniu zasilania daj dłuższy reset żeby mieć pewność, że PC(Program Counter) zaczyna kręcić się od zera.
J.F.
Guest
Mon Apr 30, 2018 8:21 pm
Dnia Mon, 30 Apr 2018 10:15:50 +0200, Atlantis napisał(a):
Quote:
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.
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.
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.
Quote:
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?
Wez mlotek i rozbij, bedziesz mial tydzien wolnego :-)
J.
Atlantis
Guest
Tue May 01, 2018 8:02 am
On 30.04.2018 22:21, J.F. wrote:
Quote:
Przerwania.
Nie wlaczyles ... ale ma chyba NMI. A do czego podlaczone ?
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ń...
Quote:
Linii danych i adresowych nie pomyliles ?
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.
Quote:
No i zwolnij zegar, zobacz co bedzie.
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.
J.F.
Guest
Tue May 01, 2018 9:03 am
Dnia Tue, 1 May 2018 10:02:41 +0200, Atlantis napisał(a):
Quote:
On 30.04.2018 22:21, J.F. wrote:
Przerwania.
Nie wlaczyles ... ale ma chyba NMI. A do czego podlaczone ?
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ń...
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.
Quote:
Linii danych i adresowych nie pomyliles ?
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.
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
Quote:
No i zwolnij zegar, zobacz co bedzie.
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.
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.
Atlantis
Guest
Tue May 01, 2018 9:50 am
On 01.05.2018 11:03, J.F. wrote:
Quote:
NMI to niemaskowalne.
A wiszacy w powietrzu MOS to nie jest najlepszy pomysl.
Ok, to co powinienem zrobić z pinami INTx przy CPU i UCY74S428?
Quote:
W kazdym badz razie te 20ms sugeruje jakies zaklocene z sieci ... albo
celowo doprowadzone przerwanie, np od generatora wideo.
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.
Quote:
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.
Mój EPROM to M27128A-2FI produkcji ST. Opierałem się na tej nocie:
http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics/mXrzxwv.pdf
Do programowania używam chińskiego MiniPro TL866CS, obsługiwanego z
poziomu Windowsa XP odpalonego na wirtualce.
Quote:
Pozostaja tez zwarcia.
Starałem się sprawdzić, czy linie danych i adresowe nie są zwarte z
sąsiadującymi liniami - niczego takiego nie zauważyłem.
Quote:
o ile pamietam tam sie uzywalo kwarca 9MHz pracujacego na overtonie
... to moze ten 12 wzbudzil sie na 36
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.
Quote:
O ile pamietam, to 8080 jest statyczny - mozesz przyciskiem generowac
kolejne takty i sprawdzac cykl po cyklu co sie dzieje
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.
J.F.
Guest
Tue May 01, 2018 10:33 am
Dnia Tue, 1 May 2018 11:50:10 +0200, Atlantis napisał(a):
Quote:
On 01.05.2018 11:03, J.F. wrote:
NMI to niemaskowalne.
A wiszacy w powietrzu MOS to nie jest najlepszy pomysl.
Ok, to co powinienem zrobić z pinami INTx przy CPU i UCY74S428?
Podciagnac do stanu nieaktywnego.
Quote:
W kazdym badz razie te 20ms sugeruje jakies zaklocene z sieci ... albo
celowo doprowadzone przerwanie, np od generatora wideo.
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.
Dla TTL to jest za duzo.
Quote:
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.
To teraz ustaw opornikami rozkaz OUT :-)
Quote:
o ile pamietam tam sie uzywalo kwarca 9MHz pracujacego na overtonie
... to moze ten 12 wzbudzil sie na 36 :-)
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.
Przypadkowe wzbudzenie grozi.
Masz teraz NOP i licznik adresow - mozesz sprawdzic.
Quote:
O ile pamietam, to 8080 jest statyczny - mozesz przyciskiem generowac
kolejne takty i sprawdzac cykl po cyklu co sie dzieje :-)
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.
No to palec bedzie bolal od naciskania, ale sie da.
Mozna tez dodac generator kilku impulsow (na atmelku

).
J.
Atlantis
Guest
Tue May 01, 2018 11:22 am
On 01.05.2018 12:33, J.F. wrote:
Quote:
Dla TTL to jest za duzo.
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.
Quote:
To teraz ustaw opornikami rozkaz OUT
Dobry pomysł. ;)
Quote:
Przypadkowe wzbudzenie grozi.
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.
J.F.
Guest
Tue May 01, 2018 11:41 am
Dnia Tue, 1 May 2018 13:22:11 +0200, Atlantis napisał(a):
Quote:
On 01.05.2018 12:33, J.F. wrote:
Dla TTL to jest za duzo.
Jaką wartość sugerujesz?
200 ohm dla stanu 0.
Ale skoro dziala ... moze nie trzeba.
Quote:
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.
Moze zwarcie na plytce.
A bezposrednio na procesorze sprawdzales ?
Moze podstawka nie kontaktuje.
Quote:
Przypadkowe wzbudzenie grozi.
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.
No to widac nie w tym problem.
J.
Atlantis
Guest
Tue May 01, 2018 11:48 am
On 01.05.2018 13:41, J.F. wrote:
Quote:
Moze zwarcie na plytce.
A bezposrednio na procesorze sprawdzales ?
Moze podstawka nie kontaktuje.
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.