Adresowanie pamięci: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
 
(Nie pokazano 6 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
Dokumentacja MERY-400 daje sprzeczne, a w najlepszym wypadku niekompletne informacje na temat sposobu adresowania pamięci i rozmiaru bloków użytkowych.
Różne fragmenty dokumentacji MERY-400 dają sprzeczne i niekompletne informacje na temat sposobu adresowania pamięci i rozmiaru bloków użytkowych.


== Fakty ==
== Dokumentacja ==


'''DTR tom I część III z roku 1979''' podaje następujące fakty:
'''DTR tom I część III z roku 1979''' podaje następujące fakty:
Linia 21: Linia 21:
Do powyższego należy jeszcze dodać informację od użytkowników minikomputera o tym, że adres bajtu jest tak naprawdę naliczany na 17-bitach (przy pre-modyfikacji i B-modyfikacji adresu), co pozwala na zaadresowanie 128kB.
Do powyższego należy jeszcze dodać informację od użytkowników minikomputera o tym, że adres bajtu jest tak naprawdę naliczany na 17-bitach (przy pre-modyfikacji i B-modyfikacji adresu), co pozwala na zaadresowanie 128kB.


== Interpretacja ==
== Fakty ==
 
Istnienie rozkazów używających adresowania bajtowego może rodzić problemy, których dokumentacja próbuje uniknąć, sztucznie ograniczając przestrzeń adresową do 32k słów. Rozkazy te budziły zresztą mieszane uczucia również wśród konstruktorów minikomputera. Ograniczenie to, biorąc pod uwagę koszty pamięci, w początkach życia MERY-400 nie było też pewnie szczególnie istotne.
 
W rzeczywistości mechanizm adresowania działał następująco:


'''Adresowanie słów 16-bitowych:'''
'''Adresowanie słów 16-bitowych:'''


* Adres słowa jest 16-bitowy (nie 15-bitowy) i w takiej postaci podawany na szynę adresową. MERA-400 może adresować 64k słowa 16-bitowe
* Adres słowa jest 16-bitowy (nie 15-bitowy) i w takiej postaci podawany na szynę adresową. MERA-400 może adresować 64k słowa 16-bitowe w bloku pamięci
* Starsza część adresu, umieszczana w rejestrze adresowym pamięci, ma długość 4 bitów (nie 3 bitów). Pozwala to programowo tworzyć bloki pamięci do 64k słów.
* Starsza część adresu, umieszczana w rejestrze adresu logicznego pamięci, ma długość 4 bitów (nie 3 bitów). Pozwala to programowo tworzyć bloki pamięci do 64k słów.


'''Adresowanie bajtów 8-bitowych:'''
'''Adresowanie bajtów 8-bitowych:'''
Istnienie rozkazów używających adresowania bajtowego może rodzić problemy, których dokumentacja próbuje uniknąć, ograniczając praktyczną przestrzeń adresową do 32k słów. Rozkazy te budziły zresztą mieszane uczucia również wśród konstruktorów minikomputera.


* Adres bajtu jest 16-bitowy, z czego 15 najstarszych bitów jest adresem słowa w pamięci, a najmłodszy bit wskazuje lewy/prawy bajt w słowie.
* Adres bajtu jest 16-bitowy, z czego 15 najstarszych bitów jest adresem słowa w pamięci, a najmłodszy bit wskazuje lewy/prawy bajt w słowie.
* Dla rozkazów bajtowych adres przesuwany jest przed wystawieniem na szynę adresową o jeden bit w prawo. W ten sposób na szynie pojawia się właściwy adres słowa, a bit wysuwający się z prawej strony używany jest do wybrania odpowiedniego bajtu ze słowa. To rodzi problemy, ponieważ pozwala bajtowo zaadresować obszar tylko 32k słów.
* Dla rozkazów bajtowych adres przesuwany jest przed wystawieniem na szynę adresową o jeden bit w prawo. W ten sposób na szynie pojawia się właściwy adres słowa, a bit wysuwający się z prawej strony używany jest do wybrania odpowiedniego bajtu ze słowa. To rodzi problemy, ponieważ pozwala bajtowo zaadresować obszar tylko 32k słów.


Rozwiązaniem jest użycie PRE-modyfikacji lub B-Modyfikacji adresu bajtowego. Ponieważ zarówno PRE-modyfikacja jak i B-modyfikacja są operacjami dodawania wykonywanymi w jednostce arytmetycznej, podlegają prawom dodawania binarnego. W szczególności w kwestii przeniesienia które może pojawić się na wyjściu najstarszego sumatora. Jeśli takowe wystąpi, to następująca zaraz potem, wspomniana wyżej operacja przesuwania adresu w prawo (która również wykonywana jest przez jednostkę arytmetyczną) może je uwzględnić i bit ten znajdzie się na najstarszej pozycji adresu podawanego na szynę adresową, tworząc w ten sposób pełny, 16-bitowy adres słowa. Pozwala to zaadresować 128k bajtów 8-bitowych. 17 bitem adresu bajtu jest więc bit C arytmometru. To powoduje, że adres bajtu nie mieści się w 16-bitowym słowie maszyny i trzeba go zapamiętywać w specyficzny sposób.
Rozwiązaniem jest [[Modyfikacje sprzętowe procesora#17-bitowe adresowanie bajtów|modyfikacja procesora]] minikomputera MERA-400, która może być wykonana z użyciem istniejących "wolnych" bramek. Po takiej modyfikacji, użycie B-modyfikacji dla adresu bajtowego powoduje, że wynikowy adres pamiętany jest na 17 bitach. Przy przesuwaniu adresu bajtowego przed wystawieniem go na szynę adresową, ten dodatkowy 17 bit staje się 16 bitem pełnego adresu słowa w 64k bloku, pozwalając bajtowo zaadresować 128kB.
 
{{source|title=Opracowanie własne na podstawie DTR}}

Aktualna wersja na dzień 20:07, 11 maj 2014

Różne fragmenty dokumentacji MERY-400 dają sprzeczne i niekompletne informacje na temat sposobu adresowania pamięci i rozmiaru bloków użytkowych.

Dokumentacja

DTR tom I część III z roku 1979 podaje następujące fakty:

  • Na stronach 2-5 i 2-6 mówi, że adres słowa jest liczbą 15-bitową z zakresu 0-32767 (pomija istnienie najstarszego bitu), a adres bajtu liczbą 16-bitową, z czego 15 najstarszych bitów jest adresem słowa, a najmłodszy bit wskazuje lewy bądź prawy bajt.
  • Na stronie 2-14, opisując programowy podział pamięci, mówi o 15 blokach użytkowych o rozmiarze do 32k słów
  • Tamże, mówi o 3-bitowej starszej części adresu, która wraz z numerem bloku stanowi zawartość rejestru adresu logicznego pamięci.

DTR tom IV część I z roku 1978 podaje następujące fakty:

  • Na stronie 1-11 mówi, że zarówno adres słowa jak i adres bajtu są liczbami 16-bitowymi z przedziału 0-65535 (znaczenie bitów w adresie bajtu j.w.).
  • Tamże, wspomina, że w przypadku adresu bajtu, słowo adresowe przesuwane jest w prawo o jeden bit, a bit wychodzący poza słowo z prawej strony używany jest do określenia bajtu lewego/prawego.
  • Tamże, mówi, że minikomputer może adresować bezpośrednio 64k słów 16-bitowych lub 64k bajtów 8-bitowych.
  • Na stronie 1-94 mówi, że możliwe jest tworzenie bloków o pojemności 64k słów, jednak ze względu na sposób wyznaczania argumentu bajtowego standardowo organizuje się bloki po 32k słów.
  • Na stronie 1-96 mówi, że starsza część adresu, która wraz z numerem bloku wpisywana jest do rejestru adresu logicznego pamięcim, ma długość 4 bitów.

W różnych miejscach dokumentacji pojawia się też stwierdzenie, że adres słowa, w razie potrzeby, jest dopełniany do 16 bitów.

Do powyższego należy jeszcze dodać informację od użytkowników minikomputera o tym, że adres bajtu jest tak naprawdę naliczany na 17-bitach (przy pre-modyfikacji i B-modyfikacji adresu), co pozwala na zaadresowanie 128kB.

Fakty

Adresowanie słów 16-bitowych:

  • Adres słowa jest 16-bitowy (nie 15-bitowy) i w takiej postaci podawany na szynę adresową. MERA-400 może adresować 64k słowa 16-bitowe w bloku pamięci
  • Starsza część adresu, umieszczana w rejestrze adresu logicznego pamięci, ma długość 4 bitów (nie 3 bitów). Pozwala to programowo tworzyć bloki pamięci do 64k słów.

Adresowanie bajtów 8-bitowych:

Istnienie rozkazów używających adresowania bajtowego może rodzić problemy, których dokumentacja próbuje uniknąć, ograniczając praktyczną przestrzeń adresową do 32k słów. Rozkazy te budziły zresztą mieszane uczucia również wśród konstruktorów minikomputera.

  • Adres bajtu jest 16-bitowy, z czego 15 najstarszych bitów jest adresem słowa w pamięci, a najmłodszy bit wskazuje lewy/prawy bajt w słowie.
  • Dla rozkazów bajtowych adres przesuwany jest przed wystawieniem na szynę adresową o jeden bit w prawo. W ten sposób na szynie pojawia się właściwy adres słowa, a bit wysuwający się z prawej strony używany jest do wybrania odpowiedniego bajtu ze słowa. To rodzi problemy, ponieważ pozwala bajtowo zaadresować obszar tylko 32k słów.

Rozwiązaniem jest modyfikacja procesora minikomputera MERA-400, która może być wykonana z użyciem istniejących "wolnych" bramek. Po takiej modyfikacji, użycie B-modyfikacji dla adresu bajtowego powoduje, że wynikowy adres pamiętany jest na 17 bitach. Przy przesuwaniu adresu bajtowego przed wystawieniem go na szynę adresową, ten dodatkowy 17 bit staje się 16 bitem pełnego adresu słowa w 64k bloku, pozwalając bajtowo zaadresować 128kB.

Źródło: Opracowanie własne na podstawie DTR