Bochs, czyli emulacja dużego Windows’a na małym palmtopie

Wstęp, czyli co, jak, gdzie, czym i po co?

Chyba każdy użytkownik pocketa który używa go również do zabawy pomyślał chociaż raz o tym, jakby to było gdyby uruchomić normalnego Windowsa na jego palmtopie. Część z nich zapewne dowiedziała się że to niemożliwe, inni usłyszeli o możliwości emulacji peceta na PPC celem odpalenia takiego systemu, i o tym będzie ten artykuł.

Na początek chciałbym ostrzec – zanim zaczniesz zabawę wykonaj kopię zapasową danych. Z moich informacji wynika że np. na Toshibie G900 po instalacji PocketConsole i softresecie system nie uruchamia się do wykonania hard resetu. Ja z takim zachowaniem się na żadnym urządzeniu nie spotkałem, choć fakt – G900 nie miałem. To samo tyczy się programu Nyditot Virtual Display, którego będziemy musieli użyć na urządzeniach z ekranem mniejszym niż VGA.

Również chciałbym uprzedzić, że artykuł jest kierowany do osób posiadających oryginalny system Windows 95. Nie ponoszę żadnej odpowiedzialności jeśli użyjesz nielegalnej kopii systemu.

Dobrze, zostałeś już ostrzeżony, możemy przejść dalej.

Instalacja bochs na PC

Linux:
W Debianie, oraz większości dystrybucji debianopochodnych bochs znajduje się w repozytorium. Wystarczy go pobrać poleceniem

apt-get install bochs bochs-x

wykonanym z uprawnieniami roota, lub za pomocą menadżera pakietów. Myślę że podobnie będzie wyglądało to na dystrybucjach RPM’owych, jak i opartych na Slackware, oczywiście używając tamtejszych narzędzi.

Windows:
Wchodzimy na stronę bochsa na sourceforge i pobieramy najnowsze wydanie w .exe . Pobrany plik uruchamiamy i postępujemy zgodnie z wskazaniami instalatora.


Tworzymy wirtualny dysk twardy

Czas więc utworzyć wirtualny dysk twardy. Otwieramy konsolę (linux) lub wiersz poleceń (windows). W wypadku linuxa możemy od razu wywołać polecenie

bximage

W wypadku systemów rodziny Windows, musimy najpierw przejść do folderu z zainstalowanym bochsem

cd „c:program filesbochs[numer wersji]”

(ścieżkę w cudzysłowie można skopiować chociażby z eksploratora, umieszczając ją w cudzysłowie)

a następnie jak pod linuxem

bximage

Niezależnie od systemu ukaże nam się następujący widok:

========================================================================
bximage
Disk Image Creation Tool for Bochs
$Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd]

Pierwsze pytanie odnosi się o typ dysku jaki chcemy utworzyć. Ponieważ będzie to dysk twardy (hdd), potwierdzamy zwyczajnie enterem.
Następne pytanie dotyczy typu obrazu – jako że bochs na PPC może mieć problemy z innymi, potwierdzamy domyślne [flat] enterem.
Kolejne pytanie odnosi się rozmiaru wirtualnego hdd. Pod Windows 95 wystarczy nam 150MB, taką też wartość wpisujemy, potwierdzając oczywiście enterem.
Ostatnie pytanie dotyczy nazwy pliku z obrazem, domyślnie jest to c.img. Utworzy się on w obecnym folderze, więc na Windowsie będzie to folder Bochs’a, a pod linuxem obecny katalog roboczy.

Przykładowy listing z działania bximage jest poniżej.

========================================================================
bximage
Disk Image Creation Tool for Bochs
$Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd]

What kind of image should I create?
Please type flat, sparse or growing. [flat]

Enter the hard disk size in megabytes, between 1 and 129023
[10] 200

I will create a ‚flat’ hard disk image with
cyl=406
heads=16
sectors per track=63
total sectors=409248
total size=199.83 megabytes

What should I name the image?
[c.img]

Writing: [] Done.

I wrote 209534976 bytes to c.img.

The following line should appear in your bochsrc:
ata0-master: type=disk, path=”c.img”, mode=flat, cylinders=406, heads=16, spt=63

Uwaga, nie zamykamy jeszcze terminala/wiersza poleceń! Koniecznie musimy zapisać poniższą linijkę:

ata0-master: type=disk, path=”c.img”, mode=flat, cylinders=406, heads=16, spt=63

będzie nam ona potrzebna przy tworzeniu pliku konfiguracyjnego bochsa.

Tworzymy obraz płyty instalacyjnej

Będzie nam również potrzebny obraz płyty instalacyjnej w formacie ISO. Aby go wykonać:

Linux:

Wkładamy płytę CD do napędu, nie montujemy jej (jeśli mamy automontowanie, należy ją wcześniej odmontować) i w konsoli piszemy:

dd if=/dev/cdrom of=~/setup.iso

Windows:

Większość programów do nagrywania płyt posiada możliwość wykonania obrazu iso. Jeśli nie posiadasz nagrywarki, lub żadnego programu do nagrywania, ze swojej strony polecę darmowy ISO Recorder V2 – LINK Dzięki temu małemu programowi będziemy mogli w prosty sposób nagrywać obrazy ISO, oraz to co nas w tym momencie bardziej interesuje, tworzyć je z istniejącej płyty. Po instalacji programu i restarcie wkładamy płytę z systemem do napędu, klikamy prawym przyciskiem myszy na odpowiednim napędzie w Mój komputer, wybieramy „Copy CD image to a file”, następnie wybieramy w nowym oknie gdzie ma zostać on zapisany i pod jaką nazwą. Po kliknięciu dalej obraz zostanie utworzony na dysku.

Bochsrc, czyli konfiguracja Bochs na PC

Nadszedł czas na właściwą konfigurację bochsa, czyli utworzenie pliku ~/.bochsrc dla linuxa lub bochs.bxrc na windowsie. Ponieważ przynajmniej w wersji dostępnej w repozytorium Debiana Squeeze nie doszukałem się przykładowego pliku bochsrc, umieszczam go na naszych serwerach w formie tekstowej: LINK

Pod windowsem znajdziemy go w C:Program FilesBochs-[numer wersji]bochsrc.txt, oczywiście zakładając że zainstalowaliśmy bochsa w domyślnej lokalizacji.

Opis pliku konfiguracyjnego znajdziemy pod linuxem w man bochsrc, lub pod adresem http://linux.die.net/man/5/bochsrc

My jednak zajmijmy się konfiguracją, przykładowe podane przeze mnie konfigi nie będą opatrzone komentarzami, wszystko jest opisane w informacjach wyżej.

UWAGA!
Przed zapisaniem plików konfiguracyjnych podmieniamy:

ata0-master: type=disk, path=d:c.img, mode=flat, cylinders=2742, heads=16, spt=63

na to co zwrócił nam wcześniej bximage, przykładowo:

ata0-master: type=disk, path=”c.img”, mode=flat, cylinders=406, heads=16, spt=63

oraz w linijce

ata0-slave: type=cdrom, path=D:obraz.iso, status=inserted

podmieniamy „D:obraz.iso” na ścieżkę do naszego obrazu płyty instalacyjnej.

Konfiguracja dla Linuxa:

romimage: file=$BXSHARE/BIOS-bochs-latest
cpu: count=1, ips=50000000, reset_on_triple_fault=1, cpuid_limit_winnt=0, msrs=”msrs.def”
megs: 32
display_library: wx
config_interface: wx
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path=”c.img”, mode=flat, cylinders=2742, heads=16, spt=63
ata0-slave: type=cdrom, path=”obraz.iso”, status=inserted
boot: cdrom, disk
floppy_bootsig_check: disabled=0
log: bochsout.txt
panic: action=ask
error: action=report
info: action=report
debug: action=ignore
debugger_log: –
vga_update_interval: 300000
keyboard_serial_delay: 250
keyboard_paste_delay: 100000
mouse: enabled=0
private_colormap: enabled=0
i440fxsupport: enabled=1

Zapisujemy go dowolnym edytorem tekstowym jako .bochsrc w katalogu domowym

Konfiguracja dla systemu Windows:

romimage: file=$BXSHARE/BIOS-bochs-latest
cpu: count=1, ips=50000000, reset_on_triple_fault=1, cpuid_limit_winnt=0, msrs=”msrs.def”
megs: 32
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path=d:c.img, mode=flat, cylinders=2742, heads=16, spt=63
ata0-slave: type=cdrom, path=D:xp.iso, status=inserted
boot: cdrom, disk
floppy_bootsig_check: disabled=0
log: bochsout.txt
panic: action=ask
error: action=report
info: action=report
debug: action=ignore
debugger_log: –
vga_update_interval: 300000
keyboard_serial_delay: 250
keyboard_paste_delay: 100000
mouse: enabled=0
private_colormap: enabled=0
i440fxsupport: enabled=1

Zawartość pliku zapisujemy w notatniku jako nazwapliku.bxrc; typ: wszystkie pliki. Zapisujemy go dla wygody na pulpicie.

Odpalenie bochsa, instalacja systemu

Aby uruchomić bochsa pod linuxem, otwieramy terminal i wklepujemy:

bochs

Pod windowsem klikamy dwukrotnie na utworzony chwilę wcześniej bochs.bxrc

Bochs odpali. Ponieważ ekran będzie trochę ‚ciął”, w Edit/Display + interface (linux) lub Config/Display + Interface (windows) zmieniamy VGA Update Interval na „100000”

Czas na instalację systemu. Czyli standardowe odpalenie instalatora, utworzenie partycji, format i instalacja, tłumaczenie tego raczej nie ma sensu. Aby użyć myszki, pod linuxem klikamy w oknie bochsa środkowym klawiszem myszy trzymając lewy ctrl, pod windowsem na pasku narzędzim amy przycisk włączajacy mysz, aby opuścić naciskamy klawisz podany na pasku stanu.
Tą samą akcję powtarzamy aby „odzyskać” mysz.

Po pierwszym restarcie wirtualnego komputera wyłączamy bochsa i przystępujemy do małej edycji pliku konfiguracyjnego. Linijkę

boot: cdrom, disk

zamieniamy na

boot: disk

Dzięki temu system odpali z dysku, nie z płyty CD (analogicznie do boot sequence w biosie normalnego komputera), więc możemy kontynuować instalację. Po jej ukończeniu wyłączamy bochsa.

Czas na PDA

 

Windows Mobile 2k3SE i nowsze

Potrzebować będziemy
– Bochs 2.3.5/ARM (LINK)
– PocketConsole (LINK)
– PocketCMD: (LINK)
– VGAKey (LINK, demo nam wystarczy), lub inna klawiatura posiadająca przyciski F5 i F12
– Nyditot Virtual Display (LINK, demo wystarczy) – dla urządzeń z ekranem mniejszej rozdzielczości niż VGA

Urządzenia z ekranem o rozdzielczości mniejszej niż VGA

Na tych urządzeniach instalację rozpoczynamy od zainstalowania programu Nyditot Virtual Display i skonfigurowania go, aby nasz pocket wyświetlał przynajmniej rozdzielczość VGA. Nie będę tu opisywał samej konfiguracji programu, jest ona banalnie prosta.

Wszystkie urządzenia

Instalację rozpoczynamy od zainstalowania PocketConsole i PocketCMD. Jeśli zostaniemy poproszeni o softreset, nie wykonujemy go. Przechodzimy do klucza rejestru:

HKEY_LOCAL_MACHINEDriversConsoleOutputTo

i zmieniamy jego wartość na 0. Teraz można wykonać softreset. Następnie kopiujemy folder bochs z archiwum na kartę pamięci. Kopiujemy tam również c.img utworzone na pececie (w katalogu domowym pod linuxem lub w katalogu bochs’a pod windowsem). Plik bochsrc.txt z folderu bochs przenosimy do głównego katalogu urządzenia i otwieramy go dowolnym edytorem tekstowym. Analogicznie do akapitu o bochsrc edytujemy linię

ata0-master: type=disk, path=”Storage Cardbochsnew.img”, mode=flat, cylinders=20, heads=16, spt=63

pamiętając, że tym razem w path= musimy podać pełną ścieżkę do pliku. Jeśli nasza karta pamięci nazywa się inaczej niż Storage Card to dodatkowo musimy poprawić te dwie linijki:

romimage: file=”Storage CardbochsBIOS-bochs-latest”
vgaromimage: file=”Storage CardbochsVGABIOS-lgpl-latest”

I mała uwaga na przyszłość – jeśli bochs przy odpalaniu zakomunikuje brak pamięci, zmniejszamy wartość

megs: 12

a jest to ilość ramu dla emulowanego systemu podana w megabajtach.

Zapisujemy plik, i nadszedł czas na uruchomienie emulacji. Czas uruchomić PocketCMD, skrót jest oczywiście w Programs w menu Start.

Niestety PocketCMD nieco błędnie wyświetla tekst, stąd przyjdzie nam pisać nieco na oślep. Przechodzimy do katalogu bochsa:

cd
cd Storage Card
cd bochs

i uruchamiamy program.

bochs

Pojawi nam się menu jak na zrzucie poniżej.

Aby rozpocząć emulację, naciskamy enter, zatwierdzając tym samym wartość domyślną (6). Bochs w tym momencie może zakomunikować brak wolnej pamięci, wtedy wracamy do edycji bochsrc.txt na pockecie. W wersji optymistycznej ujrzymy okno Bochs’a i uruchamiający się system:



Aby odpalić myszkę (działa ona w trybie touchpada, oraz za pomocą strzałek (enter = prawy przycisk myszy) wciskamy F12, aby uświadczyć trybu pełnoekranowego – F5


Windows CE

Bochs 2.1.1/ARM (LINK)

Dla WinCE procedura jest identyczna jak dla WM od softrestu – WinCE posiada konsolę w systemie. Niestety na ten system został przeportowany tylko nieco starszy BOCHS, owocuje to brakiem poprawnej obsługi dotyku. Jako ciekawostkę podam że mysz podłączona do hosta USB w Necu 900c po wciśnięciu F12 działała w BOCHS ;)

 

Podsumowanie

Pewnie szybko zauważysz drogi czytelniku, że emulacja jest dość powolna. Z najbardziej sensowną prędkością radzą sobie tu urządzenia z procesorami Intel PXA270, traktowanymi 520-624MHz, a nawet przetratowanymi w stronę 700MHz. Niestety, jeśli nie nastąpi poprawa wydajności BOCHSa bezpośrednio na pececie (który niestety już tam jest stosunkowo wolny) to o szybkiej emulacji peceta na palmtopie będziemy mogli pomarzyć.

Artykuł został napisany w oparciu o peceta z systemami Debian GNU/Linux (Squeeze) oraz Windows XP Professional z SP2.
PDA użyte w artykule to HTC Universal z WM6.1 oraz Siemens Simpad SL4 z Windows CE .net 4.1

 

Komentarze

Autor: Damian Statkiewicz
Utworzono: 14 sierpnia 2009
Kategorie: Archiwum - Artykuły - Windows Mobile
Tagi: , , ,

Twitter

Facebook

Sonda

Z jakiego systemu operacyjnego korzystasz?

View Results

Podeślij newsa!
Jeśli widziałeś ciekawe urządzenie lub temat i chciałbyś abyśmy omówili to na łamach PDAsite.pl, skorzystaj z formularza poniżej.

Imię i nazwisko / ksywka* (pojawi się w newsie, jeśli zostanie wykorzystany)

Adres email

Treść wiadomości*

Przepisz kod z obrazka:*
captcha