<p class="spip"><i class="spip">Bochs (<a href="http://bochs.sourceforge.net/" class="spip_out">http://bochs.sourceforge.net/</a>) est un émulateur x86 libre et facile d’accès, bien que plus lent que les logiciels concurrents il est très complet et pour émuler DOS, Linux (même avec un serveur X) ou encore Windows il peut suffire. En plus Bochs sait émuler du matériel générique hautement compatible avec les systèmes qu’il exécute. Vous pourrez lancer vos anciens jeux DOS avec le son et sans problèmes vidéo par exemple !</i></p>

<p class="spip"><strong class="spip">I. Installation</strong></p>

<p class="spip">Comme presque tout logiciel libre vous pouvez installer Bochs avec votre distribution en paquet deb ou rpm, mais par exemple sous Debian stable le paquet "bochs" est une version datant de deux ans !</p>

<p class="spip">Je vous conseille donc de le compiler, surtout que la compilation est classique (<i class="spip">./configure, make, make install</i>). Les dernières sources sont disponibles <a href="http://bochs.sourceforge.net/cgi-bin/topper.pl?name=See+All+Releases&url=http://sourceforge.net/project/showfiles.phpqmrkgroup_ideq12580" class="spip_out">ici</a>
Une fois l’archive téléchargée, compilez et installez la :</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ tar -zxvf bochs-2.X.X.tar.gz<br />
$ cd bochs-2.X.X.tar.gz<br />
$ ./configure<br />
$ make<br />
# make install (cette dernière commande est à exécuter en tant que root)</code></div>
<p class="spip">Voici les options du <i class="spip">./configure</i> les plus courantes, désactivées par défaut :</p>

<table class="spip">
<tbody>
<tr class="row_even"><td>&mdash;enable-cpu-level=LEVEL</td><td>le type de processeur à émuler, par défaut Pentium, 386 si LEVEL vaut 3 et 486 si LEVEL vaut 4</td></tr>
<tr class="row_odd"><td>&mdash;enable-sb16</td><td>émuler une carte son SoundBlaster</td></tr>
<tr class="row_even"><td>&mdash;enable-gameport</td><td>émuler un port de jeux</td></tr>
<tr class="row_odd"><td>&mdash;enable-ne2000</td><td>émuler une carte réseau (prise en charge par Linux, BSD et Windows)</td></tr>
<tr class="row_even"><td>&mdash;enable-all-optimizations</td><td>peut accélérer Bochs, à utiliser avec précaution</td></tr>
<tr class="row_odd"><td>&mdash;enable-x86-64</td><td>émuler les instructions d’un AMD 64bits</td></tr>
<tr class="row_even"><td>&mdash;enable-sse=LEVEL</td><td>émuler le jeu d’instructions SSE1 avec LEVEL=1 ou SSE2 avec LEVEL=2</td></tr>
<tr class="row_odd"><td>&mdash;enable-mmx</td><td>émuler le jeu d’instructions MMX</td></tr>
</tbody>
</table>
<p class="spip">Les autres options sont très bien expliquées ici : <a href="http://bochs.sourceforge.net/doc/docbook/user/compiling.html#CONFIG-OPTS" class="spip_out">http://bochs.sourceforge.net/doc/docbook/user/compiling.html#CONFIG-OPTS</a>. Par défaut aucune option n’est nécessaire, mais si vous voulez émuler un processeur particulier ou un matériel regardez sur cette page ce qu’il vous faut comme options.</p>

<p class="spip">Le make install est assez propre, il n’installe que les fichiers suivants :</p>

<table class="spip">
<tbody>
<tr class="row_even"><td>bin</td><td>binary executables (bochs, bxcommit, bximage)</td></tr>
<tr class="row_odd"><td>lib/bochs/plugins</td><td>plugins (if present)</td></tr>
<tr class="row_even"><td>man/man1</td><td>manpages for installed binaries</td></tr>
<tr class="row_odd"><td>man/man5</td><td>manpage for the config file (bochsrc)</td></tr>
<tr class="row_even"><td>share/bochs</td><td>BIOS images, VGABIOS images, keymaps</td></tr>
<tr class="row_odd"><td>share/doc/bochs</td><td>HTML docs, license, readme, changes, bochsrc sample</td></tr>
</tbody>
</table>
<p class="spip">Une dernière méthode d’installation pour Debian consiste à télécharger la dernière version de Bochs en rpm (sur le site Bochs) et de le convertir en .deb avec alien si vous êtes allergique aux compilations.</p>

<p class="spip"><strong class="spip">II. Charger une image disque avec bochs</strong></p>

<p class="spip">Bochs fonctionne avec des fichiers images .img ou des vrais lecteurs (chargés avec leur fichier bloc dans /dev) pour émuler des disques durs, des disquettes ou des lecteurs CDROM et avec un fichier de configuration bochsrc qui spécifie les paramètres de la machine à émuler, à quel disque associer quelle image etc...
Pour vous entraîner à charger des images toutes faites vous pouvez télécharger des exemples sur <a href="http://bochs.sourceforge.net/diskimages.html" class="spip_out">http://bochs.sourceforge.net/diskimages.html</a>.</p>

<p class="spip">Une fois le dossier dezzipé, placez vous dans ce dossier et chargez le fichier bochsrc avec :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ bochs -f bochsrc</code></p>

<p class="spip">Une fois Bochs lancé, appuyez sur entrée pour commencer la simulation. Une fenêtre X apparaît alors et votre ordinateur virtuel charge son BIOS puis votre disque dur virtuel ! Les boutons en haut de la fenêtre vous permettent de charger à la volée de nouvelles images dans les lecteurs de disquettes, d’activer ou de désactiver la souris et le clavier, de prendre une capture d’écran ou d’éteindre la machine virtuelle. Une fois la simulation terminée on trouve un fichier bochsout avec des informations diverses et même l’état du processeur à divers moments si vous avez compilé bochs avec l’option déboguage.</p>

<p class="spip"><strong class="spip">III. Créer ses propres images Bochs</strong></p>

<p class="spip">Maintenant que vous savez lancer bochs, vous allez pouvoir créer vos propres images disque et les lancer !</p>

<p class="spip">Commencez par créer des images vides pour vos disques durs :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ dd if=/dev/zero of=image.img bs=512 count=X</code></p>

<p class="spip">Avec X le nombre de blocs de 512 octets qui composeront votre disque dur par exemple 2K pour un disque de 1 mégaoctet.</p>

<p class="spip">Une autre solution consiste à utiliser <i class="spip">bximage</i>, c’est une sorte d’assistant livré avec Bochs, très complet et bien fait.</p>

<p class="spip">Une fois l’image faite, vous pouvez y créer un système de fichiers, par exemple :</p>

<p class="spip"><code class='spip_code' dir='ltr'># mkfs.vfat image.img</code></p>

<p class="spip">Pour créer une image à partir d’un vrai disque dur ou d’une disquette :</p>

<p class="spip"><code class='spip_code' dir='ltr'># dd if=/dev/floppy of=floppy.img bs=512</code></p>

<p class="spip">On peut même monter une image disque (à condition qu’elle possède un système de fichiers et votre noyau prenne un charge un device de loopback) :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ mkdir tmp<br />
# mount -t vfat -o loop image.img ./tmp</code></div>
<p class="spip">On peut maintenant y copier des fichiers ! Ou même un secteur de boot, pour ce faire :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ dd if=boot.bin of=image.img bs=512 count=1 conv=notrunc</code></p>

<p class="spip">Une fois que toutes les images sont prêtes, on doit créer un fichier bochsrc, placez-vous dans le dossier contenant vos images :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ bochs</code></p>

<p class="spip">Sélectionnez l’option <i class="spip">3 "Edit options"</i>, les parties les plus importantes à configurer sont <i class="spip">6 "Memory options"</i> qui permet de définir la quantité de ram à émuler et <i class="spip">8 "Disk options"</i> ou l’on choisit les images à charger pour les disques durs. Pour activer un disque dur choisissez cette dernière option, puis <i class="spip">3 "ATA channel 0"</i> pour activer un controlleur IDE, <i class="spip">4 "First HD/CD on channel 0"</i> <i class="spip">[yes] [disk] [imagedisque.img] [flat] [defaut] [defaut] [defaut] [defaut] [auto] [auto]</i>. Il est important de choisir <i class="spip">"Boot drive #1" disk</i>. Revenez au menu principal et sauvegardez votre configuration. Vous pouvez maintenant lancer la simulation !</p>

<p class="spip">Les fichiers générés par Bochs contiennent plein d’options inutiles, on peut éditer bochsrc à la main. Voici un fichier de configuration de base qui suffira à une bonne partie des simulations pas trop extravagantes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># ram en Mo<br />
megs: 32<br />
#image BIOS vous pouvez essayer toutes celles de /usr/local/share/bochs/<br />
romimage: file="/usr/local/share/bochs/BIOS-bochs-latest", address=0x00000<br />
vgaromimage: file="/usr/local/share/bochs/VGABIOS-lgpl-latest"<br />
#unité de démarrage, c=premier disque dur, floppy ou cdrom<br />
boot: c <br />
# no floppya<br />
# no floppyb<br />
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14<br />
#un disque dur<br />
ata0-master: type=disk, mode=flat, translation=auto, path="image.img", cylinders=0, heads=0, spt=0, biosdetect=auto, model="Generic 1234"<br />
#un cdrom<br />
ata0-slave:  type=cdrom, path=iso.sample, status=inserted<br />
#une disquete<br />
floppya: 1_44="disk.img", status=inserted<br />
#ips est le nombre d'instructions à emuler par seconde,il dépend fortement de la machine sur laquelle bochs est lancé<br />
cpu: count=1, ips=2000000<br />
mouse: enabled=0</code></div>
<p class="spip">Pour plus de détails reportez-vous à la documentation de Bochs !</p>