Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Z80 - stronicowanie ROM, RAM, DRAM

04 Wrz 2012 21:14 1545 1
  • Poziom 2  
    Mam nadzieję, że dział prawidłowy, bo z pogranicza fantastyki to chyba nie jest.

    Otóż, interesuje mnie jakiś ogólny, pogądowy schemat wraz z wyjaśnieniem realizacji stronicowania przy użyciu Z80.

    Z80 - stronicowanie ROM, RAM, DRAM Z80 - stronicowanie ROM, RAM, DRAM

    Mam coś takiego.
    Czego nie rozumiem:
    Rozpiska "zadania" na drugim zdjęciu, jakie znaczenie mają numerki? Poza tym, że 256k to 16 stron po 16k? (Chodzi mi o relację przedstawioną za pomocą strzałek z pamięci B do A).

    W samym rozwiązaniu, ogólnie prosił bym o wyjaśnienie step by step.

    Samo 256k pamięci jest adresowane na 18 bitach, stąd od A0 do A17.
    Z80 ma 16 bitów adresowych (A0 do A15), które umożliwiają zaadresowanie do 64k. Stąd konieczność zastosowania stronicowania.

    Do czego zmierzam. Proszę o wyjaśnienie jaką dokładnie funkcję spełniają w tym wypadku 2 dekodery (wybór i aktywacja rejestrów, ok ale JAK? dlaczego sygnałami z A0, A1 A14, A15 i skąd dodatkowe A16 i A17).
    Przede wszystkim jednak największą czarną magię stanowi dla mnie OR spinający IORQ, WR (to jeszcze jestem w stanie zrozumieć) z NAND A2..A7 (Woot and why?)

    Nie bardzo potrafię przeanalizować ten schemat i wyciągnąć prawidłowe wnioski. Nawet nie wiem czy jest w pełni poprawny.

    Jeśli ktoś dysponuje, prosiłbym również o inne przykłady stronicowania.
  • Poziom 32  
    Ja kiedys zrobiłem fajne stronicowanie na dwóch kostkach 7489 (to taka mała TTLowa pamięć 4 * 16 słów) i paru bramkach.
    7489 ma rozdzielone wejścia i wyjścia. W normalnym trybie pracy cztery nastarsze bity adresowe wybierają 8 bitowe (2 kostki po 4 bity) słowo z tej pamięci i te linie robią za najstarsze bity adresowe, zamiast 4 dostajemy 8 linii - o 4 więcej. W sumie 20 linii adresowych - 1MB obszaru.
    Do wpisywania zawartości pamięci stron wejścia danych tej pamięci podłączone są do szyny danych procka i drobna logika na IORQ umożliwia steruje zapisem. Trzeba używać instrukcji OUT (C) bo wtedy jest kontrola nad najstarszymi bitami adresowymi w operacjach IO.
    W wyniku mamy podział obszaru 64KB na 16 stron po 4KB, każda z tych stron może być dowolne zmapowany na jeden z 256 obszarów w przestrzeni 1MB. W najprostszym układzie nie ma możliwości odczytania zawartości pamięci stron, trzeba gdzieś w systemie trzymać kopię lub dorobić jakiś bufor łączący wyjścia danych pamięci z szyną danych procka i wtedy można ją czytać. Układ jest o niebo prostszy i bardziej elastyczny od tego pokazanego na tych rysunkach wyżej. Jedynie nie wiem, jak z dostępnością układu 7489, nie był on zbyt popularny.


    W twoim układzie górny dekoder pracuje autonomicznie (jest cały czas aktywny) i wybiera odpowiedni rejestr w czasie normalnej pracy procka. Steruje wejściami OE rejestrów czyli wybiera z którego rejestru będzą pochodziły starsze linie adresowe w zależności od A14,A15. Dolny dekoder steruje zapisem do rejestrów, tak by procek mogł ustawiać mapowanie pamięci. Steruje wejściami CLK rejestrów (a więc zapisem) Używa A0 A1 i IORQ więc zapis jest wykonywany poprzez instrukcję OUT. Dodatkowa bramka dekoduje pozostałe linie adresowe i powoduje, że zapis reaguje jedynie na adresy 111111XX.
    W sumie robi to właśnie za 4 słowową pamięc o słowie 8 bitowym (nie wiem, czemu są narysowane tylko 4 wyjścia, skoro jest podłączone wszystkie 8 wejść rejestrów) o rozdzielonych wejściach i wyjściach. Jednak prosciej użyć gotowej kostki pamięci niż składać ją z elementów.