Ten dosyć obszerny artykuł w całości będzie poświęcony specjalnej
jednostce zarządzającej pamięcią. Bardziej obeznane w temacie osoby zapewne
wiedzą, czym jest MMU, lecz jest także wiele osób, które po dziś dzień
zastanawiają się czym są te 3 magiczne literki, czy ja to także posiadam,
a jeżeli tak, to jak to mogę wykorzystać?
PODSTAWY
MMU jest to skrót od "Memory Management Unit", co można przetłumaczyć
na nasz język jako "jednostka zarządzająca pamięcią". Procesory posiadające
ten specjalny element, zwane są bardzo często procesorami pełnymi. MMU jest
to bardzo użyteczna, a zarazem wydajna część naszego procesora, która może
być pojmowana jako tłumacz pomiędzy procesorem, który wykonuje wszelkiego
rodzaju obliczenia, a otaczającym go hardwarem takim jak pamięć, czy
wszelkiego rodzaju urządzenia/układy wejścia-wyjścia. Każdorazowy dostęp do
procesora, odbywający się z zewnątrz, musi przejść przez "sito" MMU. MMU
wówczas sprawdza, czy obszar pamięci, do którego odwołuje się urządzenie
jest dostępny, zabezpieczony przed zapisem, może być przechowywany przez
wewnętrzny cache procesora i inne. MMU może otrzymać polecenie
"przetłumaczenia" adresów widzianych przez procesor, na inne adresy widziane
przez inne urządzenia, jak również może zostać zmuszone do "przemapowania"
fragmentów pamięci bez naruszania jej obecnej struktury (co jest niekiedy
bardzo użyteczne).
Każdy bajt, czyli komórka pamięci, posiada swój adres. Adres ten jest
tak jakby jego nazwą, charakterystyczną tylko dla niego, znaną i rozumianą
przez system. Sam adres to nic innego jak zwykła liczba, coś jakby numer domu
przy jednej baaaaardzo długiej ulicy. Rozróżniamy dwa rodzaje adresów:
adresy fizyczne i adresy logiczne. Adresy fizyczne to te, które są
dostępne przez ten cały stos krzemu, który chowa się w naszej obudowie.
Dzielą się one na dwie części. Jednym z nich jest szyna adresowa, która
przekazuje adresy z mikroprocesora, który jak wiadomo przeprowadza wszelkie
obliczenia, do otaczających układów odpowiedzialnych za grafikę, dźwięk,
napędy itd. Drugim jest szyna danych, która przenosi aktualną zawartość
komórek pamięci, które mają zostać odczytane lub zapisane. Jak widać szyna
danych i szyna adresowa wzajemnie się uzupełniają: szyna danych mówi co
przenieść, a szyna adresowa, gdzie i skąd.
Nie mniej jednak, adresy fizyczne nie są widziane przez oprogramowanie
naszego komputera. Wykonanie programu, interpretacja jego kodu są dokonywane
przez mikroprocesor. Programy oczywiście również posługują się adresami, ale
troszeczkę innymi, zwanymi adresami logicznymi. Adresy te muszą przejść
właśnie przez MMU zanim wydostaną się na zewnątrz.
Jakie jest zatem działanie MMU? MMU pobiera adresy logiczne,
określone przez program, i tłumaczy je na adresy fizyczne. W ten sposób dla
całego "świata zewnętrznego" dostępne są tylko adresy fizyczne. A zatem nasze
urządzenia/układy wejścia-wyjścia nie muszą marnować czasu, na zamianę
adresów logicznych na fizyczne lub odwoływanie się do innych programów, które
zrobiłyby to za nie. Przy tym jednak, nie są tracone dane przenoszone przez
adresy.
MMU zazwyczaj jest zintegrowane w ten sam układ co główna jednostka
procesorowa, za wyjątkiem procesora 68020, który posiada oddzielny, zewnętrzny
chip - 68851. Od samego początku istnienia Amigi MMU nie istniało. Sytuacja
zmieniła się wraz z erą nastania procesora 68020, jednakże aby pozostać
kompatybilnym w dół, MMU było odłączone lub wykorzystywane przez nieliczną
rzeszę specjalistycznych programów.
FUNKCJE MMU
Wiele programów wykorzystuje dobrodziejstwa jakie niesie za sobą MMU.
Najbardziej jednak potrzebne jest dla samego systemu operacyjnego. Po
pierwsze, MMU informuje procesor, aby nie przechowywał w swoim cache pamięci
Chip, co wręcz uwielbiają robić układy amigowe. Drugą ważną sprawą jest to, iż
przy pomocy MMU możliwy jest przerzut całego ROMu do 32-bitowej pamięci Fast.
MMU wówczas tłumaczy, a może raczej przeistacza adresy ROM (widziane przez
procesor), na adresy pamięci RAM, która będzie przetrzymywać obraz ROM.
Trzecia użyteczna funkcja MMU wykorzystywana jest przez wszelkiego rodzaju
programu "debuggujące", np. Enforcer. MMU wówczas pomaga określić, które
adresy pamięci fizycznie są niedostępne. Czwartą, dosyć istotną rzeczą, jest
fakt, iż MMU może tworzyć obrazy nieomalże nieskończonej ilości pamięci w
dowolnie przez nas wskazanym miejscu, i to zarówno w pamięci, jak i na
twardym dysku. Jest to tzw. system pamięci wirtualnej, wspomagany przez
swapfile lub temporary file (pliki tymczasowe, odgrywające rolę pamięci).
Piąta funkcja to szerokie zastosowanie MMU w dziedzinie wszelkiego rodzaju
emulacji innych systemów, a także w przypadku korzystania z różnego rodzaju
sterowników.
POMYSŁ
Jednak na nasze nieszczęście, system Amigi nie udostępnia ŻADNEGO
oprogramowania do obsługi MMU! Wszystko odbywa się na drodze hacków
systemowych i łat, które jak wiadomo zmniejszają stabilność systemu, a w
dodatku, każdy z tych programów robi to po swojemu, co uwydatnia się
"gryzieniem" programów obsługujących MMU.
Od czego są jednak zdolni amigowi programiści. Jeden z nich, Thomas
Richter, znalazł sposób na to, aby dostęp do MMU był transparentny, łatwy, a
co najważniejsze kompatybilny. Właśnie w tym celu została stworzona przez
niego biblioteka "mmu.library", do której powinien odwołać się każdy program
wykorzystujący MMU. Niestety starsze programy nie wykorzystają tej
biblioteki, a aby tak się stało, muszą zostać napisane od początku. To
oczywiście wiązałoby się z wieloma niedogodnościami. Jednak i na to znalazł
się sposób. Thomas Richter stworzył zestaw narzędzi, które przejmują rolę
starszego oprogramowania w momencie, gdy to odwołuje się bezpośrednio do
hardware'u. Zostały one nazwane MuTools. Istotą ich działania jest kierowanie
hardwarem niezależnie, bez żadnych specyficznych elementów procesora. MMU
zarządza wówczas wszystkim, przez co procesor jest odciążony, głównie jeśli
chodzi o sprawy przepisywania pamięci, czy też dostępu do niej. To z kolei
wiąże się z przyspieszeniem działania tych programów.
PROBLEMY
Biblioteka mmu i narzędzia ją obsługujące zostały napisane w ostrożny
i przemyślany sposób, aby zapewnić maksymalną kompatybilność. Jednakże
zdarzają się pewne ograniczenia i błędy, głównie związane z procesorami.
I tak, procesory 68000 oraz 68010 nie sprawiają żadnych problemów
z biblioteką mmu, a to z racji iż nie posiadają układu MMU. Biblioteka oraz
jej oprogramowanie może zostać zainstalowane na systemach opartych na tych
procesorach, ale nie przyniesie ono żadnych rezultatów (co najwyżej guru).
W przypadku procesora 68020 mamy dwa wyjścia. Albo nasza Motorolka jest
wyposażona w MMU, albo nie. Jeżeli nie - to sytuacja wygląda podobnie jak
w przypadku 68000 i 68010, jeżeli tak to układ 68020/68551 zachowuje się
podobnie jak 68030, z tym, że jednostka MMU musi zużyć więcej czasu na dostęp
i tłumaczenie niż standardowa 68030.
W przypadku procesora 68030 mamy również jego dwie odmiany: tak zwana
prawdziwa 68030 oraz 68EC030. 68EC030 to tańsza wersja 68030 nie wyposażona w
układ MMU. Instalacja biblioteki i pakietu nie przyniesie również żadnych
pozytywnych rezultatów. Co do prawdziwej 68030, to MMU jak najbardziej
zostanie pozytywnie zauważone, ale nie ustrzeżemy się pewnych niedogodności
spowodowanych przez kontrolery DMA (ten mankamant występuje również przy
procesorach 68040 i 68060). W skrócie rzecz ujmując, DMA to mechanizm, który
zastępuje procesor w wykonywaniu wszystkich operacji wejścia/wyjścia. Tutaj
zaczyna się to wszystko troszeczkę gryźć, gdyż w zasadzie MMU robi to samo,
z tym, że szybciej i lepiej. Aby odciąć się, chociaż w części od DMA, zalecane
jest niestosowanie programów i komend typu "CPU FastRom", "SetCPU FastROM",
czy też "Enforcer", a w zamian posłużyć się programami zastępczymi z pakietu
MuTools.
Sytuacja 68040 jest podobna. Rozróżniane są również dwa typy
procesorów, z tym, że zasadniczo i 68040 i 68EC040 powinny być wyposażone w
MMU. Zdarzają się jednak przypadki procków bez tego układu. Jeżeli jednak
jesteśmy szczęśliwcami i posiadamy układ (niezależnie czy jest to 040, czy
EC040) to tutaj mmu.library może znowu pracować dwojako: albo zostanie
wykorzystana, albo zostanie wykorzystana i jeszcze dostaniemy bonus w postaci
poprawionej biblioteki 68040.library (v40), która sprawia, że proces
działania MMU nie jest tak pamięciożerny. Sposób sprawdzenia, jak nasza 040
wykorzystuje zasoby MMU jest bardzo prosty. Jeżeli system działał bez
kłopotów na starej bibliotece 68040.library (v37.30), nie będzie miał również
problemów z nową. Jeżeli jednak tak nie było i 68040.library (v37.30) nie
chciała pracować, to 68040.library (v40) zacznie, lecz będzie potrzebne
stworzenie (zmodyfikowanie) odpowiedniego pliku konfigurującego. Podobnie jak
i w przypadku 68030 zalecane jest stosowanie odpowiednich programów
zastępczych.
Przypadek ostatniego procesora linii 68k, czyli 68060 wypada
podobnie jak 68040. Dla tego procesora również istnieje specjalna, bardziej
wydajna, zastępcza biblioteka 68060.library. Na to jednak, czy nasz
system rozpozna nową bibliotekę nie ma reguły. Tylko metodą prób i błędów
możemy do tego dojść. Zalety nowej biblioteki są jednak większe. Po pierwsze
jest najmniej pamięciożerna oraz wykorzystuje w 100% zasoby pamięci
wirtualnej. Jeżeli jednak nowa biblioteka nie działa jak należy, podobnie jak
przy 68040 będziemy zmuszeni zmodyfikować plik konfigurujący.
A jak wygląda sprawa PPC? Również dwojako. Sam procesor PPC nie
sprawia żadnych problemów we współpracy z MMU, jednakże oprogramowanie tego
procesora może. Wynika to z prostej przyczyny: istnieją dwa rodzaje
sterowników kontrolujących PPC: PowerUp + ppc.library oraz WarpUp + WarpOs.
Biblioteka mmu pracuje tylko w środowisku WarpUpa. Nie ma jednak co
rozpaczać, gdyż istnieje już specjalny dodatek emulujący ppc.library pod
WarpOsem.
OPROGRAMOWANIE
Skoro już wiemy, czym jest MMU i czy może nam się do czegoś przydać
oraz czy nasz procesor będzie współpracował z biblioteką, nie pozostaje nam
już nic innego jak instalacja oprogramowania, które wykorzystuje bibliotekę.
Oprogramowania jest dosyć sporo i pokrótce postaram się każde z nich opisać.
Zanim jednak do tego przejdę, skonfigurujmy sam pakiet MMU, czyli rdzeń, bez
którego nasze nowe oprogramowanie do niczego się nie przyda.
Konfiguracja MMU w zasadzie nie jest niczym specjalnym. Jest to
zwykły plik ASCII umieszczony w ENV: pod nazwą MMU-Configuration. W zasadzie
nie trzeba nic w nim zmieniać, ale jeżeli chcemy aby nasz system pracował
wydajniej i szybciej oraz wykorzystywał w pełni zasoby MMU to można się
pobawić jego ustawieniami. Tutaj jednak malutkie ostrzeżenie: zmieniaj
cokolwiek w tym pliku, jeżeli naprawdę wiesz co robisz! Na wszelki wypadek
zrób sobie kopię bezpieczeństwa oraz co najważniejsze nie kombinuj!
Plik konfiguracyjny, jak już pisałem, to czyste ASCII. Wygląda on
identycznie jak wszelkiego rodzaju skrypty, czyli wszystko jest komendą
wykonywaną przez bibliotekę, za wyjątkiem znaków, które występują po
średniku. Biblioteka mmu posiada sześć wbudowanych komend. Cała reszta
użytych w pliku konfiguracyjnym rozkazów i dodatkowych komend musi znajdować
się w specjalnym podkatalogu "mmu" stworzonym w katalogu LIBS:
Z racji, iż opis komend jest dosyć dobrze opisany w dokumentacji
pozwolę sobie go tutaj pominąć. Jest to działka dla osób naprawdę
zainteresowanych tematem. Gdyby jednak ktoś miał jakieś zapytania, proponuje
kontaktować się bezpośrednio ze mną. Jeżeli próśb takich będzie dużo, to na
pewno temat zostanie szerzej opisany na łamach PPA.
Teraz przejdziemy może do opisu poszczególnych programów
zarządzających i wykorzystujących bibliotekę mmu.
MuForce
Na początek zajmiemy się właśnie tym programem. MuForce to program
zastępczy dla słynnego Enforcera. Jego zadanie polega na obserwacji
niedostępnych obszarów pamięci i informowaniu o tym wszelkiego rodzaju
urządzenia/układy. Poinformowani zostajemy również i my. Otrzymujemy wtedy
specjalny raport dotyczący próby przedostania się jakiejś procedury lub
komendy w niedostępny obszar. W praktyce sprowadza się to do tego, że przy
uruchomionym programie ustrzeżemy się pewnych niewytłumaczalnych "zwisów"
systemu.
MuForce może zostać uruchomiony zarówno z Shella, jak i z
Workbencha (z ikony). Najlepsze rezultaty daje jednak umieszczenie go zaraz
po komendzie SetPatch w pliku Startup-Sequence. Przy okazji powinny być także
wyłączone wszystkie programy typu Enforcer, czy CyberGuard. MuForce do
odpowiedniej pracy potrzebuje przypisania odpowiednich parametrów, które mogą
zostać wpisane z Shella lub w postaci tooltypów ikony. Parametry służą
głównie do ustawień rodzajów raportów jakimi program będzie nas uraczał przy
ewentualnych "niespodziankach". Są tam jednak parametry bardziej
zaawanasowane łatające wiele funkcji tzw. Alert() oraz opcje ściśle
określające na jakie rodzaje "zwisów" MuForce ma być szczególnie uczulony
oraz co ma w takiej sytuacji czynić (dosyć użyteczne przy stosowaniu innych
"patchy", których procedury łatające są widziane przez MuForce jako operacje
niedozwolone (chociaż nie zawsze)). Program możemy w dowolnym momencie
wyłączyć uruchamiając go ponownie z parametrem OFF. Uwaga! Osoby bawiące się
w emulowanie Macintosha. Aby Shapeshifter oraz Fusion pracowały prawidłowo
(czytaj: w ogóle pracowały) MuForce musi zostać uruchomiony z parametrem
VALIDZERO.
Do ważniejszych parametrów można zaliczyć:
- - QUIET - program po prostu robi swoje o niczym nas nie informując,
- - TINY - nasz raport składa się tylko z jednej linii, z której (trzeba
to powiedzieć) nic nie wynika,
- - SMALL - raport będzie składał się z najważniejszych pozycji, które
mogą zainteresować użytkownika (czyli nazwa programu, który zawinił, w jakim
obszarze pamięci itp.),
- - STACKCHECK - program będzie nas informował o każdorazowej próbie
przekroczenia stosu. Aby wypróbować tę opcję proponuje uruchomić DoomAttacka
bez uprzedniego założenia stosu o wielkości 200000. MuForce w piękny i
zagmatwany sposób poinformuje nas o tym fakcie,
- - DATESTAMP - opcja dosyć użyteczna. Do każdorazowego raportu będzie
dołączana data i czas, kiedy to nastąpiło. Na screenach możecie zobaczyć
MuForce'a pracującego bez tej opcji,
- - DEADLY - MuForce staje się czuły praktycznie na jakiekolwiek
zaburzenia (jeden program może ich wyświetlić nawet do kilku na raz),
- - FSPACE - dla osób, których karty pozwalają adresować obszary
pamięci $00F00000,
- - VALIDZERO - już wspominałem o tej opcji. MuForce do poprawnego
działania nie wymaga użycia tego parametru (a nawet nie jest wskazane jego
użycie). Przy włączonym parametrze program nie sprawdza obszaru zerowego
stronicy pamięci. W tym właśnie obszarze najczęściej zdarzają się jednak
"zwisy". W takim razie po co ta opcja? Została ona stworzona z myślą
o użytkownikach emulatorów Maca, gdyż MacOS przechowuje tutaj globalne dane.
- - LED=x - przy pomocy tego parametru ustalamy jak długo ma trwać
błysk ekranu w momencie "uderzenia". Wartość x standardowo wynosi 1. Jeżeli
nie chcemy, aby ekran błyskał przy "uderzeniu" można wpisać tutaj wartość 0.
- - FILE=x - opcja ta służy do sprecyzowania, gdzie mają być zapisywane
raporty. Aby raport pojawił się w okienku MuForce wystarczy w miejsce x
podać znaczek * (gwiazdka z klawiatury numerycznej lub SHIFT+8). Jeżeli
chcemy, aby raporty pojawiały się w nowym okienku musimy podać jego
parametry, np. CON:0/0/640/100/HIT/AUTO/WAIT. Wartość x możemy również
zastąpić ścieżką dostępu do pliku na dysku twardym, czy dyskietce, lecz z
racji, iż może się zdarzyć coś nieprzewidywanego niezalecane jest
praktykowanie tej czynności.
- - ON - opcja startująca program,
- - OFF - opcja wyłączająca program
- - WINDOW=x - parametr określający rozmiar okna, które się otworzy
zaraz po starcie programu. Jako x można wpisać np.
CON:0/0/640/100/MuForce/AUTO/CLOSE/WAIT. Opcja ta występuje przy każdym z
niżej opisanych programów, z tym, że zamiast MuForce podajemy nazwę programu.
Szerszy opis parametrów można znaleźć w dokumentacji programu.
Znaleźć tam również można dokładny opis raportu jakim raczy nas MuForce przy
każdym "uderzeniu".
MuGuardianAngel
To drugi program wykorzystujący MMU. Jest to jednak pewnego rodzaju
rozszerzenie do MuForce i powinien zostać uruchomiony zaraz po nim. Podczas
gdy MuForce wykrywa tylko dostęp do niedostępnych regionów pamięci,
MuGuardianAngel chroni również pamięć, która obecnie jest niezajęta (wolna)
przed niepotrzebnym zapełnianiem lub dostępem w ogóle. W takiej sytuacji
MuGuardianAngel poinformuje nas o tym w specjalnym raporcie.
MuGuardianAngel różni się znacznie od MuForce tym, że MuForce tylko
wychwytuje ewentualne zakazane dostępy, podczas gdy MuGuardianAngel blokuje
ich dalsze ewentualne poczynania. Jest to program zastępczy dla aż czterech
innych: Guardian Angel, MungWall, MungList oraz MemSniff. Także, jeżeli
posiadamy któryś z powyższych należy je czym prędzej wymienić na combo
MuForce+MuGuardianAngel. Program ten łata również wiele funkcji systemowych.
Podobnie jak MuForce, MuGuardianAngel może zostać uruchomiony zarówno
z Shella jak i z ikony. Posiada on również wiele parametrów pomagających w
jego używaniu. Parametry, podobnie jak u MuForce, mogą zostać podane z
Shella, jak również zostaną przez program odczytane z tooltypów ikony.
Wszystkie dostępne parametry jak i rodzaje komunikatów wyświetlanych przez
program zostały dokładnie opisane w dokumentacji.
Duet tych dwóch programów, przynajmniej dla mnie, jest bardzo
pożyteczny. Przy jego pomocy udało mi się ustalić dlaczego mój Hippoplayer
dziwnie się wiesza w momencie uruchamiania modułu w formacie MMD0, jeżeli
wcześniej uruchomiony był moduł w formacie MMD1. Ponadto uniknąłem kilku
nieprzyjemnych "zwisów" przy próbach odpalenia starszych produkcji scenowych
(a zwłaszcza inter 64kB oraz 4kB) bezpośrednio z systemu. Pomimo usilnych
prób, nie udało mi się zawiesić obydwu programów. Działają one stabilnie
i nie powodują gryzienia się z innymi programami, których używam. Ponadto
dało się zauważyć, iż systym stał się bardziej stabilny. Odbywa się to jednak
kosztem prędkości, która spada o około 5-10%, a po ewentualnym "zwisie"
nawet o 30% (szczególnie zauważalne przy odświeżaniu ekranu oraz wczytywaniu
się ikon, ale znaczna część tego powodowana jest przez MuGuardianAngel, który
stale monitoruje pamięć). Nie mniej jednak nie ujrzałem w trakcie
kilkugodzinnego testu żadnego Debug Window informującego mnie, że jakaś
aplikacja zawiesiła system. Zamiast tego otrzymywałem komunikat w okienku
MuForce, a system pracował dalej bez żadnych problemów. W dodatku stan
pamięci nie wykazywał większych zmian. W moim przypadku jest to wielkim
wybawieniem, gdyż chyba nie muszę mówić jak bardzo denerwujące jest oglądanie
inter i po prawie każdorazowym powrocie do systemu ujrzenie rameczki z
"Suspend" i "Reboot" lub wciśnięcie nieuniknionego LAmiga+RAmiga+Ctrl, gdyż
wskaźnik myszy zamarł w bezruchu albo niemożliwe jest uruchomienie
czegokolwiek, bo ostatnio odpalona produkcja nie oddała zajętej pamięci...
Tak więc, podsumowując: MuForce+MuGuardianAngel to programy, w
których jak do tej pory nie znalazłem wad. Gorąco polecam, zwłaszcza w
sytuacjach, gdy uruchamiasz niepewny (dla systemu) soft lub bawisz się
w oglądanie produkcji scenowych na słabszym procesorze (jak ja cierpię... :(
Uwaga! Wyłączając programy, najpierw wyłącz MuGuardianAngela, a
dopiero później MuForce. W przeciwnym razie guru i nie ma przebacz...
MuSetCacheMode
Jest to malutki programik służący do ustalenia jak procesor powinien
korzystać z jego wewnętrznych buforów, czyli cache, aby wszystko było
kompatybilne z biblioteką mmu. Zazwyczaj nie ma potrzeby modyfikacji
jakichkolwiek ustawień, zarówno programu jak i biblioteki mmu, aby program
działał. Jednakże pewien rodzaj hardware'u, czy software'u może takiej
modyfikacji wymagać. Program zastępuje działanie komendy SetCacheMode, która
ma podobne działanie, ale nie jest w pełni kompatybilna z biblioteką mmu.
Tutaj wypadałoby wspomnieć czym jest "cache" i dlaczego jest taki
ważny. Wszystkie procesory linii 68k, od 68020 wzwyż posiadają jeden lub dwa
wewnętrznie wbudowane bufory danych, zwane "cache". Cache przechowuje
najczęściej "odwiedzane" adresy pamięci. To z kolei zapobiega niepotrzebnemu
odczytowi i zapisowi adresów pamięci nie dawno pobranych, a to w rezultacie
zwiększa prędkość operacji wykonywanych przez procesor. Jednakże cała
operacja "cache'owania" musi przebiegać z niezwykłą ostrożnością, z racji iż
mamy tutaj do czynienia ze sprzętową częścią naszego procka. Cache może
pracować w kilku trybach, które to właśnie możemy uaktywnić jako parametr
MuSetCacheMode.
Oto parametry:
- - ADDRESS=x - wartość x określa od jakiego miejsca ma zostać
utworzony cache. Powinna ona zostać podana w sposób heksadecymalny
rozpoczynający się od $ (SHIFT+4) lub od ciągu 0x, np. $00f80000 to to samo
co 0x00f80000. Należy pamiętać, aby wartość x była podzielna przez rozmiar
strony pamięci ustalony przez mmu.library. Rozmiar strony wynosi zazwyczaj
$0400 (1K) na procesorach 68020/68030 oraz $1000 (4K) na procesorach
68040/68060. Ta opcja jest niezbędna do prawidłowego działania programu!
- - SIZE=x - określamy rozmiar bloku pamięci dla którego zostanie
dostosowany tryb cacheowania. Podobnie jak poprzednio x jest
liczbą heksadecymalną rozpoczynającą się od znaku $ lub od ciągu 0x. Wartość
x musi być również podzielna przez rozmiar strony pamięci.
- - COPYBACK - ustawia cache w tryb COPYBACK. Opcja ta jest
dostępna tylko na procesorach 68040 i 68060. Jej działanie polega na tym, że
zapis do pamięci nie nastąpi od razu, lecz zostanie przechowany w cache'u tak
długo, jak cache nie będzie potrzebny dla innych danych.
- - WRITETHROUGH - ustawia cache w tryb WRITETHROUGH. Działanie polega
na tym, że dane przejdą przez cache, gdzie zostaną dodane do już ulokowanych
tam danych (dokonana się po prostu update cache) i zaraz potem powędrują do
pamięci. Odczyt będzie jednak następował bezpośrednio z cache'a.
- - CACHEINHIBIT - ustawia cache w tryb CACHEINHIBIT. Stronica pamięci
nie będzie przechowywana w cache, lecz od razu powędruje do pamięci.
- - NONSERIAL - ustawia cache w tryb NONSERIAL. Dostępny tylko dla
procesorów 68040. Stronica pamięci nie jest przetrzymywana w cache, ale
procesor może wykonać pewne "przetasowanie" pamięci, aby obszar do którego
powędrowała stronica miał priorytet pierwszeństwa.
- - IMPRECISE - ustawia cache w tryb IMPRECISE. Dostępny tylko dla
procesorów 68060. Stronica nie będzie przetrzymywana w cache, ale procesor
może przyspieszyć dostęp do pamięci, gdzie została ulokowana stronica
używając specjalnego mechanizmu dostępu, nazwanego "sloppy", który nie
pozwala na skorygowanie błędów szyny adresowej.
- - ROM - zabezpiecza obszar pamięci przed zapisem,
- - NOROM - zdejmuje zabezpieczenie,
- - WRITEPROTECTED - zabezpiecza obszar pamięci przed zapisem, z tym,
że każda próba zapisu będzie zauważana jako błąd, co np. MuForce zobrazuje
informacją o ewentualnym "zwisie",
- - NOWRITEPROTECTED - zdejmuje zabezpieczenie,
- - VALID - odbezpiecza dostęp do regionu pamięci, który wcześniej był
zabezpieczony (uznany jako Invalid) lub pusty (blank),
- - INVALID - zabezpiecza region pamięci przed jakimkolwiek zapisem czy
odczytem. Uwaga! Należy stosować tę opcję tylko wtedy, gdy MuForce został
wcześniej uruchomiony,
- - BLANK - określa obszar pamięci jako pusty.
MuMove4K
Ten malutki programik z kolei służy do przygotowania odpowiedniego
obszaru pamięci dla programu MuFastZero. Powinien zostać uruchomiony jak
najwcześniej, najlepiej zaraz po komendzie Setpatch. Jest on wręcz niezbędny
w sytuacji, gdy chcemy przełożyć bibliotekę systemową exec.library oraz
expansion.library z pamięci Chip do Fast. Sam proces przełożenia
(przemieszczenia) odbywa się przy pomocy programu MuFastZero, jednak MuMove4K
musi zostać uruchomiony jako pierwszy, aby sprawdzić czy taka alokacja jest w
ogóle możliwa.
MuMove4K wykonuje nieomalże tę samą funkcję co PrepareEmul, program
wymagany do uruchomienia ShapeShiftera. Programy te nie są jednak ze sobą
kompatybilne (nie możemy używać ich jednocześnie), ale MuMove4K w połączeniu
z MuFastZero umożliwiają nam to samo, a nawet i więcej, gdyż dostajemy
dodatkowe przyspieszenie emulacji MacOS-a. MuMove4K, podobnie jak
PrepareEmul, musi zresetować nasz system!
MuMove4K posiada następujące parametry:
- - PREPAREEMUL - MuMove4K przejmuje rolę wspomnianego programu,
- - PREPAREEMUL A1200 - w sytuacji, gdy pierwszy parametr nie działa
(sytuacja wygląda identycznie przy komendzie PrepareEmul - nigdy nie wiadomo,
które ustrojstwo zadziała na naszym sprzęcie).
- - OFF - MuMove4K zresetuje system i usunie się z pamięci.
- - IGNOREVERIFY - MuMove4K posiada inteligentny sposób na reset
systemu: sprawdza, czy żadne z urządzeń zewnętrznych obecnie nie pracuje.
Jeżeli tak jest, to po prostu nie uruchamia się. Opcja IGNOREVERIFY sprawia,
że program nie sprawdza co poczynają sobie nasze twarde dyski,
MuFastZero
MuFastZero to program, który umożliwia przerzucenie przerwań
wektorowych (vector base) z pamięci Chip do Fast. Zasadniczo program nie jest
taki znowu niezbędny, gdyż takie przemieszczenie możliwe jest również bez
używania MMU. Jednakże wychodzi to na dobre systemowi, jeżeli w pamięci Fast,
to właśnie MMU stworzy ich kopie. Programik ten może zostać również
wykorzystany do przerzucenia najważniejszych bibliotek systemowych
(exec.library oraz expansion.library) do Fastu co również przyspiesza system.
To jednakże wymaga użycia dodatkowego programu MuMove4K, który pomoże nam
zaalokować odpowiedni obszar pamięci.
Oto parametry programu:
- - ON - uaktywnia program
- - OFF - zwalnia obszar pamięci, w którym stworzony był obraz przerwań
wektorowych oraz biblioteki systemowe,
- - FASTEXEC - MuFastZero próbuje przemieścić biblioteki wspomniane
wyżej do pamięci Fast.
- - FORCENATIVE - program, zaraz po starcie poinformuje nas, czy ten
parametr jest wymagany. Jego działanie polega na tym, aby sprawdzić, czy
jakiś inny program uruchomiony wcześniej, nie zrobił tej samej czynności, co
MuFastZero.
- - MOVEVBR=FASTVBR - przerzuca "exception vector base" do pamięci
Fast.
- - CLEARVBR - odwołuje powyższą (przydatne w wielu grach, które
odmawiają współpracy z procesorami 68040/68060)
MuLink
MuLink to z kolei ukłon w kierunku developerów. Program ten uaktywnia
ochronę pamięci przed zapisem dla wybranych części egzekutywnych. Do
poprawnego działania wymaga programu MuOVLYMGR.
MuOVLYMGR
Ten program nie działa samodzielnie. Jest to plik binarny, który
zawiera kod ochrony pamięci używany przez program MuLink.
MuFastROM
Jest to program służący do stworzenia lustrzanego odbicia ROMu w
w pamięci Fast. Ma to na celu znaczne przyspieszenie całego systemu.
Przerzucony do pamięci ROM jest zabezpieczony przed jakimkolwiek zapisem.
MuFastROM jest programem zastępczym dla programów typu "CPU FastROM" oraz
"SetCPU FastROM". Program uaktywnia się poprzez uruchomienie go z Shella z
odpowiednim parametrem lub z ikony, z wpisanymi odpowiednimi tooltype'ami.
Najważniejsze parametry dostępny w MuFastROM:
- - ON lub FASTROM - włączenie przerzutu ROMu do Fastu,
- - OFF lub NOFASTROM - pamięć z obrazem ROMu przestaje działać jak
ROM i jest znowu dostępna przez system,
- - HEAD - MuFastRom lokuje nasz ROM w pamięci o najniższej wartości.
"Fabrycznie" programik ustawiony jest tak, aby lokować ROM w najwyższych
obszarach pamięci, co ma skutecznie zapobiegać fragmentacji.
Podsumowując, MuFastROM, na tle konkurencji w postaci MCP, czy
BlizKicka wypada najlepiej. Opcje MCP dotyczące przerzutu ROMu są bardzo
wolne (prędkość procesora spada prawie o 50% (test przeprowadzany na
SysSpeedzie 2.6)), a BlizKick potrafi czasem "pogryźć się" z innymi
programami.
MuFastChip
Program ten przyspiesza dostęp do pamięci Chip na procesorach 68040 i
68060. Dzieje się tak jednak tylko w sytuacji, gdy nowe biblioteki
68040.library i 68060.library nie mogą zostać użyte. W innej sytuacji rolę
MuFastChip przejmuje samo MMU i nie wymaga to żadnej odgórnych działań ze
strony użytkownika. Działanie programu opiera się na ustawieniu trybu cache
jako IMPRECISE i NONSERIAL. Program powinien zostać umieszczony w WBStartup.
MuLockLib
Program ów, nie robi praktycznie nic poza tym, że uruchamia
bibliotekę mmu.library i umieszcza ją w pamięci, gdzie zostaje
"zakotwiczona". Uruchomienie programu ponownie, zwalnia "zakotwiczoną"
bibliotekę.
MuScan
Celem działania tego programu jest wyświetlenie tablicy MMU. Program
można wykorzystać w celu sprawdzenia funkcji działania wielu innych programów
jak chociażby MuFastROM, czy MuFastZero. MuScan uruchamia się z parametrem,
który jest ścieżką dostępu do pliku, gdzie takie informacje mogą się znaleźć.
Jako kanał wyjścia (output) może zostać również podane okno Shella.
MuOmniScsiPatch
Ten patch sprawia, że urządzenia zewnętrzne, prawidłowo rozpoznają
tablice MMU i prawidłowo przeprowadzają operację zmiany adresów logicznych na
fizyczne. Instalacja łatki nie jest wymagana, ale jest zalecana.
MuEVD
To nie program, lecz zewnętrzny sterownik graficzny dla
ShapeShiftera. Wykorzystuje on wszelkie dobrodziejstwa MMU. Umożliwia pracę
w trybie ECS, AGA oraz P96/Cgfx na ekranach 1-, 2-, 4-, 8-, 15- i
24-bitowych (ten ostatni nie na AGA ani ECS, oczywiście). Umożliwia również
emulację trybu HAM8 oraz wyświetlenie ekranu 15-bit HiColor na kościach AGA.
OSTATNIE SŁOWO
Przyszedł czas na podsumowanie. Praca z programami wykorzystującymi
układ MMU oraz korzystającymi z biblioteki mmu.library w moim przypadku była
bardzo pomyślna. Pakiet MuTools nie sprawia problemów, zarówno w sferze
instalacyjno-konfiguracyjnej jak i w sferze wykorzystania. Pomimo iż są to
łaty na system, są stabilne, nie "gryzą" się z resztą software'u, co sprawia,
że zapominamy iż faktycznie są łatami i "hackami". Ich największą zaletą
jest to, że odwołują się do konkretnego podzespołu naszej Amigi, który do tej
pory leżał "odłogiem". Nie robią nic "w locie", lecz korzystają z zasobów
hardware'u. Są po prostu zrobione z głową. Thomas Richter wpadł na doskonały
pomysł, aby wszystko oprzeć na jednej konkretnej tablicy MMU. Z własnego
doświadczenia mogę powiedzieć, że programy MuTools ani razu mnie nie
zawiodły i jestem naprawdę zadowolony z faktu iż ich używam. Prędkość mojej
030/50 Mhz po zainstalowaniu tych małych pcheł nieco zmalała, ale stabilność
znacznie wzrosła.
Cały pakiet MuTools oraz biblioteka mmu.library posiadają status
freeware i można je ściągnąć z Aminetu (util/boot).
Wielokrotnie w artykule, po bardziej szczegółowe informacje,
odwoływałem się do dokumentacji, zarówno samej biblioteki mmu, jak i
programów z niej korzystających. Jak już jednak wspominałem, gdyby jednak
pojawiły się głosy proszące o bardziej dogłębne przybliżenie kilku
aspektów (głównie kwestia omówienia poszczególnych parametrów każdego z
programów oraz konfiguracja mmu.library) to bardzo proszę o kontakt ze mną.
P.S. W zasadzie instalacja powyżej omówionego oprogramowania
spowalnia nieco system. Oto najprostsza ze sztuczek jak go dopalić.
Wykonaj niewielką edycję pliku MMU-Configuration. Wystarczy
w dowolnym miejscu wpisać CLEARTTX. Teraz trzeba zresetować komputer. Jeżeli
widzisz przed sobą blat Workbencha to znaczy, że wszystko jest w porządku.
Jeżeli jednak doświadczyłeś jakiegoś guru lub innego dziwnego objawu, czym
prędzej usuń tę linię z pliku. Winę tutaj ponosi Twoją płyta główna lub
karta turbo (a dokładniej slot, którymi są te dwie rzeczy połączone) i nic
nie jest w stanie tego zmienić.