logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Jak wgrać instrukcje w pamięć RAM żeby procesor Zilog Z80 je później wykonywał ?

Lionsio 30 Gru 2024 18:29 579 24
REKLAMA
  • #1 21369394
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    Witam, chciałem zbudować bardzo prosty komputer na Zilog Z80, pomysł jest taki, żeby była jedynie pamięć RAM i przełącznik DIP8, za pomocą przełącznika wgrywałbyś binarnie komendy do pamięci RAM a później procesor by to odczytywał, problem jest taki, że nie wiem jak „zablokować” procesor na czas wgrywania instrukcji i później żeby zaczął je wykonywać. Czy wie ktoś jak to zrobić?

    PS czy wie ktoś też do jakich pinów linii adresowej mam podłączyć diody LED?
  • REKLAMA
  • #2 21369419
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Musiałbyś mieć zablokowany dostęp procesora do pamięci. Ale samo "ręczne" wgranie danych do pamięci nie jest proste, bo musisz mieć jeszcze przełączniki adresujące daną komórkę pamięci i po ustawieniu adresu oraz wgrywanego bajtu wykonać procedurę zapisania go do tej pamięci (czyli podać odpowiednie sygnały na określonych pinach). To zależy, jakiej konkretnie będziesz używał pamięci. A czy masz literaturę opisującą szczegółowo działanie tego procesora oraz jego komunikację z pamięcią? I jak chcesz sprawdzać, czy cokolwiek działa - otrzymywać jakieś wyniki z wykonania tych komend?

    PS. Jest taki pin "BUSREQ" - on blokuje procesor, bo to jest żądanie zwolnienia przez procesor wszystkich magistral: adresowej, danych i sterujących.
  • REKLAMA
  • #3 21369477
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    Czyli musiałbym mieć jeszcze dodatkowy przełącznik do blokowania procesora? i wtedy np. jak chcę wgrać nowy program to po prostu przesuwam przełącznik i wgrywam?
    Bo wiem że żeby wgrać to co jest na linii danych to trzeba na pin WE pamięci RAM dać niski sygnał a potem wysoki, czyli jak tak zrobię to będzie działać? Czy są jeszcze inne rzeczy potrzebne?
  • #4 21369531
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Tak, musisz dać na ten pin (BUSREQ) stan niski. A co do pamięci, to zależy jakiej pamięci użyjesz. To będzie SRAM (znacznie prostsza), czy DRAM? I jaką będzie miała organizację (8bit)? Bo tutaj jest dużo możliwości.
    PS. No i musiałbyś ten (nazwijmy go "programator") odłączać przed startem procesora (aby on z kolei zwolnił szyny adresowe, danych i sterujące).
  • #5 21369628
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    Użyje SRAM 2048x8
    Więc będę miał RAM i Z80 połączone ze sobą (mam instrukcje jak to zrobić) i będę miał przełącznik DIP8 podłączony do linii danych(D0-D7, przełącznik podłączony do plusa i minusa(trzeba będzie szybko nim przełączyć żeby się zmieniło z niskiego na wysoki i z powrotem na niski) i przełącznik podłączony do BUSREQ żeby blokować procesor żeby nie próbował wykonywać operacji podczas wgrywania programu. Czy to już wszystko czy jeszcze coś brakuje do poprawnego działania tego komputerka?
  • Pomocny post
    #6 21369906
    _jta_
    Specjalista elektronik
    Posty: 49123
    Pomógł: 3212
    Ocena: 4255
    W jakiś sposób musisz podawać adres, pod który wpisujesz (11 bitów dla 2KiB). I sygnał, że właśnie teraz adres i dane są prawidłowe.

    A poza tym: chcesz wpisywać kod programu ręcznie? To jest "trochę" uciążliwe. Lepiej użyć do tego komputera. Jakkolwiek pierwsze programy dziurkowano ręcznie na kartach.
  • REKLAMA
  • #7 21369922
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21369906
    Wiem że to uciążliwe, mam pomysł żeby wykorzystać do tego atmegę 328P. Ale jak podać adres? I jaki jest adres na którym trzeba wgrać instrukcje dla Z80?
  • Pomocny post
    #8 21370001
    _jta_
    Specjalista elektronik
    Posty: 49123
    Pomógł: 3212
    Ocena: 4255
    https://eduinf.waw.pl/inf/retro/004_z80_inst/index.php - tu masz opis tego procesora, ponoć sygnał Reset powoduje, że procesor wczytuje z magistrali jedną instrukcję, która może być instrukcją skoku pod dowolny adres w pamięci; jakkolwiek są 1-bajtowe instrukcje skoków pod 8 adresów od 0 co 8, więc warto tam coś umieścić.
  • #9 21370073
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Lionsio napisał:
    Ale jak podać adres? I jaki jest adres na którym trzeba wgrać instrukcje dla Z80?

    Procesor Z80, po wyzerowaniu sygnałem RESET (pin 26), zaczyna wykonywanie rozkazów od adresu 0000H (czyli od początku pamięci).
  • Pomocny post
    #10 21370240
    zdziwiony
    Poziom 28  
    Posty: 1995
    Pomógł: 64
    Ocena: 302
    Dawno, dawno temu jak zaczynałem przygodę z 51 zrobiłem sobie "symulator" epromu. Była to pamięć ram 62256 z przylutowanym kondensatorem do zasilania. Programowałem ją w swoim programatorze z podstawką zif i podłączanym do portu LPT. Działało to tak, że wkładałem pamięć do programatora, zapisywałem ją i wyciągałem, a kondensator podtrzymywał zasilanie na moment przeniesienia pamięci. Niestety nie zbudowałem żadnego systemu na 51 z pamięcią zewnętrzną albowiem już pojawiła się seria Atmela 89xxxx i one miały swoją pamięć. Tym niemniej działało to, bo mogłem zaprogramować, wyciągnąć ją na chwilę z podstawki, włożyć z powrotem i zweryfikować poprawność zapisu.
  • #11 21370331
    jarek_lnx
    Poziom 43  
    Posty: 22727
    Pomógł: 4197
    Ocena: 6122
    Lionsio napisał:
    Witam, chciałem zbudować bardzo prosty komputer na Zilog Z80, pomysł jest taki, żeby była jedynie pamięć RAM i przełącznik DIP8
    Dlaczego chcesz zbudować bardzo skomplikowany (w obsłudze) komputer?
  • Pomocny post
    #12 21370358
    _jta_
    Specjalista elektronik
    Posty: 49123
    Pomógł: 3212
    Ocena: 4255
    fred_onizuka napisał:
    Procesor Z80, po wyzerowaniu sygnałem RESET (pin 26), zaczyna wykonywanie rozkazów od adresu 0000H (czyli od początku pamięci).

    W tym opisie, do którego link podałem, jest co innego: procesor po sygnale Reset wchodzi w tryb, w którym czyta instrukcję z magistrali (nie wystawia adresu!) - można mu tak podać instrukcję skoku pod potrzebny adres, można też podać instrukcję Restart N, która wykonuje skok do adresu N*8 (N od 0 do 7). Masz jakiś opis, gdzie jest mowa o rozpoczynaniu o adresu 0?
  • #13 21370410
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21370358
    Ja Nie mam takiego opisu, ale czy jak procesor zacznie wykonywać instrukcje od początkowego adresu to będzie on mógł kontynuować wykonywanie instrukcji w tym adresie czy musi tam być instrukcja przeskoku do innego adresu?
  • #14 21370439
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    _jta_ napisał:
    Masz jakiś opis, gdzie jest mowa o rozpoczynaniu o adresu 0?

    Tak, ten opis pochodzi z czasopisma Radioelektronik 1990/05 (tam jest cały cykl artykułów o tym procesorze i układach z nim współpracujących).
    Tekst dotyczący resetu CPU Z80. Fragment tekstu z czasopisma technicznego, dotyczący funkcji RESET w procesorze Z80.
    PS. Podejrzewam, że na tym drugim obrazku opis jest błędny i zamiast "przez czas krótszy, niż trzy okresy zegara systemowego", powinno być "dłuższy" (zamiast "krótszy"), ale to trzeba by sprawdzić w dokumentacji tego procesora.

    Dodano po 10 [minuty]:

    Lionsio napisał:
    będzie on mógł kontynuować wykonywanie instrukcji w tym adresie czy musi tam być instrukcja przeskoku do innego adresu?

    Tam może być dowolny rozkaz, w tym rozkaz skoku, ale zaleca się, aby jednym z pierwszych rozkazów było ustawienie rejestru wskaźnika stosu. Ale jak nie będziesz używać stosu (jest on używany w obsłudze przerwań, oraz do tworzenia skoków z powrotem do miejsca wywołania), to nie jest to konieczne.
  • REKLAMA
  • #15 21370489
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21370439
    Ok, dzięki, ale potrzebuje też informacji jak ustawić ten adres żebym na ten adres wgrał właśnie program?

    Dodano po 3 [minuty]:

    fred_onizuka napisał:
    PS. Podejrzewam, że na tym drugim obrazku opis jest błędny i zamiast "przez czas krótszy, niż trzy okresy zegara systemowego", powinno być "dłuższy" (zamiast "krótszy"), ale to trzeba by sprawdzić w dokumentacji tego procesora.

    Mi się wydaje że powinno być dłuższe, bo gdzieś indziej czytałem że po 4 cyklach zegara się procesor dopiero resetuje
  • #16 21370495
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Ale to, gdzie jest program w pamięci, zależy tylko od tego w jakich adresach pamięci go wpiszesz. Chciałeś ręcznie ustawiać poszczególne bajty pamięci, więc też ręcznie musiałbyś ustawiać adresy komórek pamięci (szyna adresowa), gdzie te bajty mają się znaleźć.
  • #17 21370499
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21370495 Chodzi mi o to, jak ustawić poszczególny adres
  • #18 21370501
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Pamięć posiada "szynę adresową". Tam trzeba podać adres komórki pamięci, gdzie ma być wpisany dany bajt.

    Schemat wyprowadzeń układu scalonego z oznaczeniem pinów.

    Te piny: A0 - A10, to jest szyna adresowa, tam trzeba podać adres, czyli dla adresu 0000H, wszędzie "zera", a dla 0001H, na pinie A0 "jeden", a na pozostałe A1 - A10 "zera", itd.
  • #19 21370511
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21370501
    Chodzi o piny A0-A15?
  • Pomocny post
    #20 21370515
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Tak. To jest szyna adresowa. Ale Ty wcześniej pisałeś o pamięci 2kB (8bit x 2048), a tam jest tylko 11 pinów adresowych. Dlatego w przykładzie użyłem takiej pamięci. Adresy A0 - A15 występują dla pamięci 64kB.
  • #21 21370537
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21370515 Ok, to już ostatnia rzecz: gdzie mam podłączyć diody led żeby np. przy instrukcji dodawania wyświetlił mi się na nich wynik?
  • Pomocny post
    #22 21370542
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Niestety, ale Z80 jest klasycznym procesorem, więc aby się komunikować z peryferiami, potrzeby jest do tego układ wejścia-wyjścia (porty IO), pod które można połączać różne rzeczy, np. diody.
    Schemat rozkładu wyprowadzeń układu Z80 PIO z oznaczeniami pinów.
  • #23 21370554
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    >>21370542
    Aha, ale ja mam układ scalony Z80 PIO, ale kompletnie nie wiem jak go używać
  • Pomocny post
    #24 21370561
    fred_onizuka
    Poziom 20  
    Posty: 308
    Pomógł: 44
    Ocena: 106
    Musisz go podłączyć pod procesor niejako "obok" pamięci RAM. Tam są dwa dwukierunkowe 8bit porty, czyli 16 pinów, pod które możesz coś podłączyć, np te diody. Musisz znaleźć opis dla tego układu, by wiedzieć, jak go podłączyć. Np. opis działania i pinów jest w czasopiśmie Radioelektronik 1990/06.
  • #25 21370567
    Lionsio
    Poziom 11  
    Posty: 313
    Pomógł: 12
    Ocena: 24
    Ok, bardzo dziękuje ! Wiem już chyba wszystko co potrzebuje do zbudowania tego komputerka

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono temat budowy prostego komputera opartego na procesorze Zilog Z80, w którym użytkownik planuje używać pamięci RAM oraz przełącznika DIP8 do wgrywania instrukcji binarnych. Kluczowym zagadnieniem jest zablokowanie procesora podczas wgrywania danych do pamięci, co można osiągnąć poprzez użycie pinu BUSREQ. Użytkownik zamierza wykorzystać pamięć SRAM 2048x8 oraz podłączyć przełącznik do linii danych i BUSREQ. Wskazano również na potrzebę podawania adresów pamięci oraz sygnałów do zapisu danych. Użytkownik rozważa użycie mikrokontrolera ATmega 328P do ułatwienia procesu wgrywania programów. Dodatkowo, poruszono kwestie dotyczące podłączenia diod LED do układu Z80 PIO w celu wyświetlania wyników operacji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA