Finalmente ferie! Con l’avvento delle vacanze posso spendere la mia meritata disoccupazione impegnandomi nelle più futili imprese cui l’uomo si sia mai dedicato. Più precisamente, spinto forse dalla irrefrenabile regressione infantile che mi stimola il Natale, ho una gran voglia di giocare a “Monkey Island II”, che fu uno dei miei videogiochi preferiti ai tempi dell’inossidabile Amiga 500…
Come procurarsi il gioco
Il primo problema è dunque quello di procurarsi l’eseguibile del videogioco… io ne ho una copia in forma di archivio autoestraente su un cd che proviene dio-solo-sa-da-dove, ma ho trovato in rete il sito http://miworld.altervista.org/ da dove si possono scaricare (fra gli altri titoli) “Monkey Island”, “Monkey Island II”, “Indiana Jones ed il destino di atlantide”.
Il metodo più semplice: lo script di avvio
La prima brutta sorpresa che ho dopo aver estratto i files, è che cliccando sull’eseguibile che dovrebbe avviare il videogioco, questo non parte. Compare invece una schermata nera completata da una scritta bianca (dall’inconfondibile grafica old-school) che recita “unable initialize sound driver”. Ricordo di aver scaricato in tempi remoti un’altra versione di “Monkey Island” all’intero della quale l’eseguibile veniva lanciato da uno script .bat… Dopo aver recuperato anche questa versione, devo scoprire cosa fa questo script. E’ facile: basta cliccare con il pulsante destro del mouse sul file .bat e scegliere “modifica” dal menù a tendina, per aprire lo script con il blocco note e vedere quindi “come è fatto dentro”. Niente di trascendentale a quanto pare: si tratta di una sola riga tramite la quale viene lanciato l’eseguibile con un solo parametro passato da linea di comando.
MONKEY.EXE r
Provo a fare altrettanto con il gioco più recente. Apro quindi il blocco note e scrivo la linea di comando che richiamerà l’eseguibile di monkey island II con il parametro “r”
MONKEY2.EXE r
salvo poi il file come MONKEYR.BAT all’interno della cartella dove ho estratto i files. Cliccando due volte con il pulsante sinistro su questo nuovo file il gioco finalmente si avvia. E fatta!
Per chi non si accontenta: la SCUMMVM
Purtroppo la soluzione dello script di avvio ha alcune limitazioni: ad esempio non è possibile eseguire il gioco in finestra… questo è sconveniente perché non vi permette di fare finta di lavorare con il vostro capo ufficio, mentre invece state giocando al vostro gioco preferito
! La ScummVM, scaricabile dal sito www.scummvm.org, è un software open source studiato per permettere di utilizzare alcuni vecchi videogiochi clicca-e-punta su sistemi recenti. Risolve il problema dell’esecuzione in finestra, ma stranamente non dà la possibilità di eseguire a tutto schermo (metti che il capo va fuori a farsi un panino…) però permette di godere di un ottimo audio, migliore di quello che si ottiene lanciando il gioco da script. Per quanto mi riguarda, l’aspetto più interessante della SCUMMVM è quello di aver reso il videogiochi portabili, infatti scaricando la versione adatta, è possibile grazie ad essa giocare al proprio clicca-e-punta preferito su iPod, iPhone, PSP e tante altre piattaforme… decisamente fico!
La macchina virtuale (qemu)
La ScummVM però ancora non mi basta: e se avessi improvvisamente voglia di giocare ad altri vecchi videogiochi (come “Doom II” e “Indycar II”)? Ho pensato ad una soluzione più radicale: installare un sistema DOS completo all’interno di una macchina virtuale dentro la quale copiare tutti i miei videogiochi preferiti. Esistono diverse macchine virtuali in circolazione, ma la mia scelta è ricaduta un questo caso su qemu (scaricabile alla pagina http://fabrice.bellard.free.fr/qemu/download.html) perchè fra tutte è la più semplice e leggera (l’eseguibile è poco più grande di 1MB!) e non necessita nemmeno di essere installata (così ad esempio potete portarvi dietro il vostro sistema DOS su una chiavetta USB per giocare dove volete!). Come vi spiegherò fra poco, in questo specifico caso questa strategia è risultata un parziale insuccesso, ma voglio raccontarla ugualmente perché in altre occasioni può funzionare a dovere. Innanzitutto è necessario procurasi il sistema operativo: il caro vecchio DOS. Per fortuna ne esiste una implementazione open-source: il progetto FreeDOS. Dal sito www.freedos.org potete scaricarvi l’immagine del live-cd tramite il quale è possibile effettuare l’installazione del sistema. Prima di avviare la macchina virtuale, è necessario creare un disco virtuale dove sarà poi possibile installare il sistema. Questo è possibile grazie al tool qemu-img allegato a qemu. Creo quindi il mio disco virtuale dal prompt dei comandi digitando:
qemu-img create -f vmdk doshd.vmdk 100M
il parametro create impone la creazione del disco, il parametro -f specifica il formato (ho scelto di usare il vmdk perchè più facilmente condivisibile da altri programmi) poi il nome del file ed infine la dimensione: 100Megabyte. Il comando descritto ha creato il file doshd.vmdk che contiene l’immagine del disco virtuale. Ora copio l’immagine del live cd nella cartella dove ho estratto qemu e sono finalmente pronto per avviare l’installazione di freedos nella macchina virtuale, digitando il comando:
qemu.exe -L . -m 32 -cdrom fdbasecd.iso -hda doshd.vmdk -soundhw all -localtime -M pc -boot d
a questo punto si avvierà l’installazione del livecd. Al termine dell’installazione posso finalmente creare lo script di avvio della macchina virtuale. Per fare questo apro il blocco note e scrivo la linea di comando:
qemu.exe -L . -m 32 -hda doshd.vmdk -soundhw adlib -localtime -M pc
e salvo il file come “vdos.bat” all’interno della cartella dove si trova qemu. Cliccando sul file .bat la macchina si avvia, ma ora come si mettono i videogiochi? Ho scoperto in rete un software che permette di accedere al filesystem di un disco virtuale in formato vmdk, si chima VDKwin e si può scaricare dal sito http://petruska.stardock.net/software/. Grazie a questo ho potuto copiare i miei videogiochi nel disco virtuale, e finalmente avviare la macchina virtuale. La scomodità a questo punto è che bisogna avviare i giochi dalla shell di DOS, come si faceva ai bei vecchi tempi del 486, comunque è più che fattibile… La brutta sorpresa viene quando si decide di “uscire” dalla macchina virtuale mentre il gioco è in esecuzione per poi “rientrarci”: il mouse a quel punto sembra impazzito e non c’è più verso farlo rinsavire… Da principio credo sia un bug di qemu, ma dopo innumerevoli prove desisto e mi tolgo lo sfizio di provare la stessa cosa con quella che ritengo essere la miglior macchina virtuale in circolazione: VMWare player. VMWare è un prodotto commerciale, ma il player, ossia il software che esegue la virtualizzazione è scaricabile gratuitamente dal sito www.vmware.com . Il problema in questo caso è configurare la macchina virtuale (l’equivalente dello script di avvio per qemu), per la quale ufficialmente servirebbe il VMWare server (o come cavolo si chiama…) in realtà segnalo due alternative: il software VMXbuilder disponibile sempre dal sito http://petruska.stardock.net/software/ ed il sito www.easyvmx.com dal quale è possibile configurare on-line la propria macchina virtuale. Ho scelto la seconda strada… tralasciando i particolari questo è il file di configurazione della macchina virtuale che ho usato (salvato come vdos.vmx):
#!/usr/bin/vmplayer # Filename: virtUalBUNTU.vmx # Generated 2007-09-10;14:25:00 by EasyVMX! 2.0 (beta) # http://www.easyvmx.com # This is a Workstation 6 config file # It can be used with Player config.version = "8" virtualHW.version = "6" # Selected operating system for your virtual machine guestOS = "dos" # displayName is your own name for the virtual machine displayName = "VDOS" # These fields are free text description fields annotation = " UBUNTU os" guestinfo.vmware.product.url = "http://www.easyvmx.com/" guestinfo.vmware.product.class = "virtual machine" # Number of virtual CPUs. Your virtual machine will not # work if this number is higher than the number of your physical CPUs numvcpus = "1" # Memory size and other memory settings memsize = "320" MemAllowAutoScaleDown = "FALSE" MemTrimRate = "-1" # PowerOn/Off options gui.powerOnAtStartup = "TRUE" gui.fullScreenAtPowerOn = "TRUE" gui.exitAtPowerOff = "TRUE" # Unique ID for the virtual machine will be created uuid.action = "create" # Settings for VMware Tools tools.remindInstall = "TRUE" tools.upgrade.policy = "upgradeAtPowerCycle" # Startup hints interfers with automatic startup of a virtual machine # This setting has no effect in VMware Player hints.hideAll = "TRUE" # Enable time synchronization between computer # and virtual machine tools.syncTime = "TRUE" # USB settings # This config activates USB usb.present = "FALSE" usb.generic.autoconnect = "FALSE" # First serial port, physical COM1 is available serial0.present = "TRUE" serial0.fileName = "Auto Detect" serial0.autodetect = "TRUE" serial0.hardwareFlowControl = "TRUE" # Optional second serial port, physical COM2 is not available serial1.present = "FALSE" # First parallell port, physical LPT1 is available parallel0.present = "TRUE" parallel0.fileName = "Auto Detect" parallel0.autodetect = "TRUE" parallel0.bidirectional = "TRUE" # Sound settings sound.present = "TRUE" sound.fileName = "-1" sound.autodetect = "TRUE" # Logging # This config activates logging, and keeps last log logging = "TRUE" log.fileName = "VDOS.log" log.append = "TRUE" log.keepOld = "1" # These settings decides interaction between your # computer and the virtual machine isolation.tools.hgfs.disable = "TRUE" isolation.tools.dnd.disable = "FALSE" isolation.tools.copy.enable = "TRUE" isolation.tools.paste.enabled = "TRUE" # Other default settings svga.autodetect = "TRUE" mks.keyboardFilter = "allow" snapshot.action = "autoCommit" # First network interface card ethernet0.present = "TRUE" ethernet0.virtualDev = "e1000" ethernet0.connectionType = "nat" ethernet0.addressType = "generated" ethernet0.generatedAddressOffset = "0" # Settings for physical floppy drive floppy0.present = "TRUE" floppy0.startConnected = "FALSE" floppy0.autodetect = "TRUE" # Settings for physical CDROM drive ide1:0.present = "TRUE" ide1:0.deviceType = "cdrom-raw" ide1:0.startConnected = "TRUE" ide1:0.fileName = "auto detect" ide1:0.autodetect = "TRUE" # Settings for the optional virtual CDROM, ISO-image #ide1:1.present = "TRUE" #ide1:1.fileName = ".iso" #ide1:1.deviceType = "cdrom-image" #ide1:1.mode = "persistent" #ide1:1.startConnected = "FALSE" # First IDE disk, size 4800Mb ide0:0.present = "TRUE" ide0:0.fileName = "doshd.vmdk" ide0:0.mode = "persistent" ide0:0.startConnected = "TRUE" ide0:0.writeThrough = "TRUE" # EasyVMX! Shared Folder #sharedFolder.option = "alwaysEnabled" #sharedFolder0.present = "TRUE" #sharedFolder0.enabled = "TRUE" #sharedFolder0.readAccess = "TRUE" #sharedFolder0.writeAccess = "TRUE" #sharedFolder0.hostPath = "~/easyvmxfolder" #sharedFolder0.guestName = "EasyVMX! Shared Folder" #sharedFolder0.expiration = "never" #sharedFolder.maxNum = "1" # END OF EasyVMX! CONFIG floppy0.fileName = "A:" extendedConfigFile = "vdos.vmxf" virtualHW.productCompatibility = "hosted" ethernet0.generatedAddress = "00:0c:29:69:ca:1a" uuid.location = "56 4d e5 f2 30 1b 6f 5d-4a c4 9b 1b 19 69 ca 1a" uuid.bios = "56 4d e5 f2 30 1b 6f 5d-4a c4 9b 1b 19 69 ca 1a" ide0:0.redo = "" ethernet0.pciSlotNumber = "16" sound.pciSlotNumber = "17"
Da notare che ho usato come file di immagine del disco virtuale lo stesso che già avevo creato in precedenza con qemu-img, e quindi non ho dovuto reinstallare freeDOS, né tantomeno copiare i file del gioco. Purtroppo il problema si è ripetuto, perciò ho dedotto che si trattasse di qualche problema nella routine di gestione del mouse all’interno del videogioco, che non prevedendo il multitasking, non riesce a gestire lo spostamento del mouse al momento del rientro in macchina virtuale. Considero quindi il progetto fallito, anche se l’idea non è da buttare via nel caso si pensi di usare applicazioni che non prevedono l’uso del mouse (io sto già pensando ad “Indycar II”…).
Una soluzione intermedia: DosBox
Smanettando in rete ho trovato una soluzione che si adatta abbastanza bene al caso: DosBox, ovvero un software applicativo che emula l’esecuzione di programmi DOS. A mio parere, lo svantaggio nell’usare questo programma è quello di non poter aggiungere file al “disco virtuale” c: accessibile dalla console… inoltre per poter accedere a file residenti su un filesystem del nostro pc, bisogna effetture prima l’operazione di “mounting” del filesystem (operazione ben nota a coloro i quali hanno confidenza con sistemi Unix/Linux). Per non dilungarmi troppo faccio un esempio…
Sul mio PC ho la cartella dei giochi dos al percorso:
per vedere questa cartella dal sistema dos devo digitare:
mount d g:\giochi
poi posso accedere ad i file spostandomi sul disco d: all’interno della console DOS. Questa noiosa operazione andrebbe ripetuta ogni volta che si avvia la DosBox. Per fortuna esiste un’alternativa: inserire questi comandi nel file “autoexec.bat” virtuale. Si può fare accedendo al file di configurazione di DosBox dosbox.conf (all’interno della cartella dell’eseguibile, solitamente c:\programmi\DosBox\dosbox.conf). Le ultime righe sono riservate all’autoexec ed io le ho completate come mostro di seguito
[autoexec]
# Lines in this section will be run at startup.
mount g g:\giochi
g:
come potete vedere ho aggiunto anche il comando per portarmi direttamente a lavorare sul disco dei giochi, dato che al momento non uso dosbox per nessun altro scopo…
Bè… spero di essere stato abbastanza chiaro ed avervi dato una panoramica sui diversi modi con cui è possibile usare le vostre applicazioni dos preferite… non mi resta che augurarvi buon divertimento!
Links:
giochi http://miworld.altervista.org/
scummvm http://www.scummvm.org/
qemu http://fabrice.bellard.free.fr/qemu/download.html
freeDOS www.freedos.org
VDKwin,VMXbuilder http://petruska.stardock.net/software/
VMware www.vmware.com
EasyVMX www.easyvmx.com
DOSBOX www.dosbox.com
