@BMP\MSD1.BMP @BMP\MSD2.BMP @BMP\MSD3.BMP @BMP\MSD4.BMP @BMP\MSD5.BMP Pojawiają się na rynku karty muzyczne, napędy CD-ROM, które aby zostać prawidłowo rozpoznane przez komputer, muszą mieć zainstalowane sterowniki w pamięci. Niekiedy pochłania to dziesiątki kilobajtów pamięci, jakże potrzebnej do uruchomienia programów. Aby posłuchać muzyki i dźwięków w ulubionej grze, musimy zmarnować masę pamięci podstawowej, której jest i tak mało lub pamięci UMB (Upper Memory Blocks - Bloki Górnej Pamięci) już w ogóle zapełnionej po brzegi. Po tym często gra się nie chce uruchomić, gdyż wymaga więcej wolnej pamięci, a UMB jest za mała, by załadować do niej wszystko co potrzebujemy. Sterownik pamięci rozszerzonej EMM386.EXE tworząc pamięć UMB określa jej rozmiar na 150 KB lub nawet mniejszy. Całe szczęście, że możemy (prawie!) sami zdecydować, o rozmiarze dostępnej pamięci UMB poprzez dodanie odpowiednich parametrów przy ładowaniu EMM-a. Parametry oraz ich szczegółowe opisy, możemy otrzymać po uruchomieniu DOS- owskiego helpa (HELP EMM386.EXE). Najbardziej interesuje nas: * RAM - "Uruchamia" pamięć typu Expanded (EMS). * NOEMS - "Uruchamia" pamięć typu Extended (XMS). * FRAME=adres - Określamy położenie w pamięci tzw. ramki. Jest ona potrzebna do prawidłowego funkcjonowania pamięci typu EMS (Expanded). Prawidłowe wartości są w zakresach od 8000h do 9000h oraz od C000h do E000h. Wartości te możemy podawać z krokiem 400h np.: FRAME=DC00. Można też nie podać adresu (FRAME=NONE), lecz spowodujemy, że niektóre programy nie będą chciały działać. * I=mmmm-nnnn - Określa, które adresy mają zostać użyte jako ramka lub jako pamięć typu UMB. Prawidłowe wartości są do A000h do FFFFh i są zaokrąglane w dół do najbliższej 4 KB granicy. Przykład: I=B000-B800. * X=mmmm-nnnn - Określa, które adresy mają nie być używane na ramkę ani jako pamięć typu UMB. Składnia jak w przypadku parametru "I". Sterownik EMM386.EXE należy instalować podczas wykonywania pliku CONFIG.SYS rozkazami (na przykład): DEVICE=C:\DOS\EMM386.EXE NOEMS - jeśli chcemy mieć pamięć typu XMS. DEVICE=C:\DOS\EMM386.EXE RAM - jeśli chcemy mieć pamięć typu EMS. Do przeprowadzenia konfiguracji posłużymy się programem MSD i jego funkcjami związanymi z pamięcią. Proszę zwrócić uwagę, że każdy komputer, nawet z taką samą płytą główną, identycznym procesorem może inaczej działać. Mam na myśli inną wersję systemu, inaczej ustawione parametry w BIOS-ie, itp. Na początku zajmiemy się konfiguracją komputera, aby pamięć była wykrywana jako XMS (Extended). XMS po raz pierwszy Jest to najprostsza konfiguracja komputera. Nie wymaga w ogóle sterownika EMM386. CONFIG.SYS może wyglądać np. tak: set path=c:\nc;c:\dos device=c:\dos\himem.sys /testmem:off dos=high files=20 buffers=10 Wady tej konfiguracji to: nie mamy pamięci UMB, a pamięć podstawowa jest bardzo ograniczona. Pamięć komputera wygląda jak na rys. 1. Obszary zaznaczone jako "available" są nie używane przez DOS i możemy je wykorzystać, lecz dopiero w innej konfiguracji. XMS po raz drugi W tej konfiguracji dodamy do CONFIG.SYS sterownik EMM386.EXE, aby instalował się w pamięci. Rozkaz wygląda mniej więcej tak: device=c:\dos\emm386.exe noems Należy umieścić go za rozkazem ładowania sterownika HIMEM.SYS. Aby zaistniała w naszym komputerze pamięć UMB należy także linię dos=high zamienić na dos=high,umb Po zresetowaniu pamięć komputera będzie wyglądać jak na rys. 2. Widać, że segmenty A000-B7FF są wolne. Możemy przeznaczyć je jako pamięć UMB lub, jeśli się uda, "dodać" do pamięci podstawowej. Muszę zwrócić tutaj uwagę na fakt, że niekiedy karty graficzne używają tego obszaru. Mogą wystąpić kłopoty przy uruchamianiu np. Windows. W takich warunkach należy ostrożnie podchodzić do wykorzystywania tego obszaru. Instalacja EMM-a wygląda tak: device=c:\dos\emm386.exe noems i=a000-b7ff I w ten sposób z 640 KB pamięci podstawowej otrzymaliśmy 720 KB. Dzieje się tak, gdyż między pamięcią podstawową i segmentami od A000 do B7FF nie ma przerwy. Gdy dolną granicę przesuniemy nieco w górę, np.: device=c:\dos\emm386.exe noems i=a100-b7ff to po uruchomieniu komputera będziemy mieli 640 KB pamięci podstawowej oraz ponad 250 KB pamięci UMB, zamiast 150 KB! EMS Pamięć tą otrzymamy po zmianie parametru NOEMS na RAM. Po tym nasz CONFIG.SYS będzie wyglądał tak: set path=c:\nc;c:\dos device=c:\dos\himem.sys /testmem:off device=c:\dos\emm386.exe ram dos=high,umb files=20 buffers=10 Gdy przeładujemy system, pamięć naszego komputera będzie wyglądać jak na rys. 3. W ten sposób, oprócz 640 KB podstawowej mamy tylko 86 KB pamięci UMB. Część z UMB użyta jest jako ramka. Ramka bezsensownie dzieli dostępne UMB skutecznie uniemożliwiając wczytanie tam większych programów rezydentnych. Niestety, praktycznie niewiele miejsca mamy, gdzie moglibyśmy przenieść ramkę. Niżej jest bez sensu, gdyż jeszcze bardziej zmniejszymy największy ciągły blok pamięci UMB. Natomiast możemy przenieść wyżej, lecz należy się nad tym zastanowić. Obszar zakropkowany (Possibly Available - prawdopodobnie dostępny) jest prawdopodobnie UŻYWANY i dlatego spodziewajmy się problemów. Nic nie stoi na przeszkodzie, żeby spróbować. Ramkę można też przenieść pod adres od 8000 do 9000, lecz mi się to nie udało. Proponowane przeze mnie położenie ramki to segment E000. Czyli linia ładująca EMM386.EXE do pamięci będzie wyglądała tak: device=c:\dos\emm386.exe ram frame=e000 Da nam to 90 KB pamięci ciągłej oraz informację, że możemy mieć kłopoty. Ponadto możemy powiększyć rozmiar pamięci UMB lub podstawowej w sposób przedstawiony wyżej. Przedstawiłem sposoby na powiększenie zasobów pamięci dostępnej do ładowania sterowników. Dostępną pamięć UMB możemy także ograniczyć. Jest to przydatne, gdy wczytały się tam już wszystkie potrzebne sterowniki. Jeżeli więcej pamięci jest nam zbędne, możemy zakazać EMM-owi jej używania porzez parametr "X". Na rys. 4 przedstawiona jest pamięć przy konfiguracji XMS. Widać, że część jest zajęta (Used UMBs) lecz duża ilość pozostaje wolna (Free UMBs). Pamięć wolna przedstawiona jest także na rys. 5. Obszary od adresu D400 do EFFF możemy oznaczyć, żeby nie były używane: device=c:\dos\emm386.exe noems x=d400-efff Po zresetowaniu komputera otrzymamy więcej wolnej pamięci XMS. W identyczny sposób możemy zrobić w przypadku pamięci EMS, lecz trzeba pamiętać, aby zostawić odpowiednią ilość wolnych segmentów na obsługę pamięci EMS (na ramkę). Michał Stuczkowski