Kilka dni temu nabyłem już trzeciego w mojej kolekcji ThinkPada. Model x200s - 12-calowy laptop z całkiem przyzwoitą konfiguracją sprzętową - ma spełniać zadanie notebooka do robienia notatek podczas wykładów na uczelni. Jako, że jestem (już wieloletnim) użytkownikiem Arch Linuxa, postanowiłem wgrać ten system jako główny, na którym spędzałbym większość czasu podczas korzystania z tej maszyny. Przeznaczyłem trochę miejsca na Windowsa 7 - wiem, że w teorii wszystko, co mi będzie kiedykolwiek potrzebne, dałbym radę zrobić na Linuxie, ale czasami jest po prostu wygodniej zrobić pewne rzeczy na tym systemie.

Oczywistym jest, że musiało mi się nieźle nudzić, aby wpaść na pomysł, aby wgrać coś, co na tej maszynie zdawałoby się nie mieć prawa działania - tak, postanowiłem zainstalować Windowsa 95. W końcu maszyną-hostem ma być laptop z Core2Duo (1.86GHz), 3GB RAM DDR3, dyskiem SATA 160GB. Z dużą dawką wątpliwości, czy ten system wstanie, zdobyłem ( bo "pobrałem" mogłoby być niepoprawne politycznie ;] ) ISO jednego z najbardziej udanych systemów Microsoftu w wersji OSR2.0 i zaczęła się zabawa..

Z miejsca, które było zarezerwowane pod Windowsa 7 zabrałem 4 gigabajty miejsca, utworzyłem czwartą partycję podstawową i sformatowałem ją w systemie plików FAT32 (mkfs.vfat ). Ponieważ obraz płyty z systemem niestety nie był bootowalny, użyłem dysku startowego z Windowsa 98SE (MrMateczko polecił mi użycie wersji bez ramdysku, linki do zasobów zamieściłem na końcu artykułu).

Ponieważ instalator Windows domyślnie nadpisuje MBR dysku, gdzie obecnie znajduje się GRUB2 - szybko zrzuciłem bootsector do pliku (dd if=/dev/sda of=bootsector.bin bs=512 count=1), aby nie było potem problemu z szybkim uruchomieniem Linuxa, gdy zajdzie potrzeba.

Instalacja Windows 95 na dysku z poziomu QEMU

Ponieważ czułem, że instalator nie będzie dobrze działał na maszynie-hoście, zrzuciłem go na dysk docelowy, podpiąłem pod QEMU i z jego poziomu zainstalowałem podstawowy system (qemu-system-i386 -hda /dev/sda). Obraz dyskietki startowej był już wpisany w menu bootowania GRUB i uruchamiał się za pomocą programu memdisk.

Po pierwszym restarcie instalatora wyłączyłem szybko QEMU i przywróciłem zapisany wcześniej bootsector (zrobiłem to również poleceniem dd). Następnie wydałem polecenie sync, aby upewnić się, że wszystkie zmiany zostały zapisane na dysku i zrestartowałem komputer. W GRUB2 wszedłem w konsolę i wydałem następujące polecenia:

set root='hd0,4'
chainloader +1
boot

Dzięki temu GRUB zabootował program startowy znajdujący się w pierwszym sektorze partycji docelowej (Windows 95 nadpisał zarówno MBR jak i pierwszy sektor partycji, na której został zainstalowany). 

Aby wystartować system bez przełączania dysku w tryb kompatybilności (obecnie używam trybu AHCI) i uniknąć przedwczesnej zabawy ze sterownikami (podobno istnieją sterowniki AHCI dla DOS), można zastosować prosty trik, usuwając plik C:\WINDOWS\SYSTEM32\IOSUBSYS\ESDI_506.PDR. Dzięki temu zabiegowi, Windows, zamiast użyć własnego sterownika, skorzysta z DOSowego przerwania int13h, co zapewni bezpośredni dostęp do dysku. Niestety, bez obsługi DMA (między innymi) dostęp do dysku będzie znacznie spowolniony. Mimo to, system będzie działał znacznie szybciej niż, przykładowo, Windows 7 na tym samym sprzęcie.

Teraz można uruchomić ponownie komputer lub wpisać polecenie win. Mimo, że system zaczął się ładować, po chwili ukazał się komunikat:

Za mało pamięci do zainicjalizowania systemu Windows.
Zamknij jeden lub kilka programów rezydentnych lub usuń niepotrzebne narzędzia z plików CONFIG.SYS oraz AUTOEXEC.BAT i uruchom ponownie komputer.

Ale zaraz, zaraz.. w komputerze mam 3 gigabajty RAMu, a systemowi taka ilość nie wystarcza?

Ten błąd powoduje kiepskie (a raczej wystarczające na ówczesne czasy) adresowanie pamięci. System zwyczajnie zaczyna wariować przy ilości pamięci powyżej 512MB. Aby rozwiązać ten problem, należy zrestartować komputer, wejść w tryb wiersza poleceń i za pomocą programu edit dodać do pliku C:\WINDOWS\SYSTEM.INI w sekcji [386Enh] poniższą linijkę:

MaxPhysPage=1FFFF

Poskutkuje to tym, że system nie będzie widział więcej niż 512MB dostępnej pamięci RAM.

Pulpit Windows 95 na ThinkPadzie x200s

Po ponownym uruchomieniu systemu, powinniśmy ujrzeć magiczny pulpit Windows 95 :]

Kwestia zdobycia potrzebnych sterowników do wszystkich podzespołów... to kwestia szczęścia. Póki co, udało mi się uruchomić natywną rozdzielczość za pomocą VBEMP (niestety, nieobecna jest jakakolwiek akceleracja sprzętowa, o starszych gierkach mogę na razie zapomnieć :<) oraz połączenie z internetem za pomocą wbudowanej karty ethernet (link do sterownika dla karty Intel 82567LM zamieszczam na końcu artykułu). Do tego bezproblemowo przebiegła instalacja sterowników USB, a mój pendrive wydaje się działać w pełni poprawnie.

Image title

Image title

Stosunkowo zaskakującym jest fakt, że tak wiekowy system działa na tak nowym sprzęcie bez instalacji szczególnie wielkiej ilości poprawek. System zachowuje się w miarę stabilnie (zawiesił się przy korzystaniu z FileZilli, kilka razy wyskoczyło powiadomienie o ochronie plików systemu Windows przy starcie). Na dniach postaram się uruchomić jeszcze jakieś urządzenia (zależy mi szczególnie na karcie dźwiękowej i WiFi, niestety może się to okazać bardzo trudne, albo wręcz niemożliwe do wykonania). Jeżeli dokonam jakichś większych postępów, z pewnością ukaże się kolejna część tego artykułu :]


Zasoby:

http://www.allbootdisks.com/download/98.html
http://web.archive.org/web/20131030004628/http://support.microsoft.com/kb/184447
http://www.navozhdeniye.narod.ru/vbe9x.htm
https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=4239
http://www.syslinux.org/wiki/index.php/MEMDISK


Paweł Firlej

Jeżeli kojarzysz, że kiedyś już widziałeś(aś) powyższy wpis - masz rację! ;) Był już był publikowany na łamach bloga Starych Programów w 2014 roku, jednak nie został przeniesiony na nową wersję silnika strony z przyczyn technicznych.