Modyfikacje sprzętowe procesora: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
Nie podano opisu zmian
Linia 1: Linia 1:
Procesor MERY-400 nie jest pojedynczym układem scalonym, a modułem, składającym się z pakietów (płyt drukowanych o wymiarach 300x300mm). Pakiety zbudowane są z układów scalonych z serii 74 oraz innych elementów dyskretnych. Taka konstrukcja powoduje, że stosunkowo łatwo jest wprowadzać w nim modyfikacje sprzętowe. Zadanie ułatwia dodatkowo fakt, że na poszczególnych pakietach procesora można znaleźć "wolne" bramki i przerzutniki.
Procesor MERY-400 nie jest pojedynczym układem scalonym, a modułem, składającym się z pakietów (płyt o wymiarach 300x300mm). Pakiety zbudowane są z układów scalonych z serii 74 oraz innych elementów dyskretnych. Taka konstrukcja powoduje, że stosunkowo łatwo jest wprowadzać w nim modyfikacje sprzętowe. Zadanie ułatwia dodatkowo fakt, że na poszczególnych pakietach procesora można znaleźć "wolne" bramki i przerzutniki.


Znane są dwie modyfikacje procesora MERY-400. Obie powstały na Politechnice Gdańskiej w zespole rozwijającym system operacyjny CROOK i obie były wykorzystywane zarówno przez CROOK-a jak i oprogramowanie, które dla niego powstawało.
Znanych jest kilka modyfikacji sprzętowych procesora minikomputera. Powstawały one na przestrzeni lat w Instytucie Okrętowym Politechniki Gdańskiej, w zespole rozwijającym system operacyjny CROOK. Były wykorzystywane zarówno przez CROOK-a jak i oprogramowanie na nim działajace.


= 17-bitowe adresowanie bajtów =
= 17-bitowe adresowanie bajtów =
Linia 19: Linia 19:
= Przerwanie programowe o wysokim priorytecie =
= Przerwanie programowe o wysokim priorytecie =


System operacyjny CROOK wymaga istnienia przerwania programowego, którego priorytet byłby wyższy niż przerwań pochodzących z urządzeń zewnętrznych (kanałowych). W [[Przerwania|systemie przerwań MERY-400]] takie przerwanie nie istnieje. Wersje systemu CROOK od 1 do 5 obchodziły ten problem następująco: W jądrze systemu używana była pseudo-instrukcja SIN o kodzie (ósemkowo) 036000. Z punktu widzenia procesora jest to instrukcja niepoprawna, generująca przerwanie "nieprawidłowy rozkaz". Jednocześnie procedura obsługi tego przerwania w CROOK-u skonstruowana jest tak, aby w przypadku pseudo-rozkazu SIN zapewnić jego obsługę jak przerwania programowego o wysokim priorytecie. To obejście wykorzystywane jest we wszystkich wersjach systemu, aż do ostatniej rewizji CROOK-5.
System operacyjny CROOK wymaga istnienia przerwania programowego, którego priorytet byłby wyższy niż przerwań pochodzących z urządzeń zewnętrznych (kanałowych) i z zegara systemowego. W [[Przerwania|systemie przerwań MERY-400]] takie przerwanie nie istnieje. Wersje systemu CROOK od 1 do 5 obchodziły ten problem następująco: W jądrze systemu używana była pseudo-instrukcja SIN o kodzie (ósemkowo) 036000. Z punktu widzenia procesora jest to instrukcja niepoprawna, generująca przerwanie "nieprawidłowy rozkaz". Jednocześnie procedura obsługi tego przerwania w CROOK-u skonstruowana jest tak, aby w przypadku pseudo-rozkazu SIN zapewnić jego obsługę jak przerwania programowego o wysokim priorytecie. To obejście wykorzystywane jest we wszystkich wersjach systemu, aż do ostatniej rewizji CROOK-5.


Istnieje jednak alternatywne jądro CROOK-5 w rewizjach 7 i 8, potrafiące pracować z procesorem z dodanymi dwiema nowymi, legalnymi instrukcjami: SINT i SIND. Zastępują one funkcjonalnie pseudo-instrukcję SIN.
Istnieje jednak alternatywne jądro CROOK-5 w rewizjach 7 i 8, potrafiące pracować z procesorem z dodanymi dwiema nowymi, legalnymi instrukcjami: SINT i SIND. Zastępują one funkcjonalnie pseudo-instrukcję SIN.
Linia 29: Linia 29:
# Przerwanie zegarowe (pozycja 5) zostało przeniesione na pozycję 11, w standardowym procesorze nie skojarzoną z żadnym źródłem przerwania.
# Przerwanie zegarowe (pozycja 5) zostało przeniesione na pozycję 11, w standardowym procesorze nie skojarzoną z żadnym źródłem przerwania.
# Przerwanie 5 zostało użyte jako przerwanie programowe o wysokim priorytecie, sterowane instrukcjami SINT i SIND.
# Przerwanie 5 zostało użyte jako przerwanie programowe o wysokim priorytecie, sterowane instrukcjami SINT i SIND.
# Prawdopodobnie wprowadzono też zmiany w systemie maskowania przerwań, ale ten fragment przeróbki nie jest obecnie zweryfikowany.
 
= Zmiana maskowania przerwań =
 
CROOK-5 miał jeszcze jedno wymaganie, które ostatecznie zostało spełnione za pomocą modyfikacji sprzętowej. Należało zapewnić, aby w trakcie obsługi przerwania kanałowego nie pojawiło się przerwanie o wyższym priorytecie (w szczególności zegarowe). W procesorze bez przeróbek wymuszane to było przez programowe maskowanie przerwań na początku procedury obsługi przerwań kanałowych. W procesorze przerobionym zrealizowane to było sprzętowo: Przyjęcie przerwania kanałowego powodowało automatyczne zamaskowanie przerwań od 5 do 31.
 
= Instrukcja włączająca modyfikacje =
 
Ostatnia modyfikacja pozwalała na programowe włączenie przeróbek procesora. W grupie rozkazowej S utworzono kolejną nową instrukcję CRON o kodzie 0166500. Maszyna zmodyfikowana uruchamiała się w trybie kompatybilności z oryginalnym procesorem, a dopiero jej wywołanie aktywowało modyfikacje. Zerowanie maszyny kluczem CLEAR bądź rozkazem MCL najprawdopodobniej przywracało działanie bez modyfikacji.
 
Potwierdzone jest, że rozkaz CRON włączał 17-bit adresowanie bajtów, zamieniał miejscami przerwania 5 i 11 oraz aktywował poszerzoną maskę dla przerwań kanałowych. Nie jest natomiast potwierdzone zachowanie instrukcji SINT i SIND przed włączeniem modyfikacji: czy były nielegalne, legalne, ale zgłaszały przerwanie 11, bądź legalne, ale nie miały żadnego skutku.


{{source|title=Opracowanie własne}}
{{source|title=Opracowanie własne}}

Wersja z 19:54, 11 wrz 2013

Procesor MERY-400 nie jest pojedynczym układem scalonym, a modułem, składającym się z pakietów (płyt o wymiarach 300x300mm). Pakiety zbudowane są z układów scalonych z serii 74 oraz innych elementów dyskretnych. Taka konstrukcja powoduje, że stosunkowo łatwo jest wprowadzać w nim modyfikacje sprzętowe. Zadanie ułatwia dodatkowo fakt, że na poszczególnych pakietach procesora można znaleźć "wolne" bramki i przerzutniki.

Znanych jest kilka modyfikacji sprzętowych procesora minikomputera. Powstawały one na przestrzeni lat w Instytucie Okrętowym Politechniki Gdańskiej, w zespole rozwijającym system operacyjny CROOK. Były wykorzystywane zarówno przez CROOK-a jak i oprogramowanie na nim działajace.

17-bitowe adresowanie bajtów

W oryginalnej konstrukcji procesora adres bajtu był 16-bitowy, z czego 15 najstarszych bitów adresowało słowo w pamięci, a najmłodszy bit wskazywał lewy lub prawy bajt w 16-bitowym słowie maszyny. Oznacza to, że za pomocą instrukcji używających adresowania bajtowego (LB, RB, CB) można było odwołać się jedynie do pierwszych 32k słów w maksymalnie 64k słowowym bloku. Fakt ten powodował również nieścisłości w dokumentacji (patrz Adresowanie pamięci).

Adresowanie bajtu w nie zmodyfikowanym procesorze realizowane jest w następujący sposób:

  • Użytkownik dostarcza adres bajtu w postaci: 15 bitów adresu słowa, 1 bit (najmłodszy) wskazujący bajt w słowie.
  • Tak dostarczony adres procesor przesuwa o jeden bit w prawo. W wyniku otrzymuje poprawny, 16-bitowy adres słowa w pamięci, którego najstarszy bit jest zawsze zerem
  • "Wypadający" najmłodszy bit zachowywany jest, aby później na podstawie jego wartości z komórki pamięci wybrać odpowiedni bajt (lewy bądź prawy).

Przeróbka procesora wykorzystuje fakt, że argument normalny, którym jest również adres bajtowy, podlega B- i pre-modyfikacji. Zarówno B- jak i pre-modyfikacja są niczym innym, jak operacjami dodawania modyfikatora do argumentu, wykonywanymi w arytmometrze procesora. W wyniku tej operacji może wystąpić przeniesienie, które w standardowym procesorze jest w tym wypadku ignorowane. Przeróbka zmienia to zachowanie.

W przerobionym procesorze przeniesienie, które wystąpiło w wyniku B- i pre-modyfikacji, jest zapamiętywane. Później, kiedy adres bajtowy przesuwany jest w prawo, aby otrzymać docelowy adres słowa w pamięci, na najstarszy bit adresu, zamiast zera, wsuwana jest wartość przeniesienia. W ten sposób, używając B- lub pre-modyfikacj można przygotować 17-bitowy adres bajtu tak, aby możliwe było zaadresowanie dowolnego bajtu w 64k słowowym bloku.

Przerwanie programowe o wysokim priorytecie

System operacyjny CROOK wymaga istnienia przerwania programowego, którego priorytet byłby wyższy niż przerwań pochodzących z urządzeń zewnętrznych (kanałowych) i z zegara systemowego. W systemie przerwań MERY-400 takie przerwanie nie istnieje. Wersje systemu CROOK od 1 do 5 obchodziły ten problem następująco: W jądrze systemu używana była pseudo-instrukcja SIN o kodzie (ósemkowo) 036000. Z punktu widzenia procesora jest to instrukcja niepoprawna, generująca przerwanie "nieprawidłowy rozkaz". Jednocześnie procedura obsługi tego przerwania w CROOK-u skonstruowana jest tak, aby w przypadku pseudo-rozkazu SIN zapewnić jego obsługę jak przerwania programowego o wysokim priorytecie. To obejście wykorzystywane jest we wszystkich wersjach systemu, aż do ostatniej rewizji CROOK-5.

Istnieje jednak alternatywne jądro CROOK-5 w rewizjach 7 i 8, potrafiące pracować z procesorem z dodanymi dwiema nowymi, legalnymi instrukcjami: SINT i SIND. Zastępują one funkcjonalnie pseudo-instrukcję SIN.

Na tę przeróbkę procesora składały się zmiany w kilku jego obszarach:

  1. W dekoderze rozkazów znaleziono "miejsce" na dwie nowe instrukcje: w grupie rozkazów bezargumentowych S (patrz: Skorowidz kodów rozkazów). Jest to jedyna grupa w obszarze rozkazów legalnych, gdzie część bitów kodu rozkazu nie jest w ogóle wykorzystana (odpowiednie linie dekodera rozkazów nie są użyte). Nowym rozkazom zostały nadane kody (ósemkowo):
    • SINT = 0166204
    • SIND = 0167204
  2. Przerwanie zegarowe (pozycja 5) zostało przeniesione na pozycję 11, w standardowym procesorze nie skojarzoną z żadnym źródłem przerwania.
  3. Przerwanie 5 zostało użyte jako przerwanie programowe o wysokim priorytecie, sterowane instrukcjami SINT i SIND.

Zmiana maskowania przerwań

CROOK-5 miał jeszcze jedno wymaganie, które ostatecznie zostało spełnione za pomocą modyfikacji sprzętowej. Należało zapewnić, aby w trakcie obsługi przerwania kanałowego nie pojawiło się przerwanie o wyższym priorytecie (w szczególności zegarowe). W procesorze bez przeróbek wymuszane to było przez programowe maskowanie przerwań na początku procedury obsługi przerwań kanałowych. W procesorze przerobionym zrealizowane to było sprzętowo: Przyjęcie przerwania kanałowego powodowało automatyczne zamaskowanie przerwań od 5 do 31.

Instrukcja włączająca modyfikacje

Ostatnia modyfikacja pozwalała na programowe włączenie przeróbek procesora. W grupie rozkazowej S utworzono kolejną nową instrukcję CRON o kodzie 0166500. Maszyna zmodyfikowana uruchamiała się w trybie kompatybilności z oryginalnym procesorem, a dopiero jej wywołanie aktywowało modyfikacje. Zerowanie maszyny kluczem CLEAR bądź rozkazem MCL najprawdopodobniej przywracało działanie bez modyfikacji.

Potwierdzone jest, że rozkaz CRON włączał 17-bit adresowanie bajtów, zamieniał miejscami przerwania 5 i 11 oraz aktywował poszerzoną maskę dla przerwań kanałowych. Nie jest natomiast potwierdzone zachowanie instrukcji SINT i SIND przed włączeniem modyfikacji: czy były nielegalne, legalne, ale zgłaszały przerwanie 11, bądź legalne, ale nie miały żadnego skutku.

Źródło: Opracowanie własne