Qualche esperimento con Bochs

Contestualizzazione

Il primo computer che abbiamo avuto a casa, a partire dal 1999, era un Pentium III Katmai a 450MHz, con 64MB di RAM SDRAM.

Io al massimo ci facevo qualche disegnino con Paint, però ho ancora ricordi di quando mio padre cercava di fare andare qualcosa, con i vari wizard di Windows 98 e la loro grafica. Quel ricordo è aumentato dalle figure che ero solito trovare nei vari manuali di vari pezzi, o in riviste e libri su computer, fino a una decina di anni fa.

Dopo aver ottenuto quel computer tutto per me, ci avevo cambiato OS, e non ho mai usato veramente tanto i Windows più classici, ho cominciato a smanettare soprattutto con Windows XP, quindi già dopo una prima svecchiata della grafica. Tuittavia qualche volta mi tornano in mente quelle schermate, e mi viene voglia di fare una specie di retrocomputing.

Fino a mese fa avevo diversi computer vecchissimi ottenuti in vario modo, o perché qualcuno se ne voleva disfare, o una volta anche perché i genitori della ragazza di un mio amico avevano comprato un container in un’asta e non sapevano cosa farsene di quei computer.

Sarebbero stati ottimi per riprovare appunto vecchi sistemi e software, però mi occupavano un sacco di spazio, non ci facevo praticamente mai niente, e anche quelle 2-3 volte che le ho fatte mi sono spazientito dopo un po’ perché quelle macchine sono comunque davvero molto lente.

In tutta onestà, al di là del fascino vintage che magari possono avere, non hanno pressoché nessun vantaggio rispetto a una macchina virtuale, quindi verso l’inizio di quest’anno me ne sono disfatto, e ho tenuto solo quelle a cui ero più affezionato, come appunto il mio primo computer.

In realtà, i Windows classici hanno un piccolo problema con le macchine virtuali: l’accelerazione hardware non funziona, almeno quella di KVM. Lo ritengo piccolo perché comunque sono sistemi che funzionano anche su un 486: anche senza accelerazione hanno buone prestazioni, purché il software della VM sia buono.

Dico questo perché avevo già creato diversi anni fa una VM con Windows 98 su QEMU: aveva funzionato ma mi sembrava andasse particolarmente lenta. Quindi, da quando avevo sentito parlare di Bochs qualche mese fa, avevo voluto provarlo per questo scopo. Sapevo già che sicuramente esiste un modo perché, cercando sull’Internet, vengono fuori diversi contenuti riguardo l’emulazione di Windows 95 o 98 su Android e/o PSP tramite appunto questo software. Tuttavia non ho trovato nessuna guida pratica ne che parlasse o spiegasse come usarlo.

Sicuramente Bochs non è immediato, e con tutti gli altri hypervisor, sia accelerati che non, ha anche limitati utilizzi, tuttavia ho deciso di cimentarmici lo stesso e perderci un pomeriggio.

Bochs: alcuni consigli pratici

Come dicevo, Bochs non è immediato come funzionamento. Se come me non lo avete mai usato prima, la cosa fondamentale è che il modo più semplice per usarlo è creare un file bochsrc, in cui passare tutte le impostazioni: dal nome delle immagini dei dischi, all’hardware che si vuole usare.

Ci sono diverse posizioni dove questo file può essere, la cosa più comoda, secondo me, è creare una directory in cui ci mettere sia il bochsrc, che le immagini dei dischi, e usarla come directory di lavoro.

Le voci che si possono configurare sono numerose, per vederle tutte vi rimando al manuale ufficiale, e per trovare la giusta combinazione servono diversi tentativi. Il mio approccio è stato quello di cercare di farne uno il più minimale possibile:

# Su Linux probabilmente la vostra distribuzione usa SDL2, non X direttamente
display_library: sdl2
# Questo evita di riempire la console di log. In fase di installazione non lo avevo messo e ho riscontrato molti log, non vorrei che avessero anche degradato le prestazioni
log: /dev/null

# Non dovrebbe essere necessario mettere il modello, io l'ho fatto un po' perché avevo davvero questa CPU
cpu: model=p3_katmai, count=1
# 256MB sono più che sufficienti. In ogni caso, meglio non superare 512MB con Windows 9x
megs: 256

romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest

# Avevo provato a metterla per migliorare le prestazioni, senza successo
vga: extension=cirrus
# Mettere la ne2k su uno slot PCI previene problemi con gli IRQ
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=ne2k

ata0-master: type=disk, path=windows98.img, mode=growing
# Tenere sempre l'ISO di Windows è comodo per installare i driver
ata0-slave: type=cdrom, path=windows98.iso, status=inserted
# Tuttavia preferiamo sempre il boot da disco
boot: disk, cdrom

mouse: enabled=1
# Ho abilitato la soundblaster, ma non ha funzionato lo stesso
sb16: enabled=1
# Rete virtuale, il MAC address è casuale
ne2k: enabled=1, mac=59:e0:4c:22:5f:5e, ethmod=vnet

Come potete notare, ho dovuto addirittura impostare l’interfaccia per il display, perché anziché avere una lista di possibili librerie da usare, o del codice per cercare quali siano disponibili, ha un unico valore predefinito e usa quello. Oltre all’interfaccia per il display, ci sarebbe anche un’interfaccia per la configurazione: gli utenti Windows hanno una GUI, su Linux ce ne sarebbe una per Wx, ma, almeno su Debian, questo frontend di Bochs è stato reso obsoleto.

Una cosa importantissima, è che Bochs, per impostazione predefinita, all’avvio si interrompe subito ed entra come in una specie di debugger: da quanto ho capito, è perfettamente normale, e basta premere c e poi invio sul terminale. Ci ho messo un bel po’ prima di capire che dovevo fare così.

Infine, un po’ come tutti gli hypervisor e programmi simili, anche Bochs ha la cattura del mouse: per impostazione predefinita per attivarlo/disattivarlo si usa Ctrl e il tasto centrale del mouse. Questa impostazione può essere cambiata sempre nel bochsrc e l’attivazione della cattura può essere fatta anche tramite l’icona sulla GUI.

Ne vale la pena?

Questa sezione avrebbe potuto benissimo essere la prima, perché, dopo aver fatto tutto questo procedimento, il mio consiglio è semplicemente di non farlo.

Funziona davvero male, il mouse lagga tantissimo, e ad un certo punto la mia VM ha cominciato a riavviarsi ogni qualche minuto e non sono più riuscito a farci nulla. In realtà non escludo che la colpa non fosse solo di Bochs, ma anche di questi sistemi antichi, molto più proni a rompersi rispetto a quelli a cui siamo abituati.

Non sono riuscito a configurare la rete, e anche la scheda video è sempre rimasta a 16 colori, con risoluzione 640×480. Quest’ultimo problema dovrebbe essere facilmente risolvibile con alcuni driver non ufficiali, peraltro aggiornati fino al 2014, e c’è anche con QEMU.

E come se la cava QEMU?

Per curiosità, ho voluto riprovare anche con QEMU. Funziona davvero molto meglio, anche se, per esempio, l’installazione è comunque stata lentissima, e ho dovuto farla diverse volte. Ho riscontrato comunque qualche crash e, non ricordo se con tutte le installazioni, o solo con alcune, non mi funzionava neanche il reset, e per riavviare dovevo proprio arrestare la macchina e riavviare QEMU.

Però il mouse si muove alla giusta velocità, senza scattare.

Rimane invece il problema dei 16 colori: come avevo già accennato, questi driver risolvono il problema. Per installarli, bisogna aggiornare manualmente i driver della VGA, da gestione hardware, che è sulle proprietà di Risorse del computer.

Se questo problema è abbastanza facile da risolvere, non sono invece mai riuscito a fare andare la rete. Invece l’audio una volta aveva funzionato con la sb16, con cattiva qualità, peraltro; in altre installazioni neanche questa andava.

Mi ha un po’ stupito questo comportamento molto aleatorio e mi fa decisamente apprezzare di più come i sistemi di oggi vadano sempre, a meno che non si chiamino mac.