3012
edycji
Nie podano opisu zmian |
Nie podano opisu zmian |
||
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika) | |||
Linia 61: | Linia 61: | ||
Przykładowe konstrukcje używające 17-bit adresowania bajtów (w składni assemblera [[EMAS]]): | Przykładowe konstrukcje używające 17-bit adresowania bajtów (w składni assemblera [[EMAS]]): | ||
LW r2, 0x9400 ; 0x9400 to adres słowa, w którym adresujemy bajt | LW r2, 0x9400 ; 0x9400 to adres słowa, w którym adresujemy bajt | ||
MD 1 ; wskazanie bajtu w słowie | MD 1 ; wskazanie bajtu w słowie | ||
LB r1, r2+r2 ; załadowanie bajtu; adresem bajtowym staje się 2*r2+1 | LB r1, r2+r2 ; załadowanie bajtu; adresem bajtowym staje się 2*r2+1 | ||
LW r5, 0xAAAA ; 0xAAAA to słowowy adres bazowy obszaru, który chcemy adresować | LW r5, 0xAAAA ; 0xAAAA to słowowy adres bazowy obszaru, który chcemy adresować | ||
LW r6, r5+r1 ; w r6 do adresu bazowego dodajemy również przesunięcie (indeks) przechowywany w rejestrze r1 | LW r6, r5+r1 ; w r6 do adresu bazowego dodajemy również przesunięcie (indeks) przechowywany w rejestrze r1 | ||
MD r6 ; pre-modyfikacja zapewnia dodanie do argumentu wartości r5+r1 | MD r6 ; pre-modyfikacja zapewnia dodanie do argumentu wartości r5+r1 | ||
RB r3, r5 ; zapamiętanie bajtu pod bajtowym adresem 2*0xAAAA+r1 | RB r3, r5 ; zapamiętanie bajtu pod bajtowym adresem 2*0xAAAA+r1 | ||
17-bitowe adresowanie bajtów może rodzić problemy w specyficznych przypadkach użycia go w oprogramowaniu pisanym na oryginalny procesor. Rozpatrzmy następujący przykład: | 17-bitowe adresowanie bajtów może rodzić problemy w specyficznych przypadkach użycia go w oprogramowaniu pisanym na oryginalny procesor. Rozpatrzmy następujący przykład: | ||
LW r2, 0x3b00 | LW r2, 0x3b00 | ||
LW r3, -12 | LW r3, -12 | ||
MD r2 | MD r2 | ||
LB r1, r2+r3 | LB r1, r2+r3 | ||
Jeśli przeniesienia przy obliczaniu argumentu normalnego są zaniedbywane (jak w oryginalnym procesorze), adres bajtowy zostanie obliczony zgodnie z intencją programisty w następujący sposób: | Jeśli przeniesienia przy obliczaniu argumentu normalnego są zaniedbywane (jak w oryginalnym procesorze), adres bajtowy zostanie obliczony zgodnie z intencją programisty w następujący sposób: | ||
Linia 166: | Linia 160: | ||
Jeśli modyfikacja procesora jest aktywna, sygnał '''+ZI8''', oprócz swojej pierwotnej funkcji, powoduje też zamaskowanie przerwań w grupach 4, 5, 6 i 7. | Jeśli modyfikacja procesora jest aktywna, sygnał '''+ZI8''', oprócz swojej pierwotnej funkcji, powoduje też zamaskowanie przerwań w grupach 4, 5, 6 i 7. | ||
= Reakcja procesora na brak pamięci = | |||
'''Uwaga:''' Na istnienie poniższej zmiany silnie wskazuje analiza zawartości kości EPROM pamięci MEGA oraz inne zmiany w procesorze MX-16, jednak nie została ona definitywnie potwierdzona. | |||
Ponieważ MX-16 nie był wyposażony w pulpit techniczny, konieczna była zmiana w sposobie, w jaki procesor reaguje na odwołanie do nieskonfigurowanego segmentu pamięci w obszarze systemowym. Oryginalny procesor przechodził w stan STOP, z którego można go było wybudzić jedynie kluczem START/STOP. W MX-16 nie było takiej możliwości, więc obsługa takiego przypadku musiała być w pełni programowa i ograniczać się do zgłoszenia przerwania, podobnie jak w przypadku błędów dostępu do pamięci programów użytkowych. | |||
== Realizacja techniczna == | |||
Zostało to osiągnięte nie tyle przez modyfikację, co rekonfigurację procesora. Na pakiecie P-X istnieje zwora S-R (nie opisana w dokumentacji), która decyduje o tym, czy w opisanym wyżej przypadku wymuszany jest stan STOP. W komputerach MX-16 była ona najprawdopodobniej rozwarta. | |||
= Połączenia na platerze procesora = | = Połączenia na platerze procesora = |